Core/Creatures: Move gossip trainer assignment to creature_trainer table - same gossip can open different trainers depending on which creature it is assigned to

This commit is contained in:
Shauren
2020-08-22 18:22:57 +02:00
committed by Ovahlord
parent 52287e1f07
commit fa6f081037
6 changed files with 16 additions and 16 deletions

View File

@@ -125,17 +125,16 @@ 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 optionIndex = AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
AddGossipMenuItemData(optionIndex, itr->second.ActionMenuID, itr->second.ActionPoiID, itr->second.TrainerId);
AddGossipMenuItemData(optionIndex, itr->second.ActionMenuID, itr->second.ActionPoiID);
}
}
void GossipMenu::AddGossipMenuItemData(uint32 optionIndex, uint32 gossipActionMenuId, uint32 gossipActionPoi, uint32 trainerId)
void GossipMenu::AddGossipMenuItemData(uint32 optionIndex, uint32 gossipActionMenuId, uint32 gossipActionPoi)
{
GossipMenuItemData& itemData = _menuItemData[optionIndex];
itemData.GossipActionMenuId = gossipActionMenuId;
itemData.GossipActionPoi = gossipActionPoi;
itemData.TrainerId = trainerId;
}
uint32 GossipMenu::GetMenuItemSender(uint32 menuItemId) const

View File

@@ -146,8 +146,6 @@ struct GossipMenuItemData
{
uint32 GossipActionMenuId; // MenuId of the gossip triggered by this action
uint32 GossipActionPoi;
uint32 TrainerId;
};
// need an ordered container
@@ -175,7 +173,7 @@ class TC_GAME_API GossipMenu
void SetLocale(LocaleConstant locale) { _locale = locale; }
LocaleConstant GetLocale() const { return _locale; }
void AddGossipMenuItemData(uint32 optionIndex, uint32 gossipActionMenuId, uint32 gossipActionPoi, uint32 trainerId);
void AddGossipMenuItemData(uint32 optionIndex, uint32 gossipActionMenuId, uint32 gossipActionPoi);
uint32 GetMenuItemCount() const
{

View File

@@ -14039,7 +14039,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
}
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, itr->second.TrainerId);
menu->GetGossipMenu().AddGossipMenuItemData(itr->second.OptionID, itr->second.ActionMenuID, itr->second.ActionPoiID);
}
}
}
@@ -14151,7 +14151,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
GetSession()->SendStablePet(guid);
break;
case GOSSIP_OPTION_TRAINER:
GetSession()->SendTrainerList(source->ToCreature(), menuItemData->TrainerId);
GetSession()->SendTrainerList(source->ToCreature(), sObjectMgr->GetCreatureTrainerForGossipOption(source->GetEntry(), menuId, gossipListId));
break;
case GOSSIP_OPTION_LEARNDUALSPEC:
if (GetSpecsCount() == 1 && getLevel() >= sWorld->getIntConfig(CONFIG_MIN_DUALSPEC_LEVEL))

View File

@@ -791,7 +791,6 @@ struct GossipMenuItems
uint32 BoxMoney;
std::string BoxText;
uint32 BoxBroadcastTextID;
uint32 TrainerId;
ConditionContainer Conditions;
};
@@ -1244,7 +1243,7 @@ class TC_GAME_API ObjectMgr
void LoadVendors();
void LoadTrainers();
void LoadCreatureDefaultTrainers();
void LoadCreatureTrainers();
void InitializeQueriesData(QueryDataGroup mask);
@@ -1495,7 +1494,11 @@ class TC_GAME_API ObjectMgr
bool DeleteGameTele(std::string const& name);
Trainer::Trainer const* GetTrainer(uint32 trainerId) const;
uint32 GetCreatureDefaultTrainer(uint32 creatureId) const;
uint32 GetCreatureDefaultTrainer(uint32 creatureId) const
{
return GetCreatureTrainerForGossipOption(creatureId, 0, 0);
}
uint32 GetCreatureTrainerForGossipOption(uint32 creatureId, uint32 gossipMenuId, uint32 gossipOptionIndex) const;
VendorItemData const* GetNpcVendorItemList(uint32 entry) const
{
@@ -1756,7 +1759,7 @@ class TC_GAME_API ObjectMgr
CacheVendorItemContainer _cacheVendorItemStore;
std::unordered_map<uint32, Trainer::Trainer> _trainers;
std::unordered_map<uint32, uint32> _creatureDefaultTrainers;
std::map<std::tuple<uint32, uint32, uint32>, uint32> _creatureDefaultTrainers;
GraveyardOrientationContainer _graveyardOrientations;

View File

@@ -2088,15 +2088,15 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Loading Trainers..."); // must be after LoadCreatureTemplates
sObjectMgr->LoadTrainers();
TC_LOG_INFO("server.loading", "Loading Creature default trainers...");
sObjectMgr->LoadCreatureDefaultTrainers();
TC_LOG_INFO("server.loading", "Loading Gossip menu...");
sObjectMgr->LoadGossipMenu();
TC_LOG_INFO("server.loading", "Loading Gossip menu options...");
sObjectMgr->LoadGossipMenuItems();
TC_LOG_INFO("server.loading", "Loading Creature trainers...");
sObjectMgr->LoadCreatureTrainers(); // must be after LoadGossipMenuItems
TC_LOG_INFO("server.loading", "Loading Vendors...");
sObjectMgr->LoadVendors(); // must be after load CreatureTemplate and ItemTemplate

View File

@@ -708,7 +708,7 @@ public:
{
TC_LOG_INFO("misc", "Re-Loading `trainer` Table!");
sObjectMgr->LoadTrainers();
sObjectMgr->LoadCreatureDefaultTrainers();
sObjectMgr->LoadCreatureTrainers();
handler->SendGlobalGMSysMessage("DB table `trainer` reloaded.");
handler->SendGlobalGMSysMessage("DB table `trainer_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `trainer_spell` reloaded.");