diff options
| author | Yehonal <yehonal.azeroth@gmail.com> | 2016-08-07 12:21:52 +0200 |
|---|---|---|
| committer | Yehonal <yehonal.azeroth@gmail.com> | 2016-08-07 12:21:52 +0200 |
| commit | 1aef789c8561df528836940598eadbd76af1e39e (patch) | |
| tree | 797157712ed0d55e02683688b39fdb7b443b2766 | |
| parent | e72b8ac1cc263f749a58c562f048403d39cc21cf (diff) | |
[Core/Cmake] Scripts are now added dynamically
You can now add your scripts using cmake inside your module
instead patch core cpp files
18 files changed, 101 insertions, 96 deletions
diff --git a/src/cmake/utils.cmake b/src/cmake/utils.cmake index b3ab0f6b42..742c40d43b 100644 --- a/src/cmake/utils.cmake +++ b/src/cmake/utils.cmake @@ -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}) @@ -69,6 +69,21 @@ MACRO(AZTH_SET_PATH name 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 # MACRO(AZTH_ADD_INC_PATH val) diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 29194632c1..04aefdec48 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -1196,7 +1196,7 @@ class SmartTrigger : public AreaTriggerScript } }; -void AddSC_SmartSCripts() +void AddSC_SmartScripts() { new SmartTrigger(); } diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index 8c87c6bd09..211549f0d6 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -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} diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 4c744753ff..3e448ae84c 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -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()]; diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index eff5254c68..42784a96d6 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -799,6 +799,7 @@ class ScriptMgr void Initialize(); void LoadDatabase(); void FillSpellSummary(); + void CheckIfScriptsInDatabaseExist(); const char* ScriptsVersion() const { return "Integrated Trinity Scripts"; } diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index 44ceb35eb2..9d5261e666 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -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} diff --git a/src/server/scripts/Custom/CMakeLists.txt b/src/server/scripts/Custom/CMakeLists.txt deleted file mode 100644 index 26b9eb6ccb..0000000000 --- a/src/server/scripts/Custom/CMakeLists.txt +++ /dev/null @@ -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") diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt index cf5a49ed8f..2ccc1001a8 100644 --- a/src/server/scripts/EasternKingdoms/CMakeLists.txt +++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt @@ -164,4 +164,6 @@ set(scripts_STAT_SRCS EasternKingdoms/TheStockade/instance_the_stockade.cpp ) +AZTH_ADD_SCRIPTS("EasternKingdoms" "ScriptLoader.h") + message(" -> Prepared: Eastern Kingdoms") diff --git a/src/server/scripts/Events/CMakeLists.txt b/src/server/scripts/Events/CMakeLists.txt index c14891c9e8..5f9c9aba2e 100644 --- a/src/server/scripts/Events/CMakeLists.txt +++ b/src/server/scripts/Events/CMakeLists.txt @@ -9,4 +9,6 @@ set(scripts_STAT_SRCS Events/midsummer.cpp ) -message(" -> Prepared: Events")
\ No newline at end of file +AZTH_ADD_SCRIPTS("Event" "ScriptLoader.h") + +message(" -> Prepared: Events") diff --git a/src/server/scripts/GenLoader.cpp.cmake b/src/server/scripts/GenLoader.cpp.cmake new file mode 100644 index 0000000000..7e656f099b --- /dev/null +++ b/src/server/scripts/GenLoader.cpp.cmake @@ -0,0 +1,7 @@ +// This file is autogenerated, please do not modify directly! + +@AZTH_SCRIPTS_INCLUDES@ + +void AddScripts() { + @AZTH_ADD_SCRIPTS_LIST@ +} diff --git a/src/server/scripts/Kalimdor/CMakeLists.txt b/src/server/scripts/Kalimdor/CMakeLists.txt index 674f7cee51..cd987796dd 100644 --- a/src/server/scripts/Kalimdor/CMakeLists.txt +++ b/src/server/scripts/Kalimdor/CMakeLists.txt @@ -105,4 +105,6 @@ set(scripts_STAT_SRCS Kalimdor/DireMaul/dire_maul.h ) +AZTH_ADD_SCRIPTS("Kalimdor" "ScriptLoader.h") + message(" -> Prepared: Kalimdor") diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt index 3805aad11f..62d2f083b9 100644 --- a/src/server/scripts/Northrend/CMakeLists.txt +++ b/src/server/scripts/Northrend/CMakeLists.txt @@ -196,4 +196,6 @@ set(scripts_STAT_SRCS Northrend/DraktharonKeep/boss_dred.cpp ) +AZTH_ADD_SCRIPTS("Northrend" "ScriptLoader.h") + message(" -> Prepared: Northrend") diff --git a/src/server/scripts/OutdoorPvP/CMakeLists.txt b/src/server/scripts/OutdoorPvP/CMakeLists.txt index 728a5f88e7..dcdd6b30c0 100644 --- a/src/server/scripts/OutdoorPvP/CMakeLists.txt +++ b/src/server/scripts/OutdoorPvP/CMakeLists.txt @@ -26,4 +26,6 @@ set(scripts_STAT_SRCS OutdoorPvP/OutdoorPvPGH.h ) +AZTH_ADD_SCRIPTS("OutdoorPvP" "ScriptLoader.h") + message(" -> Prepared: Outdoor PVP Zones") diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 606a4f42a1..660aae1bb0 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -109,4 +109,6 @@ set(scripts_STAT_SRCS Outland/zone_zangarmarsh.cpp ) +AZTH_ADD_SCRIPTS("Outland" "ScriptLoader.h") + message(" -> Prepared: Outland") diff --git a/src/server/scripts/Pet/CMakeLists.txt b/src/server/scripts/Pet/CMakeLists.txt index 47ccd38c79..b91af24a77 100644 --- a/src/server/scripts/Pet/CMakeLists.txt +++ b/src/server/scripts/Pet/CMakeLists.txt @@ -18,4 +18,6 @@ set(scripts_STAT_SRCS Pet/pet_shaman.cpp ) +AZTH_ADD_SCRIPTS("Pet" "ScriptLoader.h") + message(" -> Prepared: Pet") diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/scripts/ScriptLoader.cpp index 3b13eff925..89ac21bb38 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/scripts/ScriptLoader.cpp @@ -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 -} diff --git a/src/server/game/Scripting/ScriptLoader.h b/src/server/scripts/ScriptLoader.h index 301b0e736b..2ca37df35d 100644 --- a/src/server/game/Scripting/ScriptLoader.h +++ b/src/server/scripts/ScriptLoader.h @@ -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 diff --git a/src/server/scripts/World/CMakeLists.txt b/src/server/scripts/World/CMakeLists.txt index 84bcb1e6c0..192a8f1564 100644 --- a/src/server/scripts/World/CMakeLists.txt +++ b/src/server/scripts/World/CMakeLists.txt @@ -23,4 +23,6 @@ set(scripts_STAT_SRCS World/npcs_special.cpp ) +AZTH_ADD_SCRIPTS("World" "ScriptLoader.h") + message(" -> Prepared: World") |
