18#ifndef TRINITY_INSTANCE_DATA_H
19#define TRINITY_INSTANCE_DATA_H
27#ifdef TRINITY_API_USE_DYNAMIC_LINKING
31#define OUT_SAVE_INST_DATA TC_LOG_DEBUG("scripts", "Saving Instance Data for Instance {} (Map {}, Instance Id {})", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
32#define OUT_SAVE_INST_DATA_COMPLETE TC_LOG_DEBUG("scripts", "Saving Instance Data for Instance {} (Map {}, Instance Id {}) completed.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
33#define OUT_LOAD_INST_DATA(a) TC_LOG_DEBUG("scripts", "Loading Instance Data for Instance {} (Map {}, Instance Id {}). Input is '{}'", instance->GetMapName(), instance->GetId(), instance->GetInstanceId(), a)
34#define OUT_LOAD_INST_DATA_COMPLETE TC_LOG_DEBUG("scripts", "Instance Data Load for Instance {} (Map {}, Instance Id: {}) is complete.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
35#define OUT_LOAD_INST_DATA_FAIL TC_LOG_ERROR("scripts", "Unable to load Instance Data for Instance {} (Map {}, Instance Id: {}).", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
41 class InitWorldStates;
169 virtual void Create();
171 virtual void Load(
char const* data);
174 virtual std::string GetSaveData();
182 virtual bool IsEncounterInProgress()
const;
186 virtual void OnCreatureCreate(
Creature* creature)
override;
187 virtual void OnCreatureRemove(
Creature* creature)
override;
189 virtual void OnGameObjectCreate(
GameObject* go)
override;
190 virtual void OnGameObjectRemove(
GameObject* go)
override;
209 void DoUseDoorOrButton(
ObjectGuid guid,
uint32 withRestoreTime = 0,
bool useAlternativeState =
false);
216 void DoUpdateWorldState(
uint32 worldstateId,
uint32 worldstateValue);
219 void DoSendNotifyToInstance(
char const* format, ...);
229 void DoRemoveAurasDueToSpellOnPlayers(
uint32 spell,
bool includePets =
false,
bool includeControlled =
false);
230 void DoRemoveAurasDueToSpellOnPlayer(
Player* player,
uint32 spell,
bool includePets =
false,
bool includeControlled =
false);
233 void DoCastSpellOnPlayers(
uint32 spell,
bool includePets =
false,
bool includeControlled =
false);
234 void DoCastSpellOnPlayer(
Player* player,
uint32 spell,
bool includePets =
false,
bool includeControlled =
false);
237 static bool ServerAllowsTwoSideGroups();
241 static char const* GetBossStateName(
uint8 state);
252 void UpdateEncounterStateForKilledCreature(
uint32 creatureId,
Unit* source);
253 void UpdateEncounterStateForSpellCast(
uint32 spellId,
Unit* source);
273 void SetHeaders(std::string
const& dataHeaders);
276 void LoadDoorData(
DoorData const* data);
280 void AddObject(
Creature* obj,
bool add);
284 virtual void AddDoor(
GameObject* door,
bool add);
285 void AddMinion(
Creature* minion,
bool add);
287 virtual void UpdateDoorState(
GameObject* door);
290 void UpdateSpawnGroups();
297 bool ReadSaveDataHeaders(std::istringstream& data);
298 void ReadSaveDataBossStates(std::istringstream& data);
300 void WriteSaveDataHeaders(std::ostringstream& data);
301 void WriteSaveDataBossStates(std::ostringstream& data);
304 bool _SkipCheckRequiredBosses(
Player const* player =
nullptr)
const;
321 #ifdef TRINITY_API_USE_DYNAMIC_LINKING
323 std::shared_ptr<ModuleReference> module_reference;
AchievementCriteriaTimedTypes
std::chrono::seconds Seconds
Seconds shorthand typedef.
@ ENCOUNTER_FRAME_ENABLE_OBJECTIVE
@ ENCOUNTER_FRAME_DISENGAGE
@ ENCOUNTER_FRAME_UPDATE_PRIORITY
@ ENCOUNTER_FRAME_DISABLE_OBJECTIVE
@ ENCOUNTER_FRAME_UPDATE_OBJECTIVE
@ ENCOUNTER_FRAME_ADD_TIMER
@ ENCOUNTER_FRAME_PHASE_SHIFT_CHANGED
std::map< uint32, MinionInfo > MinionInfoMap
std::map< uint32, ObjectGuid > ObjectGuidMap
std::vector< AreaBoundary const * > CreatureBoundary
std::multimap< uint32, DoorInfo > DoorInfoMap
std::map< uint32, uint32 > ObjectInfoMap
std::pair< DoorInfoMap::const_iterator, DoorInfoMap::const_iterator > DoorInfoMapBounds
std::set< ObjectGuid > GuidSet
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
uint32 GetCompletedEncounterMask() const
void SetBossNumber(uint32 number)
std::vector< char > headers
virtual void ReadSaveDataMore(std::istringstream &)
bool IsAreaTriggerDone(uint32 id) const
uint32 completedEncounters
ObjectGuidMap _objectGuids
CreatureBoundary const * GetBossBoundary(uint32 id) const
ObjectInfoMap _gameObjectInfo
EncounterState GetBossState(uint32 id) const
virtual void OnPlayerLeave(Player *)
virtual void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &)
ObjectInfoMap _creatureInfo
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
virtual ~InstanceScript()
std::unordered_set< uint32 > _activatedAreaTriggers
std::vector< BossInfo > bosses
virtual void OnPlayerEnter(Player *)
void MarkAreaTriggerDone(uint32 id)
uint32 GetEncounterCount() const
virtual void Update(uint32)
void SetCompletedEncountersMask(uint32 newMask)
std::vector< InstanceSpawnGroupInfo > const *const _instanceSpawnGroups
void ResetAreaTriggerDone(uint32 id)
virtual void WriteSaveDataMore(std::ostringstream &)
ObjectData const gameObjectData[]
ObjectData const creatureData[]
const_iterator begin() const
BossBoundaryData(std::initializer_list< BossBoundaryEntry > data)
std::vector< BossBoundaryEntry > StorageType
const_iterator end() const
StorageType::const_iterator const_iterator
AreaBoundary const * Boundary
GuidSet door[MAX_DOOR_TYPES]
CreatureBoundary boundary
DoorInfo(BossInfo *_bossInfo, DoorType _type)
MinionInfo(BossInfo *_bossInfo)