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:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user