diff options
| author | ccrs <ccrs@users.noreply.github.com> | 2025-10-10 17:42:31 +0200 |
|---|---|---|
| committer | ccrs <ccrs@users.noreply.github.com> | 2025-10-10 17:43:04 +0200 |
| commit | a4cea2186acdfa09c99a095420092a042ac35cfb (patch) | |
| tree | cf642cfa8f6db55747de96bb7c332d07a0c84654 /src/server/game/Miscellaneous/CommonHelpers.cpp | |
| parent | bc68d013da92f70c20a1dbed16e5c6b8bcba48ae (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.cpp | 24 |
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; } |
