mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Core/Packets: convert SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE to packet class and fix emote field order in QuestGiverQuestDetails
* fixed quest packet header naming typos
This commit is contained in:
@@ -628,66 +628,49 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
|
||||
void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUID, bool autoLaunched) const
|
||||
{
|
||||
std::string questTitle = quest->GetTitle();
|
||||
std::string questOfferRewardText = quest->GetOfferRewardText();
|
||||
std::string questGiverTextWindow = quest->GetQuestGiverTextWindow();
|
||||
std::string questGiverTargetName = quest->GetQuestGiverTargetName();
|
||||
std::string questTurnTextWindow = quest->GetQuestTurnTextWindow();
|
||||
std::string questTurnTargetName = quest->GetQuestTurnTargetName();
|
||||
WorldPackets::Quest::QuestGiverOfferRewardMessage packet;
|
||||
|
||||
packet.QuestTitle = quest->GetTitle();
|
||||
packet.RewardText = quest->GetOfferRewardText();
|
||||
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->OfferRewardText, localeConstant, questOfferRewardText);
|
||||
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->OfferRewardText, localeConstant, packet.RewardText);
|
||||
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_OFFER_REWARD, 50); // guess size
|
||||
data << uint64(npcGUID);
|
||||
data << uint32(quest->GetQuestId());
|
||||
data << questTitle;
|
||||
data << questOfferRewardText;
|
||||
WorldPackets::Quest::QuestGiverOfferReward& offer = packet.QuestData;
|
||||
|
||||
data << questGiverTextWindow;
|
||||
data << questGiverTargetName;
|
||||
data << questTurnTextWindow;
|
||||
data << questTurnTargetName;
|
||||
data << uint32(quest->GetQuestGiverPortrait());
|
||||
data << uint32(quest->GetQuestTurnInPortrait());
|
||||
quest->BuildQuestRewards(offer.Rewards, _session->GetPlayer());
|
||||
offer.QuestGiverGUID = npcGUID;
|
||||
offer.QuestID = quest->GetQuestId();
|
||||
offer.AutoLaunched = autoLaunched;
|
||||
offer.SuggestedPartyMembers = quest->GetSuggestedPlayers();
|
||||
|
||||
data << uint8(autoLaunched); // Auto Finish
|
||||
data << uint32(quest->GetFlags()); // 3.3.3 questFlags
|
||||
data << uint32(quest->GetSuggestedPlayers()); // SuggestedGroupNum
|
||||
for (uint32 i = 0; i < QUEST_EMOTE_COUNT && quest->OfferRewardEmote[i]; ++i)
|
||||
offer.Emotes.emplace_back(quest->OfferRewardEmote[i], quest->OfferRewardEmoteDelay[i]);
|
||||
|
||||
uint32 emoteCount = 0;
|
||||
for (uint8 i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||
{
|
||||
if (quest->OfferRewardEmote[i] <= 0)
|
||||
break;
|
||||
++emoteCount;
|
||||
}
|
||||
offer.QuestFlags = quest->GetFlags();
|
||||
|
||||
data << emoteCount; // Emote Count
|
||||
for (uint8 i = 0; i < emoteCount; ++i)
|
||||
{
|
||||
data << uint32(quest->OfferRewardEmoteDelay[i]); // Delay Emote
|
||||
data << uint32(quest->OfferRewardEmote[i]);
|
||||
}
|
||||
packet.PortraitTurnIn = quest->GetQuestTurnInPortrait();
|
||||
packet.PortraitGiver = quest->GetQuestGiverPortrait();
|
||||
|
||||
quest->BuildExtraQuestInfo(data, _session->GetPlayer());
|
||||
|
||||
_session->SendPacket(&data);
|
||||
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId());
|
||||
_session->SendPacket(packet.Write());
|
||||
}
|
||||
|
||||
void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGUID, bool canComplete, bool autoLaunched) const
|
||||
|
||||
@@ -285,66 +285,6 @@ int32 Quest::GetRewOrReqMoney(Player const* player) const
|
||||
return std::max(int32(GetRewMoneyMaxLevel()), int32(RewardMoney * sWorld->getRate(RATE_MONEY_QUEST)));
|
||||
}
|
||||
|
||||
void Quest::BuildExtraQuestInfo(WorldPacket& data, Player* player) const
|
||||
{
|
||||
data << uint32(GetRewChoiceItemsCount());
|
||||
for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
data << uint32(RewardChoiceItemId[i]);
|
||||
for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
data << uint32(RewardChoiceItemCount[i]);
|
||||
for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
{
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardChoiceItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0);
|
||||
}
|
||||
|
||||
data << uint32(GetReqItemsCount());
|
||||
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
data << uint32(RewardItemId[i]);
|
||||
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
data << uint32(RewardItemIdCount[i]);
|
||||
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
{
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0);
|
||||
}
|
||||
|
||||
data << uint32(GetRewOrReqMoney(player));
|
||||
data << uint32(GetXPReward(player) * sWorld->getRate(RATE_XP_QUEST));
|
||||
|
||||
data << uint32(GetCharTitleId());
|
||||
data << uint32(0); // unk
|
||||
data << float(0.0f); // unk
|
||||
data << uint32(GetBonusTalents());
|
||||
data << uint32(0); // unk
|
||||
data << uint32(GetRewardReputationMask());
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
|
||||
data << uint32(RewardFactionId[i]);
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid in QuestFactionReward.dbc (zero based)?
|
||||
data << int32(RewardFactionValueId[i]);
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward reputation override?
|
||||
data << uint32(RewardFactionValueIdOverride[i]);
|
||||
|
||||
data << uint32(GetRewSpell());
|
||||
data << uint32(GetRewSpellCast());
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
data << uint32(RewardCurrencyId[i]);
|
||||
|
||||
for (uint8 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
data << uint32(RewardCurrencyCount[i]);
|
||||
|
||||
data << uint32(GetRewardSkillId());
|
||||
data << uint32(GetRewardSkillPoints());
|
||||
}
|
||||
|
||||
void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const
|
||||
{
|
||||
rewards.ChoiceItemCount = GetRewChoiceItemsCount();
|
||||
|
||||
@@ -363,7 +363,6 @@ class TC_GAME_API Quest
|
||||
void SetEventIdForQuest(uint16 eventId) { _eventIdForQuest = eventId; }
|
||||
uint16 GetEventIdForQuest() const { return _eventIdForQuest; }
|
||||
|
||||
void BuildExtraQuestInfo(WorldPacket& data, Player* player) const;
|
||||
void BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const;
|
||||
|
||||
typedef std::vector<int32> PrevQuests;
|
||||
|
||||
@@ -166,8 +166,8 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write()
|
||||
_worldPacket << uint32(DescEmotes.size());
|
||||
for (WorldPackets::Quest::QuestDescEmote const& emote : DescEmotes)
|
||||
{
|
||||
_worldPacket << uint32(emote.Type);
|
||||
_worldPacket << uint32(emote.Delay);
|
||||
_worldPacket << uint32(emote.Type);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
@@ -267,6 +267,36 @@ WorldPacket const* WorldPackets::Quest::QuestGiverStatusMultiple::Write()
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Quest::QuestGiverOfferRewardMessage::Write()
|
||||
{
|
||||
_worldPacket << QuestData.QuestGiverGUID;
|
||||
_worldPacket << uint32(QuestData.QuestID);
|
||||
|
||||
_worldPacket << QuestTitle;
|
||||
_worldPacket << RewardText;
|
||||
_worldPacket << PortraitGiverText;
|
||||
_worldPacket << PortraitGiverName;
|
||||
_worldPacket << PortraitTurnInText;
|
||||
_worldPacket << PortraitTurnInName;
|
||||
|
||||
_worldPacket << uint32(PortraitGiver);
|
||||
_worldPacket << uint32(PortraitTurnIn);
|
||||
_worldPacket << uint8(QuestData.AutoLaunched);
|
||||
_worldPacket << uint32(QuestData.QuestFlags);
|
||||
_worldPacket << uint32(QuestData.SuggestedPartyMembers);
|
||||
|
||||
_worldPacket << uint32(QuestData.Emotes.size());
|
||||
for (WorldPackets::Quest::QuestDescEmote const& emote : QuestData.Emotes)
|
||||
{
|
||||
_worldPacket << uint32(emote.Delay);
|
||||
_worldPacket << uint32(emote.Type);
|
||||
}
|
||||
|
||||
_worldPacket << QuestData.Rewards;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards)
|
||||
{
|
||||
data << uint32(questRewards.ChoiceItemCount);
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef SystemPackets_h__
|
||||
#define SystemPackets_h__
|
||||
#ifndef QuestPackets_h__
|
||||
#define QuestPackets_h__
|
||||
|
||||
#include "Packet.h"
|
||||
#include "ObjectGuid.h"
|
||||
@@ -421,9 +421,38 @@ namespace WorldPackets
|
||||
|
||||
WorldPacket const* Write() override { return &_worldPacket; }
|
||||
};
|
||||
|
||||
struct QuestGiverOfferReward
|
||||
{
|
||||
ObjectGuid QuestGiverGUID;
|
||||
int32 QuestFlags = 0;
|
||||
int32 QuestID = 0;
|
||||
int32 SuggestedPartyMembers = 0;
|
||||
QuestRewards Rewards;
|
||||
std::vector<QuestDescEmote> Emotes;
|
||||
bool AutoLaunched = false;
|
||||
};
|
||||
|
||||
class QuestGiverOfferRewardMessage final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
QuestGiverOfferRewardMessage() : ServerPacket(SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE, 600) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
QuestGiverOfferReward QuestData;
|
||||
int32 PortraitTurnIn = 0;
|
||||
int32 PortraitGiver = 0;
|
||||
std::string QuestTitle;
|
||||
std::string RewardText;
|
||||
std::string PortraitGiverText;
|
||||
std::string PortraitGiverName;
|
||||
std::string PortraitTurnInText;
|
||||
std::string PortraitTurnInName;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards);
|
||||
|
||||
#endif // SystemPackets_h__
|
||||
#endif // QuestPackets_h__
|
||||
|
||||
@@ -1136,7 +1136,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUESTS_COMPLETED_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
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_QUEST_GIVER_OFFER_REWARD_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_DETAILS, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -1093,7 +1093,7 @@ enum OpcodeServer
|
||||
SMSG_PVP_OPTIONS_ENABLED = 0x50A1,
|
||||
SMSG_QUERY_QUESTS_COMPLETED_RESPONSE = 0x6314,
|
||||
SMSG_QUERY_TIME_RESPONSE = 0x2124,
|
||||
SMSG_QUESTGIVER_OFFER_REWARD = 0x2427,
|
||||
SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x2427,
|
||||
SMSG_QUEST_GIVER_QUEST_COMPLETE = 0x55A4,
|
||||
SMSG_QUEST_GIVER_QUEST_DETAILS = 0x2425,
|
||||
SMSG_QUEST_GIVER_QUEST_FAILED = 0x4236,
|
||||
|
||||
Reference in New Issue
Block a user