mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 01:08:35 +00:00
[Core/Cmake] Scripts are now added dynamically
You can now add your scripts using cmake inside your module instead patch core cpp files
This commit is contained in:
@@ -37,8 +37,8 @@ MACRO(AZTH_ADD_GLOBAL name val)
|
||||
AZTH_GET_GLOBAL(${name})
|
||||
|
||||
set_property ( GLOBAL PROPERTY ${name}
|
||||
${val}
|
||||
${${name}}
|
||||
${val}
|
||||
)
|
||||
# after set , create the variable for current scope
|
||||
AZTH_GET_GLOBAL(${name})
|
||||
@@ -68,6 +68,21 @@ MACRO(AZTH_SET_PATH name val)
|
||||
AZTH_ADD_INC_PATH(${val})
|
||||
ENDMACRO()
|
||||
|
||||
#
|
||||
# AZTH_ADD_SCRIPTS
|
||||
#
|
||||
MACRO(AZTH_ADD_SCRIPTS script_def include)
|
||||
AZTH_ADD_GLOBAL("AZTH_ADD_SCRIPTS_LIST" "Add${script_def}Scripts()\;")
|
||||
|
||||
|
||||
if (NOT ${include} STREQUAL "")
|
||||
AZTH_GET_GLOBAL("AZTH_ADD_SCRIPTS_INCLUDE")
|
||||
if (NOT ";${AZTH_ADD_SCRIPTS_INCLUDE};" MATCHES ";${include};")
|
||||
AZTH_ADD_GLOBAL("AZTH_ADD_SCRIPTS_INCLUDE" "${include}\;")
|
||||
endif()
|
||||
endif()
|
||||
ENDMACRO()
|
||||
|
||||
#
|
||||
# AZTH_ADD_INC_PATH
|
||||
#
|
||||
|
||||
@@ -1196,7 +1196,7 @@ class SmartTrigger : public AreaTriggerScript
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_SmartSCripts()
|
||||
void AddSC_SmartScripts()
|
||||
{
|
||||
new SmartTrigger();
|
||||
}
|
||||
|
||||
@@ -205,6 +205,7 @@ include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/World
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ArenaSpectator
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Misc
|
||||
${CMAKE_SOURCE_DIR}/src/server/scripts/
|
||||
${CMAKE_SOURCE_DIR}/src/server/scripts/PrecompiledHeaders
|
||||
${ACE_INCLUDE_DIR}
|
||||
${MYSQL_INCLUDE_DIR}
|
||||
|
||||
@@ -232,6 +232,40 @@ struct TSpellSummary
|
||||
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()))
|
||||
{
|
||||
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<GroupScript>::GetScriptById(sid))
|
||||
sLog->outErrorDb("Script named '%s' is assigned in database, but has no code!", (*itr).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptMgr::FillSpellSummary()
|
||||
{
|
||||
SpellSummary = new TSpellSummary[sSpellMgr->GetSpellInfoStoreSize()];
|
||||
|
||||
@@ -799,6 +799,7 @@ class ScriptMgr
|
||||
void Initialize();
|
||||
void LoadDatabase();
|
||||
void FillSpellSummary();
|
||||
void CheckIfScriptsInDatabaseExist();
|
||||
|
||||
const char* ScriptsVersion() const { return "Integrated Trinity Scripts"; }
|
||||
|
||||
|
||||
@@ -22,13 +22,19 @@ include(Commands/CMakeLists.txt)
|
||||
|
||||
set(scripts_STAT_SRCS
|
||||
${scripts_STAT_SRCS}
|
||||
ScriptLoader.cpp
|
||||
ScriptLoader.h
|
||||
${BUILDDIR}/GenLoader.cpp
|
||||
../game/AI/ScriptedAI/ScriptedEscortAI.cpp
|
||||
../game/AI/ScriptedAI/ScriptedCreature.cpp
|
||||
../game/AI/ScriptedAI/ScriptedFollowerAI.cpp
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("Spell" "ScriptLoader.h")
|
||||
AZTH_ADD_SCRIPTS("SC_Smart" "ScriptLoader.h")
|
||||
AZTH_ADD_SCRIPTS("Command" "ScriptLoader.h")
|
||||
|
||||
if(SCRIPTS)
|
||||
include(Custom/CMakeLists.txt)
|
||||
include(World/CMakeLists.txt)
|
||||
include(OutdoorPvP/CMakeLists.txt)
|
||||
include(EasternKingdoms/CMakeLists.txt)
|
||||
@@ -39,6 +45,18 @@ if(SCRIPTS)
|
||||
include(Pet/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
|
||||
AZTH_GET_GLOBAL("AZTH_ADD_SCRIPTS_LIST")
|
||||
AZTH_GET_GLOBAL("AZTH_ADD_SCRIPTS_INCLUDE")
|
||||
|
||||
set("AZTH_SCRIPTS_INCLUDES" "")
|
||||
|
||||
FOREACH (include ${AZTH_ADD_SCRIPTS_INCLUDE})
|
||||
set("AZTH_SCRIPTS_INCLUDES" "#include \"${include}\"\n${AZTH_SCRIPTS_INCLUDES}")
|
||||
ENDFOREACH()
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GenLoader.cpp.cmake ${BUILDDIR}/GenLoader.cpp)
|
||||
|
||||
message(STATUS "SCRIPT PREPARATION COMPLETE")
|
||||
message("")
|
||||
|
||||
@@ -140,6 +158,7 @@ include_directories(
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/World
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/ArenaSpectator
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/Misc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders
|
||||
${ACE_INCLUDE_DIR}
|
||||
${MYSQL_INCLUDE_DIR}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# Copyright (C)
|
||||
#
|
||||
# This file is free software; as a special exception the author gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
set(scripts_STAT_SRCS
|
||||
${scripts_STAT_SRCS}
|
||||
)
|
||||
|
||||
message(" -> Prepared: Custom")
|
||||
@@ -164,4 +164,6 @@ set(scripts_STAT_SRCS
|
||||
EasternKingdoms/TheStockade/instance_the_stockade.cpp
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("EasternKingdoms" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Eastern Kingdoms")
|
||||
|
||||
@@ -9,4 +9,6 @@ set(scripts_STAT_SRCS
|
||||
Events/midsummer.cpp
|
||||
)
|
||||
|
||||
message(" -> Prepared: Events")
|
||||
AZTH_ADD_SCRIPTS("Event" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Events")
|
||||
|
||||
7
src/server/scripts/GenLoader.cpp.cmake
Normal file
7
src/server/scripts/GenLoader.cpp.cmake
Normal file
@@ -0,0 +1,7 @@
|
||||
// This file is autogenerated, please do not modify directly!
|
||||
|
||||
@AZTH_SCRIPTS_INCLUDES@
|
||||
|
||||
void AddScripts() {
|
||||
@AZTH_ADD_SCRIPTS_LIST@
|
||||
}
|
||||
@@ -105,4 +105,6 @@ set(scripts_STAT_SRCS
|
||||
Kalimdor/DireMaul/dire_maul.h
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("Kalimdor" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Kalimdor")
|
||||
|
||||
@@ -196,4 +196,6 @@ set(scripts_STAT_SRCS
|
||||
Northrend/DraktharonKeep/boss_dred.cpp
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("Northrend" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Northrend")
|
||||
|
||||
@@ -26,4 +26,6 @@ set(scripts_STAT_SRCS
|
||||
OutdoorPvP/OutdoorPvPGH.h
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("OutdoorPvP" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Outdoor PVP Zones")
|
||||
|
||||
@@ -109,4 +109,6 @@ set(scripts_STAT_SRCS
|
||||
Outland/zone_zangarmarsh.cpp
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("Outland" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Outland")
|
||||
|
||||
@@ -18,4 +18,6 @@ set(scripts_STAT_SRCS
|
||||
Pet/pet_shaman.cpp
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("Pet" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: Pet")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C)
|
||||
* Copyright (C)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
@@ -40,7 +40,7 @@ void AddSC_warrior_spell_scripts();
|
||||
void AddSC_quest_spell_scripts();
|
||||
void AddSC_item_spell_scripts();
|
||||
|
||||
void AddSC_SmartSCripts();
|
||||
void AddSC_SmartScripts();
|
||||
|
||||
//Commands
|
||||
void AddSC_account_commandscript();
|
||||
@@ -237,7 +237,7 @@ void AddSC_western_plaguelands();
|
||||
void AddSC_westfall();
|
||||
void AddSC_wetlands();
|
||||
|
||||
//kalimdor
|
||||
//kalimdor
|
||||
void AddSC_instance_blackfathom_deeps(); //Blackfathom Depths
|
||||
void AddSC_hyjal(); //CoT Battle for Mt. Hyjal
|
||||
void AddSC_boss_archimonde();
|
||||
@@ -588,59 +588,6 @@ void AddSC_outdoorpvp_gh();
|
||||
|
||||
#endif
|
||||
|
||||
void AddScripts()
|
||||
{
|
||||
AddSpellScripts();
|
||||
AddSC_SmartSCripts();
|
||||
AddCommandScripts();
|
||||
#ifdef SCRIPTS
|
||||
AddWorldScripts();
|
||||
AddEventScripts();
|
||||
AddEasternKingdomsScripts();
|
||||
AddKalimdorScripts();
|
||||
AddOutlandScripts();
|
||||
AddNorthrendScripts();
|
||||
AddPetScripts();
|
||||
AddBattlegroundScripts();
|
||||
AddOutdoorPvPScripts();
|
||||
AddCustomScripts();
|
||||
#endif
|
||||
}
|
||||
|
||||
void 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()))
|
||||
{
|
||||
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<GroupScript>::GetScriptById(sid))
|
||||
sLog->outErrorDb("Script named '%s' is assigned in database, but has no code!", (*itr).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void AddSpellScripts()
|
||||
{
|
||||
AddSC_deathknight_spell_scripts();
|
||||
@@ -1233,21 +1180,3 @@ void AddOutdoorPvPScripts()
|
||||
#endif
|
||||
}
|
||||
|
||||
void AddBattlegroundScripts()
|
||||
{
|
||||
#ifdef SCRIPTS
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SCRIPTS
|
||||
/* This is where custom scripts' loading functions should be declared. */
|
||||
|
||||
#endif
|
||||
|
||||
void AddCustomScripts()
|
||||
{
|
||||
#ifdef SCRIPTS
|
||||
/* This is where custom scripts should be added. */
|
||||
|
||||
#endif
|
||||
}
|
||||
@@ -19,18 +19,16 @@
|
||||
#define SC_SCRIPTLOADER_H
|
||||
|
||||
void AddScripts();
|
||||
void CheckIfScriptsInDatabaseExist();
|
||||
void AddSpellScripts();
|
||||
void AddCommandScripts();
|
||||
void AddSC_SmartScripts();
|
||||
void AddWorldScripts();
|
||||
void AddEventScripts();
|
||||
void AddEasternKingdomsScripts();
|
||||
void AddKalimdorScripts();
|
||||
void AddOutlandScripts();
|
||||
void AddNorthrendScripts();
|
||||
void AddBattlegroundScripts();
|
||||
void AddPetScripts();
|
||||
void AddOutdoorPvPScripts();
|
||||
void AddCustomScripts();
|
||||
|
||||
#endif
|
||||
@@ -23,4 +23,6 @@ set(scripts_STAT_SRCS
|
||||
World/npcs_special.cpp
|
||||
)
|
||||
|
||||
AZTH_ADD_SCRIPTS("World" "ScriptLoader.h")
|
||||
|
||||
message(" -> Prepared: World")
|
||||
|
||||
Reference in New Issue
Block a user