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 /src/server/game/Battlefield/BattlefieldMgr.cpp | |
parent | a26cc135fa34e0e4aa0c244c4c4b4bec4c25d709 (diff) |
Battlefields: Move BF scripts out of game
This commit introduces the usual script interface
for battlefields.
(cherry picked from commit f7faf20254a120a90b8ee8eb55a284a6351aabc3)
Diffstat (limited to 'src/server/game/Battlefield/BattlefieldMgr.cpp')
-rw-r--r-- | src/server/game/Battlefield/BattlefieldMgr.cpp | 62 |
1 files changed, 38 insertions, 24 deletions
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) |