refactor(Core): Add definition file for area table entries. (#22054)

This commit is contained in:
Benjamin Jackson
2025-05-09 09:48:02 -04:00
committed by GitHub
parent db62fe8310
commit 52799d76f6
146 changed files with 866 additions and 656 deletions

View File

@@ -1300,15 +1300,15 @@ void World::SetInitialWorldSettings()
if (!sConfigMgr->isDryRun())
{
///- Check the existence of the map files for all starting areas.
if (!MapMgr::ExistMapAndVMap(0, -6240.32f, 331.033f)
|| !MapMgr::ExistMapAndVMap(0, -8949.95f, -132.493f)
|| !MapMgr::ExistMapAndVMap(1, -618.518f, -4251.67f)
|| !MapMgr::ExistMapAndVMap(0, 1676.35f, 1677.45f)
|| !MapMgr::ExistMapAndVMap(1, 10311.3f, 832.463f)
|| !MapMgr::ExistMapAndVMap(1, -2917.58f, -257.98f)
if (!MapMgr::ExistMapAndVMap(MAP_EASTERN_KINGDOMS, -6240.32f, 331.033f)
|| !MapMgr::ExistMapAndVMap(MAP_EASTERN_KINGDOMS, -8949.95f, -132.493f)
|| !MapMgr::ExistMapAndVMap(MAP_KALIMDOR, -618.518f, -4251.67f)
|| !MapMgr::ExistMapAndVMap(MAP_EASTERN_KINGDOMS, 1676.35f, 1677.45f)
|| !MapMgr::ExistMapAndVMap(MAP_KALIMDOR, 10311.3f, 832.463f)
|| !MapMgr::ExistMapAndVMap(MAP_KALIMDOR, -2917.58f, -257.98f)
|| (_int_configs[CONFIG_EXPANSION] && (
!MapMgr::ExistMapAndVMap(530, 10349.6f, -6357.29f) ||
!MapMgr::ExistMapAndVMap(530, -3961.64f, -13931.2f))))
!MapMgr::ExistMapAndVMap(MAP_OUTLAND, 10349.6f, -6357.29f) ||
!MapMgr::ExistMapAndVMap(MAP_OUTLAND, -3961.64f, -13931.2f))))
{
LOG_ERROR("server.loading", "Failed to find map files for starting areas");
exit(1);

View File

@@ -247,32 +247,32 @@ void WorldState::Update(uint32 diff)
}
}
void WorldState::HandlePlayerEnterZone(Player* player, WorldStateZoneId zoneId)
void WorldState::HandlePlayerEnterZone(Player* player, AreaTableIDs zoneId)
{
std::lock_guard<std::mutex> guard(_mutex);
switch (zoneId)
{
case ZONEID_SHATTRATH:
case ZONEID_BOTANICA:
case ZONEID_MECHANAR:
case ZONEID_ARCATRAZ:
case AREA_SHATTRATH_CITY:
case AREA_THE_BOTANICA:
case AREA_THE_MECHANAR:
case AREA_THE_ARCATRAZ:
if (_adalSongOfBattleTimer)
player->CastSpell(player, SPELL_ADAL_SONG_OF_BATTLE, true);
break;
case ZONEID_HELLFIRE_PENINSULA:
case ZONEID_HELLFIRE_RAMPARTS:
case ZONEID_HELLFIRE_CITADEL:
case ZONEID_BLOOD_FURNACE:
case ZONEID_SHATTERED_HALLS:
case ZONEID_MAGTHERIDON_LAIR:
case AREA_HELLFIRE_PENINSULA:
case AREA_HELLFIRE_RAMPARTS:
case AREA_HELLFIRE_CITADEL:
case AREA_THE_BLOOD_FURNACE:
case AREA_THE_SHATTERED_HALLS:
case AREA_MAGTHERIDONS_LAIR:
if (_isMagtheridonHeadSpawnedAlliance && player->GetTeamId() == TEAM_ALLIANCE)
player->CastSpell(player, SPELL_TROLLBANES_COMMAND, true);
else if (_isMagtheridonHeadSpawnedHorde && player->GetTeamId() == TEAM_HORDE)
player->CastSpell(player, SPELL_NAZGRELS_FAVOR, true);
break;
case ZONEID_ISLE_OF_QUEL_DANAS:
case ZONEID_MAGISTERS_TERRACE:
case ZONEID_SUNWELL_PLATEAU:
case AREA_ISLE_OF_QUEL_DANAS:
case AREA_MAGISTERS_TERRACE:
case AREA_SUNWELL_PLATEAU:
{
std::lock_guard<std::mutex> guard(m_sunsReachData.m_sunsReachReclamationMutex);
m_sunsReachData.m_sunsReachReclamationPlayers.push_back(player->GetGUID());
@@ -284,33 +284,32 @@ void WorldState::HandlePlayerEnterZone(Player* player, WorldStateZoneId zoneId)
break;
}
};
void WorldState::HandlePlayerLeaveZone(Player* player, WorldStateZoneId zoneId)
void WorldState::HandlePlayerLeaveZone(Player* player, AreaTableIDs zoneId)
{
std::lock_guard<std::mutex> guard(_mutex);
switch (zoneId)
{
case ZONEID_SHATTRATH:
case ZONEID_BOTANICA:
case ZONEID_MECHANAR:
case ZONEID_ARCATRAZ:
case AREA_SHATTRATH_CITY:
case AREA_THE_BOTANICA:
case AREA_THE_MECHANAR:
case AREA_THE_ARCATRAZ:
if (!_adalSongOfBattleTimer)
player->RemoveAurasDueToSpell(SPELL_ADAL_SONG_OF_BATTLE);
break;
case ZONEID_HELLFIRE_PENINSULA:
case ZONEID_HELLFIRE_RAMPARTS:
case ZONEID_HELLFIRE_CITADEL:
case ZONEID_BLOOD_FURNACE:
case ZONEID_SHATTERED_HALLS:
case ZONEID_MAGTHERIDON_LAIR:
case AREA_HELLFIRE_PENINSULA:
case AREA_HELLFIRE_RAMPARTS:
case AREA_HELLFIRE_CITADEL:
case AREA_THE_BLOOD_FURNACE:
case AREA_THE_SHATTERED_HALLS:
case AREA_MAGTHERIDONS_LAIR:
if (player->GetTeamId() == TEAM_ALLIANCE)
player->RemoveAurasDueToSpell(SPELL_TROLLBANES_COMMAND);
else if (player->GetTeamId() == TEAM_HORDE)
player->RemoveAurasDueToSpell(SPELL_NAZGRELS_FAVOR);
break;
case ZONEID_ISLE_OF_QUEL_DANAS:
case ZONEID_MAGISTERS_TERRACE:
case ZONEID_SUNWELL_PLATEAU:
case AREA_ISLE_OF_QUEL_DANAS:
case AREA_MAGISTERS_TERRACE:
case AREA_SUNWELL_PLATEAU:
{
std::lock_guard<std::mutex> guard(m_sunsReachData.m_sunsReachReclamationMutex);
player->RemoveAurasDueToSpell(SPELL_KIRU_SONG_OF_VICTORY);
@@ -330,19 +329,19 @@ void WorldState::BuffMagtheridonTeam(TeamId team)
{
switch (map->GetId())
{
case 530: // Outland
case MAP_OUTLAND:
map->DoForAllPlayers([&](Player* player)
{
if (player->GetZoneId() == ZONEID_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_ALLIANCE && team == TEAM_ALLIANCE)
if (player->GetZoneId() == AREA_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_ALLIANCE && team == TEAM_ALLIANCE)
player->CastSpell(player, SPELL_TROLLBANES_COMMAND, true);
else if (player->GetZoneId() == ZONEID_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_HORDE && team == TEAM_HORDE)
else if (player->GetZoneId() == AREA_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_HORDE && team == TEAM_HORDE)
player->CastSpell(player, SPELL_NAZGRELS_FAVOR, true);
});
break;
case 540: // The Shattered Halls
case 542: // The Blood Furnace
case 543: // Ramparts
case 544: // Magtheridon's Lair
case MAP_HELLFIRE_CITADEL_THE_SHATTERED_HALLS:
case MAP_HELLFIRE_CITADEL_THE_BLOOD_FURNACE:
case MAP_HELLFIRE_CITADEL_RAMPARTS:
case MAP_MAGTHERIDONS_LAIR:
map->DoForAllPlayers([&](Player* player)
{
if (player->GetTeamId() == TEAM_ALLIANCE && team == TEAM_ALLIANCE)
@@ -363,19 +362,19 @@ void WorldState::DispelMagtheridonTeam(TeamId team)
{
switch (map->GetId())
{
case 530: // Outland
case MAP_OUTLAND:
map->DoForAllPlayers([&](Player* player)
{
if (player->GetZoneId() == ZONEID_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_ALLIANCE && team == TEAM_ALLIANCE)
if (player->GetZoneId() == AREA_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_ALLIANCE && team == TEAM_ALLIANCE)
player->RemoveAurasDueToSpell(SPELL_TROLLBANES_COMMAND);
else if (player->GetZoneId() == ZONEID_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_HORDE && team == TEAM_HORDE)
else if (player->GetZoneId() == AREA_HELLFIRE_PENINSULA && player->GetTeamId() == TEAM_HORDE && team == TEAM_HORDE)
player->RemoveAurasDueToSpell(SPELL_NAZGRELS_FAVOR);
});
break;
case 540: // The Shattered Halls
case 542: // The Blood Furnace
case 543: // Ramparts
case 544: // Magtheridon's Lair
case MAP_HELLFIRE_CITADEL_THE_SHATTERED_HALLS:
case MAP_HELLFIRE_CITADEL_THE_BLOOD_FURNACE:
case MAP_HELLFIRE_CITADEL_RAMPARTS:
case MAP_MAGTHERIDONS_LAIR:
map->DoForAllPlayers([&](Player* player)
{
if (player->GetTeamId() == TEAM_ALLIANCE && team == TEAM_ALLIANCE)
@@ -396,16 +395,16 @@ void WorldState::BuffAdalsSongOfBattle()
{
switch (map->GetId())
{
case 530: // Outland
case MAP_OUTLAND:
map->DoForAllPlayers([&](Player* player)
{
if (player->GetZoneId() == ZONEID_SHATTRATH)
if (player->GetZoneId() == AREA_SHATTRATH_CITY)
player->CastSpell(player, SPELL_ADAL_SONG_OF_BATTLE, true);
});
break;
case 552: // Arcatraz
case 553: // Botanica
case 554: // Mechanar
case MAP_TEMPEST_KEEP_THE_ARCATRAZ:
case MAP_TEMPEST_KEEP_THE_BOTANICA:
case MAP_TEMPEST_KEEP_THE_MECHANAR:
map->DoForAllPlayers([&](Player* player)
{
player->CastSpell(player, SPELL_ADAL_SONG_OF_BATTLE, true);
@@ -423,16 +422,16 @@ void WorldState::DispelAdalsSongOfBattle()
{
switch (map->GetId())
{
case 530: // Outland
case MAP_OUTLAND:
map->DoForAllPlayers([&](Player* player)
{
if (player->GetZoneId() == ZONEID_SHATTRATH)
if (player->GetZoneId() == AREA_SHATTRATH_CITY)
player->RemoveAurasDueToSpell(SPELL_ADAL_SONG_OF_BATTLE);
});
break;
case 552: // Arcatraz
case 553: // Botanica
case 554: // Mechanar
case MAP_TEMPEST_KEEP_THE_ARCATRAZ:
case MAP_TEMPEST_KEEP_THE_BOTANICA:
case MAP_TEMPEST_KEEP_THE_MECHANAR:
map->DoForAllPlayers([&](Player* player)
{
player->RemoveAurasDueToSpell(SPELL_ADAL_SONG_OF_BATTLE);
@@ -823,22 +822,22 @@ void WorldState::StartSunsReachPhase(bool initial)
{
case SUNS_REACH_PHASE_1_STAGING_AREA:
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_1);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(530))
map->SetZoneWeather(ZONEID_ISLE_OF_QUEL_DANAS, WEATHER_STATE_MEDIUM_RAIN, 0.75f);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(MAP_OUTLAND))
map->SetZoneWeather(AREA_ISLE_OF_QUEL_DANAS, WEATHER_STATE_MEDIUM_RAIN, 0.75f);
break;
case SUNS_REACH_PHASE_2_SANCTUM:
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_2_ONLY);
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_2_PERMANENT);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(530))
map->SetZoneWeather(ZONEID_ISLE_OF_QUEL_DANAS, WEATHER_STATE_LIGHT_RAIN, 0.5f);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(MAP_OUTLAND))
map->SetZoneWeather(AREA_ISLE_OF_QUEL_DANAS, WEATHER_STATE_LIGHT_RAIN, 0.5f);
break;
case SUNS_REACH_PHASE_3_ARMORY:
if (initial)
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_2_PERMANENT);
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_3_ONLY); sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_3_PERMANENT);
// TODO: Should be id 2 0.25f?
if (Map* map = sMapMgr->FindBaseNonInstanceMap(530))
map->SetZoneWeather(ZONEID_ISLE_OF_QUEL_DANAS, WEATHER_STATE_LIGHT_RAIN, 0.25f);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(MAP_OUTLAND))
map->SetZoneWeather(AREA_ISLE_OF_QUEL_DANAS, WEATHER_STATE_LIGHT_RAIN, 0.25f);
break;
case SUNS_REACH_PHASE_4_HARBOR:
if (initial)
@@ -847,8 +846,8 @@ void WorldState::StartSunsReachPhase(bool initial)
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_3_PERMANENT);
}
sGameEventMgr->StartEvent(GAME_EVENT_QUEL_DANAS_PHASE_4);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(530))
map->SetZoneWeather(ZONEID_ISLE_OF_QUEL_DANAS, WEATHER_STATE_FINE, 0.0f);
if (Map* map = sMapMgr->FindBaseNonInstanceMap(MAP_OUTLAND))
map->SetZoneWeather(AREA_ISLE_OF_QUEL_DANAS, WEATHER_STATE_FINE, 0.0f);
break;
default: break;
}
@@ -1092,10 +1091,10 @@ void WorldState::FillInitialWorldStates(WorldPackets::WorldState::InitWorldState
{
switch (zoneId)
{
case ZONEID_ISLE_OF_QUEL_DANAS:
case ZONEID_MAGISTERS_TERRACE:
case ZONEID_SUNWELL_PLATEAU:
case ZONEID_SHATTRATH:
case AREA_ISLE_OF_QUEL_DANAS:
case AREA_MAGISTERS_TERRACE:
case AREA_SUNWELL_PLATEAU:
case AREA_SHATTRATH_CITY:
{
// Sunwell Reclamation
switch (m_sunsReachData.m_phase)

View File

@@ -18,6 +18,7 @@
#ifndef WORLD_STATE_H
#define WORLD_STATE_H
#include "AreaDefines.h"
#include "Player.h"
#include <atomic>
@@ -43,25 +44,6 @@ enum WorldStateEvent
WORLD_STATE_CUSTOM_EVENT_ON_MAGTHERIDON_HEAD_DESPAWN = 184641,
};
enum WorldStateZoneId
{
ZONEID_SHATTRATH = 3703,
ZONEID_BOTANICA = 3847,
ZONEID_ARCATRAZ = 3848,
ZONEID_MECHANAR = 3849,
ZONEID_HELLFIRE_PENINSULA = 3483,
ZONEID_HELLFIRE_RAMPARTS = 3562,
ZONEID_HELLFIRE_CITADEL = 3563,
ZONEID_BLOOD_FURNACE = 3713,
ZONEID_SHATTERED_HALLS = 3714,
ZONEID_MAGTHERIDON_LAIR = 3836,
ZONEID_ISLE_OF_QUEL_DANAS = 4080,
ZONEID_MAGISTERS_TERRACE = 4131,
ZONEID_SUNWELL_PLATEAU = 4075,
};
enum WorldStateSpells
{
SPELL_ADAL_SONG_OF_BATTLE = 39953,
@@ -182,8 +164,8 @@ class WorldState
[[nodiscard]] uint64 getWorldState(uint32 index) const;
void Save(WorldStateSaveIds saveId);
void SaveHelper(std::string& stringToSave, WorldStateSaveIds saveId);
void HandlePlayerEnterZone(Player* player, WorldStateZoneId zoneId);
void HandlePlayerLeaveZone(Player* player, WorldStateZoneId zoneId);
void HandlePlayerEnterZone(Player* player, AreaTableIDs zoneId);
void HandlePlayerLeaveZone(Player* player, AreaTableIDs zoneId);
bool IsConditionFulfilled(WorldStateCondition conditionId, WorldStateConditionState state = WORLD_STATE_CONDITION_STATE_NONE) const;
void HandleConditionStateChange(WorldStateCondition conditionId, WorldStateConditionState state);
void HandleExternalEvent(WorldStateEvent eventId, uint32 param);