TrinityCore
Loading...
Searching...
No Matches
GameObjectAI.h
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#ifndef TRINITY_GAMEOBJECTAI_H
19#define TRINITY_GAMEOBJECTAI_H
20
21#include "Define.h"
22#include "ObjectGuid.h"
23#include "Optional.h"
24#include "QuestDef.h"
25
26class Creature;
27class GameObject;
28class Unit;
29class SpellInfo;
30class WorldObject;
31
33{
34 protected:
35 GameObject* const me;
36
37 public:
38 explicit GameObjectAI(GameObject* go) : me(go) { }
39 virtual ~GameObjectAI() { }
40
41 virtual void UpdateAI(uint32 /*diff*/) { }
42
43 virtual void InitializeAI() { Reset(); }
44
45 virtual void Reset() { }
46
47 // Pass parameters between AI
48 virtual void DoAction(int32 /*param = 0 */) { }
49 virtual void SetGUID(ObjectGuid const& /*guid*/, int32 /*id = 0 */) { }
50 virtual ObjectGuid GetGUID(int32 /*id = 0 */) const { return ObjectGuid::Empty; }
51
52 static int32 Permissible(GameObject const* go);
53
54 // Called when the dialog status between a player and the gameobject is requested.
55 virtual Optional<QuestGiverStatus> GetDialogStatus(Player* /*player*/) { return {}; }
56
57 // Called when a player opens a gossip dialog with the gameobject.
58 virtual bool OnGossipHello(Player* /*player*/) { return false; }
59
60 // Called when a player selects a gossip item in the gameobject's gossip menu.
61 virtual bool OnGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { return false; }
62
63 // Called when a player selects a gossip with a code in the gameobject's gossip menu.
64 virtual bool OnGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, char const* /*code*/) { return false; }
65
66 // Called when a player accepts a quest from the gameobject.
67 virtual void OnQuestAccept(Player* /*player*/, Quest const* /*quest*/) { }
68
69 // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0
70 virtual void OnQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { }
71
72 // Called when a Player clicks a GameObject, before GossipHello
73 // prevents achievement tracking if returning true
74 virtual bool OnReportUse(Player* /*player*/) { return false; }
75
76 virtual void Destroyed(WorldObject* /*attacker*/, uint32 /*eventId*/) { }
77 virtual void Damaged(WorldObject* /*attacker*/, uint32 /*eventId*/) { }
78
79 virtual uint32 GetData(uint32 /*id*/) const { return 0; }
80 virtual void SetData64(uint32 /*id*/, uint64 /*value*/) { }
81 virtual uint64 GetData64(uint32 /*id*/) const { return 0; }
82 virtual void SetData(uint32 /*id*/, uint32 /*value*/) { }
83
84 virtual void OnGameEvent(bool /*start*/, uint16 /*eventId*/) { }
85 virtual void OnLootStateChanged(uint32 /*state*/, Unit* /*unit*/) { }
86 virtual void OnStateChanged(uint32 /*state*/) { }
87 virtual void EventInform(uint32 /*eventId*/) { }
88
89 // Called when hit by a spell
90 virtual void SpellHit(WorldObject* /*caster*/, SpellInfo const* /*spellInfo*/) { }
91
92 // Called when spell hits a target
93 virtual void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* /*spellInfo*/) { }
94
95 // Called when the gameobject summon successfully other creature
96 virtual void JustSummoned(Creature* /*summon*/) { }
97
98 virtual void SummonedCreatureDespawn(Creature* /*summon*/) { }
99 virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
100};
101
103{
104 public:
105 explicit NullGameObjectAI(GameObject* go);
106
107 void UpdateAI(uint32 /*diff*/) override { }
108
109 static int32 Permissible(GameObject const* go);
110};
111#endif
#define TC_GAME_API
Definition Define.h:114
int32_t int32
Definition Define.h:129
uint64_t uint64
Definition Define.h:132
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
virtual Optional< QuestGiverStatus > GetDialogStatus(Player *)
virtual void OnQuestReward(Player *, Quest const *, uint32)
virtual ObjectGuid GetGUID(int32) const
virtual void Damaged(WorldObject *, uint32)
virtual void SpellHit(WorldObject *, SpellInfo const *)
virtual void OnGameEvent(bool, uint16)
virtual void SummonedCreatureDies(Creature *, Unit *)
virtual uint32 GetData(uint32) const
GameObject *const me
virtual void DoAction(int32)
virtual void OnStateChanged(uint32)
virtual void SetGUID(ObjectGuid const &, int32)
virtual bool OnReportUse(Player *)
virtual void SpellHitTarget(WorldObject *, SpellInfo const *)
virtual bool OnGossipHello(Player *)
virtual void InitializeAI()
virtual void JustSummoned(Creature *)
virtual void SetData64(uint32, uint64)
virtual void SetData(uint32, uint32)
virtual void OnQuestAccept(Player *, Quest const *)
virtual void SummonedCreatureDespawn(Creature *)
virtual bool OnGossipSelect(Player *, uint32, uint32)
virtual void UpdateAI(uint32)
virtual void Destroyed(WorldObject *, uint32)
GameObjectAI(GameObject *go)
virtual bool OnGossipSelectCode(Player *, uint32, uint32, char const *)
virtual ~GameObjectAI()
virtual void Reset()
virtual uint64 GetData64(uint32) const
virtual void EventInform(uint32)
virtual void OnLootStateChanged(uint32, Unit *)
void UpdateAI(uint32) override
static ObjectGuid const Empty
Definition ObjectGuid.h:140
Definition Unit.h:769