TrinityCore
Loading...
Searching...
No Matches
CommonHelpers.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "CommonHelpers.h"
19#include "Creature.h"
20#include "CreatureAI.h"
21#include "ObjectAccessor.h"
22
23Trinity::Helpers::Events::SetAggresiveStateEvent::SetAggresiveStateEvent(Creature* owner, bool startCombat/* = true*/, ObjectGuid summonerGUID/* = ObjectGuid::Empty*/, StartCombatArgs const& combatArgs/* = { }*/) : _owner(owner), _startCombat(startCombat), _summonerGUID(summonerGUID), _combatArgs(combatArgs)
24{
25}
26
28{
29 _owner->SetReactState(REACT_AGGRESSIVE);
30 if (_startCombat)
31 {
32 if (!_summonerGUID.IsEmpty())
33 {
34 if (Creature* summoner = ObjectAccessor::GetCreature(*_owner, _summonerGUID))
35 if (summoner->IsEngaged() && summoner->IsAIEnabled() && _owner->IsAIEnabled())
36 {
37 if (_combatArgs.AvoidTargetVictim)
38 {
39 if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, NonTankTargetSelector(summoner, _combatArgs.TargetPlayers)))
40 _owner->AI()->AttackStart(target);
41 }
42 else
43 {
44 if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, _combatArgs.Distance, _combatArgs.TargetPlayers))
45 _owner->AI()->AttackStart(target);
46 }
47 }
48 }
49 else if (Unit* currentVictim = _owner->SelectVictim())
50 {
51 if (_owner->IsAIEnabled())
52 _owner->AI()->AttackStart(currentVictim);
53 }
54 else if (_owner->IsAIEnabled())
55 _owner->AI()->DoZoneInCombat();
56 }
57 return true;
58}
uint64_t uint64
Definition Define.h:153
uint32_t uint32
Definition Define.h:154
@ REACT_AGGRESSIVE
SetAggresiveStateEvent(Creature *owner, bool startCombat=true, ObjectGuid summonerGUID=ObjectGuid::Empty, StartCombatArgs const &combatArgs={ })
Definition Unit.h:647
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)