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 | |
parent | a26cc135fa34e0e4aa0c244c4c4b4bec4c25d709 (diff) |
Battlefields: Move BF scripts out of game
This commit introduces the usual script interface
for battlefields.
(cherry picked from commit f7faf20254a120a90b8ee8eb55a284a6351aabc3)
15 files changed, 289 insertions, 189 deletions
diff --git a/sql/updates/world/master/2022_01_06_75_world_2020_06_24_00_world.sql b/sql/updates/world/master/2022_01_06_75_world_2020_06_24_00_world.sql new file mode 100644 index 00000000000..df7d800621b --- /dev/null +++ b/sql/updates/world/master/2022_01_06_75_world_2020_06_24_00_world.sql @@ -0,0 +1,11 @@ +DROP TABLE IF EXISTS `battlefield_template`; +CREATE TABLE `battlefield_template` ( + `TypeId` tinyint(3) unsigned NOT NULL, + `ScriptName` varchar(64) NOT NULL, + `comment` text, + PRIMARY KEY(`TypeId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +INSERT INTO `battlefield_template` (`TypeId`, `ScriptName`, `comment`) VALUES +(1, 'battlefield_wg', NULL), +(2, 'battlefield_tb', NULL); 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) |