TrinityCore
PassiveAI.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 "PassiveAI.h"
19#include "Creature.h"
20#include "World.h"
21
22PassiveAI::PassiveAI(Creature* c, uint32 scriptId) : CreatureAI(c, scriptId)
23{
25 me->SetCanMelee(false);
26}
27
29{
31}
32
34{
36 me->SetCanMelee(false);
37}
38
40{
42 return PERMIT_BASE_PROACTIVE + 50;
43
44 if (creature->IsTrigger())
46
47 return PERMIT_BASE_IDLE;
48}
49
51{
52 if (me->IsEngaged() && !me->IsInCombat())
54}
55
58 me->Attack(target, true);
59}
60
62{
63 if (me->GetVictim())
64 {
66 me->AttackStop();
67 }
68}
69
71{
72 // We died while possessed, disable our loot
74}
75
76CritterAI::CritterAI(Creature* creature, uint32 scriptId) : PassiveAI(creature, scriptId)
77{
78 me->SetCanMelee(false, true);
79}
80
82{
85}
86
88{
89 if (me->IsEngaged())
90 {
91 if (!me->IsInCombat())
92 {
94 return;
95 }
96
97 _evadeTimer.Update(diff);
98 if (_evadeTimer.Passed())
100 }
101}
102
104{
105 if (creature->IsCritter() && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
107
108 return PERMIT_BASE_NO;
109}
110
112{
113 if (me->m_spells[0])
114 {
115 CastSpellExtraArgs extra;
116 extra.OriginalCaster = summoner->GetGUID();
117 me->CastSpell(me, me->m_spells[0], extra);
118 }
119}
120
122{
123 if (creature->IsTrigger() && creature->m_spells[0])
124 return PERMIT_BASE_SPECIAL;
125
126 return PERMIT_BASE_NO;
127}
@ PERMIT_BASE_SPECIAL
Definition: CreatureAI.h:49
@ PERMIT_BASE_PROACTIVE
Definition: CreatureAI.h:47
@ PERMIT_BASE_NO
Definition: CreatureAI.h:44
@ PERMIT_BASE_IDLE
Definition: CreatureAI.h:45
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
@ UNIT_DYNFLAG_LOOTABLE
@ REACT_PASSIVE
Definition: UnitDefines.h:506
@ UNIT_NPC_FLAG_SPELLCLICK
Definition: UnitDefines.h:321
@ UNIT_MASK_GUARDIAN
Definition: Unit.h:352
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
Definition: CreatureAI.cpp:219
Creature *const me
Definition: CreatureAI.h:61
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
Definition: Creature.cpp:2822
bool IsTrigger() const
Definition: Creature.h:113
void StartDefaultCombatMovement(Unit *victim, Optional< float > range={}, Optional< float > angle={})
Definition: Creature.cpp:2855
uint32 m_spells[MAX_CREATURE_SPELLS]
Definition: Creature.h:302
bool IsEngaged() const override
Definition: Creature.cpp:3601
void SetReactState(ReactStates st)
Definition: Creature.h:160
void JustEngagedWith(Unit *) override
Definition: PassiveAI.cpp:81
TimeTracker _evadeTimer
Definition: PassiveAI.h:83
void UpdateAI(uint32 diff) override
Definition: PassiveAI.cpp:87
CritterAI(Creature *creature, uint32 scriptId={})
Definition: PassiveAI.cpp:76
static int32 Permissible(Creature const *creature)
Definition: PassiveAI.cpp:103
NullCreatureAI(Creature *creature, uint32 scriptId={})
Definition: PassiveAI.cpp:33
static int32 Permissible(Creature const *creature)
Definition: PassiveAI.cpp:39
void RemoveDynamicFlag(uint32 flag)
Definition: Object.h:170
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
PassiveAI(Creature *creature, uint32 scriptId={})
Definition: PassiveAI.cpp:22
void UpdateAI(uint32) override
Definition: PassiveAI.cpp:50
void AttackStart(Unit *target) override
Definition: PassiveAI.cpp:56
PossessedAI(Creature *creature, uint32 scriptId={})
Definition: PassiveAI.cpp:28
void UpdateAI(uint32) override
Definition: PassiveAI.cpp:61
void JustDied(Unit *) override
Definition: PassiveAI.cpp:70
void IsSummonedBy(WorldObject *summoner) override
Definition: PassiveAI.cpp:111
static int32 Permissible(Creature const *creature)
Definition: PassiveAI.cpp:121
Definition: Unit.h:627
bool Attack(Unit *victim, bool meleeAttack)
Definition: Unit.cpp:5670
bool HasNpcFlag(NPCFlags flags) const
Definition: Unit.h:981
Unit * GetVictim() const
Definition: Unit.h:715
bool IsCritter() const
Definition: Unit.h:1010
uint32 HasUnitTypeMask(uint32 mask) const
Definition: Unit.h:736
bool AttackStop()
Definition: Unit.cpp:5781
bool IsInCombat() const
Definition: Unit.h:1043
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition: Object.cpp:2991
#define sWorld
Definition: World.h:931
@ CONFIG_CREATURE_FAMILY_FLEE_DELAY
Definition: World.h:315
ObjectGuid OriginalCaster
Definition: SpellDefines.h:482
void Update(int32 diff)
Definition: Timer.h:121
bool Passed() const
Definition: Timer.h:131
void Reset(int32 expiry)
Definition: Timer.h:136