From 46e896cbc6dc6b70e97590df1d8197fed426d6a8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 3 Nov 2021 11:12:40 -0400 Subject: [PATCH] Core/Conditions: Added conversation line source type Port From (https://github.com/TrinityCore/TrinityCore/commit/03c0f787a1390eb50789f5bda104bbe40dda3c77) --- Source/Framework/Constants/ConditionConst.cs | 1 + Source/Game/Conditions/ConditionManager.cs | 7 +++++++ Source/Game/DataStorage/ConversationDataStorage.cs | 5 +++++ Source/Game/Entities/Conversation.cs | 3 +++ 4 files changed, 16 insertions(+) diff --git a/Source/Framework/Constants/ConditionConst.cs b/Source/Framework/Constants/ConditionConst.cs index b04b69e4a..0f6a6642c 100644 --- a/Source/Framework/Constants/ConditionConst.cs +++ b/Source/Framework/Constants/ConditionConst.cs @@ -103,6 +103,7 @@ namespace Framework.Constants Phase = 26, Graveyard = 27, AreaTrigger = 28, + ConversationLine = 29, Max } diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index f1ce9f86c..f0f958508 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -1104,6 +1104,13 @@ namespace Game return false; } break; + case ConditionSourceType.ConversationLine: + if (Global.ConversationDataStorage.GetConversationLineTemplate((uint)cond.SourceEntry) == null) + { + Log.outError(LogFilter.Sql, $"{cond} does not exist in `conversation_line_template`, ignoring."); + return false; + } + break; default: Log.outError(LogFilter.Sql, $"{cond.ToString()} Invalid ConditionSourceType in `condition` table, ignoring."); return false; diff --git a/Source/Game/DataStorage/ConversationDataStorage.cs b/Source/Game/DataStorage/ConversationDataStorage.cs index 4bd6dcf33..6c6f21166 100644 --- a/Source/Game/DataStorage/ConversationDataStorage.cs +++ b/Source/Game/DataStorage/ConversationDataStorage.cs @@ -192,6 +192,11 @@ namespace Game.DataStorage return _conversationTemplateStorage.LookupByKey(conversationId); } + public ConversationLineTemplate GetConversationLineTemplate(uint conversationLineId) + { + return _conversationLineTemplateStorage.LookupByKey(conversationLineId); + } + Dictionary _conversationTemplateStorage = new(); Dictionary _conversationLineTemplateStorage = new(); } diff --git a/Source/Game/Entities/Conversation.cs b/Source/Game/Entities/Conversation.cs index 25a2aaec4..a76bdbf1c 100644 --- a/Source/Game/Entities/Conversation.cs +++ b/Source/Game/Entities/Conversation.cs @@ -164,6 +164,9 @@ namespace Game.Entities List lines = new(); foreach (ConversationLineTemplate line in conversationTemplate.Lines) { + if (!Global.ConditionMgr.IsObjectMeetingNotGroupedConditions(ConditionSourceType.ConversationLine, line.Id, creator)) + continue; + actorIndices.Add(line.ActorIdx); ConversationLine lineField = new();