mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-15 18:10:26 +00:00
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
* 039f0e0faa
Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>
This commit is contained in:
@@ -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<SpellScriptLoader>;
|
||||
template class ScriptRegistry<ServerScript>;
|
||||
template class ScriptRegistry<WorldScript>;
|
||||
template class ScriptRegistry<FormulaScript>;
|
||||
template class ScriptRegistry<WorldMapScript>;
|
||||
template class ScriptRegistry<InstanceMapScript>;
|
||||
template class ScriptRegistry<BattlegroundMapScript>;
|
||||
template class ScriptRegistry<ItemScript>;
|
||||
template class ScriptRegistry<CreatureScript>;
|
||||
template class ScriptRegistry<GameObjectScript>;
|
||||
template class ScriptRegistry<AreaTriggerScript>;
|
||||
template class ScriptRegistry<BattlegroundScript>;
|
||||
template class ScriptRegistry<OutdoorPvPScript>;
|
||||
template class ScriptRegistry<CommandScript>;
|
||||
template class ScriptRegistry<WeatherScript>;
|
||||
template class ScriptRegistry<AuctionHouseScript>;
|
||||
template class ScriptRegistry<ConditionScript>;
|
||||
template class ScriptRegistry<VehicleScript>;
|
||||
template class ScriptRegistry<DynamicObjectScript>;
|
||||
template class ScriptRegistry<TransportScript>;
|
||||
template class ScriptRegistry<AchievementCriteriaScript>;
|
||||
template class ScriptRegistry<PlayerScript>;
|
||||
template class ScriptRegistry<GuildScript>;
|
||||
template class ScriptRegistry<GroupScript>;
|
||||
template class ScriptRegistry<GlobalScript>;
|
||||
template class ScriptRegistry<UnitScript>;
|
||||
template class ScriptRegistry<AllCreatureScript>;
|
||||
template class ScriptRegistry<AllMapScript>;
|
||||
template class ScriptRegistry<MovementHandlerScript>;
|
||||
template class ScriptRegistry<BGScript>;
|
||||
template class ScriptRegistry<ArenaTeamScript>;
|
||||
template class ScriptRegistry<SpellSC>;
|
||||
template class ScriptRegistry<AccountScript>;
|
||||
template class ScriptRegistry<GameEventScript>;
|
||||
template class ScriptRegistry<MailScript>;
|
||||
template class ScriptRegistry<AchievementScript>;
|
||||
template class ScriptRegistry<MiscScript>;
|
||||
template class ScriptRegistry<PetScript>;
|
||||
template class ScriptRegistry<ArenaScript>;
|
||||
template class ScriptRegistry<CommandSC>;
|
||||
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<SpellScriptLoader>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ServerScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<WorldScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<FormulaScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<WorldMapScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<InstanceMapScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<BattlegroundMapScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ItemScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<CreatureScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<GameObjectScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AreaTriggerScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<BattlegroundScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<OutdoorPvPScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<CommandScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<WeatherScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AuctionHouseScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ConditionScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<VehicleScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<DynamicObjectScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<TransportScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AchievementCriteriaScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<PlayerScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<GuildScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<BGScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AchievementScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ArenaTeamScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<SpellSC>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<MiscScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<PetScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<CommandSC>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ArenaScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<GroupScript>::GetScriptById(sid))
|
||||
LOG_ERROR("sql.sql", "Script named '%s' is assigned in the database, but has no code!", (*itr).c_str());
|
||||
!ScriptRegistry<ServerScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<WorldScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<FormulaScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<WorldMapScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<InstanceMapScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<BattlegroundMapScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ItemScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<CreatureScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<GameObjectScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AreaTriggerScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<BattlegroundScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<OutdoorPvPScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<CommandScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<WeatherScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AuctionHouseScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ConditionScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<VehicleScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<DynamicObjectScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<TransportScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AchievementCriteriaScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<PlayerScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<GuildScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<BGScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<AchievementScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ArenaTeamScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<SpellSC>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<MiscScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<PetScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<CommandSC>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<ArenaScript>::GetScriptById(sid) &&
|
||||
!ScriptRegistry<GroupScript>::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<CommandSC>::AddScript(this);
|
||||
}
|
||||
|
||||
// Specialize for each script type class like so:
|
||||
template class ScriptRegistry<SpellScriptLoader>;
|
||||
template class ScriptRegistry<ServerScript>;
|
||||
template class ScriptRegistry<WorldScript>;
|
||||
template class ScriptRegistry<FormulaScript>;
|
||||
template class ScriptRegistry<WorldMapScript>;
|
||||
template class ScriptRegistry<InstanceMapScript>;
|
||||
template class ScriptRegistry<BattlegroundMapScript>;
|
||||
template class ScriptRegistry<ItemScript>;
|
||||
template class ScriptRegistry<CreatureScript>;
|
||||
template class ScriptRegistry<GameObjectScript>;
|
||||
template class ScriptRegistry<AreaTriggerScript>;
|
||||
template class ScriptRegistry<BattlegroundScript>;
|
||||
template class ScriptRegistry<OutdoorPvPScript>;
|
||||
template class ScriptRegistry<CommandScript>;
|
||||
template class ScriptRegistry<WeatherScript>;
|
||||
template class ScriptRegistry<AuctionHouseScript>;
|
||||
template class ScriptRegistry<ConditionScript>;
|
||||
template class ScriptRegistry<VehicleScript>;
|
||||
template class ScriptRegistry<DynamicObjectScript>;
|
||||
template class ScriptRegistry<TransportScript>;
|
||||
template class ScriptRegistry<AchievementCriteriaScript>;
|
||||
template class ScriptRegistry<PlayerScript>;
|
||||
template class ScriptRegistry<GuildScript>;
|
||||
template class ScriptRegistry<GroupScript>;
|
||||
template class ScriptRegistry<GlobalScript>;
|
||||
template class ScriptRegistry<UnitScript>;
|
||||
template class ScriptRegistry<AllCreatureScript>;
|
||||
template class ScriptRegistry<AllMapScript>;
|
||||
template class ScriptRegistry<MovementHandlerScript>;
|
||||
template class ScriptRegistry<BGScript>;
|
||||
template class ScriptRegistry<ArenaTeamScript>;
|
||||
template class ScriptRegistry<SpellSC>;
|
||||
template class ScriptRegistry<AccountScript>;
|
||||
template class ScriptRegistry<GameEventScript>;
|
||||
template class ScriptRegistry<MailScript>;
|
||||
template class ScriptRegistry<AchievementScript>;
|
||||
template class ScriptRegistry<MiscScript>;
|
||||
template class ScriptRegistry<PetScript>;
|
||||
template class ScriptRegistry<ArenaScript>;
|
||||
template class ScriptRegistry<CommandSC>;
|
||||
|
||||
Reference in New Issue
Block a user