Core/Gossip: Remove gossip menu option fallback code, all menus are now required to have options defined instead of trying to get them from menuid = 0

Port From (https://github.com/TrinityCore/TrinityCore/commit/49709e427360006186744ca52116f9ee35092b83)
This commit is contained in:
hondacrx
2022-10-11 19:55:30 -04:00
parent e5c7244893
commit 006d47a955
3 changed files with 26 additions and 30 deletions
+3 -3
View File
@@ -654,11 +654,11 @@ namespace Game
bool AddToGossipMenuItems(Condition cond) bool AddToGossipMenuItems(Condition cond)
{ {
var pMenuItemBounds = Global.ObjectMgr.GetGossipMenuItemsMapBounds(cond.SourceGroup); var pMenuItemBounds = Global.ObjectMgr.GetGossipMenuItemsMapBounds(cond.SourceGroup);
foreach (var menuItems in pMenuItemBounds) foreach (var gossipMenuItem in pMenuItemBounds)
{ {
if (menuItems.MenuId == cond.SourceGroup && menuItems.OptionId == cond.SourceEntry) if (gossipMenuItem.MenuId == cond.SourceGroup && gossipMenuItem.OptionId == cond.SourceEntry)
{ {
menuItems.Conditions.Add(cond); gossipMenuItem.Conditions.Add(cond);
return true; return true;
} }
} }
+8 -8
View File
@@ -79,28 +79,28 @@ namespace Game.Misc
return; return;
// Iterate over each of them. // Iterate over each of them.
foreach (var item in bounds) foreach (var gossipMenuOption in bounds)
{ {
// Find the one with the given menu item id. // Find the one with the given menu item id.
if (item.OptionId != menuItemId) if (gossipMenuOption.OptionId != menuItemId)
continue; continue;
// Store texts for localization. // Store texts for localization.
string strOptionText, strBoxText; string strOptionText, strBoxText;
BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(item.OptionBroadcastTextId); BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuOption.OptionBroadcastTextId);
BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(item.BoxBroadcastTextId); BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuOption.BoxBroadcastTextId);
// OptionText // OptionText
if (optionBroadcastText != null) if (optionBroadcastText != null)
strOptionText = Global.DB2Mgr.GetBroadcastTextValue(optionBroadcastText, GetLocale()); strOptionText = Global.DB2Mgr.GetBroadcastTextValue(optionBroadcastText, GetLocale());
else else
strOptionText = item.OptionText; strOptionText = gossipMenuOption.OptionText;
// BoxText // BoxText
if (boxBroadcastText != null) if (boxBroadcastText != null)
strBoxText = Global.DB2Mgr.GetBroadcastTextValue(boxBroadcastText, GetLocale()); strBoxText = Global.DB2Mgr.GetBroadcastTextValue(boxBroadcastText, GetLocale());
else else
strBoxText = item.BoxText; strBoxText = gossipMenuOption.BoxText;
// Check need of localization. // Check need of localization.
if (GetLocale() != Locale.enUS) if (GetLocale() != Locale.enUS)
@@ -124,8 +124,8 @@ namespace Game.Misc
} }
// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro. // Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
uint newOptionId = AddMenuItem(-1, item.OptionNpc, strOptionText, sender, action, strBoxText, item.BoxMoney, item.BoxCoded); uint newOptionId = AddMenuItem(-1, gossipMenuOption.OptionNpc, strOptionText, sender, action, strBoxText, gossipMenuOption.BoxMoney, gossipMenuOption.BoxCoded);
AddGossipMenuItemData(newOptionId, item.ActionMenuId, item.ActionPoiId); AddGossipMenuItemData(newOptionId, gossipMenuOption.ActionMenuId, gossipMenuOption.ActionPoiId);
} }
} }
+15 -19
View File
@@ -2299,7 +2299,7 @@ namespace Game.Entities
} }
//Chat - Text - Channel //Chat - Text - Channel
public void PrepareGossipMenu(WorldObject source, uint menuId = 0, bool showQuests = false) public void PrepareGossipMenu(WorldObject source, uint menuId, bool showQuests = false)
{ {
PlayerMenu menu = PlayerTalkClass; PlayerMenu menu = PlayerTalkClass;
menu.ClearMenus(); menu.ClearMenus();
@@ -2308,10 +2308,6 @@ namespace Game.Entities
var menuItemBounds = Global.ObjectMgr.GetGossipMenuItemsMapBounds(menuId); var menuItemBounds = Global.ObjectMgr.GetGossipMenuItemsMapBounds(menuId);
// if default menuId and no menu options exist for this, use options from default options
if (menuItemBounds.Empty() && menuId == GetDefaultGossipMenuForSource(source))
menuItemBounds = Global.ObjectMgr.GetGossipMenuItemsMapBounds(0);
NPCFlags npcflags = 0; NPCFlags npcflags = 0;
if (source.IsTypeId(TypeId.Unit)) if (source.IsTypeId(TypeId.Unit))
@@ -2324,9 +2320,9 @@ namespace Game.Entities
if (source.ToGameObject().GetGoType() == GameObjectTypes.QuestGiver) if (source.ToGameObject().GetGoType() == GameObjectTypes.QuestGiver)
PrepareQuestMenu(source.GetGUID()); PrepareQuestMenu(source.GetGUID());
foreach (var menuItems in menuItemBounds) foreach (var gossipMenuItem in menuItemBounds)
{ {
if (!Global.ConditionMgr.IsObjectMeetToConditions(this, source, menuItems.Conditions)) if (!Global.ConditionMgr.IsObjectMeetToConditions(this, source, gossipMenuItem.Conditions))
continue; continue;
bool canTalk = true; bool canTalk = true;
@@ -2334,10 +2330,10 @@ namespace Game.Entities
Creature creature = source.ToCreature(); Creature creature = source.ToCreature();
if (creature) if (creature)
{ {
if (!menuItems.OptionNpcFlag.HasAnyFlag(npcflags)) if (!gossipMenuItem.OptionNpcFlag.HasAnyFlag(npcflags))
continue; continue;
switch (menuItems.OptionNpc) switch (gossipMenuItem.OptionNpc)
{ {
case GossipOptionNpc.TaxiNode: case GossipOptionNpc.TaxiNode:
if (GetSession().SendLearnNewTaxiNode(creature)) if (GetSession().SendLearnNewTaxiNode(creature))
@@ -2411,14 +2407,14 @@ namespace Game.Entities
case GossipOptionNpc.CovenantRenown: case GossipOptionNpc.CovenantRenown:
break; // NYI break; // NYI
default: default:
Log.outError(LogFilter.Sql, $"Creature entry {creature.GetEntry()} has an unknown gossip option icon {menuItems.OptionNpc} for menu {menuItems.MenuId}."); Log.outError(LogFilter.Sql, $"Creature entry {creature.GetEntry()} has an unknown gossip option icon {gossipMenuItem.OptionNpc} for menu {gossipMenuItem.MenuId}.");
canTalk = false; canTalk = false;
break; break;
} }
} }
else if (go != null) else if (go != null)
{ {
switch (menuItems.OptionNpc) switch (gossipMenuItem.OptionNpc)
{ {
case GossipOptionNpc.None: case GossipOptionNpc.None:
if (go.GetGoType() != GameObjectTypes.QuestGiver && go.GetGoType() != GameObjectTypes.Goober) if (go.GetGoType() != GameObjectTypes.QuestGiver && go.GetGoType() != GameObjectTypes.Goober)
@@ -2434,26 +2430,26 @@ namespace Game.Entities
{ {
string strOptionText; string strOptionText;
string strBoxText; string strBoxText;
BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(menuItems.OptionBroadcastTextId); BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuItem.OptionBroadcastTextId);
BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(menuItems.BoxBroadcastTextId); BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuItem.BoxBroadcastTextId);
Locale locale = GetSession().GetSessionDbLocaleIndex(); Locale locale = GetSession().GetSessionDbLocaleIndex();
if (optionBroadcastText != null) if (optionBroadcastText != null)
strOptionText = Global.DB2Mgr.GetBroadcastTextValue(optionBroadcastText, locale, GetGender()); strOptionText = Global.DB2Mgr.GetBroadcastTextValue(optionBroadcastText, locale, GetGender());
else else
strOptionText = menuItems.OptionText; strOptionText = gossipMenuItem.OptionText;
if (boxBroadcastText != null) if (boxBroadcastText != null)
strBoxText = Global.DB2Mgr.GetBroadcastTextValue(boxBroadcastText, locale, GetGender()); strBoxText = Global.DB2Mgr.GetBroadcastTextValue(boxBroadcastText, locale, GetGender());
else else
strBoxText = menuItems.BoxText; strBoxText = gossipMenuItem.BoxText;
if (locale != Locale.enUS) if (locale != Locale.enUS)
{ {
if (optionBroadcastText == null) if (optionBroadcastText == null)
{ {
// Find localizations from database. // Find localizations from database.
GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionId); GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, gossipMenuItem.OptionId);
if (gossipMenuLocale != null) if (gossipMenuLocale != null)
ObjectManager.GetLocaleString(gossipMenuLocale.OptionText, locale, ref strOptionText); ObjectManager.GetLocaleString(gossipMenuLocale.OptionText, locale, ref strOptionText);
} }
@@ -2461,14 +2457,14 @@ namespace Game.Entities
if (boxBroadcastText == null) if (boxBroadcastText == null)
{ {
// Find localizations from database. // Find localizations from database.
GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionId); GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, gossipMenuItem.OptionId);
if (gossipMenuLocale != null) if (gossipMenuLocale != null)
ObjectManager.GetLocaleString(gossipMenuLocale.BoxText, locale, ref strBoxText); ObjectManager.GetLocaleString(gossipMenuLocale.BoxText, locale, ref strBoxText);
} }
} }
menu.GetGossipMenu().AddMenuItem((int)menuItems.OptionId, menuItems.OptionNpc, strOptionText, 0, (uint)menuItems.OptionNpc, strBoxText, menuItems.BoxMoney, menuItems.BoxCoded); menu.GetGossipMenu().AddMenuItem((int)gossipMenuItem.OptionId, gossipMenuItem.OptionNpc, strOptionText, 0, (uint)gossipMenuItem.OptionNpc, strBoxText, gossipMenuItem.BoxMoney, gossipMenuItem.BoxCoded);
menu.GetGossipMenu().AddGossipMenuItemData(menuItems.OptionId, menuItems.ActionMenuId, menuItems.ActionPoiId); menu.GetGossipMenu().AddGossipMenuItemData(gossipMenuItem.OptionId, gossipMenuItem.ActionMenuId, gossipMenuItem.ActionPoiId);
} }
} }
} }