diff options
Diffstat (limited to 'src/server/game/Instances/InstanceScript.cpp')
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index f407ad4ec45..47d85fb55e9 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -183,7 +183,7 @@ void InstanceScript::LoadDoorData(DoorData const* data) while (data->entry) { if (data->bossId < bosses.size()) - doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type))); + doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->Behavior))); ++data; } @@ -228,17 +228,20 @@ void InstanceScript::UpdateDoorState(GameObject* door) for (; range.first != range.second && open; ++range.first) { DoorInfo const& info = range.first->second; - switch (info.type) + switch (info.Behavior) { - case DOOR_TYPE_ROOM: + case EncounterDoorBehavior::OpenWhenNotInProgress: open = (info.bossInfo->state != IN_PROGRESS); break; - case DOOR_TYPE_PASSAGE: + case EncounterDoorBehavior::OpenWhenDone: open = (info.bossInfo->state == DONE); break; - case DOOR_TYPE_SPAWN_HOLE: + case EncounterDoorBehavior::OpenWhenInProgress: open = (info.bossInfo->state == IN_PROGRESS); break; + case EncounterDoorBehavior::OpenWhenNotDone: + open = (info.bossInfo->state != DONE); + break; default: break; } @@ -347,11 +350,9 @@ void InstanceScript::AddDoor(GameObject* door, bool add) DoorInfo const& data = range.first->second; if (add) - { - data.bossInfo->door[data.type].insert(door->GetGUID()); - } + data.bossInfo->door[AsUnderlyingType(data.Behavior)].insert(door->GetGUID()); else - data.bossInfo->door[data.type].erase(door->GetGUID()); + data.bossInfo->door[AsUnderlyingType(data.Behavior)].erase(door->GetGUID()); } if (add) @@ -454,9 +455,9 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) instance->UpdateInstanceLock({ dungeonEncounter, id, state }); } - for (uint32 type = 0; type < MAX_DOOR_TYPES; ++type) - for (GuidSet::iterator i = bossInfo->door[type].begin(); i != bossInfo->door[type].end(); ++i) - if (GameObject* door = instance->GetGameObject(*i)) + for (GuidSet const& doorSet : bossInfo->door) + for (ObjectGuid const& doorGUID : doorSet) + if (GameObject* door = instance->GetGameObject(doorGUID)) UpdateDoorState(door); GuidSet minions = bossInfo->minion; // Copy to prevent iterator invalidation (minion might be unsummoned in UpdateMinionState) |