aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_10_09_08_world.sql1
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp13
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp21
-rw-r--r--src/server/game/Entities/Player/Player.cpp36
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Globals/ObjectMgr.h10
6 files changed, 36 insertions, 47 deletions
diff --git a/sql/updates/world/master/2022_10_09_08_world.sql b/sql/updates/world/master/2022_10_09_08_world.sql
new file mode 100644
index 00000000000..fc68f57362f
--- /dev/null
+++ b/sql/updates/world/master/2022_10_09_08_world.sql
@@ -0,0 +1 @@
+DELETE FROM `gossip_menu_option` WHERE `MenuID`=0;
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 6516c7422a1..89d4a4d70c1 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -1544,16 +1544,13 @@ bool ConditionMgr::addToGossipMenus(Condition* cond) const
bool ConditionMgr::addToGossipMenuItems(Condition* cond) const
{
- GossipMenuItemsMapBoundsNonConst pMenuItemBounds = sObjectMgr->GetGossipMenuItemsMapBoundsNonConst(cond->SourceGroup);
- if (pMenuItemBounds.first != pMenuItemBounds.second)
+ Trinity::IteratorPair pMenuItemBounds = sObjectMgr->GetGossipMenuItemsMapBoundsNonConst(cond->SourceGroup);
+ for (auto& [_, gossipMenuItem] : pMenuItemBounds)
{
- for (GossipMenuItemsContainer::iterator itr = pMenuItemBounds.first; itr != pMenuItemBounds.second; ++itr)
+ if (gossipMenuItem.MenuID == cond->SourceGroup && gossipMenuItem.OptionID == uint32(cond->SourceEntry))
{
- if ((*itr).second.MenuID == cond->SourceGroup && (*itr).second.OptionID == uint32(cond->SourceEntry))
- {
- (*itr).second.Conditions.push_back(cond);
- return true;
- }
+ gossipMenuItem.Conditions.push_back(cond);
+ return true;
}
}
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index f9a30a849e0..acb91b01deb 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -86,34 +86,31 @@ uint32 GossipMenu::AddMenuItem(int32 menuItemId, GossipOptionNpc optionNpc, std:
void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action)
{
/// Find items for given menu id.
- GossipMenuItemsMapBounds bounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
- /// Return if there are none.
- if (bounds.first == bounds.second)
- return;
+ Trinity::IteratorPair bounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
/// Iterate over each of them.
- for (GossipMenuItemsContainer::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
+ for (auto const& [_, gossipMenuOption] : bounds)
{
/// Find the one with the given menu item id.
- if (itr->second.OptionID != menuItemId)
+ if (gossipMenuOption.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(gossipMenuOption.OptionBroadcastTextID);
+ BroadcastTextEntry const* boxBroadcastText = sBroadcastTextStore.LookupEntry(gossipMenuOption.BoxBroadcastTextID);
/// OptionText
if (optionBroadcastText)
strOptionText = DB2Manager::GetBroadcastTextValue(optionBroadcastText, GetLocale());
else
- strOptionText = itr->second.OptionText;
+ strOptionText = gossipMenuOption.OptionText;
/// BoxText
if (boxBroadcastText)
strBoxText = DB2Manager::GetBroadcastTextValue(boxBroadcastText, GetLocale());
else
- strBoxText = itr->second.BoxText;
+ strBoxText = gossipMenuOption.BoxText;
/// Check need of localization.
if (GetLocale() != DEFAULT_LOCALE)
@@ -134,8 +131,8 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui
}
/// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
- uint32 newOptionId = AddMenuItem(-1, itr->second.OptionNpc, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
- AddGossipMenuItemData(newOptionId, itr->second.ActionMenuID, itr->second.ActionPoiID);
+ uint32 newOptionId = AddMenuItem(-1, gossipMenuOption.OptionNpc, strOptionText, sender, action, strBoxText, gossipMenuOption.BoxMoney, gossipMenuOption.BoxCoded);
+ AddGossipMenuItemData(newOptionId, gossipMenuOption.ActionMenuID, gossipMenuOption.ActionPoiID);
}
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 6ba771eba41..9c59b4b5105 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -13625,18 +13625,14 @@ void Player::SendNewItem(Item* item, uint32 quantity, bool pushed, bool created,
/*** GOSSIP SYSTEM ***/
/*********************************************************/
-void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool showQuests /*= false*/)
+void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId, bool showQuests /*= false*/)
{
PlayerMenu* menu = PlayerTalkClass;
menu->ClearMenus();
menu->GetGossipMenu().SetMenuId(menuId);
- GossipMenuItemsMapBounds menuItemBounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
-
- // if default menuId and no menu options exist for this, use options from default options
- if (menuItemBounds.first == menuItemBounds.second && menuId == GetDefaultGossipMenuForSource(source))
- menuItemBounds = sObjectMgr->GetGossipMenuItemsMapBounds(0);
+ Trinity::IteratorPair menuItemBounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
uint64 npcflags = 0;
@@ -13650,18 +13646,18 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
if (showQuests && source->ToGameObject()->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER)
PrepareQuestMenu(source->GetGUID());
- for (GossipMenuItemsContainer::const_iterator itr = menuItemBounds.first; itr != menuItemBounds.second; ++itr)
+ for (auto const& [_, gossipMenuItem] : menuItemBounds)
{
- if (!sConditionMgr->IsObjectMeetToConditions(this, source, itr->second.Conditions))
+ if (!sConditionMgr->IsObjectMeetToConditions(this, source, gossipMenuItem.Conditions))
continue;
bool canTalk = true;
if (Creature* creature = source->ToCreature())
{
- if (!(itr->second.OptionNpcFlag & npcflags))
+ if (!(gossipMenuItem.OptionNpcFlag & npcflags))
continue;
- switch (itr->second.OptionNpc)
+ switch (gossipMenuItem.OptionNpc)
{
case GossipOptionNpc::TaxiNode:
if (GetSession()->SendLearnNewTaxiNode(creature))
@@ -13735,14 +13731,14 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
case GossipOptionNpc::CovenantRenown:
break; // NYI
default:
- TC_LOG_ERROR("sql.sql", "Creature entry %u has an unknown gossip option icon %u for menu %u.", creature->GetEntry(), AsUnderlyingType(itr->second.OptionNpc), itr->second.MenuID);
+ TC_LOG_ERROR("sql.sql", "Creature entry %u has an unknown gossip option icon %u for menu %u.", creature->GetEntry(), AsUnderlyingType(gossipMenuItem.OptionNpc), gossipMenuItem.MenuID);
canTalk = false;
break;
}
}
else if (GameObject* go = source->ToGameObject())
{
- switch (itr->second.OptionNpc)
+ switch (gossipMenuItem.OptionNpc)
{
case GossipOptionNpc::None:
if (go->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER && go->GetGoType() != GAMEOBJECT_TYPE_GOOBER)
@@ -13757,39 +13753,39 @@ 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(gossipMenuItem.OptionBroadcastTextID);
+ BroadcastTextEntry const* boxBroadcastText = sBroadcastTextStore.LookupEntry(gossipMenuItem.BoxBroadcastTextID);
LocaleConstant locale = GetSession()->GetSessionDbLocaleIndex();
if (optionBroadcastText)
strOptionText = DB2Manager::GetBroadcastTextValue(optionBroadcastText, locale, GetGender());
else
- strOptionText = itr->second.OptionText;
+ strOptionText = gossipMenuItem.OptionText;
if (boxBroadcastText)
strBoxText = DB2Manager::GetBroadcastTextValue(boxBroadcastText, locale, GetGender());
else
- strBoxText = itr->second.BoxText;
+ strBoxText = gossipMenuItem.BoxText;
if (locale != DEFAULT_LOCALE)
{
if (!optionBroadcastText)
{
/// Find localizations from database.
- if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, itr->second.OptionID))
+ if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, gossipMenuItem.OptionID))
ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, locale, strOptionText);
}
if (!boxBroadcastText)
{
/// Find localizations from database.
- if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, itr->second.OptionID))
+ if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, gossipMenuItem.OptionID))
ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText);
}
}
- menu->GetGossipMenu().AddMenuItem(itr->second.OptionID, itr->second.OptionNpc, strOptionText, 0, AsUnderlyingType(itr->second.OptionNpc), strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
- menu->GetGossipMenu().AddGossipMenuItemData(itr->second.OptionID, itr->second.ActionMenuID, itr->second.ActionPoiID);
+ menu->GetGossipMenu().AddMenuItem(gossipMenuItem.OptionID, gossipMenuItem.OptionNpc, strOptionText, 0, AsUnderlyingType(gossipMenuItem.OptionNpc), strBoxText, gossipMenuItem.BoxMoney, gossipMenuItem.BoxCoded);
+ menu->GetGossipMenu().AddGossipMenuItemData(gossipMenuItem.OptionID, gossipMenuItem.ActionMenuID, gossipMenuItem.ActionPoiID);
}
}
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0b24b304a86..67cb3f97b22 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1479,7 +1479,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
/*** GOSSIP SYSTEM ***/
/*********************************************************/
- void PrepareGossipMenu(WorldObject* source, uint32 menuId = 0, bool showQuests = false);
+ void PrepareGossipMenu(WorldObject* source, uint32 menuId, bool showQuests = false);
void SendPreparedGossip(WorldObject* source);
void OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 menuId);
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index d90701a8c31..91499ba7e40 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -774,8 +774,6 @@ typedef std::multimap<uint32, GossipMenus> GossipMenusContainer;
typedef std::pair<GossipMenusContainer::const_iterator, GossipMenusContainer::const_iterator> GossipMenusMapBounds;
typedef std::pair<GossipMenusContainer::iterator, GossipMenusContainer::iterator> GossipMenusMapBoundsNonConst;
typedef std::multimap<uint32, GossipMenuItems> GossipMenuItemsContainer;
-typedef std::pair<GossipMenuItemsContainer::const_iterator, GossipMenuItemsContainer::const_iterator> GossipMenuItemsMapBounds;
-typedef std::pair<GossipMenuItemsContainer::iterator, GossipMenuItemsContainer::iterator> GossipMenuItemsMapBoundsNonConst;
typedef std::unordered_map<uint32, GossipMenuAddon> GossipMenuAddonContainer;
struct QuestPOIBlobPoint
@@ -1685,13 +1683,13 @@ class TC_GAME_API ObjectMgr
return _gossipMenusStore.equal_range(uiMenuId);
}
- GossipMenuItemsMapBounds GetGossipMenuItemsMapBounds(uint32 uiMenuId) const
+ Trinity::IteratorPair<GossipMenuItemsContainer::const_iterator> GetGossipMenuItemsMapBounds(uint32 uiMenuId) const
{
- return _gossipMenuItemsStore.equal_range(uiMenuId);
+ return Trinity::Containers::MapEqualRange(_gossipMenuItemsStore, uiMenuId);
}
- GossipMenuItemsMapBoundsNonConst GetGossipMenuItemsMapBoundsNonConst(uint32 uiMenuId)
+ Trinity::IteratorPair<GossipMenuItemsContainer::iterator> GetGossipMenuItemsMapBoundsNonConst(uint32 uiMenuId)
{
- return _gossipMenuItemsStore.equal_range(uiMenuId);
+ return Trinity::Containers::MapEqualRange(_gossipMenuItemsStore, uiMenuId);
}
GossipMenuAddon const* GetGossipMenuAddon(uint32 menuId) const
{