aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2024-03-28 19:29:22 +0100
committerfunjoker <funjoker109@gmail.com>2024-03-28 20:38:55 +0100
commitd0d5d309bb5877dc2fcb27f6cb123707a31ec1e8 (patch)
treef487ecb6ff8fd052357ea582ffa630027dc8bd07 /src/server/game/Maps
parentaefa15ece72bccdeb47cbdbdc75df87837c9da00 (diff)
Core/Battlegrounds: Move to scripts (#29799)
* Introduce new BattlegroundScript class for map/bg specific scripts * Remove all sub, zone specific, battleground classes except Arena * Move all bg zone scripts to new BattlegroundScripts class in script folder * Remove ZoneScript from Battleground class * Remove some unused hooks from Battleground (cherry picked from commit be11f42a16d1fa0482e9572bf54e99e4dedd3c78)
Diffstat (limited to 'src/server/game/Maps')
-rw-r--r--src/server/game/Maps/Map.cpp40
-rw-r--r--src/server/game/Maps/Map.h11
-rw-r--r--src/server/game/Maps/MapManager.cpp1
-rw-r--r--src/server/game/Maps/ZoneScript.h2
4 files changed, 52 insertions, 2 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index b603d704f97..aa0f35abf15 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -17,6 +17,8 @@
#include "Map.h"
#include "Battleground.h"
+#include "BattlegroundMgr.h"
+#include "BattlegroundScript.h"
#include "CellImpl.h"
#include "CharacterPackets.h"
#include "Containers.h"
@@ -3385,7 +3387,7 @@ TeamId InstanceMap::GetTeamIdInInstance() const
/* ******* Battleground Instance Maps ******* */
BattlegroundMap::BattlegroundMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty spawnMode)
- : Map(id, expiry, InstanceId, spawnMode), m_bg(nullptr)
+ : Map(id, expiry, InstanceId, spawnMode), m_bg(nullptr), _battlegroundScript(nullptr), _scriptId(0)
{
//lets initialize visibility distance for BG/Arenas
BattlegroundMap::InitVisibilityDistance();
@@ -3408,6 +3410,36 @@ void BattlegroundMap::InitVisibilityDistance()
m_VisibilityNotifyPeriod = IsBattleArena() ? World::GetVisibilityNotifyPeriodInArenas() : World::GetVisibilityNotifyPeriodInBG();
}
+std::string const& BattlegroundMap::GetScriptName() const
+{
+ return sObjectMgr->GetScriptName(_scriptId);
+}
+
+void BattlegroundMap::InitScriptData()
+{
+ if (_battlegroundScript)
+ return;
+
+ ASSERT(GetBG(), "Battleground not set yet!");
+
+ if (BattlegroundScriptTemplate const* scriptTemplate = sBattlegroundMgr->FindBattlegroundScriptTemplate(GetId(), GetBG()->GetTypeID()))
+ {
+ _scriptId = scriptTemplate->ScriptId;
+ _battlegroundScript.reset(sScriptMgr->CreateBattlegroundData(this));
+ }
+
+ // Make sure every battleground has a default script
+ if (!_battlegroundScript)
+ {
+ if (IsBattleArena())
+ _battlegroundScript = std::make_unique<ArenaScript>(this);
+ else
+ _battlegroundScript = std::make_unique<BattlegroundScript>(this);
+ }
+
+ _battlegroundScript->OnInit();
+}
+
TransferAbortParams BattlegroundMap::CannotEnter(Player* player)
{
if (player->GetMapRef().getTarget() == this)
@@ -3451,6 +3483,12 @@ void BattlegroundMap::RemoveAllPlayers()
player->TeleportTo(player->GetBattlegroundEntryPoint());
}
+void BattlegroundMap::Update(uint32 diff)
+{
+ Map::Update(diff);
+ _battlegroundScript->OnUpdate(diff);
+}
+
AreaTrigger* Map::GetAreaTrigger(ObjectGuid const& guid)
{
return _objectsStore.Find<AreaTrigger>(guid);
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 0339d92a6ee..901e03e0264 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -46,6 +46,7 @@
class Battleground;
class BattlegroundMap;
+class BattlegroundScript;
class CreatureGroup;
class GameObjectModel;
class Group;
@@ -909,12 +910,22 @@ class TC_GAME_API BattlegroundMap : public Map
void SetUnload();
//void UnloadAll(bool pForce);
void RemoveAllPlayers() override;
+ void Update(uint32 diff) override;
virtual void InitVisibilityDistance() override;
Battleground* GetBG() const { return m_bg; }
void SetBG(Battleground* bg) { m_bg = bg; }
+
+ uint32 GetScriptId() const { return _scriptId; }
+ std::string const& GetScriptName() const;
+ BattlegroundScript* GetBattlegroundScript() { return _battlegroundScript.get(); }
+ BattlegroundScript const* GetBattlegroundScript() const { return _battlegroundScript.get(); }
+
+ void InitScriptData();
private:
Battleground* m_bg;
+ std::unique_ptr<BattlegroundScript> _battlegroundScript;
+ uint32 _scriptId;
};
template<class T, class CONTAINER>
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index 87f2bbe160a..4f2153e6bee 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -127,6 +127,7 @@ BattlegroundMap* MapManager::CreateBattleground(uint32 mapId, uint32 instanceId,
ASSERT(map->IsBattlegroundOrArena());
map->SetBG(bg);
bg->SetBgMap(map);
+ map->InitScriptData();
map->InitSpawnGroupState();
if (sWorld->getBoolConfig(CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS))
diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h
index 370a2f6e239..3fd9e85aa19 100644
--- a/src/server/game/Maps/ZoneScript.h
+++ b/src/server/game/Maps/ZoneScript.h
@@ -92,7 +92,7 @@ class TC_GAME_API ZoneScript
virtual void SetData(uint32 /*DataId*/, uint32 /*Value*/) { }
virtual void TriggerGameEvent(uint32 gameEventId, WorldObject* source = nullptr, WorldObject* target = nullptr);
- virtual void ProcessEvent(WorldObject* /*obj*/, uint32 /*eventId*/, WorldObject* /*invoker*/) { }
+ virtual void ProcessEvent([[maybe_unused]] WorldObject* obj, [[maybe_unused]] uint32 eventId, [[maybe_unused]] WorldObject* invoker) { }
virtual void DoAction([[maybe_unused]] uint32 actionId, [[maybe_unused]] WorldObject* source = nullptr, [[maybe_unused]] WorldObject* target = nullptr) { }
virtual void OnFlagStateChange([[maybe_unused]] GameObject* flagInBase, [[maybe_unused]] FlagState oldValue, [[maybe_unused]] FlagState newValue, [[maybe_unused]] Player* player) { }