diff options
Diffstat (limited to 'src/game/InstanceData.cpp')
-rw-r--r-- | src/game/InstanceData.cpp | 83 |
1 files changed, 42 insertions, 41 deletions
diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index 0f62e9e27af..41369d536e1 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -1,7 +1,7 @@ /* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,6 +21,8 @@ #include "InstanceData.h" #include "Database/DatabaseEnv.h" #include "Map.h" +#include "GameObject.h" +#include "Creature.h" void InstanceData::SaveToDB() { @@ -30,12 +32,12 @@ void InstanceData::SaveToDB() CharacterDatabase.PExecute("UPDATE instance SET data = '%s' WHERE id = '%d'", data.c_str(), instance->GetInstanceId()); } -void InstanceData::HandleGameObject(uint64 GUID, bool open, GameObject *go) -{ +void InstanceData::HandleGameObject(uint64 GUID, bool open, GameObject *go) +{ if(!go) - go = instance->GetGameObjectInMap(GUID); + go = instance->GetGameObject(GUID); if(go) - go->SetGoState(open ? 0 : 1); + go->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY); else debug_log("TSCR: InstanceData: HandleGameObject failed"); } @@ -49,47 +51,47 @@ bool InstanceData::IsEncounterInProgress() const return false; } -void InstanceData::AddBossRoomDoor(uint32 id, GameObject *door) +//This will be removed in the future, just compitiable with Mangos +void InstanceData::OnCreatureCreate(Creature *creature, bool add) { - if(id < bosses.size()) - { - BossInfo *bossInfo = &bosses[id]; - bossInfo->roomDoor.insert(door); - // Room door is only closed when encounter is in progress - if(bossInfo->state == IN_PROGRESS) - door->SetGoState(1); - else - door->SetGoState(0); - } + OnCreatureCreate(creature, creature->GetEntry(), add); } -void InstanceData::AddBossPassageDoor(uint32 id, GameObject *door) +void InstanceData::SetBossRoomDoor(uint32 id, GameObject *door, bool add) { if(id < bosses.size()) { - BossInfo *bossInfo = &bosses[id]; - bossInfo->passageDoor.insert(door); - // Passage door is only opened when boss is defeated - if(bossInfo->state == DONE) - door->SetGoState(0); + if(add) + { + BossInfo *bossInfo = &bosses[id]; + bossInfo->roomDoor.insert(door); + // Room door is only closed when encounter is in progress + if(bossInfo->state == IN_PROGRESS) + door->SetGoState(GO_STATE_READY); + else + door->SetGoState(GO_STATE_ACTIVE); + } else - door->SetGoState(1); + bosses[id].roomDoor.erase(door); } } -void InstanceData::RemoveBossRoomDoor(uint32 id, GameObject *door) +void InstanceData::SetBossPassageDoor(uint32 id, GameObject *door, bool add) { if(id < bosses.size()) { - bosses[id].roomDoor.erase(door); - } -} - -void InstanceData::RemoveBossPassageDoor(uint32 id, GameObject *door) -{ - if(id < bosses.size()) - { - bosses[id].passageDoor.erase(door); + if(add) + { + BossInfo *bossInfo = &bosses[id]; + bossInfo->passageDoor.insert(door); + // Passage door is only opened when boss is defeated + if(bossInfo->state == DONE) + door->SetGoState(GO_STATE_ACTIVE); + else + door->SetGoState(GO_STATE_READY); + } + else + bosses[id].passageDoor.erase(door); } } @@ -98,30 +100,29 @@ void InstanceData::SetBossState(uint32 id, EncounterState state) if(id < bosses.size()) { BossInfo *bossInfo = &bosses[id]; - bossInfo->state = state; switch(state) { case NOT_STARTED: // Open all room doors, close all passage doors for(DoorSet::iterator i = bossInfo->roomDoor.begin(); i != bossInfo->roomDoor.end(); ++i) - (*i)->SetGoState(0); + (*i)->SetGoState(GO_STATE_ACTIVE); for(DoorSet::iterator i = bossInfo->passageDoor.begin(); i != bossInfo->passageDoor.end(); ++i) - (*i)->SetGoState(1); + (*i)->SetGoState(GO_STATE_READY); break; case IN_PROGRESS: // Close all doors for(DoorSet::iterator i = bossInfo->roomDoor.begin(); i != bossInfo->roomDoor.end(); ++i) - (*i)->SetGoState(1); + (*i)->SetGoState(GO_STATE_READY); for(DoorSet::iterator i = bossInfo->passageDoor.begin(); i != bossInfo->passageDoor.end(); ++i) - (*i)->SetGoState(1); + (*i)->SetGoState(GO_STATE_READY); break; case DONE: // Open all doors for(DoorSet::iterator i = bossInfo->roomDoor.begin(); i != bossInfo->roomDoor.end(); ++i) - (*i)->SetGoState(0); + (*i)->SetGoState(GO_STATE_ACTIVE); for(DoorSet::iterator i = bossInfo->passageDoor.begin(); i != bossInfo->passageDoor.end(); ++i) - (*i)->SetGoState(0); + (*i)->SetGoState(GO_STATE_ACTIVE); break; default: break; |