feat(Core/SmartScripts): SMART_ACTION_CALL_FOR_HELP should properly call assistance in case of polymorphed creature. (#9231)

Updates #9120
This commit is contained in:
UltraNix
2021-11-19 19:53:59 +01:00
committed by GitHub
parent 0d345c5a50
commit e747716230
3 changed files with 14 additions and 6 deletions

View File

@@ -1271,15 +1271,17 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
if (IsCreature(*itr))
{
(*itr)->ToCreature()->CallForHelp((float)e.action.callHelp.range);
(*itr)->ToCreature()->CallForHelp((float)e.action.callHelp.range, e.GetEventType() == SMART_EVENT_AGGRO ? unit : nullptr);
if (e.action.callHelp.withEmote)
{
Acore::BroadcastTextBuilder builder(*itr, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_CALL_FOR_HELP, LANG_UNIVERSAL, nullptr);
sCreatureTextMgr->SendChatPacket(*itr, builder, CHAT_MSG_MONSTER_EMOTE);
}
}
}
delete targets;
break;

View File

@@ -2237,14 +2237,20 @@ void Creature::CallAssistance(Unit* target /*= nullptr*/)
}
}
void Creature::CallForHelp(float radius)
void Creature::CallForHelp(float radius, Unit* target /*= nullptr*/)
{
if (radius <= 0.0f || !GetVictim() || IsPet() || IsCharmed())
if (radius <= 0.0f || IsPet() || IsCharmed())
{
return;
}
Acore::CallOfHelpCreatureInRangeDo u_do(this, GetVictim(), radius);
if (!target)
{
target = GetVictim();
}
Acore::CallOfHelpCreatureInRangeDo u_do(this, target, radius);
Acore::CreatureWorker<Acore::CallOfHelpCreatureInRangeDo> worker(this, u_do);
Cell::VisitGridObjects(this, worker, radius);
}

View File

@@ -247,7 +247,7 @@ public:
[[nodiscard]] Unit* SelectNearestTargetInAttackDistance(float dist) const;
void DoFleeToGetAssistance();
void CallForHelp(float fRadius);
void CallForHelp(float fRadius, Unit* target = nullptr);
void CallAssistance(Unit* target = nullptr);
void SetNoCallAssistance(bool val) { m_AlreadyCallAssistance = val; }
void SetNoSearchAssistance(bool val) { m_AlreadySearchedAssistance = val; }