24 for (GossipMenuItemContainer::const_iterator itr =
_menuItems.begin(); itr !=
_menuItems.end(); ++itr)
26 if (
int32(itr->first) > menuItemId)
29 menuItemId = itr->first + 1;
58 if (bounds.first == bounds.second)
62 for (GossipMenuItemsContainer::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
65 if (itr->second.OptionID != menuItemId)
69 std::string strOptionText = itr->second.OptionText;
70 std::string strBoxText = itr->second.BoxText;
83 AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
97 GossipMenuItemContainer::const_iterator itr =
_menuItems.find(menuItemId);
101 return itr->second.Sender;
106 GossipMenuItemContainer::const_iterator itr =
_menuItems.find(menuItemId);
110 return itr->second.OptionType;
115 GossipMenuItemContainer::const_iterator itr =
_menuItems.find(menuItemId);
119 return itr->second.IsCoded;
147 std::string updatedQuestTitles[0x20];
161 std::string title = quest->
GetTitle();
168 if (questLevelInTitle)
174 updatedQuestTitles[i] = title;
181 for (GossipMenuItemContainer::const_iterator itr =
_gossipMenu.GetMenuItems().begin(); itr !=
_gossipMenu.GetMenuItems().end(); ++itr)
207 for (GossipMenuItemContainer::const_iterator itr =
_gossipMenu.GetMenuItems().begin(); itr !=
_gossipMenu.GetMenuItems().end(); ++itr)
213 data <<
int32(itr->first);
224 data <<
int32(titleTextId);
240 SF_LOG_ERROR(
"sql.sql",
"Request to send non-existing POI (Id: %u), ignored.", poiId);
252 data << float(poi->
x);
253 data << float(poi->
y);
284 questMenuItem.
QuestId = QuestId;
293 if (i->QuestId == questId)
321 size_t countPos = data.
bitwpos();
336 std::string title = quest->GetTitle();
343 if (questLevelInTitle)
346 data.
WriteBit(quest->IsRepeatable());
349 questData <<
uint32(quest->GetFlags());
350 questData <<
uint32(questID);
352 questData <<
uint32(quest->GetFlags2());
354 questData <<
uint32(quest->GetQuestLevel());
360 data.
PutBits(countPos, count, 19);
386 data <<
uint32(questStatus);
391 SF_LOG_DEBUG(
"network",
"WORLD: Sent SMSG_QUESTGIVER_STATUS NPC Guid=%u, status=%u",
GUID_LOPART(npcGUID), questStatus);
396 std::string questTitle = quest->
GetTitle();
397 std::string questDetails = quest->
GetDetails();
438 RewardItemDisplayId[i] = itemTemplate->DisplayInfoID;
444 RewardChoiceItemDisplayId[i] = itemTemplate->DisplayInfoID;
452 data <<
uint32(RewardChoiceItemDisplayId[4]);
464 data <<
uint32(RewardChoiceItemDisplayId[5]);
466 data <<
uint32(RewardItemDisplayId[3]);
470 data <<
uint32(RewardChoiceItemDisplayId[3]);
474 data <<
uint32(RewardChoiceItemDisplayId[0]);
479 data <<
uint32(RewardChoiceItemDisplayId[2]);
492 data <<
uint32(RewardItemDisplayId[2]);
507 data <<
uint32(RewardItemDisplayId[0]);
511 data <<
uint32(RewardItemDisplayId[1]);
512 data <<
uint32(RewardChoiceItemDisplayId[1]);
518 data.
WriteBits(questTurnTargetName.size(), 8);
522 data.
WriteBits(questGiverTextWindow.size(), 10);
533 data.
WriteBits(questGiverTargetName.size(), 8);
544 data.
WriteBits(questTurnTextWindow.size(), 10);
553 data.
WriteBits(questObjectives.size(), 12);
599 std::string questTitle = quest->
GetTitle();
600 std::string questDetails = quest->
GetDetails();
602 std::string questEndText = quest->
GetEndText();
633 data.
WriteBits(questTurnTextWindow.size(), 10);
635 data.
WriteBits(questCompletedText.size(), 11);
637 data.
WriteBits(questTurnTargetName.size(), 8);
638 data.
WriteBits(questGiverTargetName.size(), 8);
639 data.
WriteBits(questGiverTextWindow.size(), 10);
642 data.
WriteBits(questObjectives.size(), 12);
649 std::string descriptionText = questObjective->
Description;
654 data.
WriteBits(descriptionText.size(), 8);
658 objData <<
uint32(questObjective->
Id);
665 for (VisualEffectVec::const_iterator citrEffects = questObjective->
VisualEffects.begin(); citrEffects != questObjective->
VisualEffects.end(); ++citrEffects)
666 objData <<
uint32(*citrEffects);
775 std::string questTitle = quest->
GetTitle();
796 uint32 QuestTakerEntry = 0;
800 if (l_Object->hasInvolvedQuest(quest->
GetQuestId()))
801 QuestTakerEntry = l_Object->GetEntry();
810 rewItemDisplayId[i] = itemTemplate->DisplayInfoID;
817 rewChoiceItemDisplayId[i] = itemTemplate->DisplayInfoID;
835 data <<
uint32(rewChoiceItemDisplayId[2]);
846 data <<
uint32(rewItemDisplayId[3]);
849 data <<
uint32(rewChoiceItemDisplayId[3]);
852 data <<
uint32(rewItemDisplayId[1]);
854 data <<
uint32(rewChoiceItemDisplayId[4]);
856 data <<
uint32(rewChoiceItemDisplayId[0]);
857 data <<
uint32(rewItemDisplayId[0]);
883 data <<
uint32(QuestTakerEntry);
886 data <<
uint32(rewChoiceItemDisplayId[5]);
890 data <<
uint32(rewChoiceItemDisplayId[1]);
892 data <<
uint32(rewItemDisplayId[2]);
897 data.
WriteBits(questTurnTextWindow.size(), 10);
898 data.
WriteBits(questGiverTargetName.size(), 8);
910 data.
WriteBits(questTurnTargetName.size(), 8);
911 data.
WriteBits(questGiverTextWindow.size(), 10);
912 data.
WriteBits(questOfferRewardText.size(), 12);
923 for (
uint8 i = 0; i < rewEmoteCount; i++)
952 if (!itemCounter && canComplete)
958 std::string questTitle = quest->
GetTitle();
971 uint32 QuestTakerEntry = 0;
975 if (l_Object->hasInvolvedQuest(quest->
GetQuestId()))
976 QuestTakerEntry = l_Object->GetEntry();
984 switch (questObjective->
Type)
989 itemData <<
uint32(itemTemplate->DisplayInfoID);
1007 requiredMoney = questObjective->
Amount;
1022 questTitle.size() + requestItemsText.size() + itemCounter * (4 + 4 + 4) + currencyCounter * (4 + 4));
1027 data <<
uint32(canComplete ? 0x5F : 0x5B);
1028 data <<
uint32(requiredMoney);
1029 data <<
uint32(QuestTakerEntry);
1040 data.
WriteBits(requestItemsText.size(), 12);
1054 data.
append(currencyData);
1073 std::stringstream questTitlePretty;
1074 questTitlePretty <<
"[" << level <<
"] " << title;
1075 title = questTitlePretty.str();
#define GOSSIP_MAX_MENU_ITEMS
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
uint32 GUID_LOPART(uint64 x)
uint32 MAKE_PAIR32(uint16 l, uint16 h)
std::pair< GossipMenuItemsContainer::const_iterator, GossipMenuItemsContainer::const_iterator > GossipMenuItemsMapBounds
#define QUEST_REWARDS_COUNT
@ QUEST_OBJECTIVE_TYPE_CURRENCY
@ QUEST_OBJECTIVE_TYPE_ITEM
@ QUEST_OBJECTIVE_TYPE_MONEY
#define QUEST_EMOTE_COUNT
#define QUEST_REWARD_CURRENCY_COUNT
@ QUEST_FLAGS_HIDE_REWARD
#define QUEST_REPUTATIONS_COUNT
#define QUEST_REWARD_CHOICES_COUNT
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
bool WriteBit(uint32 bit)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
size_t bitwpos() const
Returns position of last written bit.
void WriteString(std::string const &str)
void PutBits(size_t pos, T value, uint32 bitCount)
void WriteBits(T value, size_t bits)
static Object * GetObjectByTypeMask(WorldObject const &, uint64, uint32 typemask)
static void GetLocaleString(const StringVector &data, int loc_idx, std::string &value)
bool HasFlag(uint32 flag) const
uint32 DetailsEmote[QUEST_EMOTE_COUNT]
uint32 OfferRewardEmote[QUEST_EMOTE_COUNT]
uint32 GetRewSpell() const
uint32 GetRewMoneyMaxLevel() const
uint32 RewardCurrencyCount[QUEST_REWARD_CURRENCY_COUNT]
uint32 GetRewardSkillId() const
uint32 GetSoundAccept() const
std::string const & GetQuestGiverTargetName() const
std::string const & GetEndText() const
uint32 RequiredSourceItemId[QUEST_SOURCE_ITEM_IDS_COUNT]
uint32 GetCharTitleId() const
std::string const & GetRequestItemsText() const
uint32 XPValue(Player *player) const
uint8 GetQuestObjectiveCountType(uint8 type) const
uint32 RewardItemIdCount[QUEST_REWARDS_COUNT]
uint32 GetMinLevel() const
std::string const & GetObjectives() const
uint32 GetPointMapId() const
uint32 GetRewardReputationMask() const
uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT]
uint32 GetQuestGiverPortrait() const
uint32 GetQuestTurnInPortrait() const
int32 RewardFactionValueIdOverride[QUEST_REPUTATIONS_COUNT]
uint32 DetailsEmoteDelay[QUEST_EMOTE_COUNT]
std::string const & GetDetails() const
bool IsRepeatable() const
int32 GetZoneOrSort() const
int32 GetQuestLevel() const
float GetRewHonorMultiplier() const
uint32 GetRewHonorAddition() const
uint32 RewardChoiceItemCount[QUEST_REWARD_CHOICES_COUNT]
std::string const & GetQuestTurnTargetName() const
std::string const & GetCompletedText() const
std::string const & GetQuestTurnTextWindow() const
uint32 OfferRewardEmoteDelay[QUEST_EMOTE_COUNT]
uint32 GetQuestId() const
uint32 RequiredSourceItemCount[QUEST_SOURCE_ITEM_IDS_COUNT]
QuestObjectiveSet m_questObjectives
int32 GetRewMoney() const
uint32 GetPointOpt() const
std::string const & GetOfferRewardText() const
uint32 RewardCurrencyId[QUEST_REWARD_CURRENCY_COUNT]
uint32 GetSoundTurnIn() const
uint32 GetRewItemsCount() const
uint32 GetRewChoiceItemsCount() const
uint32 GetIncompleteEmote() const
uint32 GetSrcItemId() const
uint32 RewardFactionId[QUEST_REPUTATIONS_COUNT]
std::string const & GetTitle() const
uint32 GetCompleteEmote() const
int32 RewardFactionValueId[QUEST_REPUTATIONS_COUNT]
int32 GetRewSpellCast() const
std::string const & GetQuestGiverTextWindow() const
uint32 GetRewardPackageItemId() const
uint32 RewardItemId[QUEST_REWARDS_COUNT]
uint32 GetBonusTalents() const
uint32 GetQuestMethod() const
uint32 GetRewardSkillPoints() const
uint32 GetNextQuestInChain() const
uint32 GetSuggestedPlayers() const
Player session in the World.
@ SMSG_QUESTGIVER_QUEST_LIST
@ SMSG_QUESTGIVER_REQUEST_ITEMS
@ SMSG_QUESTGIVER_QUEST_DETAILS
@ SMSG_QUEST_QUERY_RESPONSE
@ SMSG_QUESTGIVER_OFFER_REWARD
@ CONFIG_UI_QUESTLEVELS_IN_DIALOGS
VisualEffectVec VisualEffects