Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
CreatureAI.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRE_CREATUREAI_H
7#define SKYFIRE_CREATUREAI_H
8
9#include "Common.h"
10#include "Creature.h"
11#include "UnitAI.h"
12
13class WorldObject;
14class Unit;
15class Creature;
16class Player;
17class SpellInfo;
18
19#define TIME_INTERVAL_LOOK 5000
20#define VISIBILITY_RANGE 10000
21
22//Spell targets used by SelectSpell
24{
25 SELECT_TARGET_DONTCARE = 0, //All target types allowed
26
27 SELECT_TARGET_SELF, //Only Self casting
28
29 SELECT_TARGET_SINGLE_ENEMY, //Only Single Enemy
30 SELECT_TARGET_AOE_ENEMY, //Only AoE Enemy
31 SELECT_TARGET_ANY_ENEMY, //AoE or Single Enemy
32
33 SELECT_TARGET_SINGLE_FRIEND, //Only Single Friend
34 SELECT_TARGET_AOE_FRIEND, //Only AoE Friend
35 SELECT_TARGET_ANY_FRIEND //AoE or Single Friend
36};
37
38//Spell Effects used by SelectSpell
40{
41 SELECT_EFFECT_DONTCARE = 0, //All spell effects allowed
42 SELECT_EFFECT_DAMAGE, //Spell does damage
43 SELECT_EFFECT_HEALING, //Spell does healing
44 SELECT_EFFECT_AURA //Spell applies an aura
45};
46
52
53class CreatureAI : public UnitAI
54{
55protected:
56 Creature* const me;
57
58 bool UpdateVictim();
60
61 void SetGazeOn(Unit* target);
62
63 Creature* DoSummon(uint32 entry, Position const& pos, uint32 despawnTime = 30000, TempSummonType summonType = TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN);
64 Creature* DoSummon(uint32 entry, WorldObject* obj, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN);
65 Creature* DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN);
66
67public:
68 void Talk(uint8 id, WorldObject const* whisperTarget = NULL);
69 explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), m_MoveInLineOfSight_locked(false), m_canSeeEvenInPassiveMode(false)
70 { }
71
72 virtual ~CreatureAI() { }
73
75
76 // Called if IsVisible(Unit* who) is true at each who move, reaction at visibility zone enter
78
80 void SetCanSeeEvenInPassiveMode(bool canSeeEvenInPassiveMode) { m_canSeeEvenInPassiveMode = canSeeEvenInPassiveMode; }
81
82 // Called in Creature::Update when deathstate = DEAD. Inherited classes may maniuplate the ability to respawn based on scripted events.
83 virtual bool CanRespawn() { return true; }
84
85 // Called for reaction at stopping attack at no attackers or targets
86 virtual void EnterEvadeMode();
87
88 // Called for reaction at enter to combat if not in combat yet (enemy can be NULL)
89 virtual void EnterCombat(Unit* /*victim*/) { }
90
91 // Called when the creature is killed
92 virtual void JustDied(Unit* /*killer*/) { }
93
94 // Called when the creature kills a unit
95 virtual void KilledUnit(Unit* /*victim*/) { }
96
97 // Called when the creature summon successfully other creature
98 virtual void JustSummoned(Creature* /*summon*/) { }
99 virtual void IsSummonedBy(Unit* /*summoner*/) { }
100
101 virtual void SummonedCreatureDespawn(Creature* /*summon*/) { }
102 virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
103
104 // Called when hit by a spell
105 virtual void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) { }
106
107 // Called when spell hits a target
108 virtual void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spell*/) { }
109
110 // Called when the creature is target of hostile action: swing, hostile spell landed, fear/etc)
111 virtual void AttackedBy(Unit* /*attacker*/) { }
112 virtual bool IsEscorted() { return false; }
113
114 // Called when creature is spawned or respawned (for reseting variables)
115 virtual void JustRespawned() { Reset(); }
116
117 // Called at waypoint reached or point movement finished
118 virtual void MovementInform(uint32 /*type*/, uint32 /*id*/) { }
119
120 void OnCharmed(bool apply);
121
122 // Called at reaching home after evade
123 virtual void JustReachedHome() { }
124
125 void DoZoneInCombat(Creature* creature = NULL, float maxRangeToNearestTarget = 50.0f);
126
127 // Called at text emote receive from player
128 virtual void ReceiveEmote(Player* /*player*/, uint32 /*emoteId*/) { }
129
130 // Called when owner takes damage
131 virtual void OwnerAttackedBy(Unit* /*attacker*/) { }
132
133 // Called when owner attacks something
134 virtual void OwnerAttacked(Unit* /*target*/) { }
135
137
138 // Called when creature attack expected (if creature can and no have current victim)
139 // Note: for reaction at hostile action must be called AttackedBy function.
140 //virtual void AttackStart(Unit*) { }
141
142 // Called at World update tick
143 virtual void UpdateAI(const uint32 /*diff*/) { }
144
145 virtual void ExecuteEvent(uint32 /*eventId*/) { }
146
148
149 // Is unit visible for MoveInLineOfSight
150 //virtual bool IsVisible(Unit*) const { return false; }
151
152 // called when the corpse of this creature gets removed
153 virtual void CorpseRemoved(uint32& /*respawnDelay*/) { }
154
155 // Called when victim entered water and creature can not enter water
156 //virtual bool CanReachByRangeAttack(Unit*) { return false; }
157
159
160 // Pointer to controlled by AI creature
161 //Creature* const me;
162
163 virtual void PassengerBoarded(Unit* /*passenger*/, int8 /*seatId*/, bool /*apply*/) { }
164
165 virtual void OnSpellClick(Unit* /*clicker*/, bool& /*result*/) { }
166
167 virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; }
168protected:
169 virtual void MoveInLineOfSight(Unit* /*who*/);
170
171 bool _EnterEvadeMode();
172
173private:
176};
177
187
188#endif
SelectTargetType
Definition CreatureAI.h:24
@ SELECT_TARGET_ANY_FRIEND
Definition CreatureAI.h:35
@ SELECT_TARGET_AOE_FRIEND
Definition CreatureAI.h:34
@ SELECT_TARGET_ANY_ENEMY
Definition CreatureAI.h:31
@ SELECT_TARGET_SINGLE_FRIEND
Definition CreatureAI.h:33
@ SELECT_TARGET_SINGLE_ENEMY
Definition CreatureAI.h:29
@ SELECT_TARGET_DONTCARE
Definition CreatureAI.h:25
@ SELECT_TARGET_SELF
Definition CreatureAI.h:27
@ SELECT_TARGET_AOE_ENEMY
Definition CreatureAI.h:30
SCEquip
Definition CreatureAI.h:48
@ EQUIP_UNEQUIP
Definition CreatureAI.h:50
@ EQUIP_NO_CHANGE
Definition CreatureAI.h:49
SelectEffect
Definition CreatureAI.h:40
@ SELECT_EFFECT_DONTCARE
Definition CreatureAI.h:41
@ SELECT_EFFECT_AURA
Definition CreatureAI.h:44
@ SELECT_EFFECT_HEALING
Definition CreatureAI.h:43
@ SELECT_EFFECT_DAMAGE
Definition CreatureAI.h:42
Permitions
Definition CreatureAI.h:179
@ PERMIT_BASE_SPECIAL
Definition CreatureAI.h:185
@ PERMIT_BASE_PROACTIVE
Definition CreatureAI.h:183
@ PERMIT_BASE_NO
Definition CreatureAI.h:180
@ PERMIT_BASE_REACTIVE
Definition CreatureAI.h:182
@ PERMIT_BASE_FACTION_SPECIFIC
Definition CreatureAI.h:184
@ PERMIT_BASE_IDLE
Definition CreatureAI.h:181
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
TempSummonType
Definition Object.h:67
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition Object.h:73
virtual bool CanSeeAlways(WorldObject const *)
Definition CreatureAI.h:167
virtual void OwnerAttacked(Unit *)
Definition CreatureAI.h:134
CreatureAI(Creature *creature)
Definition CreatureAI.h:69
virtual void MoveInLineOfSight(Unit *)
bool CanSeeEvenInPassiveMode() const
Definition CreatureAI.h:79
virtual bool CanRespawn()
Definition CreatureAI.h:83
virtual void SpellHitTarget(Unit *, SpellInfo const *)
Definition CreatureAI.h:108
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
bool m_canSeeEvenInPassiveMode
Definition CreatureAI.h:175
Creature * DoSummon(uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN)
virtual void OwnerAttackedBy(Unit *)
Definition CreatureAI.h:131
virtual void JustSummoned(Creature *)
Definition CreatureAI.h:98
virtual void ExecuteEvent(uint32)
Definition CreatureAI.h:145
virtual void AttackedBy(Unit *)
Definition CreatureAI.h:111
virtual void EnterCombat(Unit *)
Definition CreatureAI.h:89
virtual void SpellHit(Unit *, SpellInfo const *)
Definition CreatureAI.h:105
virtual void IsSummonedBy(Unit *)
Definition CreatureAI.h:99
bool _EnterEvadeMode()
virtual void JustRespawned()
Definition CreatureAI.h:115
virtual void OnSpellClick(Unit *, bool &)
Definition CreatureAI.h:165
virtual void JustReachedHome()
Definition CreatureAI.h:123
virtual void UpdateAI(const uint32)
== Triggered Actions Requested ==================
Definition CreatureAI.h:143
virtual void JustDied(Unit *)
Definition CreatureAI.h:92
bool UpdateVictimWithGaze()
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
virtual void SummonedCreatureDies(Creature *, Unit *)
Definition CreatureAI.h:102
virtual void MovementInform(uint32, uint32)
Definition CreatureAI.h:118
void SetCanSeeEvenInPassiveMode(bool canSeeEvenInPassiveMode)
Definition CreatureAI.h:80
virtual void KilledUnit(Unit *)
Definition CreatureAI.h:95
virtual void ReceiveEmote(Player *, uint32)
Definition CreatureAI.h:128
bool m_MoveInLineOfSight_locked
Definition CreatureAI.h:174
virtual void PassengerBoarded(Unit *, int8, bool)
== Fields =======================================
Definition CreatureAI.h:163
Creature * DoSummonFlyer(uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN)
virtual void SummonedCreatureDespawn(Creature *)
Definition CreatureAI.h:101
bool UpdateVictim()
void SetGazeOn(Unit *target)
virtual void CorpseRemoved(uint32 &)
== State checks =================================
Definition CreatureAI.h:153
Creature *const me
Definition CreatureAI.h:56
virtual ~CreatureAI()
Definition CreatureAI.h:72
void MoveInLineOfSight_Safe(Unit *who)
== Reactions At =================================
virtual bool IsEscorted()
Definition CreatureAI.h:112
void OnCharmed(bool apply)
virtual void EnterEvadeMode()
virtual void Reset()
Definition UnitAI.h:120
UnitAI(Unit *unit)
Definition UnitAI.h:111
Definition Unit.h:1367