aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scripting
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2023-07-09 11:59:35 +0200
committerGitHub <noreply@github.com>2023-07-09 11:59:35 +0200
commitd015711fbb7a8bf57f7bb64ba8113c942d5125de (patch)
tree1f89cd7221e829a6c49f80208e8e7508d2f6e1c0 /src/server/game/Scripting
parent996485e90e2a1ae75a4b93b33bd807f85060ca26 (diff)
Core/SAI: Implemented new source type SMART_SCRIPT_TYPE_EVENT (3) (#28816)
Diffstat (limited to 'src/server/game/Scripting')
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp28
-rw-r--r--src/server/game/Scripting/ScriptMgr.h18
2 files changed, 45 insertions, 1 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index ea370b4efb4..1dfaa9aeb67 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -87,7 +87,7 @@ struct is_script_database_bound<AreaTriggerScript>
template<>
struct is_script_database_bound<BattlefieldScript>
- : std::true_type { };
+ : std::true_type { };
template<>
struct is_script_database_bound<BattlegroundScript>
@@ -137,6 +137,10 @@ template<>
struct is_script_database_bound<WorldStateScript>
: std::true_type { };
+template<>
+struct is_script_database_bound<EventScript>
+ : std::true_type { };
+
enum Spells
{
SPELL_HOTSWAP_VISUAL_SPELL_EFFECT = 40162 // 59084
@@ -2358,6 +2362,15 @@ void ScriptMgr::OnWorldStateValueChange(WorldStateTemplate const* worldStateTemp
tmpscript->OnValueChange(worldStateTemplate->Id, oldValue, newValue, map);
}
+// Event
+void ScriptMgr::OnEventTrigger(WorldObject* object, WorldObject* invoker, uint32 eventId)
+{
+ ASSERT(invoker);
+
+ GET_SCRIPT(EventScript, sObjectMgr->GetEventScriptId(eventId), tmpscript);
+ tmpscript->OnTrigger(object, invoker, eventId);
+}
+
SpellScriptLoader::SpellScriptLoader(char const* name)
: ScriptObject(name)
{
@@ -3209,6 +3222,18 @@ void WorldStateScript::OnValueChange(int32 /*worldStateId*/, int32 /*oldValue*/,
{
}
+EventScript::EventScript(char const* name)
+ : ScriptObject(name)
+{
+ ScriptRegistry<EventScript>::Instance()->AddScript(this);
+}
+
+EventScript::~EventScript() = default;
+
+void EventScript::OnTrigger(WorldObject* /*object*/, WorldObject* /*invoker*/, uint32 /*eventId*/)
+{
+}
+
// Specialize for each script type class like so:
template class TC_GAME_API ScriptRegistry<SpellScriptLoader>;
template class TC_GAME_API ScriptRegistry<ServerScript>;
@@ -3243,3 +3268,4 @@ 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>;
+template class TC_GAME_API ScriptRegistry<EventScript>;
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index 631b5320cd6..f20652607b2 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -990,6 +990,20 @@ class TC_GAME_API WorldStateScript : public ScriptObject
virtual void OnValueChange(int32 worldStateId, int32 oldValue, int32 newValue, Map const* map);
};
+class TC_GAME_API EventScript : public ScriptObject
+{
+ protected:
+
+ explicit EventScript(char const* name);
+
+ public:
+
+ ~EventScript();
+
+ // Called when a game event is triggered
+ virtual void OnTrigger(WorldObject* object, WorldObject* invoker, uint32 eventId);
+};
+
// Manages registration, loading, and execution of scripts.
class TC_GAME_API ScriptMgr
{
@@ -1296,6 +1310,10 @@ class TC_GAME_API ScriptMgr
void OnWorldStateValueChange(WorldStateTemplate const* worldStateTemplate, int32 oldValue, int32 newValue, Map const* map);
+ public: /* EventScript */
+
+ void OnEventTrigger(WorldObject* object, WorldObject* invoker, uint32 eventId);
+
private:
uint32 _scriptCount;
bool _scriptIdUpdated;