diff --git a/Source/Game/Entities/Conversation.cs b/Source/Game/Entities/Conversation.cs index dacd57882..2d3443d6f 100644 --- a/Source/Game/Entities/Conversation.cs +++ b/Source/Game/Entities/Conversation.cs @@ -48,6 +48,8 @@ namespace Game.Entities public override void Update(uint diff) { + Global.ScriptMgr.OnConversationUpdate(this, diff); + if (GetDuration() > TimeSpan.FromMilliseconds(diff)) { _duration -= TimeSpan.FromMilliseconds(diff); @@ -177,6 +179,7 @@ namespace Game.Entities if (!GetMap().AddToMap(this)) return false; + Global.ScriptMgr.OnConversationStart(this); return true; } diff --git a/Source/Game/Scripting/CoreScripts.cs b/Source/Game/Scripting/CoreScripts.cs index 67ab778ed..ea29b96ba 100644 --- a/Source/Game/Scripting/CoreScripts.cs +++ b/Source/Game/Scripting/CoreScripts.cs @@ -779,8 +779,14 @@ namespace Game.Scripting // Called when Conversation is created but not added to Map yet. public virtual void OnConversationCreate(Conversation conversation, Unit creator) { } + // Called when Conversation is started + public virtual void OnConversationStart(Conversation conversation) { } + // Called when player sends CMSG_CONVERSATION_LINE_STARTED with valid conversation guid public virtual void OnConversationLineStarted(Conversation conversation, uint lineId, Player sender) { } + + // Called for each update tick + public virtual void OnConversationUpdate(Conversation conversation, uint diff) { } } public class SceneScript : ScriptObject diff --git a/Source/Game/Scripting/ScriptManager.cs b/Source/Game/Scripting/ScriptManager.cs index 8c9f0ec91..2234b7813 100644 --- a/Source/Game/Scripting/ScriptManager.cs +++ b/Source/Game/Scripting/ScriptManager.cs @@ -1028,6 +1028,13 @@ namespace Game.Scripting RunScript(script => script.OnConversationCreate(conversation, creator), conversation.GetScriptId()); } + public void OnConversationStart(Conversation conversation) + { + Cypher.Assert(conversation != null); + + RunScript(script => script.OnConversationStart(conversation), conversation.GetScriptId()); + } + public void OnConversationLineStarted(Conversation conversation, uint lineId, Player sender) { Cypher.Assert(conversation != null); @@ -1036,6 +1043,13 @@ namespace Game.Scripting RunScript(script => script.OnConversationLineStarted(conversation, lineId, sender), conversation.GetScriptId()); } + public void OnConversationUpdate(Conversation conversation, uint diff) + { + Cypher.Assert(conversation != null); + + RunScript(script => script.OnConversationUpdate(conversation, diff), conversation.GetScriptId()); + } + //SceneScript public void OnSceneStart(Player player, uint sceneInstanceID, SceneTemplate sceneTemplate) {