diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-07-19 23:18:19 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-07-19 23:18:19 +0200 |
| commit | 073a036d84365dae60a70064eb67e68f0447bd72 (patch) | |
| tree | b9c74a852d8135c26e3d952e26ade11155c65f29 /src/server/scripts | |
| parent | 83b32667940844a257059965711284c9ab38ce44 (diff) | |
Core/Battlefields: Refactor Battlefield creation to be linked to host map creation instead of having globally accessible objects
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Battlefield/BattlefieldTB.cpp | 6 | ||||
| -rw-r--r-- | src/server/scripts/Battlefield/BattlefieldTB.h | 1 | ||||
| -rw-r--r-- | src/server/scripts/Battlefield/BattlefieldWG.cpp | 28 | ||||
| -rw-r--r-- | src/server/scripts/Battlefield/BattlefieldWG.h | 1 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_bf.cpp | 11 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_wintergrasp.cpp | 26 |
7 files changed, 49 insertions, 26 deletions
diff --git a/src/server/scripts/Battlefield/BattlefieldTB.cpp b/src/server/scripts/Battlefield/BattlefieldTB.cpp index 33fc29c1ecb..93ed4da8131 100644 --- a/src/server/scripts/Battlefield/BattlefieldTB.cpp +++ b/src/server/scripts/Battlefield/BattlefieldTB.cpp @@ -45,8 +45,6 @@ bool BattlefieldTB::SetupBattlefield() m_TypeId = BATTLEFIELD_TB; // See enum BattlefieldTypes m_BattleId = BATTLEFIELD_BATTLEID_TB; m_ZoneId = BATTLEFIELD_TB_ZONEID; - m_MapId = BATTLEFIELD_TB_MAPID; - m_Map = sMapMgr->CreateBaseMap(m_MapId); InitStalker(NPC_DEBUG_ANNOUNCER, TolBaradDebugAnnouncerPos); @@ -757,9 +755,9 @@ class Battlefield_tol_barad : public BattlefieldScript public: Battlefield_tol_barad() : BattlefieldScript("battlefield_tb") { } - Battlefield* GetBattlefield() const override + Battlefield* GetBattlefield(Map* map) const override { - return new BattlefieldTB(); + return new BattlefieldTB(map); } }; diff --git a/src/server/scripts/Battlefield/BattlefieldTB.h b/src/server/scripts/Battlefield/BattlefieldTB.h index 9792ba818e4..ed274a2e49e 100644 --- a/src/server/scripts/Battlefield/BattlefieldTB.h +++ b/src/server/scripts/Battlefield/BattlefieldTB.h @@ -549,6 +549,7 @@ class TolBaradCapturePoint : public BfCapturePoint class BattlefieldTB : public Battlefield { public: + using Battlefield::Battlefield; ~BattlefieldTB(); void OnStartGrouping() override; diff --git a/src/server/scripts/Battlefield/BattlefieldWG.cpp b/src/server/scripts/Battlefield/BattlefieldWG.cpp index fcf9d6c3dc8..895868b9cec 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.cpp +++ b/src/server/scripts/Battlefield/BattlefieldWG.cpp @@ -411,8 +411,6 @@ bool BattlefieldWG::SetupBattlefield() m_TypeId = BATTLEFIELD_WG; // See enum BattlefieldTypes m_BattleId = BATTLEFIELD_BATTLEID_WG; m_ZoneId = AREA_WINTERGRASP; - m_MapId = BATTLEFIELD_WG_MAPID; - m_Map = sMapMgr->CreateBaseMap(m_MapId); InitStalker(BATTLEFIELD_WG_NPC_STALKER, WintergraspStalkerPos); @@ -1477,6 +1475,26 @@ void BfWGGameObjectBuilding::Init(GameObject* go) } _state = WintergraspGameObjectState(sWorldStateMgr->GetValue(_worldState, _wg->GetMap())); + if (_state == BATTLEFIELD_WG_OBJECTSTATE_NONE) + { + // set to default state based on type + switch (_teamControl) + { + case TEAM_ALLIANCE: + _state = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; + break; + case TEAM_HORDE: + _state = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; + break; + case TEAM_NEUTRAL: + _state = BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT; + break; + default: + break; + } + sWorldStateMgr->SetValueAndSaveInDb(_worldState, _state, false, _wg->GetMap()); + } + switch (_state) { case BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT: @@ -1774,9 +1792,9 @@ class Battlefield_wintergrasp : public BattlefieldScript public: Battlefield_wintergrasp() : BattlefieldScript("battlefield_wg") { } - Battlefield* GetBattlefield() const override + Battlefield* GetBattlefield(Map* map) const override { - return new BattlefieldWG(); + return new BattlefieldWG(map); } }; @@ -1794,7 +1812,7 @@ public: if (!killer || killer->GetTypeId() != TYPEID_PLAYER) return; - BattlefieldWG* wintergrasp = static_cast<BattlefieldWG*>(sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)); + BattlefieldWG* wintergrasp = static_cast<BattlefieldWG*>(sBattlefieldMgr->GetBattlefieldByBattleId(killer->GetMap(), BATTLEFIELD_BATTLEID_WG)); if (!wintergrasp) return; diff --git a/src/server/scripts/Battlefield/BattlefieldWG.h b/src/server/scripts/Battlefield/BattlefieldWG.h index c15bd592962..3f10861fe58 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.h +++ b/src/server/scripts/Battlefield/BattlefieldWG.h @@ -200,6 +200,7 @@ class WintergraspCapturePoint : public BfCapturePoint class BattlefieldWG : public Battlefield { public: + using Battlefield::Battlefield; ~BattlefieldWG(); /** * \brief Called when the battle start diff --git a/src/server/scripts/Commands/cs_bf.cpp b/src/server/scripts/Commands/cs_bf.cpp index 55d9ecc68d7..d883b5609bd 100644 --- a/src/server/scripts/Commands/cs_bf.cpp +++ b/src/server/scripts/Commands/cs_bf.cpp @@ -26,6 +26,7 @@ EndScriptData */ #include "BattlefieldMgr.h" #include "Chat.h" #include "ChatCommand.h" +#include "Player.h" #include "RBAC.h" using namespace Trinity::ChatCommands; @@ -54,7 +55,7 @@ public: static bool HandleBattlefieldStart(ChatHandler* handler, uint32 battleId) { - Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(battleId); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(handler->GetPlayer()->GetMap(), battleId); if (!bf) return false; @@ -69,7 +70,7 @@ public: static bool HandleBattlefieldEnd(ChatHandler* handler, uint32 battleId) { - Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(battleId); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(handler->GetPlayer()->GetMap(), battleId); if (!bf) return false; @@ -84,7 +85,7 @@ public: static bool HandleBattlefieldEnable(ChatHandler* handler, uint32 battleId) { - Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(battleId); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(handler->GetPlayer()->GetMap(), battleId); if (!bf) return false; @@ -107,7 +108,7 @@ public: static bool HandleBattlefieldSwitch(ChatHandler* handler, uint32 battleId) { - Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(battleId); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(handler->GetPlayer()->GetMap(), battleId); if (!bf) return false; @@ -121,7 +122,7 @@ public: static bool HandleBattlefieldTimer(ChatHandler* handler, uint32 battleId, uint32 time) { - Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(battleId); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(handler->GetPlayer()->GetMap(), battleId); if (!bf) return false; diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 97b772f18c9..b3879bafd56 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -1408,7 +1408,7 @@ public: nearestLoc = bg->GetClosestGraveyard(player); else { - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetMap(), player->GetZoneId())) nearestLoc = bf->GetClosestGraveyard(player); else nearestLoc = sObjectMgr->GetClosestGraveyard(*player, player->GetTeam(), player); diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index 2290a35bfa4..fb981b037aa 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -172,7 +172,7 @@ struct npc_wg_demolisher_engineer : public ScriptedAI private: bool CanBuild() const { - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(me->GetMap(), BATTLEFIELD_BATTLEID_WG); if (!wintergrasp) return false; @@ -203,7 +203,7 @@ struct npc_wg_spirit_guide : public ScriptedAI if (me->IsQuestGiver()) player->PrepareQuestMenu(me->GetGUID()); - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(me->GetMap(), BATTLEFIELD_BATTLEID_WG); if (!wintergrasp) return true; @@ -221,7 +221,7 @@ struct npc_wg_spirit_guide : public ScriptedAI uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId); CloseGossipMenuFor(player); - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(me->GetMap(), BATTLEFIELD_BATTLEID_WG); if (wintergrasp) { GraveyardVect gy = wintergrasp->GetGraveyardVector(); @@ -272,7 +272,7 @@ struct npc_wg_queue : public ScriptedAI if (me->IsQuestGiver()) player->PrepareQuestMenu(me->GetGUID()); - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(me->GetMap(), BATTLEFIELD_BATTLEID_WG); if (!wintergrasp) return true; @@ -300,7 +300,7 @@ struct npc_wg_queue : public ScriptedAI { CloseGossipMenuFor(player); - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(me->GetMap(), BATTLEFIELD_BATTLEID_WG); if (!wintergrasp) return true; @@ -441,8 +441,8 @@ class spell_wintergrasp_defender_teleport : public SpellScript SpellCastResult CheckCast() { - if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) - if (Player* target = GetExplTargetUnit()->ToPlayer()) + if (Player* target = GetExplTargetUnit()->ToPlayer()) + if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(target->GetMap(), BATTLEFIELD_BATTLEID_WG)) // check if we are in Wintergrasp at all, SotA uses same teleport spells if ((target->GetZoneId() == AREA_WINTERGRASP && target->GetTeamId() != wg->GetDefenderTeam()) || target->HasAura(SPELL_WINTERGRASP_TELEPORT_TRIGGER)) return SPELL_FAILED_BAD_TARGETS; @@ -528,9 +528,11 @@ class condition_is_wintergrasp_horde : public ConditionScript public: condition_is_wintergrasp_horde() : ConditionScript("condition_is_wintergrasp_horde") { } - bool OnConditionCheck(Condition const* /* condition */, ConditionSourceInfo& /* sourceInfo */) + bool OnConditionCheck(Condition const* /* condition */, ConditionSourceInfo& sourceInfo) { - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + if (!sourceInfo.mConditionMap) + return false; + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(sourceInfo.mConditionMap, BATTLEFIELD_BATTLEID_WG); if (wintergrasp->IsEnabled() && wintergrasp->GetDefenderTeam() == TEAM_HORDE) return true; return false; @@ -542,9 +544,11 @@ class condition_is_wintergrasp_alliance : public ConditionScript public: condition_is_wintergrasp_alliance() : ConditionScript("condition_is_wintergrasp_alliance") { } - bool OnConditionCheck(Condition const* /* condition */, ConditionSourceInfo& /* sourceInfo */) + bool OnConditionCheck(Condition const* /* condition */, ConditionSourceInfo& sourceInfo) { - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); + if (!sourceInfo.mConditionMap) + return false; + Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(sourceInfo.mConditionMap, BATTLEFIELD_BATTLEID_WG); if (wintergrasp->IsEnabled() && wintergrasp->GetDefenderTeam() == TEAM_ALLIANCE) return true; return false; |
