diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index b940dc331..0a2a975d4 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -558,9 +558,9 @@ namespace Game foreach (var menu in pMenuBounds) { - if (menu.entry == cond.SourceGroup && menu.text_id == cond.SourceEntry) + if (menu.MenuId == cond.SourceGroup && menu.TextId == cond.SourceEntry) { - menu.conditions.Add(cond); + menu.Conditions.Add(cond); return true; } } @@ -574,7 +574,7 @@ namespace Game var pMenuItemBounds = Global.ObjectMgr.GetGossipMenuItemsMapBounds(cond.SourceGroup); foreach (var menuItems in pMenuItemBounds) { - if (menuItems.MenuId == cond.SourceGroup && menuItems.OptionIndex == cond.SourceEntry) + if (menuItems.MenuId == cond.SourceGroup && menuItems.OptionId == cond.SourceEntry) { menuItems.Conditions.Add(cond); return true; diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index 53eaee47f..1f3880044 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -83,7 +83,7 @@ namespace Game.Misc foreach (var item in bounds) { // Find the one with the given menu item id. - if (item.OptionIndex != menuItemId) + if (item.OptionId != menuItemId) continue; /// Store texts for localization. @@ -842,12 +842,12 @@ namespace Game.Misc public class GossipMenuItems { public uint MenuId; - public uint OptionIndex; + public uint OptionId; public GossipOptionIcon OptionIcon; public string OptionText; public uint OptionBroadcastTextId; public GossipOption OptionType; - public NPCFlags OptionNpcflag; + public NPCFlags OptionNpcFlag; public uint ActionMenuId; public uint ActionPoiId; public bool BoxCoded; @@ -875,8 +875,8 @@ namespace Game.Misc public class GossipMenus { - public uint entry; - public uint text_id; - public List conditions = new List(); + public uint MenuId; + public uint TextId; + public List Conditions = new List(); } } diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 8d9f86d1d..d7628a29c 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -2341,7 +2341,7 @@ namespace Game.Entities Creature creature = source.ToCreature(); if (creature) { - if (!menuItems.OptionNpcflag.HasAnyFlag(npcflags)) + if (!menuItems.OptionNpcFlag.HasAnyFlag(npcflags)) continue; switch (menuItems.OptionType) @@ -2439,7 +2439,7 @@ namespace Game.Entities if (optionBroadcastText == null) { // Find localizations from database. - GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionIndex); + GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionId); if (gossipMenuLocale != null) ObjectManager.GetLocaleString(gossipMenuLocale.OptionText, locale, ref strOptionText); } @@ -2447,14 +2447,14 @@ namespace Game.Entities if (boxBroadcastText == null) { // Find localizations from database. - GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionIndex); + GossipMenuItemsLocale gossipMenuLocale = Global.ObjectMgr.GetGossipMenuItemsLocale(menuId, menuItems.OptionId); if (gossipMenuLocale != null) ObjectManager.GetLocaleString(gossipMenuLocale.BoxText, locale, ref strBoxText); } } - menu.GetGossipMenu().AddMenuItem((int)menuItems.OptionIndex, menuItems.OptionIcon, strOptionText, 0, (uint)menuItems.OptionType, strBoxText, menuItems.BoxMoney, menuItems.BoxCoded); - menu.GetGossipMenu().AddGossipMenuItemData(menuItems.OptionIndex, menuItems.ActionMenuId, menuItems.ActionPoiId, menuItems.TrainerId); + menu.GetGossipMenu().AddMenuItem((int)menuItems.OptionId, menuItems.OptionIcon, strOptionText, 0, (uint)menuItems.OptionType, strBoxText, menuItems.BoxMoney, menuItems.BoxCoded); + menu.GetGossipMenu().AddGossipMenuItemData(menuItems.OptionId, menuItems.ActionMenuId, menuItems.ActionPoiId, menuItems.TrainerId); } } } @@ -2620,8 +2620,8 @@ namespace Game.Entities foreach (var menu in menuBounds) { - if (Global.ConditionMgr.IsObjectMeetToConditions(this, source, menu.conditions)) - textId = menu.text_id; + if (Global.ConditionMgr.IsObjectMeetToConditions(this, source, menu.Conditions)) + textId = menu.TextId; } return textId; diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index e2e213ffe..c32c2eba2 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -595,36 +595,31 @@ namespace Game gossipMenusStorage.Clear(); - SQLResult result = DB.World.Query("SELECT entry, text_id FROM gossip_menu"); - + SQLResult result = DB.World.Query("SELECT MenuID, TextID FROM gossip_menu"); if (result.IsEmpty()) { - Log.outError(LogFilter.ServerLoading, "Loaded 0 gossip_menu entries. DB table `gossip_menu` is empty!"); + Log.outError(LogFilter.ServerLoading, "Loaded 0 gossip_menu entries. DB table `gossip_menu` is empty!"); return; } - uint count = 0; - do { GossipMenus gMenu = new GossipMenus(); - gMenu.entry = result.Read(0); - gMenu.text_id = result.Read(1); + gMenu.MenuId = result.Read(0); + gMenu.TextId = result.Read(1); - if (GetNpcText(gMenu.text_id) == null) + if (GetNpcText(gMenu.TextId) == null) { - Log.outError(LogFilter.Sql, "Table gossip_menu entry {0} are using non-existing textid {1}", gMenu.entry, gMenu.text_id); + Log.outError(LogFilter.Sql, "Table gossip_menu: Id {0} is using non-existing TextId {1}", gMenu.MenuId, gMenu.TextId); continue; } - gossipMenusStorage.Add(gMenu.entry, gMenu); - - ++count; + gossipMenusStorage.Add(gMenu.MenuId, gMenu); } while (result.NextRow()); - Log.outInfo(LogFilter.ServerLoading, "Loaded {0} gossip_menu entries in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime)); + Log.outInfo(LogFilter.ServerLoading, "Loaded {0} gossip_menu Ids in {1} ms", gossipMenusStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime)); } public void LoadGossipMenuItems() { @@ -633,33 +628,32 @@ namespace Game gossipMenuItemsStorage.Clear(); // 0 1 2 3 4 5 6 - SQLResult result = DB.World.Query("SELECT o.MenuId, o.OptionIndex, o.OptionIcon, o.OptionText, o.OptionBroadcastTextId, o.OptionType, o.OptionNpcflag, " + + SQLResult result = DB.World.Query("SELECT o.MenuID, o.OptionID, o.OptionIcon, o.OptionText, o.OptionBroadcastTextId, o.OptionType, o.OptionNpcflag, " + // 7 8 9 10 11 12 13 - "oa.ActionMenuId, oa.ActionPoiId, ob.BoxCoded, ob.BoxMoney, ob.BoxText, ob.BoxBroadcastTextId, ot.TrainerId " + + "oa.ActionMenuID, oa.ActionPoiID, ob.BoxCoded, ob.BoxMoney, ob.BoxText, ob.BoxBroadcastTextId, ot.TrainerId " + "FROM gossip_menu_option o " + - "LEFT JOIN gossip_menu_option_action oa ON o.MenuId = oa.MenuId AND o.OptionIndex = oa.OptionIndex " + - "LEFT JOIN gossip_menu_option_box ob ON o.MenuId = ob.MenuId AND o.OptionIndex = ob.OptionIndex " + - "LEFT JOIN gossip_menu_option_trainer ot ON o.MenuId = ot.MenuId AND o.OptionIndex = ot.OptionIndex " + - "ORDER BY o.MenuId, o.OptionIndex"); + "LEFT JOIN gossip_menu_option_action oa ON o.MenuID = oa.MenuID AND o.OptionID = oa.OptionID " + + "LEFT JOIN gossip_menu_option_box ob ON o.MenuID = ob.MenuID AND o.OptionID = ob.OptionID " + + "LEFT JOIN gossip_menu_option_trainer ot ON o.MenuID = ot.MenuID AND o.OptionID = ot.OptionID " + + "ORDER BY o.MenuId, o.OptionID"); if (result.IsEmpty()) { - Log.outError(LogFilter.ServerLoading, "Loaded 0 gossip_menu_option entries. DB table `gossip_menu_option` is empty!"); + Log.outError(LogFilter.ServerLoading, "Loaded 0 gossip_menu_option Ids. DB table `gossip_menu_option` is empty!"); return; } - uint count = 0; do { GossipMenuItems gMenuItem = new GossipMenuItems(); gMenuItem.MenuId = result.Read(0); - gMenuItem.OptionIndex = result.Read(1); + gMenuItem.OptionId = result.Read(1); gMenuItem.OptionIcon = (GossipOptionIcon)result.Read(2); gMenuItem.OptionText = result.Read(3); gMenuItem.OptionBroadcastTextId = result.Read(4); gMenuItem.OptionType = (GossipOption)result.Read(5); - gMenuItem.OptionNpcflag = (NPCFlags)result.Read(6); + gMenuItem.OptionNpcFlag = (NPCFlags)result.Read(6); gMenuItem.ActionMenuId = result.Read(7); gMenuItem.ActionPoiId = result.Read(8); gMenuItem.BoxCoded = result.Read(9); @@ -670,7 +664,7 @@ namespace Game if (gMenuItem.OptionIcon >= GossipOptionIcon.Max) { - Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionIndex} has unknown icon id {gMenuItem.OptionIcon}. Replacing with GOSSIPICONCHAT"); + Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionID {gMenuItem.OptionId} has unknown icon id {gMenuItem.OptionIcon}. Replacing with GossipOptionIcon.Chat"); gMenuItem.OptionIcon = GossipOptionIcon.Chat; } @@ -678,17 +672,17 @@ namespace Game { if (!CliDB.BroadcastTextStorage.ContainsKey(gMenuItem.OptionBroadcastTextId)) { - Log.outError(LogFilter.Sql, $"Table `gossip_menu_option` for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionIndex} has non-existing or incompatible OptionBroadcastTextId {gMenuItem.OptionBroadcastTextId}, ignoring."); + Log.outError(LogFilter.Sql, $"Table `gossip_menu_option` for MenuId {gMenuItem.MenuId}, OptionID {gMenuItem.OptionId} has non-existing or incompatible OptionBroadcastTextId {gMenuItem.OptionBroadcastTextId}, ignoring."); gMenuItem.OptionBroadcastTextId = 0; } } if (gMenuItem.OptionType >= GossipOption.Max) - Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionIndex} has unknown option id {gMenuItem.OptionType}. Option will not be used"); + Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionID {gMenuItem.OptionId} has unknown option id {gMenuItem.OptionType}. Option will not be used"); if (gMenuItem.ActionPoiId != 0 && GetPointOfInterest(gMenuItem.ActionPoiId) == null) { - Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionIndex} use non-existing actionpoiid {gMenuItem.ActionPoiId}, ignoring"); + Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionID {gMenuItem.OptionId} use non-existing actionpoiid {gMenuItem.ActionPoiId}, ignoring"); gMenuItem.ActionPoiId = 0; } @@ -696,23 +690,21 @@ namespace Game { if (!CliDB.BroadcastTextStorage.ContainsKey(gMenuItem.BoxBroadcastTextId)) { - Log.outError(LogFilter.Sql, $"Table `gossip_menu_option` for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionIndex} has non-existing or incompatible BoxBroadcastTextId {gMenuItem.BoxBroadcastTextId}, ignoring."); + Log.outError(LogFilter.Sql, $"Table `gossip_menu_option` for MenuId {gMenuItem.MenuId}, OptionID {gMenuItem.OptionId} has non-existing or incompatible BoxBroadcastTextId {gMenuItem.BoxBroadcastTextId}, ignoring."); gMenuItem.BoxBroadcastTextId = 0; } } if (gMenuItem.TrainerId != 0 && GetTrainer(gMenuItem.TrainerId) == null) { - Log.outError(LogFilter.Sql, $"Table `gossip_menu_option_trainer` for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionIndex} use non-existing TrainerId {gMenuItem.TrainerId}, ignoring"); + Log.outError(LogFilter.Sql, $"Table `gossip_menu_option_trainer` for MenuId {gMenuItem.MenuId}, OptionID {gMenuItem.OptionId} use non-existing TrainerId {gMenuItem.TrainerId}, ignoring"); gMenuItem.TrainerId = 0; } gossipMenuItemsStorage.Add(gMenuItem.MenuId, gMenuItem); - ++count; - } while (result.NextRow()); - Log.outInfo(LogFilter.ServerLoading, "Loaded {0} gossip_menu_option entries in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime)); + Log.outInfo(LogFilter.ServerLoading, "Loaded {0} gossip_menu_option entries in {1} ms", gossipMenuItemsStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime)); } public void LoadPointsOfInterest() { @@ -1732,18 +1724,16 @@ namespace Game return; } - uint count = 0; do { LoadCreatureTemplate(result.GetFields()); - ++count; } while (result.NextRow()); // Checking needs to be done after loading because of the difficulty self referencing foreach (var template in creatureTemplateStorage.Values) CheckCreatureTemplate(template); - Log.outInfo(LogFilter.ServerLoading, "Loaded {0} creature definitions in {1} ms", count, Time.GetMSTimeDiffToNow(time)); + Log.outInfo(LogFilter.ServerLoading, "Loaded {0} creature definitions in {1} ms", creatureTemplateStorage.Count, Time.GetMSTimeDiffToNow(time)); } public void LoadCreatureTemplate(SQLFields fields) { @@ -7883,27 +7873,28 @@ namespace Game _gossipMenuItemsLocaleStorage.Clear(); // need for reload case - SQLResult result = DB.World.Query("SELECT menu_id, id, option_text_loc1, box_text_loc1, option_text_loc2, box_text_loc2, " + - "option_text_loc3, box_text_loc3, option_text_loc4, box_text_loc4, option_text_loc5, box_text_loc5, option_text_loc6, box_text_loc6, " + - "option_text_loc7, box_text_loc7, option_text_loc8, box_text_loc8 FROM locales_gossip_menu_option"); - + // 0 1 2 3 4 + SQLResult result = DB.World.Query("SELECT MenuID, OptionID, Locale, OptionText, BoxText FROM gossip_menu_option_locale"); if (result.IsEmpty()) return; do { - uint menuId = result.Read(0); - uint id = result.Read(1); + ushort menuId = result.Read(0); + ushort optionId = result.Read(1); + string localeName = result.Read(2); + string optionText = result.Read(3); + string boxText = result.Read(4); GossipMenuItemsLocale data = new GossipMenuItemsLocale(); - for (byte i = 1; i < (int)LocaleConstant.OldTotal; ++i) - { - LocaleConstant locale = (LocaleConstant)i; - AddLocaleString(result.Read(2 + 2 * (i - 1)), locale, data.OptionText); - AddLocaleString(result.Read(2 + 2 * (i - 1) + 1), locale, data.BoxText); - } + LocaleConstant locale = localeName.ToEnum(); + if (locale == LocaleConstant.enUS) + continue; - _gossipMenuItemsLocaleStorage[MathFunctions.MakePair32(menuId, id)] = data; + AddLocaleString(optionText, locale, data.OptionText); + AddLocaleString(boxText, locale, data.BoxText); + + _gossipMenuItemsLocaleStorage[MathFunctions.MakePair32(menuId, optionId)] = data; } while (result.NextRow());