diff --git a/sql/updates/world/4.3.4/2020_08_03_00_world.sql b/sql/updates/world/4.3.4/2020_08_03_00_world.sql new file mode 100644 index 00000000000..cc8eb05d676 --- /dev/null +++ b/sql/updates/world/4.3.4/2020_08_03_00_world.sql @@ -0,0 +1,7 @@ +ALTER TABLE `gossip_menu_option_locale` + CHANGE `MenuID` `MenuID` int(11) unsigned NOT NULL DEFAULT '0', + CHANGE `OptionID` `OptionID` int(11) unsigned NOT NULL DEFAULT '0'; + +ALTER TABLE `gossip_menu` + CHANGE `MenuID` `MenuID` int(11) unsigned NOT NULL DEFAULT '0', + CHANGE `TextID` `TextID` int(11) unsigned NOT NULL DEFAULT '0'; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 2818080172b..d61b789d421 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -111,14 +111,14 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui if (!optionBroadcastText) { /// Find localizations from database. - if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId))) + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, menuItemId)) ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, GetLocale(), strOptionText); } if (!boxBroadcastText) { /// Find localizations from database. - if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId))) + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, menuItemId)) ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText); } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b66789063cb..313a9e4863d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14023,14 +14023,14 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool if (!optionBroadcastText) { /// Find localizations from database. - if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, itr->second.OptionID))) + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, itr->second.OptionID)) ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, locale, strOptionText); } if (!boxBroadcastText) { /// Find localizations from database. - if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, itr->second.OptionID))) + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, itr->second.OptionID)) ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText); } } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 04bbcea880a..975c137a74f 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -375,22 +375,20 @@ void ObjectMgr::LoadGossipMenuItemsLocales() { Field* fields = result->Fetch(); - uint16 menuId = fields[0].GetUInt16(); - uint16 optionId = fields[1].GetUInt16(); + uint32 menuId = fields[0].GetUInt32(); + uint32 optionId = fields[1].GetUInt32(); std::string localeName = fields[2].GetString(); - std::string optionText = fields[3].GetString(); - std::string boxText = fields[4].GetString(); - GossipMenuItemsLocale& data = _gossipMenuItemsLocaleStore[MAKE_PAIR32(menuId, optionId)]; - LocaleConstant locale = GetLocaleByName(localeName); + LocaleConstant locale = GetLocaleByName(localeName); if (locale == LOCALE_enUS) continue; - AddLocaleString(optionText, locale, data.OptionText); - AddLocaleString(boxText, locale, data.BoxText); + GossipMenuItemsLocale& data = _gossipMenuItemsLocaleStore[std::make_pair(menuId, optionId)]; + AddLocaleString(fields[3].GetString(), locale, data.OptionText); + AddLocaleString(fields[4].GetString(), locale, data.BoxText); } while (result->NextRow()); - TC_LOG_INFO("server.loading", ">> Loaded %u gossip_menu_option locale strings in %u ms", uint32(_gossipMenuItemsLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " gossip_menu_option locale strings in %u ms", _gossipMenuItemsLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadPointOfInterestLocales() @@ -8950,7 +8948,7 @@ void ObjectMgr::LoadGossipMenu() GossipMenus gMenu; - gMenu.MenuID = fields[0].GetUInt16(); + gMenu.MenuID = fields[0].GetUInt32(); gMenu.TextID = fields[1].GetUInt32(); if (!GetGossipText(gMenu.TextID)) diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index d3d02abaef8..4a4e2bac22f 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -569,7 +569,7 @@ struct GossipMenuItemsLocale std::vector BoxText; }; -typedef std::unordered_map GossipMenuItemsLocaleContainer; +typedef std::unordered_map, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer; struct PointOfInterestLocale { @@ -1421,9 +1421,9 @@ class TC_GAME_API ObjectMgr if (itr == _pageTextLocaleStore.end()) return nullptr; return &itr->second; } - GossipMenuItemsLocale const* GetGossipMenuItemsLocale(uint32 entry) const + GossipMenuItemsLocale const* GetGossipMenuItemsLocale(uint32 menuId, uint32 optionIndex) const { - GossipMenuItemsLocaleContainer::const_iterator itr = _gossipMenuItemsLocaleStore.find(entry); + GossipMenuItemsLocaleContainer::const_iterator itr = _gossipMenuItemsLocaleStore.find(std::make_pair(menuId, optionIndex)); if (itr == _gossipMenuItemsLocaleStore.end()) return nullptr; return &itr->second; }