diff options
author | Carbenium <carbenium@outlook.com> | 2020-06-22 16:10:34 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-01-07 00:20:57 +0100 |
commit | 49523a74a4c28e5ae17f9a8352aa8224b765b7d8 (patch) | |
tree | 829e998508b4320f305bc9e4891ec7116c4005fd /src | |
parent | a26cc135fa34e0e4aa0c244c4c4b4bec4c25d709 (diff) |
Battlefields: Move BF scripts out of game
This commit introduces the usual script interface
for battlefields.
(cherry picked from commit f7faf20254a120a90b8ee8eb55a284a6351aabc3)
Diffstat (limited to 'src')
14 files changed, 278 insertions, 189 deletions
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 192340e7e31..f1013ae7365 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -25,8 +25,9 @@ enum BattlefieldTypes { - BATTLEFIELD_WG, // Wintergrasp - BATTLEFIELD_TB // Tol Barad (cataclysm) + BATTLEFIELD_WG = 1, // Wintergrasp + BATTLEFIELD_TB = 2, // Tol Barad (cataclysm) + BATTLEFIELD_MAX }; enum BattlefieldIDs diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp index 2498678c3e2..5f42b90b22b 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.cpp +++ b/src/server/game/Battlefield/BattlefieldMgr.cpp @@ -16,10 +16,11 @@ */ #include "BattlefieldMgr.h" -#include "BattlefieldWG.h" -#include "BattlefieldTB.h" +#include "DatabaseEnv.h" +#include "ObjectMgr.h" #include "Log.h" #include "Player.h" +#include "ScriptMgr.h" BattlefieldMgr::BattlefieldMgr() { @@ -42,31 +43,44 @@ BattlefieldMgr* BattlefieldMgr::instance() void BattlefieldMgr::InitBattlefield() { - Battlefield* wg = new BattlefieldWG(); - // respawn, init variables - if (!wg->SetupBattlefield()) - { - TC_LOG_INFO("bg.battlefield", "Battlefield: Wintergrasp init failed."); - delete wg; - } - else - { - _battlefieldSet.push_back(wg); - TC_LOG_INFO("bg.battlefield", "Battlefield: Wintergrasp successfully initiated."); - } + uint32 oldMSTime = getMSTime(); - Battlefield* tb = new BattlefieldTB; - // respawn, init variables - if (!tb->SetupBattlefield()) - { - TC_LOG_DEBUG("bg.battlefield", "Battlefield: Tol Barad init failed."); - delete tb; - } - else + uint32 count = 0; + + if (QueryResult result = WorldDatabase.Query("SELECT TypeId, ScriptName FROM battlefield_template")) { - _battlefieldSet.push_back(tb); - TC_LOG_DEBUG("bg.battlefield", "Battlefield: Tol Barad successfully initiated."); + do + { + Field* fields = result->Fetch(); + + uint32 typeId = fields[0].GetUInt8(); + + if (typeId >= BATTLEFIELD_MAX) + { + TC_LOG_ERROR("sql.sql", "BattlefieldMgr::InitBattlefield: Invalid TypeId value %u in battlefield_template, skipped.", typeId); + continue; + } + + uint32 scriptId = sObjectMgr->GetScriptId(fields[1].GetString()); + + Battlefield* bf = sScriptMgr->CreateBattlefield(scriptId); + + if (!bf->SetupBattlefield()) + { + TC_LOG_INFO("bg.battlefield", "Setting up battlefield with TypeId %u failed.", typeId); + delete bf; + } + else + { + _battlefieldSet.push_back(bf); + TC_LOG_INFO("bg.battlefield", "Setting up battlefield with TypeId %u succeeded.", typeId); + } + + ++count; + } while (result->NextRow()); } + + TC_LOG_INFO("server.loading", ">> Loaded %u battlefields in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } void BattlefieldMgr::AddZone(uint32 zoneId, Battlefield* bf) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ff8711ade2c..70ca1340b31 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -26,8 +26,6 @@ #include "Bag.h" #include "Battlefield.h" #include "BattlefieldMgr.h" -#include "BattlefieldTB.h" -#include "BattlefieldWG.h" #include "Battleground.h" #include "BattlegroundMgr.h" #include "BattlegroundPackets.h" @@ -9747,11 +9745,11 @@ void Player::SendInitWorldStates(uint32 zoneId, uint32 areaId) case 5389: // Tol Barad Peninsula if (sWorld->getBoolConfig(CONFIG_TOLBARAD_ENABLE)) { - packet.Worldstates.emplace_back(5385u, sWorld->getWorldState(5385)); // TB_WS_ALLIANCE_CONTROLS_SHOW - packet.Worldstates.emplace_back(5384u, sWorld->getWorldState(5384)); // TB_WS_HORDE_CONTROLS_SHOW - packet.Worldstates.emplace_back(5387u, sWorld->getWorldState(5387)); // TB_WS_TIME_NEXT_BATTLE_SHOW - packet.Worldstates.emplace_back(5546u, sWorld->getWorldState(5546)); // TB_WS_ALLIANCE_ATTACKING_SHOW - packet.Worldstates.emplace_back(5547u, sWorld->getWorldState(5547)); // TB_WS_HORDE_ATTACKING_SHOW + packet.Worldstates.emplace_back(WS_BATTLEFIELD_TB_ALLIANCE_CONTROLS_SHOW, sWorld->getWorldState(WS_BATTLEFIELD_TB_ALLIANCE_CONTROLS_SHOW)); + packet.Worldstates.emplace_back(WS_BATTLEFIELD_TB_HORDE_CONTROLS_SHOW, sWorld->getWorldState(WS_BATTLEFIELD_TB_HORDE_CONTROLS_SHOW)); + packet.Worldstates.emplace_back(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE_SHOW, sWorld->getWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE_SHOW)); + packet.Worldstates.emplace_back(WS_BATTLEFIELD_TB_ALLIANCE_ATTACKING_SHOW, sWorld->getWorldState(WS_BATTLEFIELD_TB_ALLIANCE_ATTACKING_SHOW)); + packet.Worldstates.emplace_back(WS_BATTLEFIELD_TB_HORDE_ATTACKING_SHOW, sWorld->getWorldState(WS_BATTLEFIELD_TB_HORDE_ATTACKING_SHOW)); } break; case 5095: // Tol Barad @@ -9791,7 +9789,7 @@ void Player::SendBattlefieldWorldStates() const { SendUpdateWorldState(WS_BATTLEFIELD_WG_ACTIVE, wg->IsWarTime() ? 0 : 1); uint32 timer = wg->IsWarTime() ? 0 : (wg->GetTimer() / 1000); // 0 - Time to next battle - SendUpdateWorldState(ClockWorldState[1], uint32(GameTime::GetGameTime() + timer)); + SendUpdateWorldState(WS_BATTLEFIELD_WG_TIME_NEXT_BATTLE, uint32(GameTime::GetGameTime() + timer)); } } @@ -9799,10 +9797,10 @@ void Player::SendBattlefieldWorldStates() const { if (Battlefield* tb = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_TB)) { - SendUpdateWorldState(TB_WS_FACTION_CONTROLLING, uint32(tb->GetDefenderTeam() + 1)); + SendUpdateWorldState(WS_BATTLEFIELD_TB_FACTION_CONTROLLING, uint32(tb->GetDefenderTeam() + 1)); uint32 timer = tb->GetTimer() / 1000; - SendUpdateWorldState(TB_WS_TIME_BATTLE_END, uint32(tb->IsWarTime() ? uint32(GameTime::GetGameTime() + timer) : 0)); - SendUpdateWorldState(TB_WS_TIME_NEXT_BATTLE, uint32(!tb->IsWarTime() ? uint32(GameTime::GetGameTime() + timer) : 0)); + SendUpdateWorldState(WS_BATTLEFIELD_TB_TIME_BATTLE_END, uint32(tb->IsWarTime() ? uint32(GameTime::GetGameTime() + timer) : 0)); + SendUpdateWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE, uint32(!tb->IsWarTime() ? uint32(GameTime::GetGameTime() + timer) : 0)); } } } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 7093f1831aa..585a8a252d1 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7719,6 +7719,76 @@ enum WorldState : uint32 WS_BATTLEFIELD_WG_DEFENDED_A = 4025, WS_BATTLEFIELD_WG_TIME_NEXT_BATTLE = 4354, + WS_BATTLEFIELD_TB_ALLIANCE_CONTROLS_SHOW = 5385, + WS_BATTLEFIELD_TB_HORDE_CONTROLS_SHOW = 5384, + WS_BATTLEFIELD_TB_ALLIANCE_ATTACKING_SHOW = 5546, + WS_BATTLEFIELD_TB_HORDE_ATTACKING_SHOW = 5547, + + WS_BATTLEFIELD_TB_BUILDINGS_CAPTURED = 5348, + WS_BATTLEFIELD_TB_BUILDINGS_CAPTURED_SHOW = 5349, + WS_BATTLEFIELD_TB_TOWERS_DESTROYED = 5347, + WS_BATTLEFIELD_TB_TOWERS_DESTROYED_SHOW = 5350, + + WS_BATTLEFIELD_TB_FACTION_CONTROLLING = 5334, // 1 -> Alliance, 2 -> Horde + + WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE = 5332, + WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE_SHOW = 5387, + WS_BATTLEFIELD_TB_TIME_BATTLE_END = 5333, + WS_BATTLEFIELD_TB_TIME_BATTLE_END_SHOW = 5346, + + WS_BATTLEFIELD_TB_STATE_PREPARATIONS = 5684, + WS_BATTLEFIELD_TB_STATE_BATTLE = 5344, + + WS_BATTLEFIELD_TB_PROGRESS_SHOW = 5376, + WS_BATTLEFIELD_TB_PROGRESS = 5377, // 0 horde, 100 alliance + WS_BATTLEFIELD_TB_PROGRESS_PERCENT_GREY = 5378, + + WS_BATTLEFIELD_TB_KEEP_HORDE = 5469, + WS_BATTLEFIELD_TB_KEEP_ALLIANCE = 5470, + + WS_BATTLEFIELD_TB_GARRISON_HORDE_CONTROLLED = 5418, + WS_BATTLEFIELD_TB_GARRISON_HORDE_CAPTURING = 5419, + WS_BATTLEFIELD_TB_GARRISON_NEUTRAL = 5420, // unused + WS_BATTLEFIELD_TB_GARRISON_ALLIANCE_CAPTURING = 5421, + WS_BATTLEFIELD_TB_GARRISON_ALLIANCE_CONTROLLED = 5422, + + WS_BATTLEFIELD_TB_VIGIL_HORDE_CONTROLLED = 5423, + WS_BATTLEFIELD_TB_VIGIL_HORDE_CAPTURING = 5424, + WS_BATTLEFIELD_TB_VIGIL_NEUTRAL = 5425, // unused + WS_BATTLEFIELD_TB_VIGIL_ALLIANCE_CAPTURING = 5426, + WS_BATTLEFIELD_TB_VIGIL_ALLIANCE_CONTROLLED = 5427, + + WS_BATTLEFIELD_TB_SLAGWORKS_HORDE_CONTROLLED = 5428, + WS_BATTLEFIELD_TB_SLAGWORKS_HORDE_CAPTURING = 5429, + WS_BATTLEFIELD_TB_SLAGWORKS_NEUTRAL = 5430, // unused + WS_BATTLEFIELD_TB_SLAGWORKS_ALLIANCE_CAPTURING = 5431, + WS_BATTLEFIELD_TB_SLAGWORKS_ALLIANCE_CONTROLLED = 5432, + + WS_BATTLEFIELD_TB_WEST_INTACT_HORDE = 5433, + WS_BATTLEFIELD_TB_WEST_DAMAGED_HORDE = 5434, + WS_BATTLEFIELD_TB_WEST_DESTROYED_NEUTRAL = 5435, + WS_BATTLEFIELD_TB_WEST_INTACT_ALLIANCE = 5436, + WS_BATTLEFIELD_TB_WEST_DAMAGED_ALLIANCE = 5437, + WS_BATTLEFIELD_TB_WEST_INTACT_NEUTRAL = 5453, // unused + WS_BATTLEFIELD_TB_WEST_DAMAGED_NEUTRAL = 5454, // unused + + WS_BATTLEFIELD_TB_SOUTH_INTACT_HORDE = 5438, + WS_BATTLEFIELD_TB_SOUTH_DAMAGED_HORDE = 5439, + WS_BATTLEFIELD_TB_SOUTH_DESTROYED_NEUTRAL = 5440, + WS_BATTLEFIELD_TB_SOUTH_INTACT_ALLIANCE = 5441, + WS_BATTLEFIELD_TB_SOUTH_DAMAGED_ALLIANCE = 5442, + WS_BATTLEFIELD_TB_SOUTH_INTACT_NEUTRAL = 5455, // unused + WS_BATTLEFIELD_TB_SOUTH_DAMAGED_NEUTRAL = 5456, // unused + + WS_BATTLEFIELD_TB_EAST_INTACT_HORDE = 5443, + WS_BATTLEFIELD_TB_EAST_DAMAGED_HORDE = 5444, + WS_BATTLEFIELD_TB_EAST_DESTROYED_NEUTRAL = 5445, + WS_BATTLEFIELD_TB_EAST_INTACT_ALLIANCE = 5446, + WS_BATTLEFIELD_TB_EAST_DAMAGED_ALLIANCE = 5447, + WS_BATTLEFIELD_TB_EAST_INTACT_NEUTRAL = 5451, + WS_BATTLEFIELD_TB_EAST_DAMAGED_NEUTRAL = 5452, + + WS_CURRENCY_RESET_TIME = 20001, // Next arena distribution time WS_WEEKLY_QUEST_RESET_TIME = 20002, // Next weekly quest reset time WS_BG_DAILY_RESET_TIME = 20003, // Next daily BG reset time diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 038aa13a952..6eb82ae349a 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -85,6 +85,10 @@ struct is_script_database_bound<AreaTriggerScript> : std::true_type { }; template<> +struct is_script_database_bound<BattlefieldScript> + : std::true_type { }; + +template<> struct is_script_database_bound<BattlegroundScript> : std::true_type { }; @@ -724,6 +728,11 @@ class ScriptRegistrySwapHooks<AreaTriggerEntityScript, Base> AreaTrigger, AreaTriggerEntityScript, Base > { }; +/// This hook is responsible for swapping BattlefieldScripts +template<typename Base> +class ScriptRegistrySwapHooks<BattlefieldScript, Base> + : public UnsupportedScriptRegistrySwapHooks<Base> { }; + /// This hook is responsible for swapping BattlegroundScript's template<typename Base> class ScriptRegistrySwapHooks<BattlegroundScript, Base> @@ -1720,6 +1729,12 @@ bool ScriptMgr::OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger, b return entered ? tmpscript->OnTrigger(player, trigger) : tmpscript->OnExit(player, trigger); } +Battlefield* ScriptMgr::CreateBattlefield(uint32 scriptId) +{ + GET_SCRIPT_RET(BattlefieldScript, scriptId, tmpscript, nullptr); + return tmpscript->GetBattlefield(); +} + Battleground* ScriptMgr::CreateBattleground(BattlegroundTypeId /*typeId*/) { /// @todo Implement script-side battlegrounds. @@ -2437,6 +2452,12 @@ bool OnlyOnceAreaTriggerScript::OnTrigger(Player* player, AreaTriggerEntry const void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(InstanceScript* script, uint32 triggerId) { script->ResetAreaTriggerDone(triggerId); } void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(Player const* player, AreaTriggerEntry const* trigger) { if (InstanceScript* instance = player->GetInstanceScript()) ResetAreaTriggerDone(instance, trigger->ID); } +BattlefieldScript::BattlefieldScript(char const* name) + : ScriptObject(name) +{ + ScriptRegistry<BattlefieldScript>::Instance()->AddScript(this); +} + BattlegroundScript::BattlegroundScript(char const* name) : ScriptObject(name) { @@ -2557,6 +2578,7 @@ template class TC_GAME_API ScriptRegistry<ItemScript>; template class TC_GAME_API ScriptRegistry<CreatureScript>; template class TC_GAME_API ScriptRegistry<GameObjectScript>; template class TC_GAME_API ScriptRegistry<AreaTriggerScript>; +template class TC_GAME_API ScriptRegistry<BattlefieldScript>; template class TC_GAME_API ScriptRegistry<BattlegroundScript>; template class TC_GAME_API ScriptRegistry<OutdoorPvPScript>; template class TC_GAME_API ScriptRegistry<CommandScript>; diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 20f7ca37715..e8694f64f70 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -28,6 +28,7 @@ class AreaTriggerAI; class AuctionHouseObject; class Aura; class AuraScript; +class Battlefield; class Battleground; class BattlegroundMap; class Channel; @@ -470,6 +471,17 @@ class TC_GAME_API OnlyOnceAreaTriggerScript : public AreaTriggerScript void ResetAreaTriggerDone(Player const* player, AreaTriggerEntry const* trigger); }; +class TC_GAME_API BattlefieldScript : public ScriptObject +{ + protected: + + BattlefieldScript(char const* name); + + public: + + virtual Battlefield* GetBattlefield() const = 0; +}; + class TC_GAME_API BattlegroundScript : public ScriptObject { protected: @@ -1016,6 +1028,10 @@ class TC_GAME_API ScriptMgr bool OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger, bool entered); + public: /* BattlefieldScript */ + + Battlefield* CreateBattlefield(uint32 scriptId); + public: /* BattlegroundScript */ Battleground* CreateBattleground(BattlegroundTypeId typeId); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index cc830ac492a..f04b788fd70 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -17,7 +17,6 @@ #include "SpellMgr.h" #include "BattlefieldMgr.h" -#include "BattlefieldWG.h" #include "BattlegroundMgr.h" #include "Chat.h" #include "Containers.h" diff --git a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp b/src/server/scripts/Battlefield/BattlefieldTB.cpp index d40d794506d..e147689d610 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp +++ b/src/server/scripts/Battlefield/BattlefieldTB.cpp @@ -33,6 +33,7 @@ #include "ObjectAccessor.h" #include "Player.h" #include "Random.h" +#include "ScriptMgr.h" #include "SpellAuras.h" #include "TemporarySummon.h" #include "World.h" @@ -77,18 +78,18 @@ bool BattlefieldTB::SetupBattlefield() m_updateObjectsTimer = 0; // Was there a battle going on or time isn't set yet? Then use m_RestartAfterCrash - if (sWorld->getWorldState(TB_WS_STATE_BATTLE) == 1 || sWorld->getWorldState(TB_WS_TIME_NEXT_BATTLE) == 0) - sWorld->setWorldState(TB_WS_TIME_NEXT_BATTLE, m_RestartAfterCrash); + if (sWorld->getWorldState(WS_BATTLEFIELD_TB_STATE_BATTLE) == 1 || sWorld->getWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE) == 0) + sWorld->setWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE, m_RestartAfterCrash); // Set timer - m_Timer = sWorld->getWorldState(TB_WS_TIME_NEXT_BATTLE); + m_Timer = sWorld->getWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE); // Defending team isn't set yet? Choose randomly. - if (sWorld->getWorldState(TB_WS_FACTION_CONTROLLING) == 0) - sWorld->setWorldState(TB_WS_FACTION_CONTROLLING, uint32(urand(1, 2))); + if (sWorld->getWorldState(WS_BATTLEFIELD_TB_FACTION_CONTROLLING) == 0) + sWorld->setWorldState(WS_BATTLEFIELD_TB_FACTION_CONTROLLING, uint32(urand(1, 2))); // Set defender team - SetDefenderTeam(TeamId(sWorld->getWorldState(TB_WS_FACTION_CONTROLLING) - 1)); + SetDefenderTeam(TeamId(sWorld->getWorldState(WS_BATTLEFIELD_TB_FACTION_CONTROLLING) - 1)); // Just to save world states SendInitWorldStatesToAll(); @@ -181,7 +182,7 @@ bool BattlefieldTB::Update(uint32 diff) if (m_saveTimer <= diff) { if (!IsWarTime()) - sWorld->setWorldState(TB_WS_TIME_NEXT_BATTLE, m_Timer); + sWorld->setWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE, m_Timer); m_saveTimer = 60 * IN_MILLISECONDS; } else @@ -232,16 +233,16 @@ void BattlefieldTB::RemoveAurasFromPlayer(Player* player) // 62 fields, [7]-[68] void BattlefieldTB::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) { - packet.Worldstates.emplace_back(uint32(TB_WS_ALLIANCE_ATTACKING_SHOW), int32(IsWarTime() && GetAttackerTeam() == TEAM_ALLIANCE ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_HORDE_ATTACKING_SHOW), int32(IsWarTime() && GetAttackerTeam() == TEAM_HORDE ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_ALLIANCE_ATTACKING_SHOW), int32(IsWarTime() && GetAttackerTeam() == TEAM_ALLIANCE ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_HORDE_ATTACKING_SHOW), int32(IsWarTime() && GetAttackerTeam() == TEAM_HORDE ? 1 : 0)); // Not sure if TB - //packet.Worldstates.emplace_back(uint32(TB_WS_9_UNKNOWN), int32(1)); + //packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_9_UNKNOWN), int32(1)); - packet.Worldstates.emplace_back(uint32(TB_WS_SOUTH_DAMAGED_NEUTRAL), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_SOUTH_INTACT_NEUTRAL), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_SOUTH_DAMAGED_NEUTRAL), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_SOUTH_INTACT_NEUTRAL), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_PROGRESS_SHOW), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_PROGRESS_SHOW), int32(0)); // Buildings/bases for (BfCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) @@ -298,26 +299,26 @@ void BattlefieldTB::FillInitialWorldStates(WorldPackets::WorldState::InitWorldSt packet.Worldstates.emplace_back(uint32(TBCapturePoints[i].wsControlled[TEAM_HORDE]), int32(team == TEAM_HORDE && controlled ? 1 : 0)); } - packet.Worldstates.emplace_back(uint32(TB_WS_TOWERS_DESTROYED_SHOW), int32(GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED))); - packet.Worldstates.emplace_back(uint32(TB_WS_BUILDINGS_CAPTURED_SHOW), int32(IsWarTime() ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_BUILDINGS_CAPTURED), int32(GetData(BATTLEFIELD_TB_DATA_BUILDINGS_CAPTURED))); - packet.Worldstates.emplace_back(uint32(TB_WS_TOWERS_DESTROYED), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_TOWERS_DESTROYED_SHOW), int32(GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED))); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_BUILDINGS_CAPTURED_SHOW), int32(IsWarTime() ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_BUILDINGS_CAPTURED), int32(GetData(BATTLEFIELD_TB_DATA_BUILDINGS_CAPTURED))); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_TOWERS_DESTROYED), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_TIME_BATTLE_END_SHOW), int32(IsWarTime() ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_TIME_BATTLE_END_SHOW), int32(IsWarTime() ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_STATE_BATTLE), int32(IsWarTime() ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_STATE_PREPARATIONS), int32(GetState() == BATTLEFIELD_WARMUP ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_STATE_BATTLE), int32(IsWarTime() ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_STATE_PREPARATIONS), int32(GetState() == BATTLEFIELD_WARMUP ? 1 : 0)); // Not sure if TB - //packet.Worldstates.emplace_back(uint32(TB_WS_35_UNKNOWN), int32(0)); - //packet.Worldstates.emplace_back(uint32(TB_WS_36_UNKNOWN), int32(0)); - //packet.Worldstates.emplace_back(uint32(TB_WS_37_UNKNOWN), int32(0)); + //packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_35_UNKNOWN), int32(0)); + //packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_36_UNKNOWN), int32(0)); + //packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_37_UNKNOWN), int32(0)); // Unused tower icons - packet.Worldstates.emplace_back(uint32(TB_WS_WEST_DAMAGED_NEUTRAL), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_WEST_INTACT_NEUTRAL), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_EAST_DAMAGED_NEUTRAL), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_EAST_INTACT_NEUTRAL), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_WEST_DAMAGED_NEUTRAL), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_WEST_INTACT_NEUTRAL), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_EAST_DAMAGED_NEUTRAL), int32(0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_EAST_INTACT_NEUTRAL), int32(0)); // Towers/spires for (uint8 i = 0; i < TB_TOWERS_COUNT; i++) @@ -342,20 +343,20 @@ void BattlefieldTB::FillInitialWorldStates(WorldPackets::WorldState::InitWorldSt } } - packet.Worldstates.emplace_back(uint32(TB_WS_TIME_NEXT_BATTLE_SHOW), int32(!IsWarTime() ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE_SHOW), int32(!IsWarTime() ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_ALLIANCE_CONTROLS_SHOW), int32(!IsWarTime() && GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_HORDE_CONTROLS_SHOW), int32(!IsWarTime() && GetDefenderTeam() == TEAM_HORDE ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_ALLIANCE_CONTROLS_SHOW), int32(!IsWarTime() && GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_HORDE_CONTROLS_SHOW), int32(!IsWarTime() && GetDefenderTeam() == TEAM_HORDE ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_TIME_BATTLE_END), int32(IsWarTime() ? GameTime::GetGameTime() + (m_Timer / 1000) : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_TIME_NEXT_BATTLE), int32(!IsWarTime() ? GameTime::GetGameTime() + (m_Timer / 1000) : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_TIME_BATTLE_END), int32(IsWarTime() ? GameTime::GetGameTime() + (m_Timer / 1000) : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE), int32(!IsWarTime() ? GameTime::GetGameTime() + (m_Timer / 1000) : 0)); // Not sure if TB - //packet.Worldstates.emplace_back(uint32(TB_WS_65_UNKNOWN), int32(0)); - //packet.Worldstates.emplace_back(uint32(TB_WS_66_UNKNOWN), int32(0)); + //packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_65_UNKNOWN), int32(0)); + //packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_66_UNKNOWN), int32(0)); - packet.Worldstates.emplace_back(uint32(TB_WS_KEEP_ALLIANCE), int32(GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0)); - packet.Worldstates.emplace_back(uint32(TB_WS_KEEP_HORDE), int32(GetDefenderTeam() == TEAM_HORDE ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_KEEP_ALLIANCE), int32(GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0)); + packet.Worldstates.emplace_back(uint32(WS_BATTLEFIELD_TB_KEEP_HORDE), int32(GetDefenderTeam() == TEAM_HORDE ? 1 : 0)); } void BattlefieldTB::SendInitWorldStatesTo(Player* player) @@ -373,13 +374,13 @@ void BattlefieldTB::SendInitWorldStatesTo(Player* player) void BattlefieldTB::SendInitWorldStatesToAll() { // Save - sWorld->setWorldState(TB_WS_STATE_BATTLE, uint32(IsWarTime() ? 1 : 0)); - sWorld->setWorldState(TB_WS_ALLIANCE_CONTROLS_SHOW, uint32(!IsWarTime() && GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0)); - sWorld->setWorldState(TB_WS_HORDE_CONTROLS_SHOW, uint32(!IsWarTime() && GetDefenderTeam() == TEAM_HORDE ? 1 : 0)); - sWorld->setWorldState(TB_WS_ALLIANCE_ATTACKING_SHOW, uint32(IsWarTime() && GetAttackerTeam() == TEAM_ALLIANCE ? 1 : 0)); - sWorld->setWorldState(TB_WS_HORDE_ATTACKING_SHOW, uint32(IsWarTime() && GetAttackerTeam() == TEAM_HORDE ? 1 : 0)); - sWorld->setWorldState(TB_WS_TIME_NEXT_BATTLE, uint32(!IsWarTime() ? m_Timer : 0)); - sWorld->setWorldState(TB_WS_TIME_NEXT_BATTLE_SHOW, uint32(!IsWarTime() ? 1 : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_STATE_BATTLE, uint32(IsWarTime() ? 1 : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_ALLIANCE_CONTROLS_SHOW, uint32(!IsWarTime() && GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_HORDE_CONTROLS_SHOW, uint32(!IsWarTime() && GetDefenderTeam() == TEAM_HORDE ? 1 : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_ALLIANCE_ATTACKING_SHOW, uint32(IsWarTime() && GetAttackerTeam() == TEAM_ALLIANCE ? 1 : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_HORDE_ATTACKING_SHOW, uint32(IsWarTime() && GetAttackerTeam() == TEAM_HORDE ? 1 : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE, uint32(!IsWarTime() ? m_Timer : 0)); + sWorld->setWorldState(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE_SHOW, uint32(!IsWarTime() ? 1 : 0)); // Tol Barad for (uint8 team = 0; team < PVP_TEAMS_COUNT; team++) @@ -399,7 +400,7 @@ void BattlefieldTB::OnStartGrouping() { UpdateNPCsAndGameObjects(); - SendUpdateWorldState(TB_WS_STATE_PREPARATIONS, uint32(1)); + SendUpdateWorldState(WS_BATTLEFIELD_TB_STATE_PREPARATIONS, uint32(1)); // Teleport players out of questing area for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team) @@ -746,12 +747,12 @@ void BattlefieldTB::TowerDestroyed(TBTowerId tbTowerId) // Add 5 minute bonus time m_Timer += m_BonusTime; - SendUpdateWorldState(TB_WS_TIME_BATTLE_END, uint32(GameTime::GetGameTime() + (m_Timer / 1000))); + SendUpdateWorldState(WS_BATTLEFIELD_TB_TIME_BATTLE_END, uint32(GameTime::GetGameTime() + (m_Timer / 1000))); SendWarning(TBTowers[tbTowerId].textDamaged); SetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED) + 1); - SendUpdateWorldState(uint32(TB_WS_TOWERS_DESTROYED), int32(GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED))); + SendUpdateWorldState(uint32(WS_BATTLEFIELD_TB_TOWERS_DESTROYED), int32(GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED))); SendUpdateWorldState(uint32(TBTowers[tbTowerId].wsDamaged[GetDefenderTeam()]), int32(0)); SendUpdateWorldState(uint32(TBTowers[tbTowerId].wsDestroyed), int32(1)); @@ -774,7 +775,7 @@ void BattlefieldTB::UpdateCapturedBaseCount() numCapturedBases += 1; SetData(BATTLEFIELD_TB_DATA_BUILDINGS_CAPTURED, numCapturedBases); - SendUpdateWorldState(TB_WS_BUILDINGS_CAPTURED, uint32(numCapturedBases)); + SendUpdateWorldState(WS_BATTLEFIELD_TB_BUILDINGS_CAPTURED, uint32(numCapturedBases)); // Check if attackers won if (numCapturedBases == TB_BASE_COUNT) @@ -870,3 +871,19 @@ void TolBaradCapturePoint::ChangeTeam(TeamId /*oldTeam*/) // Update counter m_Bf->ProcessEvent(nullptr, EVENT_COUNT_CAPTURED_BASE, nullptr); } + +class Battlefield_tol_barad : public BattlefieldScript +{ +public: + Battlefield_tol_barad() : BattlefieldScript("battlefield_tb") { } + + Battlefield* GetBattlefield() const override + { + return new BattlefieldTB(); + } +}; + +void AddSC_BF_tol_barad() +{ + new Battlefield_tol_barad(); +} diff --git a/src/server/game/Battlefield/Zones/BattlefieldTB.h b/src/server/scripts/Battlefield/BattlefieldTB.h index f74a1d2f608..e8250d2bb36 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldTB.h +++ b/src/server/scripts/Battlefield/BattlefieldTB.h @@ -159,90 +159,6 @@ enum TolBaradGOArtKit TB_GO_ARTKIT_FLAG_ALLIANCE = 2, }; -enum TolBaradWorldStates -{ - TB_WS_ALLIANCE_CONTROLS_SHOW = 5385, - TB_WS_HORDE_CONTROLS_SHOW = 5384, - TB_WS_ALLIANCE_ATTACKING_SHOW = 5546, - TB_WS_HORDE_ATTACKING_SHOW = 5547, - - TB_WS_BUILDINGS_CAPTURED = 5348, - TB_WS_BUILDINGS_CAPTURED_SHOW = 5349, - TB_WS_TOWERS_DESTROYED = 5347, - TB_WS_TOWERS_DESTROYED_SHOW = 5350, - - TB_WS_FACTION_CONTROLLING = 5334, // 1 -> Alliance, 2 -> Horde - - TB_WS_TIME_NEXT_BATTLE = 5332, - TB_WS_TIME_NEXT_BATTLE_SHOW = 5387, - TB_WS_TIME_BATTLE_END = 5333, - TB_WS_TIME_BATTLE_END_SHOW = 5346, - - TB_WS_STATE_PREPARATIONS = 5684, - TB_WS_STATE_BATTLE = 5344, - - /* Not Sure if TB - TB_WS_0_UNKNOWN = 5587, - TB_WS_9_UNKNOWN = 5508, - TB_WS_35_UNKNOWN = 5679, - TB_WS_36_UNKNOWN = 5678, - TB_WS_37_UNKNOWN = 5677, - TB_WS_60_UNKNOWN = 5361, - TB_WS_61_UNKNOWN = 5360, - TB_WS_65_UNKNOWN = 5195, - TB_WS_66_UNKNOWN = 5193, - */ - - TB_WS_PROGRESS_SHOW = 5376, - TB_WS_PROGRESS = 5377, // 0 horde, 100 alliance - TB_WS_PROGRESS_PERCENT_GREY = 5378, - - TB_WS_KEEP_HORDE = 5469, - TB_WS_KEEP_ALLIANCE = 5470, - - TB_WS_GARRISON_HORDE_CONTROLLED = 5418, - TB_WS_GARRISON_HORDE_CAPTURING = 5419, - TB_WS_GARRISON_NEUTRAL = 5420, // unused - TB_WS_GARRISON_ALLIANCE_CAPTURING = 5421, - TB_WS_GARRISON_ALLIANCE_CONTROLLED = 5422, - - TB_WS_VIGIL_HORDE_CONTROLLED = 5423, - TB_WS_VIGIL_HORDE_CAPTURING = 5424, - TB_WS_VIGIL_NEUTRAL = 5425, // unused - TB_WS_VIGIL_ALLIANCE_CAPTURING = 5426, - TB_WS_VIGIL_ALLIANCE_CONTROLLED = 5427, - - TB_WS_SLAGWORKS_HORDE_CONTROLLED = 5428, - TB_WS_SLAGWORKS_HORDE_CAPTURING = 5429, - TB_WS_SLAGWORKS_NEUTRAL = 5430, // unused - TB_WS_SLAGWORKS_ALLIANCE_CAPTURING = 5431, - TB_WS_SLAGWORKS_ALLIANCE_CONTROLLED = 5432, - - TB_WS_WEST_INTACT_HORDE = 5433, - TB_WS_WEST_DAMAGED_HORDE = 5434, - TB_WS_WEST_DESTROYED_NEUTRAL = 5435, - TB_WS_WEST_INTACT_ALLIANCE = 5436, - TB_WS_WEST_DAMAGED_ALLIANCE = 5437, - TB_WS_WEST_INTACT_NEUTRAL = 5453, // unused - TB_WS_WEST_DAMAGED_NEUTRAL = 5454, // unused - - TB_WS_SOUTH_INTACT_HORDE = 5438, - TB_WS_SOUTH_DAMAGED_HORDE = 5439, - TB_WS_SOUTH_DESTROYED_NEUTRAL = 5440, - TB_WS_SOUTH_INTACT_ALLIANCE = 5441, - TB_WS_SOUTH_DAMAGED_ALLIANCE = 5442, - TB_WS_SOUTH_INTACT_NEUTRAL = 5455, // unused - TB_WS_SOUTH_DAMAGED_NEUTRAL = 5456, // unused - - TB_WS_EAST_INTACT_HORDE = 5443, - TB_WS_EAST_DAMAGED_HORDE = 5444, - TB_WS_EAST_DESTROYED_NEUTRAL = 5445, - TB_WS_EAST_INTACT_ALLIANCE = 5446, - TB_WS_EAST_DAMAGED_ALLIANCE = 5447, - TB_WS_EAST_INTACT_NEUTRAL = 5451, - TB_WS_EAST_DAMAGED_NEUTRAL = 5452, -}; - enum TolBaradText { // DEBUG Announcer @@ -473,9 +389,9 @@ struct TBCapturePointSpawnData TBCapturePointSpawnData const TBCapturePoints[TB_BASE_COUNT] = { - { { -896.96f, 979.497f, 121.441f, 3.124123f }, TB_BASE_IRONCLAD_GARRISON, { GO_CAPTURE_POINT_NORTH_A_DEFENDING, GO_CAPTURE_POINT_NORTH_H_DEFENDING }, { TB_WS_GARRISON_ALLIANCE_CONTROLLED, TB_WS_GARRISON_HORDE_CONTROLLED }, { TB_WS_GARRISON_ALLIANCE_CAPTURING, TB_WS_GARRISON_HORDE_CAPTURING }, TB_WS_GARRISON_NEUTRAL, { TB_TEXT_GARRISON_ALLIANCE_GAINED, TB_TEXT_GARRISON_HORDE_GAINED }, { TB_TEXT_GARRISON_ALLIANCE_LOST, TB_TEXT_GARRISON_HORDE_LOST } }, - { { -1492.34f, 1309.87f, 152.961f, 5.462882f }, TB_BASE_WARDENS_VIGIL, { GO_CAPTURE_POINT_WEST_A_DEFENDING, GO_CAPTURE_POINT_WEST_H_DEFENDING }, { TB_WS_VIGIL_ALLIANCE_CONTROLLED, TB_WS_VIGIL_HORDE_CONTROLLED }, { TB_WS_VIGIL_ALLIANCE_CAPTURING, TB_WS_VIGIL_HORDE_CAPTURING }, TB_WS_VIGIL_NEUTRAL, { TB_TEXT_VIGIL_ALLIANCE_GAINED, TB_TEXT_VIGIL_HORDE_GAINED }, { TB_TEXT_VIGIL_ALLIANCE_LOST, TB_TEXT_VIGIL_HORDE_LOST } }, - { { -1437.f, 685.556f, 123.421f, 0.802851f }, TB_BASE_SLAGWORKS, { GO_CAPTURE_POINT_EAST_A_DEFENDING, GO_CAPTURE_POINT_EAST_H_DEFENDING }, { TB_WS_SLAGWORKS_ALLIANCE_CONTROLLED, TB_WS_SLAGWORKS_HORDE_CONTROLLED }, { TB_WS_SLAGWORKS_ALLIANCE_CAPTURING, TB_WS_SLAGWORKS_HORDE_CAPTURING }, TB_WS_SLAGWORKS_NEUTRAL, { TB_TEXT_SLAGWORKS_ALLIANCE_GAINED, TB_TEXT_SLAGWORKS_HORDE_GAINED }, { TB_TEXT_SLAGWORKS_ALLIANCE_LOST, TB_TEXT_SLAGWORKS_HORDE_LOST } }, + { { -896.96f, 979.497f, 121.441f, 3.124123f }, TB_BASE_IRONCLAD_GARRISON, { GO_CAPTURE_POINT_NORTH_A_DEFENDING, GO_CAPTURE_POINT_NORTH_H_DEFENDING }, { WS_BATTLEFIELD_TB_GARRISON_ALLIANCE_CONTROLLED, WS_BATTLEFIELD_TB_GARRISON_HORDE_CONTROLLED }, { WS_BATTLEFIELD_TB_GARRISON_ALLIANCE_CAPTURING, WS_BATTLEFIELD_TB_GARRISON_HORDE_CAPTURING }, WS_BATTLEFIELD_TB_GARRISON_NEUTRAL, { TB_TEXT_GARRISON_ALLIANCE_GAINED, TB_TEXT_GARRISON_HORDE_GAINED }, { TB_TEXT_GARRISON_ALLIANCE_LOST, TB_TEXT_GARRISON_HORDE_LOST } }, + { { -1492.34f, 1309.87f, 152.961f, 5.462882f }, TB_BASE_WARDENS_VIGIL, { GO_CAPTURE_POINT_WEST_A_DEFENDING, GO_CAPTURE_POINT_WEST_H_DEFENDING }, { WS_BATTLEFIELD_TB_VIGIL_ALLIANCE_CONTROLLED, WS_BATTLEFIELD_TB_VIGIL_HORDE_CONTROLLED }, { WS_BATTLEFIELD_TB_VIGIL_ALLIANCE_CAPTURING, WS_BATTLEFIELD_TB_VIGIL_HORDE_CAPTURING }, WS_BATTLEFIELD_TB_VIGIL_NEUTRAL, { TB_TEXT_VIGIL_ALLIANCE_GAINED, TB_TEXT_VIGIL_HORDE_GAINED }, { TB_TEXT_VIGIL_ALLIANCE_LOST, TB_TEXT_VIGIL_HORDE_LOST } }, + { { -1437.f, 685.556f, 123.421f, 0.802851f }, TB_BASE_SLAGWORKS, { GO_CAPTURE_POINT_EAST_A_DEFENDING, GO_CAPTURE_POINT_EAST_H_DEFENDING }, { WS_BATTLEFIELD_TB_SLAGWORKS_ALLIANCE_CONTROLLED, WS_BATTLEFIELD_TB_SLAGWORKS_HORDE_CONTROLLED }, { WS_BATTLEFIELD_TB_SLAGWORKS_ALLIANCE_CAPTURING, WS_BATTLEFIELD_TB_SLAGWORKS_HORDE_CAPTURING }, WS_BATTLEFIELD_TB_SLAGWORKS_NEUTRAL, { TB_TEXT_SLAGWORKS_ALLIANCE_GAINED, TB_TEXT_SLAGWORKS_HORDE_GAINED }, { TB_TEXT_SLAGWORKS_ALLIANCE_LOST, TB_TEXT_SLAGWORKS_HORDE_LOST } }, }; // Towers @@ -500,9 +416,9 @@ struct TBTowerInfo TBTowerInfo const TBTowers[TB_TOWERS_COUNT] = { - { { -1013.279f, 529.5382f, 146.427f, 1.97222f }, GO_EAST_SPIRE, TB_TEXT_EAST_SPIRE_DAMAGED, TB_TEXT_EAST_SPIRE_DESTROYED, { TB_WS_EAST_INTACT_ALLIANCE, TB_WS_EAST_INTACT_HORDE }, { TB_WS_EAST_DAMAGED_ALLIANCE, TB_WS_EAST_DAMAGED_HORDE }, TB_WS_EAST_DESTROYED_NEUTRAL }, - { { -1618.91f, 954.5417f, 168.601f, 0.06981169f }, GO_SOUTH_SPIRE, TB_TEXT_SOUTH_SPIRE_DAMAGED, TB_TEXT_SOUTH_SPIRE_DESTROYED, { TB_WS_SOUTH_INTACT_ALLIANCE, TB_WS_SOUTH_INTACT_HORDE }, { TB_WS_SOUTH_DAMAGED_ALLIANCE, TB_WS_SOUTH_DAMAGED_HORDE }, TB_WS_SOUTH_DESTROYED_NEUTRAL }, - { { -950.4097f, 1469.101f, 176.596f, 4.180066f }, GO_WEST_SPIRE, TB_TEXT_WEST_SPIRE_DAMAGED, TB_TEXT_WEST_SPIRE_DESTROYED, { TB_WS_WEST_INTACT_ALLIANCE, TB_WS_WEST_INTACT_HORDE }, { TB_WS_WEST_DAMAGED_ALLIANCE, TB_WS_WEST_DAMAGED_HORDE }, TB_WS_WEST_DESTROYED_NEUTRAL }, + { { -1013.279f, 529.5382f, 146.427f, 1.97222f }, GO_EAST_SPIRE, TB_TEXT_EAST_SPIRE_DAMAGED, TB_TEXT_EAST_SPIRE_DESTROYED, { WS_BATTLEFIELD_TB_EAST_INTACT_ALLIANCE, WS_BATTLEFIELD_TB_EAST_INTACT_HORDE }, { WS_BATTLEFIELD_TB_EAST_DAMAGED_ALLIANCE, WS_BATTLEFIELD_TB_EAST_DAMAGED_HORDE }, WS_BATTLEFIELD_TB_EAST_DESTROYED_NEUTRAL }, + { { -1618.91f, 954.5417f, 168.601f, 0.06981169f }, GO_SOUTH_SPIRE, TB_TEXT_SOUTH_SPIRE_DAMAGED, TB_TEXT_SOUTH_SPIRE_DESTROYED, { WS_BATTLEFIELD_TB_SOUTH_INTACT_ALLIANCE, WS_BATTLEFIELD_TB_SOUTH_INTACT_HORDE }, { WS_BATTLEFIELD_TB_SOUTH_DAMAGED_ALLIANCE, WS_BATTLEFIELD_TB_SOUTH_DAMAGED_HORDE }, WS_BATTLEFIELD_TB_SOUTH_DESTROYED_NEUTRAL }, + { { -950.4097f, 1469.101f, 176.596f, 4.180066f }, GO_WEST_SPIRE, TB_TEXT_WEST_SPIRE_DAMAGED, TB_TEXT_WEST_SPIRE_DESTROYED, { WS_BATTLEFIELD_TB_WEST_INTACT_ALLIANCE, WS_BATTLEFIELD_TB_WEST_INTACT_HORDE }, { WS_BATTLEFIELD_TB_WEST_DAMAGED_ALLIANCE, WS_BATTLEFIELD_TB_WEST_DAMAGED_HORDE }, WS_BATTLEFIELD_TB_WEST_DESTROYED_NEUTRAL }, }; // Vehicles @@ -632,7 +548,7 @@ class TolBaradCapturePoint : public BfCapturePoint * Tol Barad battlefield * * ##################### */ -class TC_GAME_API BattlefieldTB : public Battlefield +class BattlefieldTB : public Battlefield { public: ~BattlefieldTB(); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/scripts/Battlefield/BattlefieldWG.cpp index daedc0e1958..a8f3d135ebd 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/scripts/Battlefield/BattlefieldWG.cpp @@ -31,6 +31,7 @@ #include "ObjectAccessor.h" #include "Player.h" #include "Random.h" +#include "ScriptMgr.h" #include "SpellAuras.h" #include "TemporarySummon.h" #include "World.h" @@ -1851,3 +1852,19 @@ void WintergraspWorkshop::Save() { sWorld->setWorldState(_staticInfo->WorldStateId, _state); } + +class Battlefield_wintergrasp : public BattlefieldScript +{ +public: + Battlefield_wintergrasp() : BattlefieldScript("battlefield_wg") { } + + Battlefield* GetBattlefield() const override + { + return new BattlefieldWG(); + } +}; + +void AddSC_BF_wintergrasp() +{ + new Battlefield_wintergrasp(); +} diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/scripts/Battlefield/BattlefieldWG.h index 2c126ae01f4..fc3806427d9 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/scripts/Battlefield/BattlefieldWG.h @@ -33,12 +33,6 @@ struct WintergraspObjectPositionData; typedef std::vector<BfWGGameObjectBuilding*> GameObjectBuildingVect; typedef std::vector<WintergraspWorkshop*> WorkshopVect; -// used in Player.cpp -extern uint32 const ClockWorldState[]; - -// used in zone_wintergrasp.cpp -TC_GAME_API extern uint32 const WintergraspFaction[]; - enum WintergraspSpells { // Wartime auras @@ -207,7 +201,7 @@ class WintergraspCapturePoint : public BfCapturePoint * WinterGrasp Battlefield * * ######################### */ -class TC_GAME_API BattlefieldWG : public Battlefield +class BattlefieldWG : public Battlefield { public: ~BattlefieldWG(); @@ -499,7 +493,7 @@ enum WintergraspGameObject // ******************************************************************** // Structure for different buildings that can be destroyed during battle -struct TC_GAME_API BfWGGameObjectBuilding +struct BfWGGameObjectBuilding { private: // WG object @@ -552,7 +546,7 @@ public: }; // Structure for the 6 workshop -struct TC_GAME_API WintergraspWorkshop +struct WintergraspWorkshop { private: BattlefieldWG* _wg; // Pointer to wintergrasp diff --git a/src/server/scripts/Battlefield/battlefield_script_loader.cpp b/src/server/scripts/Battlefield/battlefield_script_loader.cpp new file mode 100644 index 00000000000..fcfa06e9449 --- /dev/null +++ b/src/server/scripts/Battlefield/battlefield_script_loader.cpp @@ -0,0 +1,25 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +void AddSC_BF_wintergrasp(); +void AddSC_BF_tol_barad(); + +void AddBattlefieldScripts() +{ + AddSC_BF_wintergrasp(); + AddSC_BF_tol_barad(); +} diff --git a/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp b/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp index a30fb95d026..b8fe8a65f3f 100644 --- a/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp +++ b/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp @@ -18,7 +18,7 @@ #include "ScriptMgr.h" #include "Battlefield.h" #include "BattlefieldMgr.h" -#include "BattlefieldTB.h" +#include "Battlefield/BattlefieldTB.h" #include "DB2Stores.h" #include "ObjectMgr.h" #include "Player.h" diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index 5d2390b1ab7..d38c8c43aab 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -18,7 +18,7 @@ #include "ScriptMgr.h" #include "Battlefield.h" #include "BattlefieldMgr.h" -#include "BattlefieldWG.h" +#include "Battlefield/BattlefieldWG.h" #include "DB2Stores.h" #include "GameObject.h" #include "GameObjectAI.h" @@ -360,8 +360,8 @@ class go_wg_vehicle_teleporter : public GameObjectScript bool IsFriendly(Unit* passenger) { - return ((me->GetFaction() == WintergraspFaction[TEAM_HORDE] && passenger->GetFaction() == HORDE) || - (me->GetFaction() == WintergraspFaction[TEAM_ALLIANCE] && passenger->GetFaction() == ALLIANCE)); + return ((me->GetFaction() == FACTION_HORDE_GENERIC_WG && passenger->GetFaction() == HORDE) || + (me->GetFaction() == FACTION_ALLIANCE_GENERIC_WG && passenger->GetFaction() == ALLIANCE)); } Creature* GetValidVehicle(Creature* cVeh) |