From 5991b2769acc2f7c1959f1850a36a22c968bb45c Mon Sep 17 00:00:00 2001 From: Kargatum Date: Wed, 23 Jun 2021 04:19:02 +0700 Subject: feat(Core/Scripts): split the huge scriptloader into smaller pieces (#5346) * feat(Core/Scripts): split the huge scriptloader into smaller pieces * AddSC_swamp_of_sorrows del * 1 * add mod info * 1 * 039f0e0faa081352d19f34b6f0abaa4e74414988 Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- src/server/game/Scripting/ScriptMgr.cpp | 192 +++++++++++++++++--------------- 1 file changed, 101 insertions(+), 91 deletions(-) (limited to 'src/server/game/Scripting/ScriptMgr.cpp') diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 3e3446e359..64ab942085 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -14,13 +14,13 @@ #include "OutdoorPvPMgr.h" #include "Player.h" #include "ScriptedGossip.h" -#include "ScriptLoader.h" #include "ScriptMgr.h" #include "ScriptSystem.h" #include "SpellInfo.h" #include "SpellScript.h" #include "Transport.h" #include "Vehicle.h" +#include "SmartAI.h" #include "WorldPacket.h" #ifdef ELUNA @@ -28,58 +28,18 @@ #include "LuaEngine.h" #endif -// Specialize for each script type class like so: -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; +struct TSpellSummary +{ + uint8 Targets; // set of enum SelectTarget + uint8 Effects; // set of enum SelectEffect +}*SpellSummary; #include "ScriptMgrMacros.h" ScriptMgr::ScriptMgr() - : _scriptCount(0), _scheduledScripts(0) -{ -} + : _scriptCount(0), _scheduledScripts(0), _script_loader_callback(nullptr) { } -ScriptMgr::~ScriptMgr() -{ -} +ScriptMgr::~ScriptMgr() { } ScriptMgr* ScriptMgr::instance() { @@ -89,8 +49,15 @@ ScriptMgr* ScriptMgr::instance() void ScriptMgr::Initialize() { - AddScripts(); - LOG_INFO("server.loading", "Loading C++ scripts"); + LOG_INFO("server.loading", "> Loading C++ scripts"); + LOG_INFO("server.loading", " "); + + AddSC_SmartScripts(); + + ASSERT(_script_loader_callback, + "Script loader callback wasn't registered!"); + + _script_loader_callback(); } void ScriptMgr::Unload() @@ -140,6 +107,8 @@ void ScriptMgr::Unload() SCR_CLEAR(CommandSC); #undef SCR_CLEAR + + delete[] SpellSummary; } void ScriptMgr::LoadDatabase() @@ -172,56 +141,55 @@ void ScriptMgr::LoadDatabase() LOG_INFO("server.loading", " "); } -struct TSpellSummary -{ - uint8 Targets; // set of enum SelectTarget - uint8 Effects; // set of enum SelectEffect -}* SpellSummary; - void ScriptMgr::CheckIfScriptsInDatabaseExist() { - ObjectMgr::ScriptNameContainer& sn = sObjectMgr->GetScriptNames(); - for (ObjectMgr::ScriptNameContainer::iterator itr = sn.begin(); itr != sn.end(); ++itr) - if (uint32 sid = sObjectMgr->GetScriptId((*itr).c_str())) + for (auto const& scriptName : sObjectMgr->GetScriptNames()) + { + if (uint32 sid = sObjectMgr->GetScriptId(scriptName.c_str())) { if (!ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid)) - LOG_ERROR("sql.sql", "Script named '%s' is assigned in the database, but has no code!", (*itr).c_str()); + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid)) + { + LOG_ERROR("sql.sql", "Script named '%s' is assigned in the database, but has no code!", scriptName.c_str()); + } } + } } void ScriptMgr::FillSpellSummary() { + UnitAI::FillAISpellInfo(); + SpellSummary = new TSpellSummary[sSpellMgr->GetSpellInfoStoreSize()]; SpellInfo const* pTempSpell; @@ -3406,3 +3374,45 @@ CommandSC::CommandSC(const char* name) { ScriptRegistry::AddScript(this); } + +// Specialize for each script type class like so: +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; -- cgit v1.2.3