TrinityCore
GameEventMgr.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_GAMEEVENT_MGR_H
19#define TRINITY_GAMEEVENT_MGR_H
20
21#include "Common.h"
22#include "SharedDefines.h"
23#include "Define.h"
24#include "ObjectGuid.h"
25#include <list>
26#include <map>
27#include <set>
28#include <unordered_map>
29#include <vector>
30
31#define max_ge_check_delay DAY // 1 day in seconds
32
34{
35 GAMEEVENT_NORMAL = 0, // standard game events
36 GAMEEVENT_WORLD_INACTIVE = 1, // not yet started
37 GAMEEVENT_WORLD_CONDITIONS = 2, // condition matching phase
38 GAMEEVENT_WORLD_NEXTPHASE = 3, // conditions are met, now 'length' timer to start next event
39 GAMEEVENT_WORLD_FINISHED = 4, // next events are started, unapply this one
40 GAMEEVENT_INTERNAL = 5 // never handled in update
41};
42
44{
45 float reqNum; // required number // use float, since some events use percent
46 float done; // done number
47 uint32 max_world_state; // max resource count world state update id
48 uint32 done_world_state; // done resource count world state update id
49};
50
52{
55 float num;
56};
57
58typedef std::map<uint32 /*condition id*/, GameEventFinishCondition> GameEventConditionMap;
59
61{
63 announce(0) { }
64 time_t start; // occurs after this time
65 time_t end; // occurs before this time
66 time_t nextstart; // after this time the follow-up events count this phase completed
67 uint32 occurence; // time between end and start
68 uint32 length; // length of the event (minutes) after finishing all conditions
71 GameEventState state; // state of the game event, these are saved into the game_event table on change!
72 GameEventConditionMap conditions; // conditions to finish
73 std::set<uint16 /*gameevent id*/> prerequisite_events; // events that must be completed before starting this event
74 std::string description;
75 uint8 announce; // if 0 dont announce, if 1 announce, if 2 take config value
76
77 bool isValid() const { return length > 0 || state > GAMEEVENT_NORMAL; }
78};
79
81{
86};
87
88class Creature;
89class Player;
90class Quest;
91struct VendorItem;
92
94{
95 private:
98
99 public:
100 static GameEventMgr* instance();
101
102 typedef std::set<uint16> ActiveEvents;
103 typedef std::vector<GameEventData> GameEventDataMap;
104 ActiveEvents const& GetActiveEventList() const { return m_ActiveEvents; }
105 GameEventDataMap const& GetEventMap() const { return mGameEvent; }
106 bool CheckOneGameEvent(uint16 entry) const;
107 uint32 NextCheck(uint16 entry) const;
108 void LoadFromDB();
109 uint32 Update();
110 bool IsActiveEvent(uint16 event_id) { return (m_ActiveEvents.find(event_id) != m_ActiveEvents.end()); }
111 uint32 StartSystem();
112 void Initialize();
113 void StartArenaSeason();
114 void StartInternalEvent(uint16 event_id);
115 bool StartEvent(uint16 event_id, bool overwrite = false);
116 void StopEvent(uint16 event_id, bool overwrite = false);
117 void HandleQuestComplete(uint32 quest_id); // called on world event type quest completions
118 uint64 GetNPCFlag(Creature* cr);
119
120 private:
121 void SendWorldStateUpdate(Player* player, uint16 event_id);
122 void AddActiveEvent(uint16 event_id) { m_ActiveEvents.insert(event_id); }
123 void RemoveActiveEvent(uint16 event_id) { m_ActiveEvents.erase(event_id); }
124 void ApplyNewEvent(uint16 event_id);
125 void UnApplyEvent(uint16 event_id);
126 void GameEventSpawn(int16 event_id);
127 void GameEventUnspawn(int16 event_id);
128 void ChangeEquipOrModel(int16 event_id, bool activate);
129 void UpdateEventQuests(uint16 event_id, bool activate);
130 void UpdateWorldStates(uint16 event_id, bool Activate);
131 void UpdateEventNPCFlags(uint16 event_id);
132 void UpdateEventNPCVendor(uint16 event_id, bool activate);
133 void RunSmartAIScripts(uint16 event_id, bool activate);
134 bool CheckOneGameEventConditions(uint16 event_id);
135 void SaveWorldEventStateToDB(uint16 event_id);
136 bool hasCreatureQuestActiveEventExcept(uint32 quest_id, uint16 event_id);
137 bool hasGameObjectQuestActiveEventExcept(uint32 quest_id, uint16 event_id);
138 bool hasCreatureActiveEventExcept(ObjectGuid::LowType creature_guid, uint16 event_id);
139 bool hasGameObjectActiveEventExcept(ObjectGuid::LowType go_guid, uint16 event_id);
140 void SetHolidayEventTime(GameEventData& event);
141 time_t GetLastStartTime(uint16 event_id) const;
142
143 typedef std::list<ObjectGuid::LowType> GuidList;
144 typedef std::list<uint32> IdList;
145 typedef std::vector<GuidList> GameEventGuidMap;
146 typedef std::vector<IdList> GameEventIdMap;
147 typedef std::pair<ObjectGuid::LowType, ModelEquip> ModelEquipPair;
148 typedef std::list<ModelEquipPair> ModelEquipList;
149 typedef std::vector<ModelEquipList> GameEventModelEquipMap;
150 typedef std::pair<uint32, uint32> QuestRelation;
151 typedef std::list<QuestRelation> QuestRelList;
152 typedef std::vector<QuestRelList> GameEventQuestMap;
153 typedef std::unordered_map<uint32, std::vector<VendorItem>> NPCVendorMap;
154 typedef std::vector<NPCVendorMap> GameEventNPCVendorMap;
156 typedef std::pair<ObjectGuid::LowType /*guid*/, uint64 /*npcflag*/> GuidNPCFlagPair;
157 typedef std::list<GuidNPCFlagPair> NPCFlagList;
158 typedef std::vector<NPCFlagList> GameEventNPCFlagMap;
163 //GameEventGuidMap mGameEventCreatureGuids;
164 //GameEventGuidMap mGameEventGameobjectGuids;
171
172 public:
175};
176
177#define sGameEventMgr GameEventMgr::instance()
178
180TC_GAME_API bool IsEventActive(uint16 eventId);
181
182#endif
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int16_t int16
Definition: Define.h:139
uint64_t uint64
Definition: Define.h:141
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
TC_GAME_API bool IsHolidayActive(HolidayIds id)
TC_GAME_API bool IsEventActive(uint16 eventId)
std::map< uint32, GameEventFinishCondition > GameEventConditionMap
Definition: GameEventMgr.h:58
GameEventState
Definition: GameEventMgr.h:34
@ GAMEEVENT_NORMAL
Definition: GameEventMgr.h:35
@ GAMEEVENT_INTERNAL
Definition: GameEventMgr.h:40
@ GAMEEVENT_WORLD_FINISHED
Definition: GameEventMgr.h:39
@ GAMEEVENT_WORLD_CONDITIONS
Definition: GameEventMgr.h:37
@ GAMEEVENT_WORLD_NEXTPHASE
Definition: GameEventMgr.h:38
@ GAMEEVENT_WORLD_INACTIVE
Definition: GameEventMgr.h:36
HolidayIds
@ HOLIDAY_NONE
GameEventDataMap const & GetEventMap() const
Definition: GameEventMgr.h:105
ActiveEvents m_ActiveEvents
Definition: GameEventMgr.h:169
GameEventDataMap mGameEvent
Definition: GameEventMgr.h:166
GameEventNPCFlagMap mGameEventNPCFlags
Definition: GameEventMgr.h:168
bool IsActiveEvent(uint16 event_id)
Definition: GameEventMgr.h:110
GameEventIdMap mGameEventPoolIds
Definition: GameEventMgr.h:165
std::vector< GameEventData > GameEventDataMap
Definition: GameEventMgr.h:103
GameEventGuidMap mGameEventCreatureGuids
Definition: GameEventMgr.h:173
void RemoveActiveEvent(uint16 event_id)
Definition: GameEventMgr.h:123
void AddActiveEvent(uint16 event_id)
Definition: GameEventMgr.h:122
std::vector< GuidList > GameEventGuidMap
Definition: GameEventMgr.h:145
std::list< ObjectGuid::LowType > GuidList
Definition: GameEventMgr.h:143
std::pair< ObjectGuid::LowType, uint64 > GuidNPCFlagPair
Definition: GameEventMgr.h:156
GameEventModelEquipMap mGameEventModelEquip
Definition: GameEventMgr.h:162
ActiveEvents const & GetActiveEventList() const
Definition: GameEventMgr.h:104
std::list< ModelEquipPair > ModelEquipList
Definition: GameEventMgr.h:148
GameEventNPCVendorMap mGameEventVendors
Definition: GameEventMgr.h:161
GameEventQuestMap mGameEventCreatureQuests
Definition: GameEventMgr.h:159
GameEventGuidMap mGameEventGameobjectGuids
Definition: GameEventMgr.h:174
std::set< uint16 > ActiveEvents
Definition: GameEventMgr.h:102
std::pair< ObjectGuid::LowType, ModelEquip > ModelEquipPair
Definition: GameEventMgr.h:147
QuestIdToEventConditionMap mQuestToEventConditions
Definition: GameEventMgr.h:167
std::map< uint32, GameEventQuestToEventConditionNum > QuestIdToEventConditionMap
Definition: GameEventMgr.h:155
std::vector< NPCVendorMap > GameEventNPCVendorMap
Definition: GameEventMgr.h:154
std::list< GuidNPCFlagPair > NPCFlagList
Definition: GameEventMgr.h:157
std::list< uint32 > IdList
Definition: GameEventMgr.h:144
GameEventQuestMap mGameEventGameObjectQuests
Definition: GameEventMgr.h:160
std::vector< QuestRelList > GameEventQuestMap
Definition: GameEventMgr.h:152
std::vector< ModelEquipList > GameEventModelEquipMap
Definition: GameEventMgr.h:149
std::list< QuestRelation > QuestRelList
Definition: GameEventMgr.h:151
std::vector< IdList > GameEventIdMap
Definition: GameEventMgr.h:146
std::unordered_map< uint32, std::vector< VendorItem > > NPCVendorMap
Definition: GameEventMgr.h:153
std::pair< uint32, uint32 > QuestRelation
Definition: GameEventMgr.h:150
std::vector< NPCFlagList > GameEventNPCFlagMap
Definition: GameEventMgr.h:158
uint64 LowType
Definition: ObjectGuid.h:278
void Update(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:90
uint32 occurence
Definition: GameEventMgr.h:67
uint8 holidayStage
Definition: GameEventMgr.h:70
GameEventState state
Definition: GameEventMgr.h:71
bool isValid() const
Definition: GameEventMgr.h:77
HolidayIds holiday_id
Definition: GameEventMgr.h:69
std::set< uint16 > prerequisite_events
Definition: GameEventMgr.h:73
GameEventConditionMap conditions
Definition: GameEventMgr.h:72
time_t nextstart
Definition: GameEventMgr.h:66
std::string description
Definition: GameEventMgr.h:74
uint32 modelid
Definition: GameEventMgr.h:82
uint8 equipement_id_prev
Definition: GameEventMgr.h:85
uint32 modelid_prev
Definition: GameEventMgr.h:83
uint8 equipment_id
Definition: GameEventMgr.h:84