aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-07-24 20:11:24 +0200
committerShauren <shauren.trinity@gmail.com>2022-07-24 20:11:24 +0200
commitc1eb91c1c174870026cf4750bafc8d04d182ade0 (patch)
treeea035c134460e4c16c630356f5f8bcfdedf55ae4 /src
parent071be5a0861924521da5df1ce6fc35ee5a7089d4 (diff)
Core/WorldStates: Add generic worldstates for team in instance
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Maps/Map.cpp14
-rw-r--r--src/server/game/Maps/Map.h5
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp58
4 files changed, 46 insertions, 34 deletions
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;