aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-12-04 15:13:20 +0100
committerShauren <shauren.trinity@gmail.com>2022-12-04 15:13:20 +0100
commite98e1283ea0034baf6be9aa2ffb386eb5582801b (patch)
treeb1dd854d88e6e049d26b208bb259cdc7d31f29f8 /src/server/game/Handlers
parentde7c03c8385780f05530c2b3cf952a712d5f8f00 (diff)
Core: Updated to 10.0.2
Diffstat (limited to 'src/server/game/Handlers')
-rw-r--r--src/server/game/Handlers/AuthHandler.cpp1
-rw-r--r--src/server/game/Handlers/AzeriteHandler.cpp7
-rw-r--r--src/server/game/Handlers/BankHandler.cpp20
-rw-r--r--src/server/game/Handlers/BlackMarketHandler.cpp11
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp96
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp6
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp4
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp37
-rw-r--r--src/server/game/Handlers/TransmogrificationHandler.cpp7
-rw-r--r--src/server/game/Handlers/VoidStorageHandler.cpp2
10 files changed, 134 insertions, 57 deletions
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp
index 6afd1b5d476..7be557d368b 100644
--- a/src/server/game/Handlers/AuthHandler.cpp
+++ b/src/server/game/Handlers/AuthHandler.cpp
@@ -93,6 +93,7 @@ void WorldSession::SendSetTimeZoneInformation()
WorldPackets::System::SetTimeZoneInformation packet;
packet.ServerTimeTZ = "Europe/Paris";
packet.GameTimeTZ = "Europe/Paris";
+ packet.ServerRegionalTZ = "Europe/Paris";
SendPacket(packet.Write());
}
diff --git a/src/server/game/Handlers/AzeriteHandler.cpp b/src/server/game/Handlers/AzeriteHandler.cpp
index 376ad24bd62..a6d951b1a65 100644
--- a/src/server/game/Handlers/AzeriteHandler.cpp
+++ b/src/server/game/Handlers/AzeriteHandler.cpp
@@ -20,6 +20,7 @@
#include "AzeriteItem.h"
#include "AzeritePackets.h"
#include "DB2Stores.h"
+#include "NPCPackets.h"
#include "Player.h"
#include "SpellHistory.h"
@@ -236,5 +237,9 @@ void WorldSession::HandleAzeriteEmpoweredItemSelectPower(WorldPackets::Azerite::
void WorldSession::SendAzeriteRespecNPC(ObjectGuid npc)
{
- SendPacket(WorldPackets::Azerite::AzeriteRespecNPC(npc).Write());
+ WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
+ npcInteraction.Npc = npc;
+ npcInteraction.InteractionType = PlayerInteractionType::AzeriteRespec;
+ npcInteraction.Success = true;
+ SendPacket(npcInteraction.Write());
}
diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp
index 84f13afff83..4c300b01e35 100644
--- a/src/server/game/Handlers/BankHandler.cpp
+++ b/src/server/game/Handlers/BankHandler.cpp
@@ -197,13 +197,13 @@ void WorldSession::HandleReagentBankDepositOpcode(WorldPackets::Bank::ReagentBan
if (msg != EQUIP_ERR_OK)
{
if (msg != EQUIP_ERR_REAGENT_BANK_FULL || !anyDeposited)
- _player->SendEquipError(msg, item, NULL);
+ _player->SendEquipError(msg, item, nullptr);
break;
}
if (dest.size() == 1 && dest[0].pos == item->GetPos())
{
- _player->SendEquipError(EQUIP_ERR_CANT_SWAP, item, NULL);
+ _player->SendEquipError(EQUIP_ERR_CANT_SWAP, item, nullptr);
continue;
}
@@ -236,13 +236,13 @@ void WorldSession::HandleAutoBankReagentOpcode(WorldPackets::Bank::AutoBankReage
InventoryResult msg = _player->CanBankItem(NULL_BAG, NULL_SLOT, dest, item, false, true, true);
if (msg != EQUIP_ERR_OK)
{
- _player->SendEquipError(msg, item, NULL);
+ _player->SendEquipError(msg, item, nullptr);
return;
}
if (dest.size() == 1 && dest[0].pos == item->GetPos())
{
- _player->SendEquipError(EQUIP_ERR_CANT_SWAP, item, NULL);
+ _player->SendEquipError(EQUIP_ERR_CANT_SWAP, item, nullptr);
return;
}
@@ -274,7 +274,7 @@ void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStor
InventoryResult msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, pItem, false);
if (msg != EQUIP_ERR_OK)
{
- _player->SendEquipError(msg, pItem, NULL);
+ _player->SendEquipError(msg, pItem, nullptr);
return;
}
@@ -287,7 +287,7 @@ void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStor
InventoryResult msg = _player->CanBankItem(NULL_BAG, NULL_SLOT, dest, pItem, false, true, true);
if (msg != EQUIP_ERR_OK)
{
- _player->SendEquipError(msg, pItem, NULL);
+ _player->SendEquipError(msg, pItem, nullptr);
return;
}
@@ -299,7 +299,9 @@ void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStor
void WorldSession::SendShowBank(ObjectGuid guid)
{
m_currentBankerGUID = guid;
- WorldPackets::NPC::ShowBank packet;
- packet.Guid = guid;
- SendPacket(packet.Write());
+ WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
+ npcInteraction.Npc = guid;
+ npcInteraction.InteractionType = PlayerInteractionType::Banker;
+ npcInteraction.Success = true;
+ SendPacket(npcInteraction.Write());
}
diff --git a/src/server/game/Handlers/BlackMarketHandler.cpp b/src/server/game/Handlers/BlackMarketHandler.cpp
index ea3052a7953..88353f9c735 100644
--- a/src/server/game/Handlers/BlackMarketHandler.cpp
+++ b/src/server/game/Handlers/BlackMarketHandler.cpp
@@ -21,8 +21,8 @@
#include "DatabaseEnv.h"
#include "Item.h"
#include "Log.h"
+#include "NPCPackets.h"
#include "Player.h"
-#include "WorldPacket.h"
void WorldSession::HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& blackMarketOpen)
{
@@ -42,10 +42,11 @@ void WorldSession::HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketO
void WorldSession::SendBlackMarketOpenResult(ObjectGuid guid, Creature* /*auctioneer*/)
{
- WorldPackets::BlackMarket::BlackMarketOpenResult packet;
- packet.Guid = guid;
- packet.Enable = sBlackMarketMgr->IsEnabled();
- SendPacket(packet.Write());
+ WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
+ npcInteraction.Npc = guid;
+ npcInteraction.InteractionType = PlayerInteractionType::BlackMarketAuctioneer;
+ npcInteraction.Success = sBlackMarketMgr->IsEnabled();
+ SendPacket(npcInteraction.Write());
}
void WorldSession::HandleBlackMarketRequestItems(WorldPackets::BlackMarket::BlackMarketRequestItems& blackMarketRequestItems)
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index d02d01f512b..98adc84d6fe 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -515,6 +515,15 @@ bool WorldSession::MeetsChrCustomizationReq(ChrCustomizationReqEntry const* req,
if (req->ItemModifiedAppearanceID && !GetCollectionMgr()->HasItemAppearance(req->ItemModifiedAppearanceID).first)
return false;
+ if (req->QuestID)
+ {
+ if (!_player)
+ return false;
+
+ if (!_player->IsQuestRewarded(req->QuestID))
+ return false;
+ }
+
if (checkRequiredDependentChoices)
{
if (std::unordered_map<uint32, std::vector<uint32>> const* requiredChoices = sDB2Manager.GetRequiredCustomizationChoices(req->ID))
@@ -667,20 +676,32 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
//}
// prevent character creating Expansion class without Expansion account
- ClassAvailability const* classExpansionRequirement = sObjectMgr->GetClassExpansionRequirement(charCreate.CreateInfo->Race, charCreate.CreateInfo->Class);
- if (!classExpansionRequirement)
+ if (ClassAvailability const* raceClassExpansionRequirement = sObjectMgr->GetClassExpansionRequirement(charCreate.CreateInfo->Race, charCreate.CreateInfo->Class))
{
- TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character for race/class combination that is missing requirements in db (%u/%u)",
- GetAccountExpansion(), GetAccountId(), uint32(charCreate.CreateInfo->Race), uint32(charCreate.CreateInfo->Class));
- SendCharCreate(CHAR_CREATE_EXPANSION_CLASS);
- return;
+ if (raceClassExpansionRequirement->ActiveExpansionLevel > GetExpansion() || raceClassExpansionRequirement->AccountExpansionLevel > GetAccountExpansion())
+ {
+ TC_LOG_ERROR("entities.player.cheat", "Account:[%d] tried to create character with race/class %u/%u without required expansion (had %u/%u, required %u/%u)",
+ GetAccountId(), uint32(charCreate.CreateInfo->Race), uint32(charCreate.CreateInfo->Class), GetExpansion(), GetAccountExpansion(),
+ raceClassExpansionRequirement->ActiveExpansionLevel, raceClassExpansionRequirement->AccountExpansionLevel);
+ SendCharCreate(CHAR_CREATE_EXPANSION_CLASS);
+ return;
+ }
}
-
- if (classExpansionRequirement->ActiveExpansionLevel > GetExpansion() || classExpansionRequirement->AccountExpansionLevel > GetAccountExpansion())
+ else if (ClassAvailability const* classExpansionRequirement = sObjectMgr->GetClassExpansionRequirementFallback(charCreate.CreateInfo->Class))
+ {
+ if (classExpansionRequirement->MinActiveExpansionLevel > GetExpansion() || classExpansionRequirement->AccountExpansionLevel > GetAccountExpansion())
+ {
+ TC_LOG_ERROR("entities.player.cheat", "Account:[%d] tried to create character with race/class %u/%u without required expansion (had %u/%u, required %u/%u)",
+ GetAccountId(), uint32(charCreate.CreateInfo->Race), uint32(charCreate.CreateInfo->Class), GetExpansion(), GetAccountExpansion(),
+ classExpansionRequirement->ActiveExpansionLevel, classExpansionRequirement->AccountExpansionLevel);
+ SendCharCreate(CHAR_CREATE_EXPANSION_CLASS);
+ return;
+ }
+ }
+ else
{
- TC_LOG_ERROR("entities.player.cheat", "Account:[%d] tried to create character with race/class %u/%u without required expansion (had %u/%u, required %u/%u)",
- GetAccountId(), uint32(charCreate.CreateInfo->Race), uint32(charCreate.CreateInfo->Class), GetExpansion(), GetAccountExpansion(),
- classExpansionRequirement->ActiveExpansionLevel, classExpansionRequirement->AccountExpansionLevel);
+ TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character for race/class combination that is missing requirements in db (%u/%u)",
+ GetAccountExpansion(), GetAccountId(), uint32(charCreate.CreateInfo->Race), uint32(charCreate.CreateInfo->Class));
SendCharCreate(CHAR_CREATE_EXPANSION_CLASS);
return;
}
@@ -792,9 +813,14 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
bool haveSameRace = false;
uint32 demonHunterReqLevel = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_DEMON_HUNTER);
bool hasDemonHunterReqLevel = (demonHunterReqLevel == 0);
+ uint32 evokerReqLevel = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_EVOKER);
+ bool hasEvokerReqLevel = (evokerReqLevel == 0);
bool allowTwoSideAccounts = !sWorld->IsPvPRealm() || HasPermission(rbac::RBAC_PERM_TWO_SIDE_CHARACTER_CREATION);
uint32 skipCinematics = sWorld->getIntConfig(CONFIG_SKIP_CINEMATICS);
- bool checkDemonHunterReqs = createInfo->Class == CLASS_DEMON_HUNTER && !HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_DEMON_HUNTER);
+ bool checkClassLevelReqs = (createInfo->Class == CLASS_DEMON_HUNTER || createInfo->Class == CLASS_EVOKER)
+ && !HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_DEMON_HUNTER);
+ int32 evokerLimit = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_EVOKERS_PER_REALM);
+ bool hasEvokerLimit = evokerLimit != 0;
if (result)
{
@@ -802,8 +828,9 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
Field* field = result->Fetch();
uint8 accRace = field[1].GetUInt8();
+ uint8 accClass = field[2].GetUInt8();
- if (checkDemonHunterReqs)
+ if (checkClassLevelReqs)
{
if (!hasDemonHunterReqLevel)
{
@@ -811,8 +838,17 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
if (accLevel >= demonHunterReqLevel)
hasDemonHunterReqLevel = true;
}
+ if (!hasEvokerReqLevel)
+ {
+ uint8 accLevel = field[0].GetUInt8();
+ if (accLevel >= evokerReqLevel)
+ hasEvokerReqLevel = true;
+ }
}
+ if (accClass == CLASS_EVOKER)
+ --evokerLimit;
+
// need to check team only for first character
/// @todo what to if account already has characters of both races?
if (!allowTwoSideAccounts)
@@ -830,18 +866,19 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
// search same race for cinematic or same class if need
/// @todo check if cinematic already shown? (already logged in?; cinematic field)
- while ((skipCinematics == 1 && !haveSameRace) || createInfo->Class == CLASS_DEMON_HUNTER)
+ while ((skipCinematics == 1 && !haveSameRace) || createInfo->Class == CLASS_DEMON_HUNTER || createInfo->Class == CLASS_EVOKER)
{
if (!result->NextRow())
break;
field = result->Fetch();
accRace = field[1].GetUInt8();
+ accClass = field[2].GetUInt8();
if (!haveSameRace)
haveSameRace = createInfo->Race == accRace;
- if (checkDemonHunterReqs)
+ if (checkClassLevelReqs)
{
if (!hasDemonHunterReqLevel)
{
@@ -849,13 +886,36 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
if (accLevel >= demonHunterReqLevel)
hasDemonHunterReqLevel = true;
}
+ if (!hasEvokerReqLevel)
+ {
+ uint8 accLevel = field[0].GetUInt8();
+ if (accLevel >= evokerReqLevel)
+ hasEvokerReqLevel = true;
+ }
}
+
+ if (accClass == CLASS_EVOKER)
+ --evokerLimit;
+ }
+ }
+
+ if (checkClassLevelReqs)
+ {
+ if (!hasDemonHunterReqLevel)
+ {
+ SendCharCreate(CHAR_CREATE_NEW_PLAYER);
+ return;
+ }
+ if (!hasEvokerReqLevel)
+ {
+ SendCharCreate(CHAR_CREATE_DRACTHYR_LEVEL_REQUIREMENT);
+ return;
}
}
- if (checkDemonHunterReqs && !hasDemonHunterReqLevel)
+ if (createInfo->Class == CLASS_EVOKER && hasEvokerLimit && evokerLimit < 1)
{
- SendCharCreate(CHAR_CREATE_NEW_PLAYER);
+ SendCharCreate(CHAR_CREATE_DRACTHYR_DUPLICATE);
return;
}
@@ -922,7 +982,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_CREATE_INFO);
stmt->setUInt32(0, GetAccountId());
- stmt->setUInt32(1, (skipCinematics == 1 || createInfo->Class == CLASS_DEMON_HUNTER) ? 1200 : 1); // 200 (max chars per realm) + 1000 (max deleted chars per realm)
+ stmt->setUInt32(1, (skipCinematics == 1 || createInfo->Class == CLASS_DEMON_HUNTER || createInfo->Class == CLASS_EVOKER) ? 1200 : 1); // 200 (max chars per realm) + 1000 (max deleted chars per realm)
queryCallback.WithPreparedCallback(std::move(finalizeCharacterCreation)).SetNextQuery(CharacterDatabase.AsyncQuery(stmt));
}));
}
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index d5c92e8cf63..b6b89f9b0b4 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -217,7 +217,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string ms
return;
}
- if (msg.size() > 255)
+ if (msg.size() > 511)
return;
if (msg.empty())
@@ -564,7 +564,7 @@ void WorldSession::HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK
if (sender->IsInCombat())
return;
- if (chatMessageAFK.Text.length() > 255)
+ if (chatMessageAFK.Text.length() > 511)
return;
// do message validity checks
@@ -610,7 +610,7 @@ void WorldSession::HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND
if (sender->IsInCombat())
return;
- if (chatMessageDND.Text.length() > 255)
+ if (chatMessageDND.Text.length() > 511)
return;
// do message validity checks
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 554dc5038ae..2f102c2304c 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -955,8 +955,8 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems)
gems[i] = gem;
gemData[i].ItemId = gem->GetEntry();
gemData[i].Context = gem->m_itemData->Context;
- for (std::size_t b = 0; b < gem->m_itemData->BonusListIDs->size() && b < 16; ++b)
- gemData[i].BonusListIDs[b] = (*gem->m_itemData->BonusListIDs)[b];
+ for (std::size_t b = 0; b < gem->GetBonusListIDs().size() && b < 16; ++b)
+ gemData[i].BonusListIDs[b] = gem->GetBonusListIDs()[b];
gemProperties[i] = sGemPropertiesStore.LookupEntry(gem->GetTemplate()->GetGemProperties());
}
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index d19a83da7a7..644ae8e9881 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -29,7 +29,6 @@
#include "Item.h"
#include "ItemPackets.h"
#include "Log.h"
-#include "MailPackets.h"
#include "Map.h"
#include "NPCPackets.h"
#include "ObjectMgr.h"
@@ -39,7 +38,6 @@
#include "ReputationMgr.h"
#include "SpellInfo.h"
#include "Trainer.h"
-#include "World.h"
#include "WorldPacket.h"
enum class StableResult : uint8
@@ -71,16 +69,20 @@ void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& pa
void WorldSession::SendTabardVendorActivate(ObjectGuid guid)
{
- WorldPackets::NPC::PlayerTabardVendorActivate packet;
- packet.Vendor = guid;
- SendPacket(packet.Write());
+ WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
+ npcInteraction.Npc = guid;
+ npcInteraction.InteractionType = PlayerInteractionType::TabardVendor;
+ npcInteraction.Success = true;
+ SendPacket(npcInteraction.Write());
}
void WorldSession::SendShowMailBox(ObjectGuid guid)
{
- WorldPackets::Mail::ShowMailbox packet;
- packet.PostmasterGUID = guid;
- SendPacket(packet.Write());
+ WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
+ npcInteraction.Npc = guid;
+ npcInteraction.InteractionType = PlayerInteractionType::MailInfo;
+ npcInteraction.Success = true;
+ SendPacket(npcInteraction.Write());
}
void WorldSession::HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet)
@@ -188,7 +190,8 @@ void WorldSession::HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet)
void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelectOption& packet)
{
- if (!_player->PlayerTalkClass->GetGossipMenu().GetItem(packet.GossipIndex))
+ GossipMenuItem const* gossipMenuItem = _player->PlayerTalkClass->GetGossipMenu().GetItem(packet.GossipOptionID);
+ if (!gossipMenuItem)
return;
// Prevent cheating on C++ scripted menus
@@ -242,26 +245,26 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelec
{
if (unit)
{
- if (!unit->AI()->OnGossipSelectCode(_player, packet.GossipID, packet.GossipIndex, packet.PromotionCode.c_str()))
- _player->OnGossipSelect(unit, packet.GossipIndex, packet.GossipID);
+ if (!unit->AI()->OnGossipSelectCode(_player, packet.GossipID, gossipMenuItem->OrderIndex, packet.PromotionCode.c_str()))
+ _player->OnGossipSelect(unit, packet.GossipOptionID, packet.GossipID);
}
else
{
- if (!go->AI()->OnGossipSelectCode(_player, packet.GossipID, packet.GossipIndex, packet.PromotionCode.c_str()))
- _player->OnGossipSelect(go, packet.GossipIndex, packet.GossipID);
+ if (!go->AI()->OnGossipSelectCode(_player, packet.GossipID, gossipMenuItem->OrderIndex, packet.PromotionCode.c_str()))
+ _player->OnGossipSelect(go, packet.GossipOptionID, packet.GossipID);
}
}
else
{
if (unit)
{
- if (!unit->AI()->OnGossipSelect(_player, packet.GossipID, packet.GossipIndex))
- _player->OnGossipSelect(unit, packet.GossipIndex, packet.GossipID);
+ if (!unit->AI()->OnGossipSelect(_player, packet.GossipID, gossipMenuItem->OrderIndex))
+ _player->OnGossipSelect(unit, packet.GossipOptionID, packet.GossipID);
}
else
{
- if (!go->AI()->OnGossipSelect(_player, packet.GossipID, packet.GossipIndex))
- _player->OnGossipSelect(go, packet.GossipIndex, packet.GossipID);
+ if (!go->AI()->OnGossipSelect(_player, packet.GossipID, gossipMenuItem->OrderIndex))
+ _player->OnGossipSelect(go, packet.GossipOptionID, packet.GossipID);
}
}
}
diff --git a/src/server/game/Handlers/TransmogrificationHandler.cpp b/src/server/game/Handlers/TransmogrificationHandler.cpp
index 855fd3bebb3..21606cc4bde 100644
--- a/src/server/game/Handlers/TransmogrificationHandler.cpp
+++ b/src/server/game/Handlers/TransmogrificationHandler.cpp
@@ -20,6 +20,7 @@
#include "DB2Stores.h"
#include "Item.h"
#include "Log.h"
+#include "NPCPackets.h"
#include "ObjectMgr.h"
#include "Player.h"
#include "TransmogrificationPackets.h"
@@ -331,5 +332,9 @@ void WorldSession::HandleTransmogrifyItems(WorldPackets::Transmogrification::Tra
void WorldSession::SendOpenTransmogrifier(ObjectGuid const& guid)
{
- SendPacket(WorldPackets::Transmogrification::TransmogrifyNPC(guid).Write());
+ WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
+ npcInteraction.Npc = guid;
+ npcInteraction.InteractionType = PlayerInteractionType::Transmogrifier;
+ npcInteraction.Success = true;
+ SendPacket(npcInteraction.Write());
}
diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp
index a586e64672c..cf9eb5b307a 100644
--- a/src/server/game/Handlers/VoidStorageHandler.cpp
+++ b/src/server/game/Handlers/VoidStorageHandler.cpp
@@ -155,7 +155,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetCreator(),
item->GetItemRandomBonusListId(), item->GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL), item->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL),
- item->GetContext(), item->m_itemData->BonusListIDs);
+ item->GetContext(), item->GetBonusListIDs());
WorldPackets::VoidStorage::VoidItem voidItem;
voidItem.Guid = ObjectGuid::Create<HighGuid::Item>(itemVS.ItemId);