aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-07-19 23:18:19 +0200
committerShauren <shauren.trinity@gmail.com>2022-07-19 23:18:19 +0200
commit073a036d84365dae60a70064eb67e68f0447bd72 (patch)
treeb9c74a852d8135c26e3d952e26ade11155c65f29 /src/server/scripts
parent83b32667940844a257059965711284c9ab38ce44 (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.cpp6
-rw-r--r--src/server/scripts/Battlefield/BattlefieldTB.h1
-rw-r--r--src/server/scripts/Battlefield/BattlefieldWG.cpp28
-rw-r--r--src/server/scripts/Battlefield/BattlefieldWG.h1
-rw-r--r--src/server/scripts/Commands/cs_bf.cpp11
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp26
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;