diff options
Diffstat (limited to 'src/game/InstanceData.h')
-rw-r--r-- | src/game/InstanceData.h | 62 |
1 files changed, 40 insertions, 22 deletions
diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index 2d7e5f84746..91f589384a0 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -37,16 +37,40 @@ enum EncounterState IN_PROGRESS = 1, FAIL = 2, DONE = 3, - SPECIAL = 4 + SPECIAL = 4, + TO_BE_DECIDED = 5, }; typedef std::set<GameObject*> DoorSet; +enum DoorType +{ + DOOR_TYPE_ROOM = 0, + DOOR_TYPE_PASSAGE, + MAX_DOOR_TYPES, +}; + struct BossInfo { - BossInfo() : state(NOT_STARTED) {} + BossInfo() : state(TO_BE_DECIDED) {} EncounterState state; - DoorSet roomDoor, passageDoor; + DoorSet door[MAX_DOOR_TYPES]; +}; + +struct DoorInfo +{ + explicit DoorInfo(BossInfo *_bossInfo, DoorType _type) + : bossInfo(_bossInfo), type(_type) {} + BossInfo *bossInfo; + DoorType type; +}; + +typedef std::multimap<uint32 /*entry*/, DoorInfo> DoorInfoMap; + +struct DoorData +{ + uint32 entry, bossId; + DoorType type; }; class TRINITY_DLL_SPEC InstanceData @@ -62,10 +86,10 @@ class TRINITY_DLL_SPEC InstanceData virtual void Initialize() {} //On load - virtual void Load(const char* /*data*/) {} + virtual void Load(const char * data) { LoadBossState(data); } //When save is needed, this function generates the data - virtual const char* Save() { return ""; } + virtual std::string GetSaveData() { return GetBossSaveData(); } void SaveToDB(); @@ -80,15 +104,10 @@ class TRINITY_DLL_SPEC InstanceData virtual void OnPlayerEnter(Player *) {} //Called when a gameobject is created - virtual void OnObjectCreate(GameObject *go, bool add) - { - OnObjectCreate(go); - } - virtual void OnObjectCreate(GameObject *) {} + virtual void OnObjectCreate(GameObject *go, bool add) { OnObjectCreate(go); } //called on creature creation virtual void OnCreatureCreate(Creature *, bool add); - virtual void OnCreatureCreate(Creature *, uint32 entry) {} //All-purpose data storage 64 bit virtual uint64 GetData64(uint32 /*Data*/) { return 0; } @@ -103,23 +122,22 @@ class TRINITY_DLL_SPEC InstanceData //use HandleGameObject(GUID,boolen,NULL); in any other script void HandleGameObject(uint64 GUID, bool open, GameObject *go = NULL); - void SetBossState(uint32 id, EncounterState state); + virtual void SetBossState(uint32 id, EncounterState state); protected: - void SetBossNumber(uint32 number) { bosses.resize(number); } - void SetBossRoomDoor(uint32 id, GameObject *door, bool add); - void SetBossPassageDoor(uint32 id, GameObject *door, bool add); + void LoadDoorData(const DoorData *data); - std::string GetBossSave() - { - std::ostringstream saveStream; - for(std::vector<BossInfo>::iterator i = bosses.begin(); i != bosses.end(); ++i) - saveStream << (uint32)i->state << " "; - return saveStream.str(); - } + void SetBossNumber(uint32 number) { bosses.resize(number); } + void AddDoor(GameObject *door, bool add); + void UpdateDoorState(GameObject *door); + std::string LoadBossState(const char * data); + std::string GetBossSaveData(); private: std::vector<BossInfo> bosses; + DoorInfoMap doors; + virtual void OnObjectCreate(GameObject *) {} + virtual void OnCreatureCreate(Creature *, uint32 entry) {} }; #endif |