diff --git a/src/cmake/utils.cmake b/src/cmake/utils.cmake index b3ab0f6b4..742c40d43 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}) @@ -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 # diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 29194632c..04aefdec4 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 8c87c6bd0..211549f0d 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 4c744753f..3e448ae84 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::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::GetScriptById(sid) && + !ScriptRegistry::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 eff5254c6..42784a96d 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 44ceb35eb..9d5261e66 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 26b9eb6cc..000000000 --- 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 cf5a49ed8..2ccc1001a 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 c14891c9e..5f9c9aba2 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 000000000..7e656f099 --- /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 674f7cee5..cd987796d 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 3805aad11..62d2f083b 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 728a5f88e..dcdd6b30c 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 606a4f42a..660aae1bb 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 47ccd38c7..b91af24a7 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 similarity index 93% rename from src/server/game/Scripting/ScriptLoader.cpp rename to src/server/scripts/ScriptLoader.cpp index 3b13eff92..89ac21bb3 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::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::GetScriptById(sid) && - !ScriptRegistry::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 similarity index 91% rename from src/server/game/Scripting/ScriptLoader.h rename to src/server/scripts/ScriptLoader.h index 301b0e736..2ca37df35 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 84bcb1e6c..192a8f156 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")