mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.");
|
||||
|
||||
Reference in New Issue
Block a user