mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 02:20:27 +00:00
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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user