diff options
| author | Jeremy <Golrag@users.noreply.github.com> | 2024-03-28 19:29:22 +0100 |
|---|---|---|
| committer | funjoker <funjoker109@gmail.com> | 2024-03-28 20:38:55 +0100 |
| commit | d0d5d309bb5877dc2fcb27f6cb123707a31ec1e8 (patch) | |
| tree | f487ecb6ff8fd052357ea582ffa630027dc8bd07 /src/server/game/Maps | |
| parent | aefa15ece72bccdeb47cbdbdc75df87837c9da00 (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.cpp | 40 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.h | 11 | ||||
| -rw-r--r-- | src/server/game/Maps/MapManager.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Maps/ZoneScript.h | 2 |
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) { } |
