diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-06-25 22:48:27 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-06-25 22:48:27 +0200 |
| commit | 737d94d7efe0b6c308ac1bf3692b6aa2e43f5adb (patch) | |
| tree | 678898e6b8d3834f53c39567242a36f547d2fa77 /src/server/game/Scripting | |
| parent | e708bd28d1056e83b99b11094b9056ce2e5864a9 (diff) | |
Core/World: implement database support for default map and realm wide world states
Co-Authored-By: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src/server/game/Scripting')
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 19 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 795b8e997eb..c911afdad87 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -133,6 +133,10 @@ template<> struct is_script_database_bound<QuestScript> : std::true_type { }; +template<> +struct is_script_database_bound<WorldStateScript> + : std::true_type { }; + enum Spells { SPELL_HOTSWAP_VISUAL_SPELL_EFFECT = 40162 // 59084 @@ -2322,6 +2326,7 @@ void ScriptMgr::OnSceneComplete(Player* player, uint32 sceneInstanceID, SceneTem tmpscript->OnSceneComplete(player, sceneInstanceID, sceneTemplate); } +// Quest void ScriptMgr::OnQuestStatusChange(Player* player, Quest const* quest, QuestStatus oldStatus, QuestStatus newStatus) { ASSERT(player); @@ -2349,6 +2354,15 @@ void ScriptMgr::OnQuestObjectiveChange(Player* player, Quest const* quest, Quest tmpscript->OnQuestObjectiveChange(player, quest, objective, oldAmount, newAmount); } +// WorldState +void ScriptMgr::OnWorldStateValueChange(WorldStateTemplate const* worldStateTemplate, int32 oldValue, int32 newValue, Map const* map) +{ + ASSERT(worldStateTemplate); + + GET_SCRIPT(WorldStateScript, worldStateTemplate->ScriptId, tmpscript); + tmpscript->OnValueChange(worldStateTemplate->Id, oldValue, newValue, map); +} + SpellScriptLoader::SpellScriptLoader(char const* name) : ScriptObject(name) { @@ -2638,6 +2652,14 @@ QuestScript::QuestScript(char const* name) QuestScript::~QuestScript() = default; +WorldStateScript::WorldStateScript(char const* name) + : ScriptObject(name) +{ + ScriptRegistry<WorldStateScript>::Instance()->AddScript(this); +} + +WorldStateScript::~WorldStateScript() = default; + // Specialize for each script type class like so: template class TC_GAME_API ScriptRegistry<SpellScriptLoader>; template class TC_GAME_API ScriptRegistry<ServerScript>; @@ -2671,3 +2693,4 @@ template class TC_GAME_API ScriptRegistry<AreaTriggerEntityScript>; template class TC_GAME_API ScriptRegistry<ConversationScript>; template class TC_GAME_API ScriptRegistry<SceneScript>; template class TC_GAME_API ScriptRegistry<QuestScript>; +template class TC_GAME_API ScriptRegistry<WorldStateScript>; diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 32ecfb431c7..e5fd8bee5b9 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -77,6 +77,7 @@ struct MapEntry; struct Position; struct QuestObjective; struct SceneTemplate; +struct WorldStateTemplate; namespace Trinity::ChatCommands { struct ChatCommandBuilder; } @@ -987,6 +988,20 @@ class TC_GAME_API QuestScript : public ScriptObject virtual void OnQuestObjectiveChange(Player* /*player*/, Quest const* /*quest*/, QuestObjective const& /*objective*/, int32 /*oldAmount*/, int32 /*newAmount*/) { } }; +class TC_GAME_API WorldStateScript : public ScriptObject +{ + protected: + + WorldStateScript(char const* name); + + public: + + ~WorldStateScript(); + + // Called when worldstate changes value, map is optional + virtual void OnValueChange([[maybe_unused]] int32 worldStateId, [[maybe_unused]] int32 oldValue, [[maybe_unused]] int32 newValue, [[maybe_unused]] Map const* map) { } +}; + // Manages registration, loading, and execution of scripts. class TC_GAME_API ScriptMgr { @@ -1289,6 +1304,10 @@ class TC_GAME_API ScriptMgr void OnQuestAcknowledgeAutoAccept(Player* player, Quest const* quest); void OnQuestObjectiveChange(Player* player, Quest const* quest, QuestObjective const& objective, int32 oldAmount, int32 newAmount); + public: /* WorldStateScript */ + + void OnWorldStateValueChange(WorldStateTemplate const* worldStateTemplate, int32 oldValue, int32 newValue, Map const* map); + private: uint32 _scriptCount; bool _scriptIdUpdated; |
