diff options
author | Naios <naios-dev@live.de> | 2016-03-16 15:34:25 +0100 |
---|---|---|
committer | Naios <naios-dev@live.de> | 2016-03-19 23:19:54 +0100 |
commit | 28d8f7f70dcf01b5c849f30846c6b86a11dea7e7 (patch) | |
tree | 34ad6f626603ef4533a7b7b49d3c7c9987ef729f | |
parent | 5fe83abbe57c9c640bbfc506f0e879c2ae4f81a9 (diff) |
CMake: Use inherited dependencies in scripts
* Removes the circular dependency between game <-> scripts
(cherry picked from commit 96bc31924a5a418d37bd961ef2880f9072126348)
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 4 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 11 | ||||
-rw-r--r-- | src/server/scripts/CMakeLists.txt | 160 | ||||
-rw-r--r-- | src/server/scripts/ScriptLoader.cpp (renamed from src/server/game/Scripting/ScriptLoader.cpp) | 2 | ||||
-rw-r--r-- | src/server/scripts/ScriptLoader.h (renamed from src/server/game/Scripting/ScriptLoader.h) | 0 | ||||
-rw-r--r-- | src/server/worldserver/Main.cpp | 2 |
7 files changed, 66 insertions, 126 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index cfc8fbe785d..8454ea3b484 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -257,4 +257,8 @@ class SmartGameObjectAI : public GameObjectAI private: SmartScript mScript; }; + +/// Registers scripts required by the SAI scripting system +void AddSC_SmartScripts(); + #endif diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 7e2146b4751..2184899de02 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -22,10 +22,10 @@ #include "DBCStores.h" #include "ObjectMgr.h" #include "OutdoorPvPMgr.h" -#include "ScriptLoader.h" #include "ScriptSystem.h" #include "Transport.h" #include "Vehicle.h" +#include "SmartAI.h" #include "SpellInfo.h" #include "SpellScript.h" #include "GossipDef.h" @@ -240,7 +240,8 @@ struct TSpellSummary uint8 Effects; // set of enum SelectEffect } *SpellSummary; -ScriptMgr::ScriptMgr() : _scriptCount(0), _scheduledScripts(0) +ScriptMgr::ScriptMgr() + : _scriptCount(0), _scheduledScripts(0), _script_loader_callback(nullptr) { } @@ -261,7 +262,13 @@ void ScriptMgr::Initialize() TC_LOG_INFO("server.loading", "Loading C++ scripts"); FillSpellSummary(); - AddScripts(); + + AddSC_SmartScripts(); + + ASSERT(_script_loader_callback, + "Script loader callback wasn't registered!"); + + _script_loader_callback(); #ifdef SCRIPTS for (std::string const& scriptName : UnusedScriptNames) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index fc04b0c7b8b..79c1bc3f60f 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -863,6 +863,15 @@ class ScriptMgr void IncrementScriptCount() { ++_scriptCount; } uint32 GetScriptCount() const { return _scriptCount; } + typedef void(*ScriptLoaderCallbackType)(); + + /// Sets the script loader callback which is invoked to load scripts + /// (Workaround for circular dependency game <-> scripts) + void SetScriptLoader(ScriptLoaderCallbackType script_loader_callback) + { + _script_loader_callback = script_loader_callback; + } + public: /* Unloading */ void Unload(); @@ -1097,6 +1106,8 @@ class ScriptMgr //atomic op counter for active scripts amount std::atomic<uint64> _scheduledScripts; + + ScriptLoaderCallbackType _script_loader_callback; }; #endif diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index b89d12b70a8..d0f639cb49a 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -10,11 +10,6 @@ # Enable precompiled headers when using the GCC compiler. -if (USE_SCRIPTPCH) - set(scripts_STAT_PCH_HDR PrecompiledHeaders/ScriptPCH.h) - set(scripts_STAT_PCH_SRC PrecompiledHeaders/ScriptPCH.cpp) -endif () - message(STATUS "SCRIPT PREPARATIONS") macro(PrepareScripts name out) @@ -26,134 +21,57 @@ macro(PrepareScripts name out) message(STATUS " -> Prepared: ${name}") endmacro(PrepareScripts) -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - ../game/AI/ScriptedAI/ScriptedEscortAI.cpp - ../game/AI/ScriptedAI/ScriptedCreature.cpp - ../game/AI/ScriptedAI/ScriptedFollowerAI.cpp -) - -PrepareScripts(Spells scripts_STAT_SRCS) -PrepareScripts(Commands scripts_STAT_SRCS) +PrepareScripts(Spells PRIVATE_SOURCES) +PrepareScripts(Commands PRIVATE_SOURCES) if(SCRIPTS) - PrepareScripts(Custom scripts_STAT_SRCS) - PrepareScripts(World scripts_STAT_SRCS) - PrepareScripts(OutdoorPvP scripts_STAT_SRCS) - PrepareScripts(EasternKingdoms scripts_STAT_SRCS) - PrepareScripts(Kalimdor scripts_STAT_SRCS) - PrepareScripts(Outland scripts_STAT_SRCS) - PrepareScripts(Northrend scripts_STAT_SRCS) - PrepareScripts(Maelstrom scripts_STAT_SRCS) - PrepareScripts(Events scripts_STAT_SRCS) - PrepareScripts(Pet scripts_STAT_SRCS) + PrepareScripts(Custom PRIVATE_SOURCES) + PrepareScripts(World PRIVATE_SOURCES) + PrepareScripts(OutdoorPvP PRIVATE_SOURCES) + PrepareScripts(EasternKingdoms PRIVATE_SOURCES) + PrepareScripts(Kalimdor PRIVATE_SOURCES) + PrepareScripts(Outland PRIVATE_SOURCES) + PrepareScripts(Northrend PRIVATE_SOURCES) + PrepareScripts(Maelstrom PRIVATE_SOURCES) + PrepareScripts(Events PRIVATE_SOURCES) + PrepareScripts(Pet PRIVATE_SOURCES) endif() message(STATUS "SCRIPT PREPARATION COMPLETE") message("") -include_directories( - ${CMAKE_SOURCE_DIR}/dep/cppformat - ${CMAKE_SOURCE_DIR}/dep/g3dlite/include - ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include - ${CMAKE_SOURCE_DIR}/src/common/ - ${CMAKE_SOURCE_DIR}/src/common/Collision - ${CMAKE_SOURCE_DIR}/src/common/Collision/Management - ${CMAKE_SOURCE_DIR}/src/common/Collision/Maps - ${CMAKE_SOURCE_DIR}/src/common/Collision/Models - ${CMAKE_SOURCE_DIR}/src/common/Configuration - ${CMAKE_SOURCE_DIR}/src/common/Debugging - ${CMAKE_SOURCE_DIR}/src/common/Logging - ${CMAKE_SOURCE_DIR}/src/common/Threading - ${CMAKE_SOURCE_DIR}/src/common/Utilities - ${CMAKE_SOURCE_DIR}/src/server/database/Database - ${CMAKE_SOURCE_DIR}/src/server/game/Accounts - ${CMAKE_SOURCE_DIR}/src/server/game/Achievements - ${CMAKE_SOURCE_DIR}/src/server/game/Addons - ${CMAKE_SOURCE_DIR}/src/server/game/AI - ${CMAKE_SOURCE_DIR}/src/server/game/AI/CoreAI - ${CMAKE_SOURCE_DIR}/src/server/game/AI/ScriptedAI - ${CMAKE_SOURCE_DIR}/src/server/game/AI/SmartScripts - ${CMAKE_SOURCE_DIR}/src/server/game/AuctionHouse - ${CMAKE_SOURCE_DIR}/src/server/game/AuctionHouseBot - ${CMAKE_SOURCE_DIR}/src/server/game/Battlefield - ${CMAKE_SOURCE_DIR}/src/server/game/Battlefield/Zones - ${CMAKE_SOURCE_DIR}/src/server/game/Battlegrounds - ${CMAKE_SOURCE_DIR}/src/server/game/Battlegrounds/Zones - ${CMAKE_SOURCE_DIR}/src/server/game/Chat - ${CMAKE_SOURCE_DIR}/src/server/game/Chat/Channels - ${CMAKE_SOURCE_DIR}/src/server/game/Combat - ${CMAKE_SOURCE_DIR}/src/server/game/Conditions - ${CMAKE_SOURCE_DIR}/src/server/game/DataStores - ${CMAKE_SOURCE_DIR}/src/server/game/DungeonFinding - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/AreaTrigger - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Corpse - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Creature - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/DynamicObject - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/GameObject - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Item - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Item/Container - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Object - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Object/Updates - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Pet - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Player - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Transport - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Unit - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Vehicle - ${CMAKE_SOURCE_DIR}/src/server/game/Events - ${CMAKE_SOURCE_DIR}/src/server/game/Globals - ${CMAKE_SOURCE_DIR}/src/server/game/Grids - ${CMAKE_SOURCE_DIR}/src/server/game/Grids/Cells - ${CMAKE_SOURCE_DIR}/src/server/game/Grids/Notifiers - ${CMAKE_SOURCE_DIR}/src/server/game/Groups - ${CMAKE_SOURCE_DIR}/src/server/game/Guilds - ${CMAKE_SOURCE_DIR}/src/server/game/Handlers - ${CMAKE_SOURCE_DIR}/src/server/game/Instances - ${CMAKE_SOURCE_DIR}/src/server/game/Loot - ${CMAKE_SOURCE_DIR}/src/server/game/Mails - ${CMAKE_SOURCE_DIR}/src/server/game/Maps - ${CMAKE_SOURCE_DIR}/src/server/game/Miscellaneous - ${CMAKE_SOURCE_DIR}/src/server/game/Movement - ${CMAKE_SOURCE_DIR}/src/server/game/Movement/MovementGenerators - ${CMAKE_SOURCE_DIR}/src/server/game/Movement/Spline - ${CMAKE_SOURCE_DIR}/src/server/game/Movement/Waypoints - ${CMAKE_SOURCE_DIR}/src/server/game/OutdoorPvP - ${CMAKE_SOURCE_DIR}/src/server/game/Pools - ${CMAKE_SOURCE_DIR}/src/server/game/Quests - ${CMAKE_SOURCE_DIR}/src/server/game/Reputation - ${CMAKE_SOURCE_DIR}/src/server/game/Scripting - ${CMAKE_SOURCE_DIR}/src/server/game/Server - ${CMAKE_SOURCE_DIR}/src/server/game/Server/Packets - ${CMAKE_SOURCE_DIR}/src/server/game/Server/Protocol - ${CMAKE_SOURCE_DIR}/src/server/game/Skills - ${CMAKE_SOURCE_DIR}/src/server/game/Spells - ${CMAKE_SOURCE_DIR}/src/server/game/Spells/Auras - ${CMAKE_SOURCE_DIR}/src/server/game/Support - ${CMAKE_SOURCE_DIR}/src/server/game/Texts - ${CMAKE_SOURCE_DIR}/src/server/game/Tickets - ${CMAKE_SOURCE_DIR}/src/server/game/Tools - ${CMAKE_SOURCE_DIR}/src/server/game/Warden - ${CMAKE_SOURCE_DIR}/src/server/game/Weather - ${CMAKE_SOURCE_DIR}/src/server/game/World - ${CMAKE_SOURCE_DIR}/src/server/ipc - ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/src/server/shared/DataStores - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference - ${CMAKE_SOURCE_DIR}/src/server/shared/Packets - ${MYSQL_INCLUDE_DIR} - ${OPENSSL_INCLUDE_DIR} - ${VALGRIND_INCLUDE_DIR} -) +list(APPEND PRIVATE_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/ScriptLoader.h + ${CMAKE_CURRENT_SOURCE_DIR}/ScriptLoader.cpp) + +if (USE_SCRIPTPCH) + set(PRIVATE_PCH_HEADER PrecompiledHeaders/ScriptPCH.h) + set(PRIVATE_PCH_SOURCE PrecompiledHeaders/ScriptPCH.cpp) +endif () GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) -add_library(scripts STATIC - ${scripts_STAT_SRCS} - ${scripts_STAT_PCH_SRC} +add_library(scripts + ${PRIVATE_SOURCES} + ${PRIVATE_PCH_SOURCE} ) +target_include_directories(scripts + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}) + +target_link_libraries(scripts + PUBLIC + game) + +set_target_properties(scripts + PROPERTIES + FOLDER + "server") + # Generate precompiled header if (USE_SCRIPTPCH) - add_cxx_pch(scripts ${scripts_STAT_PCH_HDR} ${scripts_STAT_PCH_SRC}) + add_cxx_pch(scripts ${PRIVATE_PCH_HEADER} ${PRIVATE_PCH_SOURCE}) endif() diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/scripts/ScriptLoader.cpp index ccc4c39ccd1..145977a5f79 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/scripts/ScriptLoader.cpp @@ -19,7 +19,6 @@ #include "World.h" void AddSpellsScripts(); -void AddSC_SmartScripts(); void AddCommandsScripts(); #ifdef SCRIPTS @@ -38,7 +37,6 @@ void AddCustomScripts(); void AddScripts() { AddSpellsScripts(); - AddSC_SmartScripts(); AddCommandsScripts(); #ifdef SCRIPTS AddWorldScripts(); diff --git a/src/server/game/Scripting/ScriptLoader.h b/src/server/scripts/ScriptLoader.h index 57b62df22d1..57b62df22d1 100644 --- a/src/server/game/Scripting/ScriptLoader.h +++ b/src/server/scripts/ScriptLoader.h diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index b26027e8960..5b94521817f 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -35,6 +35,7 @@ #include "InstanceSaveMgr.h" #include "ObjectAccessor.h" #include "ScriptMgr.h" +#include "ScriptLoader.h" #include "OutdoorPvP/OutdoorPvPMgr.h" #include "BattlegroundMgr.h" #include "TCSoap.h" @@ -193,6 +194,7 @@ extern int main(int argc, char** argv) LoadRealmInfo(); // Initialize the World + sScriptMgr->SetScriptLoader(AddScripts); sWorld->SetInitialWorldSettings(); // Launch CliRunnable thread |