summaryrefslogtreecommitdiff
path: root/src/server/game/Scripting/ScriptMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Scripting/ScriptMgr.cpp')
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp192
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>;