CMake: Use inherited dependencies in scripts
* Removes the circular dependency between game <-> scripts
This commit is contained in:
1 parent
b96f20c0d4
commit
7ef9b246b5
7 files changed
+66
-125
No files matched your search
@@ -257,4 +257,8 @@ class TC_GAME_API SmartGameObjectAI : public GameObjectAI
|
||||
private:
|
||||
SmartScript mScript;
|
||||
};
|
||||
|
||||
/// Registers scripts required by the SAI scripting system
|
||||
void AddSC_SmartScripts();
|
||||
|
||||
#endif
|
||||
@@ -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)
|
||||
|
||||
@@ -867,6 +867,15 @@ class TC_GAME_API 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();
|
||||
@@ -1102,6 +1111,8 @@ class TC_GAME_API ScriptMgr
|
||||
|
||||
//atomic op counter for active scripts amount
|
||||
std::atomic<uint32> _scheduledScripts;
|
||||
|
||||
ScriptLoaderCallbackType _script_loader_callback;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -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,133 +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
|
||||
../game/Maps/AreaBoundary.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/ipc
|
||||
${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/PlayerAI
|
||||
${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/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/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/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}
|
||||
${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()
|
||||
@@ -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();
|
||||
File renamed without changes.
@@ -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"
|
||||
@@ -192,6 +193,7 @@ extern int main(int argc, char** argv)
|
||||
LoadRealmInfo();
|
||||
|
||||
// Initialize the World
|
||||
sScriptMgr->SetScriptLoader(AddScripts);
|
||||
sWorld->SetInitialWorldSettings();
|
||||
|
||||
// Launch CliRunnable thread
|
||||
|
||||
Reference in new issue
Block a user