Core/Gossip: Send broadcast text id in SMSG_GOSSIP_MESSAGE instead of npc_text id

Port From (https://github.com/TrinityCore/TrinityCore/commit/2213d87a45660e0ecbc51b36e9171991104884a8)
This commit is contained in:
hondacrx
2022-06-03 20:19:35 -04:00
parent 7398576615
commit 344e28352a
2 changed files with 23 additions and 14 deletions
+13 -11
View File
@@ -250,7 +250,9 @@ namespace Game.Misc
GossipMessagePkt packet = new();
packet.GossipGUID = objectGUID;
packet.GossipID = (int)_gossipMenu.GetMenuId();
packet.TextID = (int)titleTextId;
NpcText text = Global.ObjectMgr.GetNpcText(titleTextId);
if (text != null)
packet.TextID = (int)text.Data.SelectRandomElementByWeight(data => data.Probability).BroadcastTextID;
foreach (var pair in _gossipMenu.GetMenuItems())
{
@@ -275,24 +277,24 @@ namespace Game.Misc
Quest quest = Global.ObjectMgr.GetQuestTemplate(questID);
if (quest != null)
{
ClientGossipText text = new();
text.QuestID = questID;
text.ContentTuningID = quest.ContentTuningId;
text.QuestType = item.QuestIcon;
text.QuestFlags = (uint)quest.Flags;
text.QuestFlagsEx = (uint)quest.FlagsEx;
text.Repeatable = quest.IsAutoComplete() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
ClientGossipText gossipText = new();
gossipText.QuestID = questID;
gossipText.ContentTuningID = quest.ContentTuningId;
gossipText.QuestType = item.QuestIcon;
gossipText.QuestFlags = (uint)quest.Flags;
gossipText.QuestFlagsEx = (uint)quest.FlagsEx;
gossipText.Repeatable = quest.IsAutoComplete() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
text.QuestTitle = quest.LogTitle;
gossipText.QuestTitle = quest.LogTitle;
Locale locale = _session.GetSessionDbLocaleIndex();
if (locale != Locale.enUS)
{
QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
if (localeData != null)
ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref text.QuestTitle);
ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref gossipText.QuestTitle);
}
packet.GossipText.Add(text);
packet.GossipText.Add(gossipText);
}
}
+10 -3
View File
@@ -3063,7 +3063,6 @@ namespace Game
npcText.Data[i].BroadcastTextID = result.Read<uint>(9 + i);
}
BitSet erasedBroadcastTexts = new(SharedConst.MaxNpcTextOptions);
for (int i = 0; i < SharedConst.MaxNpcTextOptions; i++)
{
if (npcText.Data[i].BroadcastTextID != 0)
@@ -3071,20 +3070,28 @@ namespace Game
if (!CliDB.BroadcastTextStorage.ContainsKey(npcText.Data[i].BroadcastTextID))
{
Log.outError(LogFilter.Sql, "NPCText (Id: {0}) has a non-existing BroadcastText (ID: {1}, Index: {2})", textID, npcText.Data[i].BroadcastTextID, i);
npcText.Data[i].Probability = 0.0f;
npcText.Data[i].BroadcastTextID = 0;
erasedBroadcastTexts[i] = true;
}
}
}
for (byte i = 0; i < SharedConst.MaxNpcTextOptions; i++)
{
if (npcText.Data[i].Probability > 0 && npcText.Data[i].BroadcastTextID == 0 && !erasedBroadcastTexts[i])
if (npcText.Data[i].Probability > 0 && npcText.Data[i].BroadcastTextID == 0)
{
Log.outError(LogFilter.Sql, "NPCText (ID: {0}) has a probability (Index: {1}) set, but no BroadcastTextID to go with it", textID, i);
npcText.Data[i].Probability = 0;
}
}
float probabilitySum = npcText.Data.Aggregate(0f, (float sum, NpcTextData data) => { return sum + data.Probability; });
if (probabilitySum <= 0.0f)
{
Log.outError(LogFilter.Sql, $"NPCText (ID: {textID}) has a probability sum 0, no text can be selected from it, skipped.");
continue;
}
npcTextStorage[textID] = npcText;
} while (result.NextRow());