Merge branch 'new_features'

feature/prepare-cross-merge
Nuno 4 years ago committed by kaetemi
parent af4f4a1de6
commit 46ad8bcf5d
No known key found for this signature in database
GPG Key ID: 9873C4D40BB479BC

@ -473,16 +473,30 @@ bool CFightOrganizer::reorganizeIteration(CBot* bot)
if (healIteration(bot, *itBot))
return true;
}
}
// Heal others
if (spawnBot->canHeal())
{
FOREACH(itBot, CCont<CBot>, group->bots())
{
if (*itBot && bot!=*itBot)
if (healIteration(bot, *itBot))
return true;
}
// Heal others groups
CGroupNpc* npcGroup = NLMISC::safe_cast<CGroupNpc*>(group);
if (npcGroup) {
std::vector<CGroupNpc*> grps = npcGroup->getHealGroups();
for (uint i=0; i<grps.size(); ++i)
{
FOREACH(itBot, CCont<CBot>, grps[i]->bots())
{
if (*itBot && bot!=*itBot)
if (healIteration(bot, *itBot)) {
return true;
}
}
}
}
}
}

@ -237,6 +237,10 @@ public:
void addHandle(TDataSetRow playerRowId, uint32 missionAlias, uint32 DespawnTimeInTick);
void delHandle(TDataSetRow playerRowId, uint32 missionAlias);
void addHealGroup(CGroupNpc *healGroups) { _HealGroups.push_back(healGroups); }
std::vector<CGroupNpc*> getHealGroups() { return _HealGroups; }
void resetHealGroups() { _HealGroups.clear(); }
uint32 getTimerWhenNoMoreHandle();
void setSpawnZone(const CNpcZone *zone) { _SpawnZone = zone; }
@ -310,6 +314,7 @@ private:
bool _AutoSpawnWhenNoMoreHandle;
NLMISC::CVirtualRefPtr<const CNpcZone> _SpawnZone;
bool _RingGrp;//Ring rulez: like a override bandit profile
std::vector<CGroupNpc*> _HealGroups;
};

@ -2853,12 +2853,12 @@ void setUserModel_s_(CStateInstance* entity, CScriptStack& stack)
{
CBot* bot = *botIt;
//if (!bot->isSpawned()) return;
if (bot->getRyzomType() == RYZOMID::npc)
{
CBotNpc* botNpc = NLMISC::safe_cast<CBotNpc*>(bot);
botNpc->setUserModelId("ARK_"+userModel);
if (bot->isSpawned())
bot->getSpawnObj()->sendInfoToEGS();
}
}
}
@ -2895,6 +2895,8 @@ void setCustomLoot_s_(CStateInstance* entity, CScriptStack& stack)
{
CBotNpc* botNpc = NLMISC::safe_cast<CBotNpc*>(bot);
botNpc->setCustomLootTableId(customTable);
if (bot->isSpawned())
bot->getSpawnObj()->sendInfoToEGS();
}
}
}
@ -3037,13 +3039,17 @@ void setEventCode_sss_(CStateInstance* entity, CScriptStack& stack)
code = scriptHex_decode(code);
vector<string> lines_of_code;
NLMISC::splitString(code, "\n", lines_of_code);
uint32 line = 0;
if (!lines_of_code.empty())
{
nlinfo("=== Code ===");
FOREACHC(it, vector<string>, lines_of_code)
{
nlinfo("Code: %s", (*it).c_str());
nlinfo("#%d %s", line, (*it).c_str());
eventAction->Args.push_back(*it);
line++;
}
nlinfo("=== * ===");
}
// Register event action
@ -3091,6 +3097,104 @@ void setEventCode_sss_(CStateInstance* entity, CScriptStack& stack)
}
//----------------------------------------------------------------------------
/** @page code
@subsection setParent_s_
A a link child -> parent from child
Arguments: parent(direction)
@param[in] the name of group who will be the parent of this group
@code
()setParent("group_name");
@endcode
*/
void setParent_s_(CStateInstance* entity, CScriptStack& stack)
{
string parent = stack.top();
std::vector<CGroup*> grps;
entity->getGroup()->getAIInstance()->findGroup(grps, parent);
if (grps.size() > 0)
{
CGroup* parentGroup = grps.back();
CGroupNpc* parentNpcGroup = NLMISC::safe_cast<CGroupNpc*>(parentGroup);
CGroup* group = entity->getGroup();
CGroupNpc* npcGroup = NLMISC::safe_cast<CGroupNpc*>(group);
if (npcGroup && parentNpcGroup)
npcGroup->getPersistentStateInstance()->setParentStateInstance(parentNpcGroup->getPersistentStateInstance());
}
}
//----------------------------------------------------------------------------
/** @page code
@subsection addHealGroup_s_
Add a link to be able to heal a group
Arguments: group(direction)
@param[in] the name of group who will able to heal
@code
()addHealGroup("group_name");
@endcode
*/
void addHealGroup_s_(CStateInstance* entity, CScriptStack& stack)
{
string healGroup = stack.top();
std::vector<CGroup*> healGrps;
entity->getGroup()->getAIInstance()->findGroup(healGrps, healGroup);
CGroup* group = entity->getGroup();
CGroupNpc* npcGroup = NLMISC::safe_cast<CGroupNpc*>(group);
for (uint i=0; i<healGrps.size(); ++i)
{
CGroupNpc* healNpcGroup = NLMISC::safe_cast<CGroupNpc*>(healGrps[i]);
if (healNpcGroup)
npcGroup->addHealGroup(healNpcGroup);
}
}
//----------------------------------------------------------------------------
/** @page code
@subsection resetHealGroups_
Add a link to be able to heal a group
@code
()resetHealGroups();
@endcode
*/
void resetHealGroups_(CStateInstance* entity, CScriptStack& stack)
{
CGroup* group = entity->getGroup();
CGroupNpc* npcGroup = NLMISC::safe_cast<CGroupNpc*>(group);
npcGroup->resetHealGroups();
}
std::map<std::string, FScrptNativeFunc> nfGetNpcGroupNativeFunctions()
{
std::map<std::string, FScrptNativeFunc> functions;
@ -3156,6 +3260,8 @@ std::map<std::string, FScrptNativeFunc> nfGetNpcGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, maxHitRange_f_);
REGISTER_NATIVE_FUNC(functions, setEventCode_sss_);
REGISTER_NATIVE_FUNC(functions, setParent_s_);
REGISTER_NATIVE_FUNC(functions, addHealGroup_s_);
REGISTER_NATIVE_FUNC(functions, addUserModel_sss_);
REGISTER_NATIVE_FUNC(functions, addCustomLoot_ss_);

Loading…
Cancel
Save