diff --git a/src/game/WorldHandlers/GossipDef.cpp b/src/game/WorldHandlers/GossipDef.cpp index 70175d32..6a189461 100644 --- a/src/game/WorldHandlers/GossipDef.cpp +++ b/src/game/WorldHandlers/GossipDef.cpp @@ -457,9 +457,10 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* pQuest, ObjectGuid guid { ItemPrototype const* IProto; - data << uint32(pQuest->GetRewChoiceItemsCount()); + uint32 count = pQuest->GetRewChoiceItemsCount(); + data << uint32(count); - for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + for (uint32 i = 0; i < count; ++i) { data << uint32(pQuest->RewChoiceItemId[i]); data << uint32(pQuest->RewChoiceItemCount[i]); @@ -472,9 +473,10 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* pQuest, ObjectGuid guid { data << uint32(0x00); } } - data << uint32(pQuest->GetRewItemsCount()); + count = pQuest->GetRewItemsCount(); + data << uint32(count); - for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) + for (uint32 i = 0; i < count; ++i) { data << uint32(pQuest->RewItemId[i]); data << uint32(pQuest->RewItemCount[i]); @@ -490,19 +492,14 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* pQuest, ObjectGuid guid data << uint32(pQuest->GetRewOrReqMoney()); } - data << pQuest->GetReqItemsCount(); - for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; i++) - { - data << pQuest->ReqItemId[i]; - data << pQuest->ReqItemCount[i]; - } + data << uint32(pQuest->GetRewSpell()); - - data << pQuest->GetReqCreatureOrGOcount(); - for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; i++) + uint32 count = pQuest->GetDetailsEmoteCount(); + data << uint32(count); + for (uint32 i = 0; i < count; ++i) { - data << uint32(pQuest->ReqCreatureOrGOId[i]); - data << pQuest->ReqCreatureOrGOCount[i]; + data << uint32(pQuest->DetailsEmote[i]); + data << uint32(pQuest->DetailsEmoteDelay[i]); // delay between emotes in ms } GetMenuSession()->SendPacket(&data); diff --git a/src/game/WorldHandlers/QuestDef.cpp b/src/game/WorldHandlers/QuestDef.cpp index 59a004ba..dde56a18 100644 --- a/src/game/WorldHandlers/QuestDef.cpp +++ b/src/game/WorldHandlers/QuestDef.cpp @@ -115,8 +115,13 @@ Quest::Quest(Field* questRecord) PointY = questRecord[103].GetFloat(); PointOpt = questRecord[104].GetUInt32(); + m_detailsemotecount = 0; for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) - { DetailsEmote[i] = questRecord[105 + i].GetUInt32(); } + { + DetailsEmote[i] = questRecord[105 + i].GetUInt32(); + if (DetailsEmote[i] != 0) + m_detailsemotecount = i + 1; + } for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) { DetailsEmoteDelay[i] = questRecord[109 + i].GetUInt32(); } diff --git a/src/game/WorldHandlers/QuestDef.h b/src/game/WorldHandlers/QuestDef.h index 9676eac5..65734e9c 100644 --- a/src/game/WorldHandlers/QuestDef.h +++ b/src/game/WorldHandlers/QuestDef.h @@ -249,6 +249,7 @@ class Quest uint32 GetPointOpt() const { return PointOpt; } uint32 GetIncompleteEmote() const { return IncompleteEmote; } uint32 GetCompleteEmote() const { return CompleteEmote; } + uint32 GetDetailsEmoteCount() const { return m_detailsemotecount; } uint32 GetQuestStartScript() const { return QuestStartScript; } uint32 GetQuestCompleteScript() const { return QuestCompleteScript; } @@ -296,6 +297,7 @@ class Quest uint32 m_reqCreatureOrGOcount; uint32 m_rewchoiceitemscount; uint32 m_rewitemscount; + uint32 m_detailsemotecount; // actual allowed value 0..4 bool m_isActive;