diff options
| author | n0n4m3 <none@none> | 2010-04-15 08:26:30 +0400 |
|---|---|---|
| committer | n0n4m3 <none@none> | 2010-04-15 08:26:30 +0400 |
| commit | 8abcca0a06d48d4c9d7039bf7a6b27c57f7eb878 (patch) | |
| tree | 849deb42364506716453fd34131d4fea0af972f8 /src/game/GossipDef.cpp | |
| parent | 6bcb297de4d5231373a3e2bf2b40e527b91cdf46 (diff) | |
Another fix quest flags, Implement support weekly quests cooldowns(Original patch by GriffonHeart), also code cleanups.
--HG--
branch : trunk
Diffstat (limited to 'src/game/GossipDef.cpp')
| -rw-r--r-- | src/game/GossipDef.cpp | 77 |
1 files changed, 48 insertions, 29 deletions
diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index bfb81dfa724..f72ae563622 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -166,8 +166,8 @@ void PlayerMenu::SendGossipMenu(uint32 TitleTextId, uint64 objectGUID) data << uint32(questID); data << uint32(qItem.m_qIcon); - data << uint32(pSession->GetPlayer()->GetQuestLevel(pQuest)); - data << uint32(pQuest->GetClientFlags()); // 3.3.3 quest flags + data << int32(pQuest->GetQuestLevel()); + data << uint32(pQuest->GetFlags()); // 3.3.3 quest flags data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation std::string Title = pQuest->GetTitle(); @@ -387,34 +387,40 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title data << Title; data << uint32(eEmote._Delay); // player emote data << uint32(eEmote._Emote); // NPC emote - data << uint8 (mQuestMenu.MenuItemCount()); - for (uint32 iI = 0; iI < mQuestMenu.MenuItemCount(); ++iI) + size_t count_pos = data.wpos(); + data << uint8 ( mQuestMenu.MenuItemCount()); + uint32 count = 0; + for (; count < mQuestMenu.MenuItemCount(); ++count) { - QuestMenuItem const& qmi = mQuestMenu.GetItem(iI); + QuestMenuItem const& qmi = mQuestMenu.GetItem(count); uint32 questID = qmi.m_qId; - Quest const *pQuest = objmgr.GetQuestTemplate(questID); - - std::string title = pQuest ? pQuest->GetTitle() : ""; - int loc_idx = pSession->GetSessionDbLocaleIndex(); - if (loc_idx >= 0) + if (Quest const *pQuest = objmgr.GetQuestTemplate(questID)) { - if (QuestLocale const *ql = objmgr.GetQuestLocale(questID)) + std::string title = pQuest->GetTitle(); + + int loc_idx = pSession->GetSessionDbLocaleIndex(); + if (loc_idx >= 0) { - if (ql->Title.size() > loc_idx && !ql->Title[loc_idx].empty()) - title=ql->Title[loc_idx]; + if (QuestLocale const *ql = objmgr.GetQuestLocale(questID)) + { + if (ql->Title.size() > (size_t)loc_idx && !ql->Title[loc_idx].empty()) + title = ql->Title[loc_idx]; + } } - } - data << uint32(questID); - data << uint32(qmi.m_qIcon); - data << uint32(pSession->GetPlayer()->GetQuestLevel(pQuest)); - data << uint32(pQuest->GetClientFlags()); // 3.3.3 quest flags - data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation - data << title; + data << uint32(questID); + data << uint32(qmi.m_qIcon); + data << int32(pQuest->GetQuestLevel()); + data << uint32(pQuest->GetFlags()); // 3.3.3 quest flags + data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation + data << title; + } } + + data.put<uint8>(count_pos, count); pSession->SendPacket(&data); sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST NPC Guid=%u", GUID_LOPART(npcGUID)); } @@ -461,15 +467,16 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const *pQuest, uint64 npcGUID, data << Details; data << Objectives; data << uint8(ActivateAccept ? 1 : 0); // auto finish - data << uint32(pQuest->GetClientFlags()); // 3.3.3 questFlags + data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags data << uint32(pQuest->GetSuggestedPlayers()); - data << uint8(0); // IsFinished, value is sent back to server in quest accept packet + data << uint8(0); // IsFinished? value is sent back to server in quest accept packet if (pQuest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { data << uint32(0); // Rewarded chosen items hidden data << uint32(0); // Rewarded items hidden data << uint32(0); // Rewarded money hidden + data << uint32(0); // Rewarded XP hidden } else { @@ -478,10 +485,14 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const *pQuest, uint64 npcGUID, data << uint32(pQuest->GetRewChoiceItemsCount()); for (uint32 i=0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { - if (!pQuest->RewChoiceItemId[i]) continue; + if (!pQuest->RewChoiceItemId[i]) + continue; + data << uint32(pQuest->RewChoiceItemId[i]); data << uint32(pQuest->RewChoiceItemCount[i]); + IProto = objmgr.GetItemPrototype(pQuest->RewChoiceItemId[i]); + if (IProto) data << uint32(IProto->DisplayInfoID); else @@ -489,12 +500,17 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const *pQuest, uint64 npcGUID, } data << uint32(pQuest->GetRewItemsCount()); + for (uint32 i=0; i < QUEST_REWARDS_COUNT; ++i) { - if (!pQuest->RewItemId[i]) continue; + if (!pQuest->RewItemId[i]) + continue; + data << uint32(pQuest->RewItemId[i]); data << uint32(pQuest->RewItemCount[i]); + IProto = objmgr.GetItemPrototype(pQuest->RewItemId[i]); + if (IProto) data << uint32(IProto->DisplayInfoID); else @@ -603,12 +619,12 @@ void PlayerMenu::SendQuestQueryResponse(Quest const *pQuest) data << uint32(Trinity::Honor::hk_honor_at_level(pSession->GetPlayer()->getLevel(), pQuest->GetRewHonorableKills())); data << float(0); // new reward honor (multipled by ~62 at client side) data << uint32(pQuest->GetSrcItemId()); // source item id - data << uint32(pQuest->GetClientFlags()); // quest flags + data << uint32(pQuest->GetFlags() & 0xFFFF); // quest flags data << uint32(pQuest->GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles) data << uint32(pQuest->GetPlayersSlain()); // players slain data << uint32(pQuest->GetBonusTalents()); // bonus talents data << uint32(pQuest->GetRewArenaPoints()); // bonus arena points - data << uint32(0); // unknown + data << uint32(0); // review rep show mask int iI; @@ -708,7 +724,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* pQuest, uint64 npcGUID, data << OfferRewardText; data << uint8(EnableNext ? 1 : 0); // Auto Finish - data << uint32(pQuest->GetClientFlags()); // 3.3.3 questFlags + data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags data << uint32(pQuest->GetSuggestedPlayers()); // SuggestedGroupNum uint32 EmoteCount = 0; @@ -828,7 +844,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const *pQuest, uint64 npcGUID, else data << uint32(0x00); - data << uint32(pQuest->GetClientFlags()); // 3.3.3 questFlags + data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags data << uint32(pQuest->GetSuggestedPlayers()); // SuggestedGroupNum // Required Money @@ -838,8 +854,11 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const *pQuest, uint64 npcGUID, ItemPrototype const *pItem; for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) { - if (!pQuest->ReqItemId[i]) continue; + if (!pQuest->ReqItemId[i]) + continue; + pItem = objmgr.GetItemPrototype(pQuest->ReqItemId[i]); + data << uint32(pQuest->ReqItemId[i]); data << uint32(pQuest->ReqItemCount[i]); |
