mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Gossip: Sync naming and db structure with 3.3.5
This commit is contained in:
29
sql/updates/world/master/2022_01_26_45_world.sql
Normal file
29
sql/updates/world/master/2022_01_26_45_world.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
ALTER TABLE `gossip_menu` RENAME COLUMN `MenuId` TO `MenuID`;
|
||||
ALTER TABLE `gossip_menu` RENAME COLUMN `TextId` TO `TextID`;
|
||||
|
||||
ALTER TABLE `gossip_menu_option` RENAME COLUMN `MenuId` TO `MenuID`;
|
||||
ALTER TABLE `gossip_menu_option` RENAME COLUMN `OptionIndex` TO `OptionID`;
|
||||
ALTER TABLE `gossip_menu_option` RENAME COLUMN `OptionBroadcastTextId` TO `OptionBroadcastTextID`;
|
||||
ALTER TABLE `gossip_menu_option` ADD `ActionMenuID` int(10) unsigned NOT NULL DEFAULT 0 AFTER `OptionNpcFlag`;
|
||||
ALTER TABLE `gossip_menu_option` ADD `ActionPoiID` int(10) unsigned NOT NULL DEFAULT 0 AFTER `ActionMenuID`;
|
||||
ALTER TABLE `gossip_menu_option` ADD `BoxCoded` tinyint(3) unsigned NOT NULL DEFAULT 0 AFTER `ActionPoiID`;
|
||||
ALTER TABLE `gossip_menu_option` ADD `BoxMoney` int(10) unsigned NOT NULL DEFAULT 0 AFTER `BoxCoded`;
|
||||
ALTER TABLE `gossip_menu_option` ADD `BoxText` mediumtext AFTER `BoxMoney`;
|
||||
ALTER TABLE `gossip_menu_option` ADD `BoxBroadcastTextID` int(10) unsigned NOT NULL DEFAULT 0 AFTER `BoxText`;
|
||||
|
||||
ALTER TABLE `gossip_menu_option_locale` RENAME COLUMN `MenuId` TO `MenuID`;
|
||||
ALTER TABLE `gossip_menu_option_locale` RENAME COLUMN `OptionIndex` TO `OptionID`;
|
||||
|
||||
UPDATE `gossip_menu_option` gmo
|
||||
LEFT JOIN `gossip_menu_option_action` gmoa ON gmo.`MenuID` = gmoa.`MenuId` AND gmo.`OptionID` = gmoa.`OptionIndex`
|
||||
LEFT JOIN `gossip_menu_option_box` gmob ON gmo.`MenuId` = gmoa.`MenuId` AND gmo.`OptionID` = gmoa.`OptionIndex`
|
||||
SET gmo.`ActionMenuID` = COALESCE(gmoa.`ActionMenuId`, 0), gmo.`ActionPoiID` = COALESCE(gmoa.`ActionPoiId`, 0),
|
||||
gmo.`BoxCoded` = COALESCE(gmob.`BoxCoded`, 0), gmo.`BoxMoney` = COALESCE(gmob.`BoxMoney`, 0), gmo.`BoxText` = gmob.`BoxText`, gmo.`BoxBroadcastTextID` = COALESCE(gmob.`BoxBroadcastTextId`, 0);
|
||||
|
||||
DROP TABLE `gossip_menu_option_action`;
|
||||
DROP TABLE `gossip_menu_option_box`;
|
||||
|
||||
ALTER TABLE `creature_trainer` RENAME COLUMN `CreatureId` TO `CreatureID`;
|
||||
ALTER TABLE `creature_trainer` RENAME COLUMN `TrainerId` TO `TrainerID`;
|
||||
ALTER TABLE `creature_trainer` RENAME COLUMN `MenuId` TO `MenuID`;
|
||||
ALTER TABLE `creature_trainer` RENAME COLUMN `OptionIndex` TO `OptionID`;
|
||||
@@ -566,7 +566,7 @@ enum SMART_ACTION
|
||||
SMART_ACTION_ADD_DYNAMIC_FLAG = 95, // Flags
|
||||
SMART_ACTION_REMOVE_DYNAMIC_FLAG = 96, // Flags
|
||||
SMART_ACTION_JUMP_TO_POS = 97, // speedXY, speedZ, targetX, targetY, targetZ
|
||||
SMART_ACTION_SEND_GOSSIP_MENU = 98, // menuId, optionIndex
|
||||
SMART_ACTION_SEND_GOSSIP_MENU = 98, // menuId, optionId
|
||||
SMART_ACTION_GO_SET_LOOT_STATE = 99, // state
|
||||
SMART_ACTION_SEND_TARGET_TO_TARGET = 100, // id
|
||||
SMART_ACTION_SET_HOME_POS = 101, // none
|
||||
|
||||
@@ -1422,7 +1422,7 @@ bool ConditionMgr::addToGossipMenus(Condition* cond) const
|
||||
{
|
||||
for (GossipMenusContainer::iterator itr = pMenuBounds.first; itr != pMenuBounds.second; ++itr)
|
||||
{
|
||||
if ((*itr).second.MenuId == cond->SourceGroup && (*itr).second.TextId == uint32(cond->SourceEntry))
|
||||
if ((*itr).second.MenuID == cond->SourceGroup && (*itr).second.TextID == uint32(cond->SourceEntry))
|
||||
{
|
||||
(*itr).second.Conditions.push_back(cond);
|
||||
return true;
|
||||
@@ -1441,7 +1441,7 @@ bool ConditionMgr::addToGossipMenuItems(Condition* cond) const
|
||||
{
|
||||
for (GossipMenuItemsContainer::iterator itr = pMenuItemBounds.first; itr != pMenuItemBounds.second; ++itr)
|
||||
{
|
||||
if ((*itr).second.MenuId == cond->SourceGroup && (*itr).second.OptionIndex == uint32(cond->SourceEntry))
|
||||
if ((*itr).second.MenuID == cond->SourceGroup && (*itr).second.OptionID == uint32(cond->SourceEntry))
|
||||
{
|
||||
(*itr).second.Conditions.push_back(cond);
|
||||
return true;
|
||||
|
||||
@@ -42,27 +42,27 @@ GossipMenu::~GossipMenu()
|
||||
ClearMenu();
|
||||
}
|
||||
|
||||
uint32 GossipMenu::AddMenuItem(int32 optionIndex, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded /*= false*/)
|
||||
uint32 GossipMenu::AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded /*= false*/)
|
||||
{
|
||||
ASSERT(_menuItems.size() <= GOSSIP_MAX_MENU_ITEMS);
|
||||
|
||||
// Find a free new id - script case
|
||||
if (optionIndex == -1)
|
||||
if (menuItemId == -1)
|
||||
{
|
||||
optionIndex = 0;
|
||||
menuItemId = 0;
|
||||
if (!_menuItems.empty())
|
||||
{
|
||||
for (GossipMenuItemContainer::const_iterator itr = _menuItems.begin(); itr != _menuItems.end(); ++itr)
|
||||
{
|
||||
if (int32(itr->first) > optionIndex)
|
||||
if (int32(itr->first) > menuItemId)
|
||||
break;
|
||||
|
||||
optionIndex = itr->first + 1;
|
||||
menuItemId = itr->first + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GossipMenuItem& menuItem = _menuItems[optionIndex];
|
||||
GossipMenuItem& menuItem = _menuItems[menuItemId];
|
||||
|
||||
menuItem.MenuItemIcon = icon;
|
||||
menuItem.Message = message;
|
||||
@@ -71,18 +71,18 @@ uint32 GossipMenu::AddMenuItem(int32 optionIndex, GossipOptionIcon icon, std::st
|
||||
menuItem.OptionType = action;
|
||||
menuItem.BoxMessage = boxMessage;
|
||||
menuItem.BoxMoney = boxMoney;
|
||||
return optionIndex;
|
||||
return menuItemId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @name AddMenuItem
|
||||
* @brief Adds a localized gossip menu item from db by menu id and menu item id.
|
||||
* @param menuId Gossip menu id.
|
||||
* @param optionIndex Gossip menu item index.
|
||||
* @param menuItemId Gossip menu item id.
|
||||
* @param sender Identifier of the current menu.
|
||||
* @param action Custom action given to OnGossipHello.
|
||||
*/
|
||||
void GossipMenu::AddMenuItem(uint32 menuId, uint32 optionIndex, uint32 sender, uint32 action)
|
||||
void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action)
|
||||
{
|
||||
/// Find items for given menu id.
|
||||
GossipMenuItemsMapBounds bounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
|
||||
@@ -94,13 +94,13 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 optionIndex, uint32 sender, u
|
||||
for (GossipMenuItemsContainer::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
|
||||
{
|
||||
/// Find the one with the given menu item id.
|
||||
if (itr->second.OptionIndex != optionIndex)
|
||||
if (itr->second.OptionID != menuItemId)
|
||||
continue;
|
||||
|
||||
/// Store texts for localization.
|
||||
std::string strOptionText, strBoxText;
|
||||
BroadcastTextEntry const* optionBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.OptionBroadcastTextId);
|
||||
BroadcastTextEntry const* boxBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.BoxBroadcastTextId);
|
||||
BroadcastTextEntry const* optionBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.OptionBroadcastTextID);
|
||||
BroadcastTextEntry const* boxBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.BoxBroadcastTextID);
|
||||
|
||||
/// OptionText
|
||||
if (optionBroadcastText)
|
||||
@@ -120,27 +120,27 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 optionIndex, uint32 sender, u
|
||||
if (!optionBroadcastText)
|
||||
{
|
||||
/// Find localizations from database.
|
||||
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, optionIndex))
|
||||
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(menuId, optionIndex))
|
||||
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, menuItemId))
|
||||
ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText);
|
||||
}
|
||||
}
|
||||
|
||||
/// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
|
||||
uint32 newOptionIndex = AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
AddGossipMenuItemData(newOptionIndex, itr->second.ActionMenuId, itr->second.ActionPoiId);
|
||||
uint32 newOptionId = AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
AddGossipMenuItemData(newOptionId, itr->second.ActionMenuID, itr->second.ActionPoiID);
|
||||
}
|
||||
}
|
||||
|
||||
void GossipMenu::AddGossipMenuItemData(uint32 optionIndex, uint32 gossipActionMenuId, uint32 gossipActionPoi)
|
||||
void GossipMenu::AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi)
|
||||
{
|
||||
GossipMenuItemData& itemData = _menuItemData[optionIndex];
|
||||
GossipMenuItemData& itemData = _menuItemData[menuItemId];
|
||||
|
||||
itemData.GossipActionMenuId = gossipActionMenuId;
|
||||
itemData.GossipActionPoi = gossipActionPoi;
|
||||
|
||||
@@ -160,18 +160,25 @@ class TC_GAME_API GossipMenu
|
||||
GossipMenu();
|
||||
~GossipMenu();
|
||||
|
||||
uint32 AddMenuItem(int32 optionIndex, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded = false);
|
||||
void AddMenuItem(uint32 menuId, uint32 optionIndex, uint32 sender, uint32 action);
|
||||
uint32 AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded = false);
|
||||
void AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action);
|
||||
|
||||
void SetMenuId(uint32 menu_id) { _menuId = menu_id; }
|
||||
uint32 GetMenuId() const { return _menuId; }
|
||||
void SetLocale(LocaleConstant locale) { _locale = locale; }
|
||||
LocaleConstant GetLocale() const { return _locale; }
|
||||
|
||||
void AddGossipMenuItemData(uint32 optionIndex, uint32 gossipActionMenuId, uint32 gossipActionPoi);
|
||||
void AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi);
|
||||
|
||||
uint32 GetMenuItemCount() const { return uint32(_menuItems.size()); }
|
||||
bool Empty() const { return _menuItems.empty(); }
|
||||
uint32 GetMenuItemCount() const
|
||||
{
|
||||
return _menuItems.size();
|
||||
}
|
||||
|
||||
bool Empty() const
|
||||
{
|
||||
return _menuItems.empty();
|
||||
}
|
||||
|
||||
GossipMenuItem const* GetItem(uint32 id) const
|
||||
{
|
||||
|
||||
@@ -14627,7 +14627,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
|
||||
canTalk = false;
|
||||
break;
|
||||
default:
|
||||
TC_LOG_ERROR("sql.sql", "Creature entry %u has unknown gossip option %u for menu %u.", creature->GetEntry(), itr->second.OptionType, itr->second.MenuId);
|
||||
TC_LOG_ERROR("sql.sql", "Creature entry %u has unknown gossip option %u for menu %u.", creature->GetEntry(), itr->second.OptionType, itr->second.MenuID);
|
||||
canTalk = false;
|
||||
break;
|
||||
}
|
||||
@@ -14649,8 +14649,8 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
|
||||
if (canTalk)
|
||||
{
|
||||
std::string strOptionText, strBoxText;
|
||||
BroadcastTextEntry const* optionBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.OptionBroadcastTextId);
|
||||
BroadcastTextEntry const* boxBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.BoxBroadcastTextId);
|
||||
BroadcastTextEntry const* optionBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.OptionBroadcastTextID);
|
||||
BroadcastTextEntry const* boxBroadcastText = sBroadcastTextStore.LookupEntry(itr->second.BoxBroadcastTextID);
|
||||
LocaleConstant locale = GetSession()->GetSessionDbLocaleIndex();
|
||||
|
||||
if (optionBroadcastText)
|
||||
@@ -14668,20 +14668,20 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
|
||||
if (!optionBroadcastText)
|
||||
{
|
||||
/// Find localizations from database.
|
||||
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, itr->second.OptionIndex))
|
||||
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(menuId, itr->second.OptionIndex))
|
||||
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, itr->second.OptionID))
|
||||
ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText);
|
||||
}
|
||||
}
|
||||
|
||||
menu->GetGossipMenu().AddMenuItem(itr->second.OptionIndex, itr->second.OptionIcon, strOptionText, 0, itr->second.OptionType, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
menu->GetGossipMenu().AddGossipMenuItemData(itr->second.OptionIndex, itr->second.ActionMenuId, itr->second.ActionPoiId);
|
||||
menu->GetGossipMenu().AddMenuItem(itr->second.OptionID, itr->second.OptionIcon, strOptionText, 0, itr->second.OptionType, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
menu->GetGossipMenu().AddGossipMenuItemData(itr->second.OptionID, itr->second.ActionMenuID, itr->second.ActionPoiID);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14711,7 +14711,7 @@ void Player::SendPreparedGossip(WorldObject* source)
|
||||
PlayerTalkClass->SendGossipMenu(textId, source->GetGUID());
|
||||
}
|
||||
|
||||
void Player::OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menuId)
|
||||
void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 menuId)
|
||||
{
|
||||
GossipMenu& gossipMenu = PlayerTalkClass->GetGossipMenu();
|
||||
|
||||
@@ -14719,7 +14719,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menu
|
||||
if (menuId != gossipMenu.GetMenuId())
|
||||
return;
|
||||
|
||||
GossipMenuItem const* item = gossipMenu.GetItem(optionIndex);
|
||||
GossipMenuItem const* item = gossipMenu.GetItem(gossipListId);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
@@ -14736,7 +14736,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menu
|
||||
}
|
||||
}
|
||||
|
||||
GossipMenuItemData const* menuItemData = gossipMenu.GetItemData(optionIndex);
|
||||
GossipMenuItemData const* menuItemData = gossipMenu.GetItemData(gossipListId);
|
||||
if (!menuItemData)
|
||||
return;
|
||||
|
||||
@@ -14764,7 +14764,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menu
|
||||
break;
|
||||
}
|
||||
case GOSSIP_OPTION_OUTDOORPVP:
|
||||
sOutdoorPvPMgr->HandleGossipOption(this, source->ToCreature(), optionIndex);
|
||||
sOutdoorPvPMgr->HandleGossipOption(this, source->ToCreature(), gossipListId);
|
||||
break;
|
||||
case GOSSIP_OPTION_SPIRITHEALER:
|
||||
if (isDead())
|
||||
@@ -14783,7 +14783,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menu
|
||||
GetSession()->SendStablePet(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_TRAINER:
|
||||
GetSession()->SendTrainerList(source->ToCreature(), sObjectMgr->GetCreatureTrainerForGossipOption(source->GetEntry(), menuId, optionIndex));
|
||||
GetSession()->SendTrainerList(source->ToCreature(), sObjectMgr->GetCreatureTrainerForGossipOption(source->GetEntry(), menuId, gossipListId));
|
||||
break;
|
||||
case GOSSIP_OPTION_LEARNDUALSPEC:
|
||||
break;
|
||||
@@ -14858,7 +14858,7 @@ uint32 Player::GetGossipTextId(uint32 menuId, WorldObject* source)
|
||||
for (GossipMenusContainer::const_iterator itr = menuBounds.first; itr != menuBounds.second; ++itr)
|
||||
{
|
||||
if (sConditionMgr->IsObjectMeetToConditions(this, source, itr->second.Conditions))
|
||||
textId = itr->second.TextId;
|
||||
textId = itr->second.TextID;
|
||||
}
|
||||
|
||||
return textId;
|
||||
|
||||
@@ -1498,7 +1498,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
|
||||
void PrepareGossipMenu(WorldObject* source, uint32 menuId = 0, bool showQuests = false);
|
||||
void SendPreparedGossip(WorldObject* source);
|
||||
void OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menuId);
|
||||
void OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 menuId);
|
||||
|
||||
uint32 GetGossipTextId(uint32 menuId, WorldObject* source);
|
||||
uint32 GetGossipTextId(WorldObject* source);
|
||||
|
||||
@@ -288,7 +288,7 @@ void ObjectMgr::LoadGossipMenuItemsLocales()
|
||||
_gossipMenuItemsLocaleStore.clear(); // need for reload case
|
||||
|
||||
// 0 1 2 3 4
|
||||
QueryResult result = WorldDatabase.Query("SELECT MenuId, OptionIndex, Locale, OptionText, BoxText FROM gossip_menu_option_locale");
|
||||
QueryResult result = WorldDatabase.Query("SELECT MenuID, OptionID, Locale, OptionText, BoxText FROM gossip_menu_option_locale");
|
||||
|
||||
if (!result)
|
||||
return;
|
||||
@@ -298,14 +298,14 @@ void ObjectMgr::LoadGossipMenuItemsLocales()
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
uint32 menuId = fields[0].GetUInt32();
|
||||
uint32 optionIndex = fields[1].GetUInt32();
|
||||
uint32 optionId = fields[1].GetUInt32();
|
||||
std::string localeName = fields[2].GetString();
|
||||
|
||||
LocaleConstant locale = GetLocaleByName(localeName);
|
||||
if (!IsValidLocale(locale) || locale == LOCALE_enUS)
|
||||
continue;
|
||||
|
||||
GossipMenuItemsLocale& data = _gossipMenuItemsLocaleStore[std::make_pair(menuId, optionIndex)];
|
||||
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());
|
||||
@@ -9363,7 +9363,7 @@ void ObjectMgr::LoadCreatureTrainers()
|
||||
|
||||
_creatureDefaultTrainers.clear();
|
||||
|
||||
if (QueryResult result = WorldDatabase.Query("SELECT CreatureId, TrainerId, MenuId, OptionIndex FROM creature_trainer"))
|
||||
if (QueryResult result = WorldDatabase.Query("SELECT CreatureID, TrainerID, MenuID, OptionID FROM creature_trainer"))
|
||||
{
|
||||
do
|
||||
{
|
||||
@@ -9371,37 +9371,37 @@ void ObjectMgr::LoadCreatureTrainers()
|
||||
uint32 creatureId = fields[0].GetUInt32();
|
||||
uint32 trainerId = fields[1].GetUInt32();
|
||||
uint32 gossipMenuId = fields[2].GetUInt32();
|
||||
uint32 gossipOptionIndex = fields[3].GetUInt32();
|
||||
uint32 gossipOptionId = fields[3].GetUInt32();
|
||||
|
||||
if (!GetCreatureTemplate(creatureId))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing creature template (CreatureId: %u), ignoring", creatureId);
|
||||
TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing creature template (CreatureID: %u), ignoring", creatureId);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!GetTrainer(trainerId))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing trainer (TrainerId: %u) for CreatureId %u MenuId %u OptionIndex %u, ignoring",
|
||||
trainerId, creatureId, gossipMenuId, gossipOptionIndex);
|
||||
TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing trainer (TrainerID: %u) for CreatureID %u MenuID %u OptionID %u, ignoring",
|
||||
trainerId, creatureId, gossipMenuId, gossipOptionId);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (gossipMenuId || gossipOptionIndex)
|
||||
if (gossipMenuId || gossipOptionId)
|
||||
{
|
||||
Trinity::IteratorPair<GossipMenuItemsContainer::const_iterator> gossipMenuItems = GetGossipMenuItemsMapBounds(gossipMenuId);
|
||||
auto gossipOptionItr = std::find_if(gossipMenuItems.begin(), gossipMenuItems.end(), [gossipOptionIndex](std::pair<uint32 const, GossipMenuItems> const& entry)
|
||||
auto gossipOptionItr = std::find_if(gossipMenuItems.begin(), gossipMenuItems.end(), [gossipOptionId](std::pair<uint32 const, GossipMenuItems> const& entry)
|
||||
{
|
||||
return entry.second.OptionIndex == gossipOptionIndex;
|
||||
return entry.second.OptionID == gossipOptionId;
|
||||
});
|
||||
if (gossipOptionItr == gossipMenuItems.end())
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing gossip menu option (MenuId %u OptionIndex %u) for CreatureId %u and TrainerId %u, ignoring",
|
||||
gossipMenuId, gossipOptionIndex, creatureId, trainerId);
|
||||
TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing gossip menu option (MenuID %u OptionID %u) for CreatureID %u and TrainerID %u, ignoring",
|
||||
gossipMenuId, gossipOptionId, creatureId, trainerId);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
_creatureDefaultTrainers[std::make_tuple(creatureId, gossipMenuId, gossipOptionIndex)] = trainerId;
|
||||
_creatureDefaultTrainers[std::make_tuple(creatureId, gossipMenuId, gossipOptionId)] = trainerId;
|
||||
} while (result->NextRow());
|
||||
}
|
||||
|
||||
@@ -9520,7 +9520,7 @@ void ObjectMgr::LoadGossipMenu()
|
||||
_gossipMenusStore.clear();
|
||||
|
||||
// 0 1
|
||||
QueryResult result = WorldDatabase.Query("SELECT MenuId, TextId FROM gossip_menu");
|
||||
QueryResult result = WorldDatabase.Query("SELECT MenuID, TextID FROM gossip_menu");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
@@ -9534,16 +9534,16 @@ void ObjectMgr::LoadGossipMenu()
|
||||
|
||||
GossipMenus gMenu;
|
||||
|
||||
gMenu.MenuId = fields[0].GetUInt32();
|
||||
gMenu.TextId = fields[1].GetUInt32();
|
||||
gMenu.MenuID = fields[0].GetUInt32();
|
||||
gMenu.TextID = fields[1].GetUInt32();
|
||||
|
||||
if (!GetNpcText(gMenu.TextId))
|
||||
if (!GetNpcText(gMenu.TextID))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table gossip_menu: ID %u is using non-existing TextId %u", gMenu.MenuId, gMenu.TextId);
|
||||
TC_LOG_ERROR("sql.sql", "Table gossip_menu: ID %u is using non-existing TextID %u", gMenu.MenuID, gMenu.TextID);
|
||||
continue;
|
||||
}
|
||||
|
||||
_gossipMenusStore.insert(GossipMenusContainer::value_type(gMenu.MenuId, gMenu));
|
||||
_gossipMenusStore.insert(GossipMenusContainer::value_type(gMenu.MenuID, gMenu));
|
||||
} while (result->NextRow());
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded %u gossip_menu IDs in %u ms", uint32(_gossipMenusStore.size()), GetMSTimeDiffToNow(oldMSTime));
|
||||
@@ -9556,16 +9556,9 @@ void ObjectMgr::LoadGossipMenuItems()
|
||||
_gossipMenuItemsStore.clear();
|
||||
|
||||
QueryResult result = WorldDatabase.Query(
|
||||
// 0 1 2 3 4 5 6
|
||||
"SELECT o.MenuId, o.OptionIndex, o.OptionIcon, o.OptionText, o.OptionBroadcastTextId, o.OptionType, o.OptionNpcFlag, "
|
||||
// 7 8
|
||||
"oa.ActionMenuId, oa.ActionPoiId, "
|
||||
// 9 10 11 12
|
||||
"ob.BoxCoded, ob.BoxMoney, ob.BoxText, ob.BoxBroadcastTextId "
|
||||
"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 "
|
||||
"ORDER BY o.MenuId, o.OptionIndex");
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
"SELECT MenuID, OptionID, OptionIcon, OptionText, OptionBroadcastTextID, OptionType, OptionNpcFlag, ActionMenuID, ActionPoiID, BoxCoded, BoxMoney, BoxText, BoxBroadcastTextID "
|
||||
"FROM gossip_menu_option ORDER BY MenuID, OptionID");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
@@ -9579,54 +9572,54 @@ void ObjectMgr::LoadGossipMenuItems()
|
||||
|
||||
GossipMenuItems gMenuItem;
|
||||
|
||||
gMenuItem.MenuId = fields[0].GetUInt32();
|
||||
gMenuItem.OptionIndex = fields[1].GetUInt32();
|
||||
gMenuItem.MenuID = fields[0].GetUInt32();
|
||||
gMenuItem.OptionID = fields[1].GetUInt32();
|
||||
gMenuItem.OptionIcon = GossipOptionIcon(fields[2].GetUInt8());
|
||||
gMenuItem.OptionText = fields[3].GetString();
|
||||
gMenuItem.OptionBroadcastTextId = fields[4].GetUInt32();
|
||||
gMenuItem.OptionBroadcastTextID = fields[4].GetUInt32();
|
||||
gMenuItem.OptionType = fields[5].GetUInt32();
|
||||
gMenuItem.OptionNpcFlag = fields[6].GetUInt64();
|
||||
gMenuItem.ActionMenuId = fields[7].GetUInt32();
|
||||
gMenuItem.ActionPoiId = fields[8].GetUInt32();
|
||||
gMenuItem.ActionMenuID = fields[7].GetUInt32();
|
||||
gMenuItem.ActionPoiID = fields[8].GetUInt32();
|
||||
gMenuItem.BoxCoded = fields[9].GetBool();
|
||||
gMenuItem.BoxMoney = fields[10].GetUInt32();
|
||||
gMenuItem.BoxText = fields[11].GetString();
|
||||
gMenuItem.BoxBroadcastTextId = fields[12].GetUInt32();
|
||||
gMenuItem.BoxBroadcastTextID = fields[12].GetUInt32();
|
||||
|
||||
if (gMenuItem.OptionIcon >= GossipOptionIcon::Count)
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for MenuId %u, OptionIndex %u has unknown icon id %u. Replacing with GossipOptionIcon::None", gMenuItem.MenuId, gMenuItem.OptionIndex, uint8(gMenuItem.OptionIcon));
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown icon id %u. Replacing with GossipOptionIcon::None", gMenuItem.MenuID, gMenuItem.OptionID, uint32(gMenuItem.OptionIcon));
|
||||
gMenuItem.OptionIcon = GossipOptionIcon::None;
|
||||
}
|
||||
|
||||
if (gMenuItem.OptionBroadcastTextId)
|
||||
if (gMenuItem.OptionBroadcastTextID)
|
||||
{
|
||||
if (!sBroadcastTextStore.LookupEntry(gMenuItem.OptionBroadcastTextId))
|
||||
if (!sBroadcastTextStore.LookupEntry(gMenuItem.OptionBroadcastTextID))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for MenuId %u, OptionIndex %u has non-existing or incompatible OptionBroadcastTextID %u, ignoring.", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionBroadcastTextId);
|
||||
gMenuItem.OptionBroadcastTextId = 0;
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has non-existing or incompatible OptionBroadcastTextID %u, ignoring.", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.OptionBroadcastTextID);
|
||||
gMenuItem.OptionBroadcastTextID = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (gMenuItem.OptionType >= GOSSIP_OPTION_MAX)
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for MenuId %u, OptionIndex %u has unknown option id %u. Option will not be used", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionType);
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.OptionType);
|
||||
|
||||
if (gMenuItem.ActionPoiId && !GetPointOfInterest(gMenuItem.ActionPoiId))
|
||||
if (gMenuItem.ActionPoiID && !GetPointOfInterest(gMenuItem.ActionPoiID))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for MenuId %u, OptionIndex %u use non-existing action_poi_id %u, ignoring", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.ActionPoiId);
|
||||
gMenuItem.ActionPoiId = 0;
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing ActionPoiID %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.ActionPoiID);
|
||||
gMenuItem.ActionPoiID = 0;
|
||||
}
|
||||
|
||||
if (gMenuItem.BoxBroadcastTextId)
|
||||
if (gMenuItem.BoxBroadcastTextID)
|
||||
{
|
||||
if (!sBroadcastTextStore.LookupEntry(gMenuItem.BoxBroadcastTextId))
|
||||
if (!sBroadcastTextStore.LookupEntry(gMenuItem.BoxBroadcastTextID))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for MenuId %u, OptionIndex %u has non-existing or incompatible BoxBroadcastTextId %u, ignoring.", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.BoxBroadcastTextId);
|
||||
gMenuItem.BoxBroadcastTextId = 0;
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has non-existing or incompatible BoxBroadcastTextID %u, ignoring.", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.BoxBroadcastTextID);
|
||||
gMenuItem.BoxBroadcastTextID = 0;
|
||||
}
|
||||
}
|
||||
|
||||
_gossipMenuItemsStore.insert(GossipMenuItemsContainer::value_type(gMenuItem.MenuId, gMenuItem));
|
||||
_gossipMenuItemsStore.insert(GossipMenuItemsContainer::value_type(gMenuItem.MenuID, gMenuItem));
|
||||
} while (result->NextRow());
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " gossip_menu_option entries in %u ms", _gossipMenuItemsStore.size(), GetMSTimeDiffToNow(oldMSTime));
|
||||
@@ -9637,9 +9630,9 @@ Trainer::Trainer const* ObjectMgr::GetTrainer(uint32 trainerId) const
|
||||
return Trinity::Containers::MapGetValuePtr(_trainers, trainerId);
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetCreatureTrainerForGossipOption(uint32 creatureId, uint32 gossipMenuId, uint32 gossipOptionIndex) const
|
||||
uint32 ObjectMgr::GetCreatureTrainerForGossipOption(uint32 creatureId, uint32 gossipMenuId, uint32 gossipOptionId) const
|
||||
{
|
||||
auto itr = _creatureDefaultTrainers.find(std::make_tuple(creatureId, gossipMenuId, gossipOptionIndex));
|
||||
auto itr = _creatureDefaultTrainers.find(std::make_tuple(creatureId, gossipMenuId, gossipOptionId));
|
||||
if (itr != _creatureDefaultTrainers.end())
|
||||
return itr->second;
|
||||
|
||||
|
||||
@@ -747,27 +747,27 @@ struct PointOfInterest
|
||||
|
||||
struct GossipMenuItems
|
||||
{
|
||||
uint32 MenuId;
|
||||
uint32 OptionIndex;
|
||||
GossipOptionIcon OptionIcon;
|
||||
std::string OptionText;
|
||||
uint32 OptionBroadcastTextId;
|
||||
uint32 OptionType;
|
||||
uint64 OptionNpcFlag;
|
||||
uint32 ActionMenuId;
|
||||
uint32 ActionPoiId;
|
||||
bool BoxCoded;
|
||||
uint32 BoxMoney;
|
||||
std::string BoxText;
|
||||
uint32 BoxBroadcastTextId;
|
||||
ConditionContainer Conditions;
|
||||
uint32 MenuID;
|
||||
uint32 OptionID;
|
||||
GossipOptionIcon OptionIcon;
|
||||
std::string OptionText;
|
||||
uint32 OptionBroadcastTextID;
|
||||
uint32 OptionType;
|
||||
uint32 OptionNpcFlag;
|
||||
uint32 ActionMenuID;
|
||||
uint32 ActionPoiID;
|
||||
bool BoxCoded;
|
||||
uint32 BoxMoney;
|
||||
std::string BoxText;
|
||||
uint32 BoxBroadcastTextID;
|
||||
ConditionContainer Conditions;
|
||||
};
|
||||
|
||||
struct GossipMenus
|
||||
{
|
||||
uint32 MenuId;
|
||||
uint32 TextId;
|
||||
ConditionContainer Conditions;
|
||||
uint32 MenuID;
|
||||
uint32 TextID;
|
||||
ConditionContainer Conditions;
|
||||
};
|
||||
|
||||
typedef std::multimap<uint32, GossipMenus> GossipMenusContainer;
|
||||
@@ -1570,9 +1570,9 @@ class TC_GAME_API ObjectMgr
|
||||
if (itr == _pageTextLocaleStore.end()) return nullptr;
|
||||
return &itr->second;
|
||||
}
|
||||
GossipMenuItemsLocale const* GetGossipMenuItemsLocale(uint32 menuId, uint32 optionIndex) const
|
||||
GossipMenuItemsLocale const* GetGossipMenuItemsLocale(uint32 menuId, uint32 optionId) const
|
||||
{
|
||||
auto itr = _gossipMenuItemsLocaleStore.find(std::make_pair(menuId, optionIndex));
|
||||
auto itr = _gossipMenuItemsLocaleStore.find(std::make_pair(menuId, optionId));
|
||||
if (itr == _gossipMenuItemsLocaleStore.end()) return nullptr;
|
||||
return &itr->second;
|
||||
}
|
||||
@@ -1636,7 +1636,7 @@ class TC_GAME_API ObjectMgr
|
||||
{
|
||||
return GetCreatureTrainerForGossipOption(creatureId, 0, 0);
|
||||
}
|
||||
uint32 GetCreatureTrainerForGossipOption(uint32 creatureId, uint32 gossipMenuId, uint32 gossipOptionIndex) const;
|
||||
uint32 GetCreatureTrainerForGossipOption(uint32 creatureId, uint32 gossipMenuId, uint32 gossipOptionId) const;
|
||||
|
||||
VendorItemData const* GetNpcVendorItemList(uint32 entry) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user