diff options
-rw-r--r-- | sql/updates/world/master/2022_07_24_10_world.sql | 4 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 5 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 3 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp | 58 |
5 files changed, 50 insertions, 34 deletions
diff --git a/sql/updates/world/master/2022_07_24_10_world.sql b/sql/updates/world/master/2022_07_24_10_world.sql new file mode 100644 index 00000000000..b5c733b17c0 --- /dev/null +++ b/sql/updates/world/master/2022_07_24_10_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `world_state` WHERE `ID` IN (4485,4486); +INSERT INTO `world_state` (`ID`, `DefaultValue`, `MapIDs`, `ScriptName`, `Comment`) VALUES +(4485, 0, '-1', '', 'Instances - Generic - Team In Instance - Alliance'), +(4486, 0, '-1', '', 'Instances - Generic - Team In Instance - Horde'); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 1810b63d555..fc5fa907d84 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2772,7 +2772,7 @@ template TC_GAME_API void Map::RemoveFromMap(Conversation*, bool); InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam) : Map(id, expiry, InstanceId, SpawnMode), m_resetAfterUnload(false), m_unloadWhenEmpty(false), - i_data(nullptr), i_script_id(0), i_script_team(InstanceTeam), i_scenario(nullptr) + i_data(nullptr), i_script_id(0), i_scenario(nullptr) { //lets initialize visibility distance for dungeons InstanceMap::InitVisibilityDistance(); @@ -2780,6 +2780,9 @@ InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty // the timer is started by default, and stopped when the first player joins // this make sure it gets unloaded if for some reason no player joins m_unloadTimer = std::max(sWorld->getIntConfig(CONFIG_INSTANCE_UNLOAD_DELAY), (uint32)MIN_UNLOAD_DELAY); + + sWorldStateMgr->SetValue(WS_TEAM_IN_INSTANCE_ALLIANCE, InstanceTeam == TEAM_ALLIANCE, false, this); + sWorldStateMgr->SetValue(WS_TEAM_IN_INSTANCE_HORDE, InstanceTeam == TEAM_HORDE, false, this); } InstanceMap::~InstanceMap() @@ -3270,6 +3273,15 @@ uint32 InstanceMap::GetMaxResetDelay() const return mapDiff ? mapDiff->GetRaidDuration() : 0; } +TeamId InstanceMap::GetTeamIdInInstance() const +{ + if (sWorldStateMgr->GetValue(WS_TEAM_IN_INSTANCE_ALLIANCE, this)) + return TEAM_ALLIANCE; + if (sWorldStateMgr->GetValue(WS_TEAM_IN_INSTANCE_HORDE, this)) + return TEAM_HORDE; + return TEAM_NEUTRAL; +} + /* ******* Battleground Instance Maps ******* */ BattlegroundMap::BattlegroundMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty spawnMode) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index ae34acdd23b..f031b1832fd 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -821,8 +821,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; } + TeamId GetTeamIdInInstance() const; + Team GetTeamInInstance() const { return GetTeamIdInInstance() == TEAM_ALLIANCE ? ALLIANCE : HORDE; } virtual void InitVisibilityDistance() override; @@ -832,7 +832,6 @@ 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/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 52c9166f70d..c7d180a375a 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7750,6 +7750,9 @@ enum WorldState : uint32 WS_CURRENT_PVP_SEASON_ID = 3191, WS_PREVIOUS_PVP_SEASON_ID = 3901, + WS_TEAM_IN_INSTANCE_ALLIANCE = 4485, + WS_TEAM_IN_INSTANCE_HORDE = 4486, + WS_BATTLEFIELD_WG_VEHICLE_H = 3490, WS_BATTLEFIELD_WG_MAX_VEHICLE_H = 3491, WS_BATTLEFIELD_WG_VEHICLE_A = 3680, diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 8bab02e489d..b681d068a1f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -146,7 +146,6 @@ class instance_icecrown_citadel : public InstanceMapScript SetBossNumber(EncounterCount); LoadBossBoundaries(boundaries); LoadDoorData(doorData); - TeamInInstance = map->GetTeamInInstance(); HeroicAttempts = MaxHeroicAttempts; ColdflameJetsState = NOT_STARTED; UpperSpireTeleporterActiveState = NOT_STARTED; @@ -178,7 +177,7 @@ class instance_icecrown_citadel : public InstanceMapScript void OnPlayerEnter(Player* player) override { - uint8 spawnGroupId = TeamInInstance == ALLIANCE ? SPAWN_GROUP_ALLIANCE_ROS : SPAWN_GROUP_HORDE_ROS; + uint8 spawnGroupId = GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPAWN_GROUP_ALLIANCE_ROS : SPAWN_GROUP_HORDE_ROS; if (!instance->IsSpawnGroupActive(spawnGroupId)) instance->SpawnGroupSpawn(spawnGroupId); @@ -186,12 +185,12 @@ class instance_icecrown_citadel : public InstanceMapScript SpawnGunship(); if (IsFactionBuffActive) - DoCastSpellOnPlayer(player, TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG); + DoCastSpellOnPlayer(player, GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG); } void OnPlayerLeave(Player* player) override { - DoRemoveAurasDueToSpellOnPlayer(player, TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true); + DoRemoveAurasDueToSpellOnPlayer(player, GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true); } void OnCreatureCreate(Creature* creature) override @@ -199,7 +198,7 @@ class instance_icecrown_citadel : public InstanceMapScript if (creature->IsGuardian() && creature->GetOwnerGUID().IsPlayer()) { if (IsFactionBuffActive) - creature->CastSpell(creature, TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true); + creature->CastSpell(creature, GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true); } switch (creature->GetEntry()) @@ -354,53 +353,53 @@ class instance_icecrown_citadel : public InstanceMapScript } } - if (entry == NPC_KOR_KRON_LIEUTENANT && TeamInInstance == ALLIANCE) + if (entry == NPC_KOR_KRON_LIEUTENANT && GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) return NPC_SKYBREAKER_LIEUTENANT; break; } case NPC_HORDE_GUNSHIP_CANNON: case NPC_ORGRIMS_HAMMER_CREW: case NPC_SKY_REAVER_KORM_BLACKSCAR: - if (TeamInInstance == ALLIANCE) + if (GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) return 0; break; case NPC_ALLIANCE_GUNSHIP_CANNON: case NPC_SKYBREAKER_DECKHAND: case NPC_HIGH_CAPTAIN_JUSTIN_BARTLETT: - if (TeamInInstance == HORDE) + if (GetData(DATA_TEAM_IN_INSTANCE) == HORDE) return 0; break; case NPC_ZAFOD_BOOMBOX: if (GameObjectTemplate const* go = sObjectMgr->GetGameObjectTemplate(GO_THE_SKYBREAKER_A)) - if ((TeamInInstance == ALLIANCE && int32(data->mapId) == go->moTransport.SpawnMap) || - (TeamInInstance == HORDE && int32(data->mapId) != go->moTransport.SpawnMap)) + if ((GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE && int32(data->mapId) == go->moTransport.SpawnMap) || + (GetData(DATA_TEAM_IN_INSTANCE) == HORDE && int32(data->mapId) != go->moTransport.SpawnMap)) return entry; return 0; case NPC_IGB_MURADIN_BRONZEBEARD: - if ((TeamInInstance == ALLIANCE && data->spawnPoint.GetPositionX() > 10.0f) || - (TeamInInstance == HORDE && data->spawnPoint.GetPositionX() < 10.0f)) + if ((GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE && data->spawnPoint.GetPositionX() > 10.0f) || + (GetData(DATA_TEAM_IN_INSTANCE) == HORDE && data->spawnPoint.GetPositionX() < 10.0f)) return entry; return 0; case NPC_SE_HIGH_OVERLORD_SAURFANG: - return TeamInInstance == ALLIANCE ? NPC_SE_MURADIN_BRONZEBEARD : NPC_SE_HIGH_OVERLORD_SAURFANG; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_SE_MURADIN_BRONZEBEARD : NPC_SE_HIGH_OVERLORD_SAURFANG; case NPC_KOR_KRON_GENERAL: - return TeamInInstance == ALLIANCE ? NPC_ALLIANCE_COMMANDER : NPC_KOR_KRON_GENERAL; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_ALLIANCE_COMMANDER : NPC_KOR_KRON_GENERAL; case NPC_TORTUNOK: - return TeamInInstance == ALLIANCE ? NPC_ALANA_MOONSTRIKE : NPC_TORTUNOK; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_ALANA_MOONSTRIKE : NPC_TORTUNOK; case NPC_GERARDO_THE_SUAVE: - return TeamInInstance == ALLIANCE ? NPC_TALAN_MOONSTRIKE : NPC_GERARDO_THE_SUAVE; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_TALAN_MOONSTRIKE : NPC_GERARDO_THE_SUAVE; case NPC_UVLUS_BANEFIRE: - return TeamInInstance == ALLIANCE ? NPC_MALFUS_GRIMFROST : NPC_UVLUS_BANEFIRE; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_MALFUS_GRIMFROST : NPC_UVLUS_BANEFIRE; case NPC_IKFIRUS_THE_VILE: - return TeamInInstance == ALLIANCE ? NPC_YILI : NPC_IKFIRUS_THE_VILE; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_YILI : NPC_IKFIRUS_THE_VILE; case NPC_VOL_GUK: - return TeamInInstance == ALLIANCE ? NPC_JEDEBIA : NPC_VOL_GUK; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_JEDEBIA : NPC_VOL_GUK; case NPC_HARAGG_THE_UNSEEN: - return TeamInInstance == ALLIANCE ? NPC_NIBY_THE_ALMIGHTY : NPC_HARAGG_THE_UNSEEN; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_NIBY_THE_ALMIGHTY : NPC_HARAGG_THE_UNSEEN; case NPC_GARROSH_HELLSCREAM: - return TeamInInstance == ALLIANCE ? NPC_KING_VARIAN_WRYNN : NPC_GARROSH_HELLSCREAM; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_KING_VARIAN_WRYNN : NPC_GARROSH_HELLSCREAM; case NPC_SE_KOR_KRON_REAVER: - return TeamInInstance == ALLIANCE ? NPC_SE_SKYBREAKER_MARINE : NPC_SE_KOR_KRON_REAVER; + return GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? NPC_SE_SKYBREAKER_MARINE : NPC_SE_KOR_KRON_REAVER; default: break; } @@ -416,14 +415,14 @@ class instance_icecrown_citadel : public InstanceMapScript case GO_GUNSHIP_ARMORY_H_25N: case GO_GUNSHIP_ARMORY_H_10H: case GO_GUNSHIP_ARMORY_H_25H: - if (TeamInInstance == ALLIANCE) + if (GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) return 0; break; case GO_GUNSHIP_ARMORY_A_10N: case GO_GUNSHIP_ARMORY_A_25N: case GO_GUNSHIP_ARMORY_A_10H: case GO_GUNSHIP_ARMORY_A_25H: - if (TeamInInstance == HORDE) + if (GetData(DATA_TEAM_IN_INSTANCE) == HORDE) return 0; break; default: @@ -730,7 +729,7 @@ class instance_icecrown_citadel : public InstanceMapScript case DATA_UPPERSPIRE_TELE_ACT: return UpperSpireTeleporterActiveState; case DATA_TEAM_IN_INSTANCE: - return TeamInInstance; + return instance->GetTeamInInstance(); case DATA_BLOOD_QUICKENING_STATE: return BloodQuickeningState; case DATA_HEROIC_ATTEMPTS: @@ -1025,7 +1024,7 @@ class instance_icecrown_citadel : public InstanceMapScript if (!GunshipGUID) { SetBossState(DATA_ICECROWN_GUNSHIP_BATTLE, NOT_STARTED); - uint32 gunshipEntry = TeamInInstance == HORDE ? GO_ORGRIMS_HAMMER_H : GO_THE_SKYBREAKER_A; + uint32 gunshipEntry = GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? GO_ORGRIMS_HAMMER_H : GO_THE_SKYBREAKER_A; if (Transport* gunship = sTransportMgr->CreateTransport(gunshipEntry, instance)) GunshipGUID = gunship->GetGUID(); } @@ -1101,7 +1100,7 @@ class instance_icecrown_citadel : public InstanceMapScript case DATA_FACTION_BUFF: IsFactionBuffActive = data ? true : false; if (!IsFactionBuffActive) - DoRemoveAurasDueToSpellOnPlayers(TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true); + DoRemoveAurasDueToSpellOnPlayers(GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true); break; case DATA_NERUBAR_BROODKEEPER_EVENT: { @@ -1424,7 +1423,7 @@ class instance_icecrown_citadel : public InstanceMapScript source->AddObjectToRemoveList(); break; case EVENT_ENEMY_GUNSHIP_COMBAT: - if (Creature* captain = source->FindNearestCreature(TeamInInstance == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) + if (Creature* captain = source->FindNearestCreature(GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) captain->AI()->DoAction(ACTION_ENEMY_GUNSHIP_TALK); [[fallthrough]]; case EVENT_PLAYERS_GUNSHIP_SPAWN: @@ -1434,7 +1433,7 @@ class instance_icecrown_citadel : public InstanceMapScript transport->EnableMovement(false); break; case EVENT_PLAYERS_GUNSHIP_SAURFANG: - if (Creature* captain = source->FindNearestCreature(TeamInInstance == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) + if (Creature* captain = source->FindNearestCreature(GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) captain->AI()->DoAction(ACTION_EXIT_SHIP); if (GameObject* go = source->ToGameObject()) if (Transport* transport = go->ToTransport()) @@ -1531,7 +1530,6 @@ class instance_icecrown_citadel : public InstanceMapScript ObjectGuid FrozenBolvarGUID; ObjectGuid PillarsChainedGUID; ObjectGuid PillarsUnchainedGUID; - Team TeamInInstance; uint32 ColdflameJetsState; uint32 UpperSpireTeleporterActiveState; std::unordered_set<ObjectGuid::LowType> FrostwyrmGUIDs; |