diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 09e4c237901..66d2ddcb59a 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -378,73 +378,67 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string void PlayerMenu::SendQuestGiverStatus(uint32 questStatus, ObjectGuid npcGUID) const { - WorldPacket data(SMSG_QUESTGIVER_STATUS, 8 + 4); - data << uint64(npcGUID); - data << uint32(questStatus); + WorldPackets::Quest::QuestGiverStatus packet; + packet.QuestGiver.Guid = npcGUID; + packet.QuestGiver.Status = questStatus; - _session->SendPacket(&data); - TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_STATUS NPC=%s, status=%u", npcGUID.ToString().c_str(), questStatus); + _session->SendPacket(packet.Write()); + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_GIVER_STATUS Guid = %s, Status = %u", npcGUID.ToString().c_str(), questStatus); } void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGUID, bool autoLaunched, bool displayPopup) const { - std::string questTitle = quest->GetTitle(); - std::string questDetails = quest->GetDetails(); - std::string questObjectives = quest->GetObjectives(); - std::string questAreaDescription = quest->GetAreaDescription(); - std::string questGiverTextWindow = quest->GetQuestGiverTextWindow(); - std::string questGiverTargetName = quest->GetQuestGiverTargetName(); - std::string questTurnTextWindow = quest->GetQuestTurnTextWindow(); - std::string questTurnTargetName = quest->GetQuestTurnTargetName(); + WorldPackets::Quest::QuestGiverQuestDetails packet; + + packet.QuestTitle = quest->GetTitle(); + packet.LogDescription = quest->GetDetails(); + packet.Objectives = quest->GetObjectives(); + packet.DescriptionText = quest->GetAreaDescription(); + packet.PortraitGiverText = quest->GetQuestGiverTextWindow(); + packet.PortraitGiverName = quest->GetQuestGiverTargetName(); + packet.PortraitTurnInText = quest->GetQuestTurnTextWindow(); + packet.PortraitTurnInName = quest->GetQuestTurnTargetName(); LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex(); if (localeConstant != LOCALE_enUS) { if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId())) { - ObjectMgr::GetLocaleString(localeData->Title, localeConstant, questTitle); - ObjectMgr::GetLocaleString(localeData->Details, localeConstant, questDetails); - ObjectMgr::GetLocaleString(localeData->Objectives, localeConstant, questObjectives); - ObjectMgr::GetLocaleString(localeData->AreaDescription, localeConstant, questAreaDescription); - ObjectMgr::GetLocaleString(localeData->QuestGiverTextWindow, localeConstant, questGiverTextWindow); - ObjectMgr::GetLocaleString(localeData->QuestGiverTargetName, localeConstant, questGiverTargetName); - ObjectMgr::GetLocaleString(localeData->QuestTurnTextWindow, localeConstant, questTurnTextWindow); - ObjectMgr::GetLocaleString(localeData->QuestTurnTargetName, localeConstant, questTurnTargetName); + ObjectMgr::GetLocaleString(localeData->Title, localeConstant, packet.QuestTitle); + ObjectMgr::GetLocaleString(localeData->Details, localeConstant, packet.LogDescription); + ObjectMgr::GetLocaleString(localeData->Objectives, localeConstant, packet.Objectives); + ObjectMgr::GetLocaleString(localeData->AreaDescription, localeConstant, packet.DescriptionText); + ObjectMgr::GetLocaleString(localeData->QuestGiverTextWindow, localeConstant, packet.PortraitGiverText); + ObjectMgr::GetLocaleString(localeData->QuestGiverTargetName, localeConstant, packet.PortraitGiverName); + ObjectMgr::GetLocaleString(localeData->QuestTurnTextWindow, localeConstant, packet.PortraitTurnInText); + ObjectMgr::GetLocaleString(localeData->QuestTurnTargetName, localeConstant, packet.PortraitTurnInName); } } if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) - AddQuestLevelToTitle(questTitle, quest->GetQuestLevel()); + AddQuestLevelToTitle(packet.QuestTitle, quest->GetQuestLevel()); - WorldPacket data(SMSG_QUESTGIVER_QUEST_DETAILS, 100); // guess size - data << uint64(npcGUID); - data << uint64(_session->GetPlayer()->GetPlayerSharingQuest()); - data << uint32(quest->GetQuestId()); - data << questTitle; - data << questDetails; - data << questObjectives; - data << questGiverTextWindow; // 4.x - data << questGiverTargetName; // 4.x - data << questTurnTextWindow; // 4.x - data << questTurnTargetName; // 4.x - data << uint32(quest->GetQuestGiverPortrait()); // 4.x - data << uint32(quest->GetQuestTurnInPortrait()); // 4.x - data << uint8(autoLaunched); // auto finish - data << uint32(quest->GetFlags() & (sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? ~QUEST_FLAGS_AUTO_ACCEPT : ~0)); // 3.3.3 questFlags - data << uint32(quest->GetSuggestedPlayers()); - data << uint8(0); // IsFinished? value is sent back to server in quest accept packet - data << uint8(displayPopup); // 4.x Starts at AreaTrigger? - data << uint32(quest->GetRequiredSpell()); // 4.x + packet.QuestGiverGUID = npcGUID; + packet.InformUnit = _session->GetPlayer()->GetPlayerSharingQuest(); + packet.QuestID = quest->GetQuestId(); + packet.PortraitGiver = quest->GetQuestGiverPortrait(); + packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); + packet.AutoLaunched = autoLaunched; + packet.DisplayPopup = displayPopup; + packet.QuestFlags = quest->GetFlags() & (sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? ~QUEST_FLAGS_AUTO_ACCEPT : ~0); + packet.SuggestedPartyMembers = quest->GetSuggestedPlayers(); + packet.RequiredSpellID = quest->GetRequiredSpell(); - quest->BuildExtraQuestInfo(data, _session->GetPlayer()); + quest->BuildQuestRewards(packet.Rewards, _session->GetPlayer()); - data << uint32(QUEST_EMOTE_COUNT); - for (uint8 i = 0; i < QUEST_EMOTE_COUNT; ++i) + packet.DescEmotes.resize(QUEST_EMOTE_COUNT); + for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i) { - data << uint32(quest->DetailsEmote[i]); - data << uint32(quest->DetailsEmoteDelay[i]); // DetailsEmoteDelay (in ms) + packet.DescEmotes[i].Type = quest->DetailsEmote[i]; + packet.DescEmotes[i].Delay = quest->DetailsEmoteDelay[i]; } - _session->SendPacket(&data); + + _session->SendPacket(packet.Write()); TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_DETAILS NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId()); } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index f6061bbf2cd..e5ab68279c5 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -21,6 +21,7 @@ #include "Log.h" #include "ObjectMgr.h" #include "Player.h" +#include "QuestPackets.h" #include "World.h" Quest::Quest(Field* questRecord) @@ -322,19 +323,6 @@ void Quest::BuildExtraQuestInfo(WorldPacket& data, Player* player) const data << uint32(0); // unk data << uint32(GetRewardReputationMask()); - /* Pre cata struct, some of these unks might be the missing values in cata: - // rewarded honor points. Multiply with 10 to satisfy client - data << 10 * Trinity::Honor::hk_honor_at_level(_session->GetPlayer()->getLevel(), quest->GetRewHonorMultiplier()); - data << float(0); // unk, honor multiplier? - data << uint32(0x08); // unused by client? - data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast == 0) - data << int32(quest->GetRewSpellCast()); // casted spell - data << uint32(0); // unknown - data << uint32(quest->GetBonusTalents()); // bonus talents - data << uint32(quest->GetRewArenaPoints()); // arena points - data << uint32(0); - */ - for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids data << uint32(RewardFactionId[i]); @@ -357,6 +345,50 @@ void Quest::BuildExtraQuestInfo(WorldPacket& data, Player* player) const data << uint32(GetRewardSkillPoints()); } +void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const +{ + rewards.ChoiceItemCount = GetRewChoiceItemsCount(); + rewards.ItemCount = GetReqItemsCount(); + rewards.Money = GetRewOrReqMoney(player); + rewards.XP = GetXPReward(player) * sWorld->getRate(RATE_XP_QUEST); + rewards.Title = GetCharTitleId(); + rewards.FactionFlags = GetRewardReputationMask(); + rewards.SpellCompletionDisplayID = GetRewSpell(); + rewards.SpellCompletionID = GetRewSpellCast(); + rewards.SkillLineID = GetRewardSkillId(); + rewards.NumSkillUps = GetRewardSkillPoints(); + rewards.NumBonusTalents = GetBonusTalents(); + + for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + { + rewards.ChoiceItems[i].ItemID = RewardChoiceItemId[i]; + rewards.ChoiceItems[i].Quantity = RewardChoiceItemCount[i]; + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardChoiceItemId[i])) + rewards.ChoiceItems[i].DisplayID = itemTemplate->DisplayInfoID; + } + + for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) + { + rewards.ItemID[i] = RewardItemId[i]; + rewards.ItemQty[i] = RewardItemIdCount[i]; + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardItemId[i])) + rewards.ItemDisplayID[i] = itemTemplate->DisplayInfoID; + } + + for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) + { + rewards.FactionID[i] = RewardFactionId[i]; + rewards.FactionValue[i] = RewardFactionValueId[i]; + rewards.FactionOverride[i] = RewardFactionValueIdOverride[i]; + } + + for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) + { + rewards.CurrencyID[i] = RewardCurrencyId[i]; + rewards.CurrencyQty[i] = RewardCurrencyCount[i]; + } +} + uint32 Quest::GetRewMoneyMaxLevel() const { // If Quest has flag to not give money on max level, it's 0 diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index eef85c6bbcb..77e676bfec2 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -27,6 +27,14 @@ class Player; +namespace WorldPackets +{ + namespace Quest + { + struct QuestRewards; + } +} + #define MAX_QUEST_LOG_SIZE 25 #define QUEST_OBJECTIVES_COUNT 4 @@ -356,6 +364,7 @@ class TC_GAME_API Quest uint16 GetEventIdForQuest() const { return _eventIdForQuest; } void BuildExtraQuestInfo(WorldPacket& data, Player* player) const; + void BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const; typedef std::vector PrevQuests; PrevQuests prevQuests; diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index a25d35c80a2..5b5285723f3 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -132,3 +132,95 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestListMessage::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Quest::QuestGiverStatus::Write() +{ + _worldPacket << QuestGiver.Guid; + _worldPacket << uint32(QuestGiver.Status); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() +{ + _worldPacket << QuestGiverGUID; + _worldPacket << InformUnit; + _worldPacket << uint32(QuestID); + _worldPacket << QuestTitle; + _worldPacket << LogDescription; + _worldPacket << Objectives; + _worldPacket << PortraitGiverText; + _worldPacket << PortraitGiverName; + _worldPacket << PortraitTurnInText; + _worldPacket << PortraitTurnInName; + _worldPacket << uint32(PortraitGiver); + _worldPacket << uint32(PortraitTurnIn); + _worldPacket << uint8(AutoLaunched); + _worldPacket << uint32(QuestFlags); + _worldPacket << uint32(SuggestedPartyMembers); + _worldPacket << uint8(StartCheat); // to-do: validate + _worldPacket << uint8(DisplayPopup); + _worldPacket << uint32(RequiredSpellID); + + _worldPacket << Rewards; + + _worldPacket << uint32(DescEmotes.size()); + for (WorldPackets::Quest::QuestDescEmote const& emote : DescEmotes) + { + _worldPacket << uint32(emote.Type); + _worldPacket << uint32(emote.Delay); + } + + return &_worldPacket; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards) +{ + data << uint32(questRewards.ChoiceItemCount); + for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + data << uint32(questRewards.ChoiceItems[i].ItemID); + for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + data << uint32(questRewards.ChoiceItems[i].Quantity); + for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + data << uint32(questRewards.ChoiceItems[i].DisplayID); + + data << uint32(questRewards.ItemCount); + for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) + data << uint32(questRewards.ItemID[i]); + for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) + data << uint32(questRewards.ItemQty[i]); + for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) + data << uint32(questRewards.ItemDisplayID[i]); + + data << uint32(questRewards.Money); + data << uint32(questRewards.XP); + data << uint32(questRewards.Title); + data << uint32(0); // unkown + data << float(0.0f); // unknown + data << uint32(questRewards.NumBonusTalents); + data << uint32(0); // unkown + data << uint32(questRewards.FactionFlags); + + + for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) + data << uint32(questRewards.FactionID[i]); + + for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) + data << int32(questRewards.FactionValue[i]); + + for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) + data << uint32(questRewards.FactionOverride[i]); + + data << uint32(questRewards.SpellCompletionDisplayID); + data << uint32(questRewards.SpellCompletionID); + + for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) + data << uint32(questRewards.CurrencyID[i]); + + for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) + data << uint32(questRewards.CurrencyQty[i]); + + data << uint32(questRewards.SkillLineID); + data << uint32(questRewards.NumSkillUps); + + return data; +} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index b36085f00e4..63cfa7eb43f 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -207,7 +207,98 @@ namespace WorldPackets std::vector QuestDataText; std::string Greeting; }; + + struct QuestGiverInfo + { + QuestGiverInfo() { } + QuestGiverInfo(ObjectGuid const& guid, uint32 status) + : Guid(guid), Status(status) { } + + ObjectGuid Guid; + uint32 Status = DIALOG_STATUS_NONE; + }; + + class QuestGiverStatus final : public ServerPacket + { + public: + QuestGiverStatus() : ServerPacket(SMSG_QUEST_GIVER_STATUS, 12) { } + + WorldPacket const* Write() override; + + QuestGiverInfo QuestGiver; + }; + + struct QuestInfoChoiceItem + { + int32 ItemID = 0; + int32 Quantity = 0; + int32 DisplayID = 0; + }; + + struct QuestRewards + { + int32 ChoiceItemCount = 0; + int32 ItemCount = 0; + int32 Money = 0; + int32 XP = 0; + int32 Title = 0; + int32 FactionFlags = 0; + int32 SpellCompletionID = 0; + int32 SpellCompletionDisplayID = 0; + int32 SkillLineID = 0; + int32 NumSkillUps = 0; + int32 NumBonusTalents = 0; + QuestInfoChoiceItem ChoiceItems[QUEST_REWARD_CHOICES_COUNT]; + int32 ItemID[QUEST_REWARDS_COUNT] = { }; + int32 ItemQty[QUEST_REWARDS_COUNT] = { }; + int32 ItemDisplayID[QUEST_REWARDS_COUNT] = { }; + int32 FactionID[QUEST_REPUTATIONS_COUNT] = { }; + int32 FactionValue[QUEST_REPUTATIONS_COUNT] = { }; + int32 FactionOverride[QUEST_REPUTATIONS_COUNT] = { }; + int32 CurrencyID[QUEST_REWARD_CURRENCY_COUNT] = { }; + int32 CurrencyQty[QUEST_REWARD_CURRENCY_COUNT] = { }; + }; + + struct QuestDescEmote + { + QuestDescEmote(int32 type = 0, uint32 delay = 0) : Type(type), Delay(delay) { } + int32 Type; + uint32 Delay; + }; + + class QuestGiverQuestDetails final : public ServerPacket + { + public: + QuestGiverQuestDetails() : ServerPacket(SMSG_QUEST_GIVER_QUEST_DETAILS, 100) { } + + WorldPacket const* Write() override; + + ObjectGuid QuestGiverGUID; + ObjectGuid InformUnit; + int32 QuestID = 0; + uint32 QuestFlags = 0; + int32 SuggestedPartyMembers = 0; + QuestRewards Rewards; + std::vector DescEmotes; + int32 PortraitTurnIn = 0; + int32 PortraitGiver = 0; + int32 QuestStartItemID = 0; + int32 RequiredSpellID = 0; + std::string PortraitGiverText; + std::string PortraitGiverName; + std::string PortraitTurnInText; + std::string PortraitTurnInName; + std::string QuestTitle; + std::string LogDescription; + std::string DescriptionText; + std::string Objectives; + bool DisplayPopup = false; + bool StartCheat = false; + bool AutoLaunched = false; + }; } } +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards); + #endif // SystemPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 0f1a7759927..440f130ad3f 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1135,12 +1135,12 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_OFFER_REWARD, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_DETAILS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_DETAILS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_INVALID, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_REQUEST_ITEMS, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_STATUS_MULTIPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTLOG_FULL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTUPDATE_ADD_KILL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 032171cb90a..c385807e59f 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1094,12 +1094,12 @@ enum OpcodeServer SMSG_QUERY_TIME_RESPONSE = 0x2124, SMSG_QUESTGIVER_OFFER_REWARD = 0x2427, SMSG_QUESTGIVER_QUEST_COMPLETE = 0x55A4, - SMSG_QUESTGIVER_QUEST_DETAILS = 0x2425, + SMSG_QUEST_GIVER_QUEST_DETAILS = 0x2425, SMSG_QUESTGIVER_QUEST_FAILED = 0x4236, SMSG_QUESTGIVER_QUEST_INVALID = 0x4016, SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x0134, SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x6236, - SMSG_QUESTGIVER_STATUS = 0x2115, + SMSG_QUEST_GIVER_STATUS = 0x2115, SMSG_QUESTGIVER_STATUS_MULTIPLE = 0x4F25, SMSG_QUESTLOG_FULL = 0x0E36, SMSG_QUESTUPDATE_ADD_ITEM = 0x0000, @@ -1394,7 +1394,7 @@ inline bool IsInstanceOnlyOpcode(uint32 opcode) case SMSG_DUEL_INBOUNDS: case SMSG_DUEL_OUTOFBOUNDS: case SMSG_ITEM_PUSH_RESULT: - case SMSG_QUESTGIVER_STATUS: + case SMSG_QUEST_GIVER_STATUS: case SMSG_QUERY_TIME_RESPONSE: case SMSG_MOUNTRESULT: case SMSG_DUEL_COMPLETE: