From 006d47a955307bf8384a392822398d815d9cceb4 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 11 Oct 2022 19:55:30 -0400 Subject: [PATCH] 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) --- Source/Game/Conditions/ConditionManager.cs | 6 ++-- Source/Game/Entities/Creature/Gossip.cs | 16 +++++----- Source/Game/Entities/Player/Player.cs | 34 ++++++++++------------ 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index bc36d3f3e..bb7ca72dd 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -654,11 +654,11 @@ namespace Game bool AddToGossipMenuItems(Condition cond) { 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; } } diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index 7d16ca079..b0e1203ed 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -79,28 +79,28 @@ namespace Game.Misc return; // Iterate over each of them. - foreach (var item in bounds) + foreach (var gossipMenuOption in bounds) { // Find the one with the given menu item id. - if (item.OptionId != menuItemId) + if (gossipMenuOption.OptionId != menuItemId) continue; // Store texts for localization. string strOptionText, strBoxText; - BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(item.OptionBroadcastTextId); - BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(item.BoxBroadcastTextId); + BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuOption.OptionBroadcastTextId); + BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuOption.BoxBroadcastTextId); // OptionText if (optionBroadcastText != null) strOptionText = Global.DB2Mgr.GetBroadcastTextValue(optionBroadcastText, GetLocale()); else - strOptionText = item.OptionText; + strOptionText = gossipMenuOption.OptionText; // BoxText if (boxBroadcastText != null) strBoxText = Global.DB2Mgr.GetBroadcastTextValue(boxBroadcastText, GetLocale()); else - strBoxText = item.BoxText; + strBoxText = gossipMenuOption.BoxText; // Check need of localization. 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. - uint newOptionId = AddMenuItem(-1, item.OptionNpc, strOptionText, sender, action, strBoxText, item.BoxMoney, item.BoxCoded); - AddGossipMenuItemData(newOptionId, item.ActionMenuId, item.ActionPoiId); + uint newOptionId = AddMenuItem(-1, gossipMenuOption.OptionNpc, strOptionText, sender, action, strBoxText, gossipMenuOption.BoxMoney, gossipMenuOption.BoxCoded); + AddGossipMenuItemData(newOptionId, gossipMenuOption.ActionMenuId, gossipMenuOption.ActionPoiId); } } diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 5fb8c51db..4185426d4 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -2299,7 +2299,7 @@ namespace Game.Entities } //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; menu.ClearMenus(); @@ -2308,10 +2308,6 @@ namespace Game.Entities 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; if (source.IsTypeId(TypeId.Unit)) @@ -2324,9 +2320,9 @@ namespace Game.Entities if (source.ToGameObject().GetGoType() == GameObjectTypes.QuestGiver) 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; bool canTalk = true; @@ -2334,10 +2330,10 @@ namespace Game.Entities Creature creature = source.ToCreature(); if (creature) { - if (!menuItems.OptionNpcFlag.HasAnyFlag(npcflags)) + if (!gossipMenuItem.OptionNpcFlag.HasAnyFlag(npcflags)) continue; - switch (menuItems.OptionNpc) + switch (gossipMenuItem.OptionNpc) { case GossipOptionNpc.TaxiNode: if (GetSession().SendLearnNewTaxiNode(creature)) @@ -2411,14 +2407,14 @@ namespace Game.Entities case GossipOptionNpc.CovenantRenown: break; // NYI 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; break; } } else if (go != null) { - switch (menuItems.OptionNpc) + switch (gossipMenuItem.OptionNpc) { case GossipOptionNpc.None: if (go.GetGoType() != GameObjectTypes.QuestGiver && go.GetGoType() != GameObjectTypes.Goober) @@ -2434,26 +2430,26 @@ namespace Game.Entities { string strOptionText; string strBoxText; - BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(menuItems.OptionBroadcastTextId); - BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(menuItems.BoxBroadcastTextId); + BroadcastTextRecord optionBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuItem.OptionBroadcastTextId); + BroadcastTextRecord boxBroadcastText = CliDB.BroadcastTextStorage.LookupByKey(gossipMenuItem.BoxBroadcastTextId); Locale locale = GetSession().GetSessionDbLocaleIndex(); if (optionBroadcastText != null) strOptionText = Global.DB2Mgr.GetBroadcastTextValue(optionBroadcastText, locale, GetGender()); else - strOptionText = menuItems.OptionText; + strOptionText = gossipMenuItem.OptionText; if (boxBroadcastText != null) strBoxText = Global.DB2Mgr.GetBroadcastTextValue(boxBroadcastText, locale, GetGender()); else - strBoxText = menuItems.BoxText; + strBoxText = gossipMenuItem.BoxText; if (locale != Locale.enUS) { if (optionBroadcastText == null) { // Find localizations from database. - GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionId); + GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, gossipMenuItem.OptionId); if (gossipMenuLocale != null) ObjectManager.GetLocaleString(gossipMenuLocale.OptionText, locale, ref strOptionText); } @@ -2461,14 +2457,14 @@ namespace Game.Entities if (boxBroadcastText == null) { // Find localizations from database. - GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionId); + GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, gossipMenuItem.OptionId); if (gossipMenuLocale != null) 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().AddGossipMenuItemData(menuItems.OptionId, menuItems.ActionMenuId, menuItems.ActionPoiId); + menu.GetGossipMenu().AddMenuItem((int)gossipMenuItem.OptionId, gossipMenuItem.OptionNpc, strOptionText, 0, (uint)gossipMenuItem.OptionNpc, strBoxText, gossipMenuItem.BoxMoney, gossipMenuItem.BoxCoded); + menu.GetGossipMenu().AddGossipMenuItemData(gossipMenuItem.OptionId, gossipMenuItem.ActionMenuId, gossipMenuItem.ActionPoiId); } } }