aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Miscellaneous/CommonHelpers.cpp
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2025-10-10 17:42:31 +0200
committerccrs <ccrs@users.noreply.github.com>2025-10-10 17:43:04 +0200
commita4cea2186acdfa09c99a095420092a042ac35cfb (patch)
treecf642cfa8f6db55747de96bb7c332d07a0c84654 /src/server/game/Miscellaneous/CommonHelpers.cpp
parentbc68d013da92f70c20a1dbed16e5c6b8bcba48ae (diff)
Core/Game: implement combat args in the new SetAggresiveStateEvent
Diffstat (limited to 'src/server/game/Miscellaneous/CommonHelpers.cpp')
-rw-r--r--src/server/game/Miscellaneous/CommonHelpers.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/server/game/Miscellaneous/CommonHelpers.cpp b/src/server/game/Miscellaneous/CommonHelpers.cpp
index 77b2f32ef41..c00d4dc65f4 100644
--- a/src/server/game/Miscellaneous/CommonHelpers.cpp
+++ b/src/server/game/Miscellaneous/CommonHelpers.cpp
@@ -327,7 +327,7 @@ bool Trinity::Helpers::Entity::IsPlayerRangedAttacker(Player const* who)
}
}
-Trinity::Helpers::Events::SetAggresiveStateEvent::SetAggresiveStateEvent(Creature* owner, bool startCombat/* = true*/, ObjectGuid summonerGUID/* = ObjectGuid::Empty*/) : _owner(owner), _startCombat(startCombat), _summonerGUID(summonerGUID)
+Trinity::Helpers::Events::SetAggresiveStateEvent::SetAggresiveStateEvent(Creature* owner, bool startCombat/* = true*/, ObjectGuid summonerGUID/* = ObjectGuid::Empty*/, StartCombatArgs const& combatArgs/* = { }*/) : _owner(owner), _startCombat(startCombat), _summonerGUID(summonerGUID), _combatArgs(combatArgs)
{
}
@@ -336,16 +336,26 @@ bool Trinity::Helpers::Events::SetAggresiveStateEvent::Execute(uint64 /*time*/,
_owner->SetReactState(REACT_AGGRESSIVE);
if (_startCombat)
{
- if (Unit* currentVictim = _owner->SelectVictim())
+ if (!_summonerGUID.IsEmpty())
+ {
+ if (Creature* summoner = ObjectAccessor::GetCreature(*_owner, _summonerGUID))
+ if (summoner->IsEngaged() && summoner->IsAIEnabled() && _owner->IsAIEnabled())
+ if (_combatArgs.AvoidTargetVictim)
+ {
+ if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, NonTankTargetSelector(summoner, _combatArgs.TargetPlayers)))
+ _owner->AI()->AttackStart(target);
+ }
+ else
+ {
+ if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, _combatArgs.Distance, _combatArgs.TargetPlayers))
+ _owner->AI()->AttackStart(target);
+ }
+ }
+ else if (Unit* currentVictim = _owner->SelectVictim())
{
if (_owner->IsAIEnabled())
_owner->AI()->AttackStart(currentVictim);
}
- else if (!_summonerGUID.IsEmpty())
- if (Creature* summoner = ObjectAccessor::GetCreature(*_owner, _summonerGUID))
- if (summoner->IsEngaged() && summoner->IsAIEnabled() && _owner->IsAIEnabled())
- if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
- _owner->AI()->AttackStart(target);
}
return true;
}