[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:
Yehonal
2016-08-07 12:21:52 +02:00
parent e72b8ac1cc
commit 1aef789c85
18 changed files with 101 additions and 96 deletions

View File

@@ -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
#

View File

@@ -1196,7 +1196,7 @@ class SmartTrigger : public AreaTriggerScript
}
};
void AddSC_SmartSCripts()
void AddSC_SmartScripts()
{
new SmartTrigger();
}

View File

@@ -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}

View File

@@ -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()];

View File

@@ -799,6 +799,7 @@ class ScriptMgr
void Initialize();
void LoadDatabase();
void FillSpellSummary();
void CheckIfScriptsInDatabaseExist();
const char* ScriptsVersion() const { return "Integrated Trinity Scripts"; }

View File

@@ -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}

View File

@@ -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")

View File

@@ -164,4 +164,6 @@ set(scripts_STAT_SRCS
EasternKingdoms/TheStockade/instance_the_stockade.cpp
)
AZTH_ADD_SCRIPTS("EasternKingdoms" "ScriptLoader.h")
message(" -> Prepared: Eastern Kingdoms")

View File

@@ -9,4 +9,6 @@ set(scripts_STAT_SRCS
Events/midsummer.cpp
)
message(" -> Prepared: Events")
AZTH_ADD_SCRIPTS("Event" "ScriptLoader.h")
message(" -> Prepared: Events")

View File

@@ -0,0 +1,7 @@
// This file is autogenerated, please do not modify directly!
@AZTH_SCRIPTS_INCLUDES@
void AddScripts() {
@AZTH_ADD_SCRIPTS_LIST@
}

View File

@@ -105,4 +105,6 @@ set(scripts_STAT_SRCS
Kalimdor/DireMaul/dire_maul.h
)
AZTH_ADD_SCRIPTS("Kalimdor" "ScriptLoader.h")
message(" -> Prepared: Kalimdor")

View File

@@ -196,4 +196,6 @@ set(scripts_STAT_SRCS
Northrend/DraktharonKeep/boss_dred.cpp
)
AZTH_ADD_SCRIPTS("Northrend" "ScriptLoader.h")
message(" -> Prepared: Northrend")

View File

@@ -26,4 +26,6 @@ set(scripts_STAT_SRCS
OutdoorPvP/OutdoorPvPGH.h
)
AZTH_ADD_SCRIPTS("OutdoorPvP" "ScriptLoader.h")
message(" -> Prepared: Outdoor PVP Zones")

View File

@@ -109,4 +109,6 @@ set(scripts_STAT_SRCS
Outland/zone_zangarmarsh.cpp
)
AZTH_ADD_SCRIPTS("Outland" "ScriptLoader.h")
message(" -> Prepared: Outland")

View File

@@ -18,4 +18,6 @@ set(scripts_STAT_SRCS
Pet/pet_shaman.cpp
)
AZTH_ADD_SCRIPTS("Pet" "ScriptLoader.h")
message(" -> Prepared: Pet")

View File

@@ -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
}

View File

@@ -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

View File

@@ -23,4 +23,6 @@ set(scripts_STAT_SRCS
World/npcs_special.cpp
)
AZTH_ADD_SCRIPTS("World" "ScriptLoader.h")
message(" -> Prepared: World")