diff options
Diffstat (limited to 'src/server/game/Scripting/ScriptMgr.cpp')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 192 |
1 files changed, 101 insertions, 91 deletions
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<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>; |