diff options
author | kvipka <qvipka@gmail.com> | 2020-08-28 20:48:41 +0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-04 12:05:36 +0100 |
commit | 5a20f14a9920a16545d913fc8e444c161c2a92bb (patch) | |
tree | 7d393f3d29b4443a5c2eeda10ec1f3db198b100d | |
parent | 94668343c6638e03c0c787580ed5527cdc6a1b07 (diff) |
Scripts/InstanceScript: Fix an issue where LoadAllGrids would load creatures before TeamInInstance was properly set (PR #25340)
(cherry picked from commit 5d2780c43c36b0ae1cc4ac2694bf6ec464d079c7)
-rw-r--r-- | src/server/game/Maps/Map.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 5 | ||||
-rw-r--r-- | src/server/game/Maps/MapInstanced.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp | 15 |
4 files changed, 9 insertions, 17 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index eb0c6b1a0b8..3caa5e30ad1 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3899,10 +3899,10 @@ template TC_GAME_API void Map::RemoveFromMap(Conversation*, bool); /* ******* Dungeon Instance Maps ******* */ -InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, Map* _parent) +InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, Map* _parent, TeamId InstanceTeam) : Map(id, expiry, InstanceId, SpawnMode, _parent), m_resetAfterUnload(false), m_unloadWhenEmpty(false), - i_data(nullptr), i_script_id(0), i_scenario(nullptr) + i_data(nullptr), i_script_id(0), i_script_team(InstanceTeam), i_scenario(nullptr) { //lets initialize visibility distance for dungeons InstanceMap::InitVisibilityDistance(); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index d044190fd4f..0e8c2e611a4 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -913,7 +913,7 @@ enum InstanceResetMethod class TC_GAME_API InstanceMap : public Map { public: - InstanceMap(uint32 id, time_t, uint32 InstanceId, Difficulty SpawnMode, Map* _parent); + InstanceMap(uint32 id, time_t, uint32 InstanceId, Difficulty SpawnMode, Map* _parent, TeamId InstanceTeam); ~InstanceMap(); bool AddPlayerToMap(Player* player, bool initPlayer = true) override; void RemovePlayerFromMap(Player*, bool) override; @@ -938,6 +938,8 @@ class TC_GAME_API InstanceMap : public Map bool HasPermBoundPlayers() const; uint32 GetMaxPlayers() const; uint32 GetMaxResetDelay() const; + TeamId GetTeamIdInInstance() const { return i_script_team; } + Team GetTeamInInstance() const { return i_script_team == TEAM_ALLIANCE ? ALLIANCE : HORDE; } virtual void InitVisibilityDistance() override; @@ -947,6 +949,7 @@ class TC_GAME_API InstanceMap : public Map bool m_unloadWhenEmpty; InstanceScript* i_data; uint32 i_script_id; + TeamId i_script_team; InstanceScenario* i_scenario; }; diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index 38d3143463c..ee4e0c0a20c 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -231,7 +231,7 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save, TC_LOG_DEBUG("maps", "MapInstanced::CreateInstance: %s map instance %d for %d created with difficulty %s", save ? "" : "new ", InstanceId, GetId(), difficulty ? "heroic" : "normal"); - InstanceMap* map = new InstanceMap(GetId(), GetGridExpiry(), InstanceId, difficulty, this); + InstanceMap* map = new InstanceMap(GetId(), GetGridExpiry(), InstanceId, difficulty, this, team); ASSERT(map->IsDungeon()); map->LoadRespawnTimes(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 897abf36ac9..9d9e5c5e4cc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -145,7 +145,7 @@ class instance_icecrown_citadel : public InstanceMapScript SetBossNumber(EncounterCount); LoadBossBoundaries(boundaries); LoadDoorData(doorData); - TeamInInstance = 0; + TeamInInstance = map->GetTeamInInstance(); HeroicAttempts = MaxHeroicAttempts; ColdflameJetsState = NOT_STARTED; UpperSpireTeleporterActiveState = NOT_STARTED; @@ -186,9 +186,6 @@ class instance_icecrown_citadel : public InstanceMapScript void OnPlayerEnter(Player* player) override { - if (!TeamInInstance) - TeamInInstance = player->GetTeam(); - uint8 spawnGroupId = TeamInInstance == ALLIANCE ? SPAWN_GROUP_ALLIANCE_ROS : SPAWN_GROUP_HORDE_ROS; if (!instance->IsSpawnGroupActive(spawnGroupId)) instance->SpawnGroupSpawn(spawnGroupId); @@ -332,14 +329,6 @@ class instance_icecrown_citadel : public InstanceMapScript // Weekly quest spawn prevention uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override { - if (!TeamInInstance) - { - Map::PlayerList const& players = instance->GetPlayers(); - if (!players.isEmpty()) - if (Player* player = players.begin()->GetSource()) - TeamInInstance = player->GetTeam(); - } - uint32 entry = data->id; switch (entry) { @@ -1525,7 +1514,7 @@ class instance_icecrown_citadel : public InstanceMapScript ObjectGuid FrozenBolvarGUID; ObjectGuid PillarsChainedGUID; ObjectGuid PillarsUnchainedGUID; - uint32 TeamInInstance; + Team TeamInInstance; uint32 ColdflameJetsState; uint32 UpperSpireTeleporterActiveState; std::unordered_set<ObjectGuid::LowType> FrostwyrmGUIDs; |