TrinityCore
Loading...
Searching...
No Matches
GossipDef.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "GossipDef.h"
19#include "Log.h"
20#include "NPCPackets.h"
21#include "ObjectMgr.h"
22#include "Player.h"
23#include "QuestDef.h"
24#include "QuestPackets.h"
25#include "World.h"
26#include "WorldSession.h"
27
34
39
40uint32 GossipMenu::AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded /*= false*/)
41{
43
44 // Find a free new id - script case
45 if (menuItemId == -1)
46 {
47 menuItemId = 0;
48 if (_menuId)
49 {
50 // set baseline menuItemId as higher than whatever exists in db
51 auto [itr, end] = sObjectMgr->GetGossipMenuItemsMapBounds(_menuId);
52 itr = std::max_element(itr, end, [](GossipMenuItemsContainer::value_type const& a, GossipMenuItemsContainer::value_type const& b)
53 {
54 return a.second.OptionID < b.second.OptionID;
55 });
56 if (itr != end)
57 menuItemId = itr->second.OptionID + 1;
58 }
59
60 if (!_menuItems.empty())
61 {
62 for (GossipMenuItemContainer::const_iterator itr = _menuItems.begin(); itr != _menuItems.end(); ++itr)
63 {
64 if (int32(itr->first) > menuItemId)
65 break;
66
67 menuItemId = itr->first + 1;
68 }
69 }
70 }
71
72 GossipMenuItem& menuItem = _menuItems[menuItemId];
73
74 menuItem.MenuItemIcon = icon;
75 menuItem.Message = message;
76 menuItem.IsCoded = coded;
77 menuItem.Sender = sender;
78 menuItem.OptionType = action;
79 menuItem.BoxMessage = boxMessage;
80 menuItem.BoxMoney = boxMoney;
81 return menuItemId;
82}
83
92void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action)
93{
95 GossipMenuItemsMapBounds bounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
96 auto itr = std::find_if(bounds.first, bounds.second, [menuItemId](std::pair<uint32 const, GossipMenuItems> const& itemPair)
97 {
98 return itemPair.second.OptionID == menuItemId;
99 });
100
101 if (itr == bounds.second)
102 return;
103
105 std::string strOptionText, strBoxText;
106 BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextID);
107 BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextID);
108
110 if (optionBroadcastText)
111 strOptionText = optionBroadcastText->GetText(GetLocale());
112 else
113 strOptionText = itr->second.OptionText;
114
116 if (boxBroadcastText)
117 strBoxText = boxBroadcastText->GetText(GetLocale());
118 else
119 strBoxText = itr->second.BoxText;
120
122 if (GetLocale() != DEFAULT_LOCALE)
123 {
124 if (!optionBroadcastText)
125 {
127 if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, menuItemId))
128 ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, GetLocale(), strOptionText);
129 }
130
131 if (!boxBroadcastText)
132 {
134 if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(menuId, menuItemId))
135 ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText);
136 }
137 }
138
140 AddMenuItem(itr->second.OptionID, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
141 AddGossipMenuItemData(itr->second.OptionID, itr->second.ActionMenuID, itr->second.ActionPoiID);
142}
143
144void GossipMenu::AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi)
145{
146 GossipMenuItemData& itemData = _menuItemData[menuItemId];
147
148 itemData.GossipActionMenuId = gossipActionMenuId;
149 itemData.GossipActionPoi = gossipActionPoi;
150}
151
153{
154 GossipMenuItemContainer::const_iterator itr = _menuItems.find(menuItemId);
155 if (itr == _menuItems.end())
156 return 0;
157
158 return itr->second.Sender;
159}
160
162{
163 GossipMenuItemContainer::const_iterator itr = _menuItems.find(menuItemId);
164 if (itr == _menuItems.end())
165 return 0;
166
167 return itr->second.OptionType;
168}
169
171{
172 GossipMenuItemContainer::const_iterator itr = _menuItems.find(menuItemId);
173 if (itr == _menuItems.end())
174 return false;
175
176 return itr->second.IsCoded;
177}
178
180{
181 _menuItems.clear();
182 _menuItemData.clear();
183}
184
185PlayerMenu::PlayerMenu(WorldSession* session) : _session(session)
186{
187 if (_session)
189}
190
195
201
202void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
203{
204 _gossipMenu.SetSenderGUID(objectGUID);
205
206 WorldPacket data(SMSG_GOSSIP_MESSAGE, 100); // guess size
207 data << objectGUID;
208 data << uint32(_gossipMenu.GetMenuId()); // new 2.4.0
209 data << uint32(titleTextId);
210 data << uint32(_gossipMenu.GetMenuItemCount()); // max count 0x10
211
212 for (GossipMenuItemContainer::const_iterator itr = _gossipMenu.GetMenuItems().begin(); itr != _gossipMenu.GetMenuItems().end(); ++itr)
213 {
214 GossipMenuItem const& item = itr->second;
215 data << uint32(itr->first);
216 data << uint8(item.MenuItemIcon);
217 data << uint8(item.IsCoded); // makes pop up box password
218 data << uint32(item.BoxMoney); // money required to open menu, 2.0.3
219 data << item.Message; // text for gossip item
220 data << item.BoxMessage; // accept text (related to money) pop up box, 2.0.3
221 }
222
223 size_t count_pos = data.wpos();
224 data << uint32(0); // max count 0x20
225 uint32 count = 0;
226 for (uint8 i = 0; i < _questMenu.GetMenuItemCount(); ++i)
227 {
228 QuestMenuItem const& item = _questMenu.GetItem(i);
229 uint32 questID = item.QuestId;
230 if (Quest const* quest = sObjectMgr->GetQuestTemplate(questID))
231 {
232 ++count;
233 data << uint32(questID);
234 data << uint32(item.QuestIcon);
235 data << int32(quest->GetQuestLevel());
236 data << uint32(quest->GetFlags()); // 3.3.3 quest flags
237 data << uint8(quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly()); // 3.3.3 icon changes - 0: yellow exclapamtion mark, 1: blue question mark
238 std::string title = quest->GetTitle();
239
241 if (localeConstant != LOCALE_enUS)
242 if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
243 ObjectMgr::GetLocaleString(localeData->Title, localeConstant, title);
244
245 data << title; // max 0x200
246 }
247 }
248
249 data.put<uint8>(count_pos, count);
250 _session->SendPacket(&data);
251}
252
260
262{
263 PointOfInterest const* pointOfInterest = sObjectMgr->GetPointOfInterest(id);
264 if (!pointOfInterest)
265 {
266 TC_LOG_ERROR("sql.sql", "Request to send non-existing POI (Id: {}), ignored.", id);
267 return;
268 }
269
271 packet.Name = pointOfInterest->Name;
272
274 if (localeConstant != LOCALE_enUS)
275 if (PointOfInterestLocale const* localeData = sObjectMgr->GetPointOfInterestLocale(id))
276 ObjectMgr::GetLocaleString(localeData->Name, localeConstant, packet.Name);
277
278 packet.Flags = pointOfInterest->Flags;
279 packet.Pos.Pos.Relocate(pointOfInterest->PositionX, pointOfInterest->PositionY);
280 packet.Icon = pointOfInterest->Icon;
281 packet.Importance = pointOfInterest->Importance;
282
283 _session->SendPacket(packet.Write());
284}
285
286/*********************************************************/
287/*** QUEST SYSTEM ***/
288/*********************************************************/
289
291{
292 _questMenuItems.reserve(16); // can be set for max from most often sizes to speedup push_back and less memory use
293}
294
299
301{
302 if (!sObjectMgr->GetQuestTemplate(QuestId))
303 return;
304
306
307 QuestMenuItem questMenuItem;
308
309 questMenuItem.QuestId = QuestId;
310 questMenuItem.QuestIcon = Icon;
311
312 _questMenuItems.push_back(questMenuItem);
313}
314
315bool QuestMenu::HasItem(uint32 questId) const
316{
317 for (QuestMenuItemList::const_iterator i = _questMenuItems.begin(); i != _questMenuItems.end(); ++i)
318 if (i->QuestId == questId)
319 return true;
320
321 return false;
322}
323
325{
326 _questMenuItems.clear();
327}
328
329void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string& Title, ObjectGuid guid)
330{
331 WorldPacket data(SMSG_QUESTGIVER_QUEST_LIST, 100); // guess size
332 data << guid;
333
334 if (QuestGreeting const* questGreeting = sObjectMgr->GetQuestGreeting(guid))
335 {
336 std::string strGreeting = questGreeting->greeting;
337
339 if (localeConstant != LOCALE_enUS)
340 if (QuestGreetingLocale const* questGreetingLocale = sObjectMgr->GetQuestGreetingLocale(MAKE_PAIR32(guid.GetEntry(), guid.GetTypeId())))
341 ObjectMgr::GetLocaleString(questGreetingLocale->greeting, localeConstant, strGreeting);
342
343 data << strGreeting;
344 data << uint32(questGreeting->greetEmoteDelay);
345 data << uint32(questGreeting->greetEmoteType);
346 }
347 else
348 {
349 data << Title;
350 data << uint32(eEmote._Delay); // player emote
351 data << uint32(eEmote._Emote); // NPC emote
352 }
353
354 size_t count_pos = data.wpos();
355 data << uint8(0);
356 uint32 count = 0;
357 for (uint32 i = 0; i < _questMenu.GetMenuItemCount(); ++i)
358 {
359 QuestMenuItem const& questMenuItem = _questMenu.GetItem(i);
360
361 uint32 questID = questMenuItem.QuestId;
362
363 if (Quest const* quest = sObjectMgr->GetQuestTemplate(questID))
364 {
365 ++count;
366 std::string title = quest->GetTitle();
367
369 if (localeConstant != LOCALE_enUS)
370 if (QuestLocale const* questTemplateLocaleData = sObjectMgr->GetQuestLocale(questID))
371 ObjectMgr::GetLocaleString(questTemplateLocaleData->Title, localeConstant, title);
372
373 data << uint32(questID);
374 data << uint32(questMenuItem.QuestIcon);
375 data << int32(quest->GetQuestLevel());
376 data << uint32(quest->GetFlags()); // 3.3.3 quest flags
377 data << uint8(quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly()); // 3.3.3 icon changes - 0: yellow exclapamtion mark, 1: blue question mark
378 data << title;
379 }
380 }
381
382 data.put<uint8>(count_pos, count);
383 _session->SendPacket(&data);
384
385 TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST (QuestGiver: {})", guid.ToString());
386}
387
388void PlayerMenu::SendQuestGiverStatus(uint8 questStatus, ObjectGuid npcGUID) const
389{
391 data << npcGUID;
392 data << uint8(questStatus);
393
394 _session->SendPacket(&data);
395 TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_STATUS NPC={}, status={}", npcGUID.ToString(), questStatus);
396}
397
398void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGUID, bool activateAccept) const
399{
401
402 packet.Title = quest->GetTitle();
403 packet.Details = quest->GetDetails();
404 packet.Objectives = quest->GetObjectives();
405
407 if (localeConstant != LOCALE_enUS)
408 {
409 if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
410 {
411 ObjectMgr::GetLocaleString(localeData->Title, localeConstant, packet.Title);
412 ObjectMgr::GetLocaleString(localeData->Details, localeConstant, packet.Details);
413 ObjectMgr::GetLocaleString(localeData->Objectives, localeConstant, packet.Objectives);
414 }
415 }
416
417 packet.QuestGiverGUID = npcGUID;
419 packet.QuestID = quest->GetQuestId();
420 packet.AutoLaunched = activateAccept;
421 packet.Flags = quest->GetFlags() & (sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? ~QUEST_FLAGS_AUTO_ACCEPT : ~0);
422 packet.SuggestedGroupNum = quest->GetSuggestedPlayers();
423
424 quest->BuildQuestRewards(packet.Rewards, _session->GetPlayer());
425
426 packet.DescEmotes.reserve(QUEST_EMOTE_COUNT);
427 for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
428 packet.DescEmotes.emplace_back(quest->DetailsEmote[i], quest->DetailsEmoteDelay[i]);
429
430 _session->SendPacket(packet.Write());
431
432 TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_GIVER_QUEST_DETAILS NPC={}, questid={}", npcGUID.ToString(), quest->GetQuestId());
433}
434
436{
437 if (sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES))
439 else
440 {
442 _session->SendPacket(&queryPacket);
443 }
444
445 TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid={}", quest->GetQuestId());
446}
447
448void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUID, bool autoLaunched) const
449{
451
452 packet.Title = quest->GetTitle();
453 packet.RewardText = quest->GetOfferRewardText();
454
456 if (localeConstant != LOCALE_enUS)
457 {
458 if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
459 ObjectMgr::GetLocaleString(localeData->Title, localeConstant, packet.Title);
460
461 if (QuestOfferRewardLocale const* questOfferRewardLocale = sObjectMgr->GetQuestOfferRewardLocale(quest->GetQuestId()))
462 ObjectMgr::GetLocaleString(questOfferRewardLocale->RewardText, localeConstant, packet.RewardText);
463 }
464
465 packet.QuestGiverGUID = npcGUID;
466 packet.QuestID = quest->GetQuestId();
467 packet.AutoLaunched = autoLaunched;
468 packet.Flags = quest->GetFlags();
469 packet.SuggestedGroupNum = quest->GetSuggestedPlayers();
470
471 for (uint32 i = 0; i < QUEST_EMOTE_COUNT && quest->OfferRewardEmote[i]; ++i)
472 packet.Emotes.emplace_back(quest->OfferRewardEmote[i], quest->OfferRewardEmoteDelay[i]);
473
474 quest->BuildQuestRewards(packet.Rewards, _session->GetPlayer(), true);
475
476 _session->SendPacket(packet.Write());
477
478 TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_GIVER_OFFER_REWARD NPC={}, questid={}", npcGUID.ToString(), quest->GetQuestId());
479}
480
481void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGUID, bool canComplete, bool closeOnCancel) const
482{
483 // We can always call to RequestItems, but this packet only goes out if there are actually
484 // items. Otherwise, we'll skip straight to the OfferReward
485
486 std::string questTitle = quest->GetTitle();
487 std::string requestItemsText = quest->GetRequestItemsText();
488
490 if (localeConstant != LOCALE_enUS)
491 {
492 if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
493 ObjectMgr::GetLocaleString(localeData->Title, localeConstant, questTitle);
494
495 if (QuestRequestItemsLocale const* questRequestItemsLocale = sObjectMgr->GetQuestRequestItemsLocale(quest->GetQuestId()))
496 ObjectMgr::GetLocaleString(questRequestItemsLocale->CompletionText, localeConstant, requestItemsText);
497 }
498
499 if (!quest->GetReqItemsCount() && canComplete)
500 {
501 SendQuestGiverOfferReward(quest, npcGUID, true);
502 return;
503 }
504
505 WorldPacket data(SMSG_QUESTGIVER_REQUEST_ITEMS, 50); // guess size
506 data << npcGUID;
507 data << uint32(quest->GetQuestId());
508 data << questTitle;
509 data << requestItemsText;
510
511 data << uint32(0); // unknown
512
513 if (canComplete)
514 data << quest->GetCompleteEmote();
515 else
516 data << quest->GetIncompleteEmote();
517
518 // Close Window after cancel
519 data << uint32(closeOnCancel);
520
521 data << uint32(quest->GetFlags()); // 3.3.3 questFlags
522 data << uint32(quest->GetSuggestedPlayers()); // SuggestedGroupNum
523
524 // Required Money
525 data << uint32(quest->GetRewOrReqMoney() < 0 ? -quest->GetRewOrReqMoney() : 0);
526
527 data << uint32(quest->GetReqItemsCount());
528 for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
529 {
530 if (!quest->RequiredItemId[i])
531 continue;
532
533 data << uint32(quest->RequiredItemId[i]);
534 data << uint32(quest->RequiredItemCount[i]);
535
536 if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RequiredItemId[i]))
537 data << uint32(itemTemplate->DisplayInfoID);
538 else
539 data << uint32(0);
540 }
541
542 if (!canComplete)
543 data << uint32(0x00);
544 else
545 data << uint32(0x03);
546
547 data << uint32(0x04);
548 data << uint32(0x08);
549 data << uint32(0x10);
550
551 _session->SendPacket(&data);
552 TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPC={}, questid={}", npcGUID.ToString(), quest->GetQuestId());
553}
LocaleConstant
Definition Common.h:48
@ LOCALE_enUS
Definition Common.h:49
#define DEFAULT_LOCALE
Definition Common.h:62
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define ASSERT
Definition Errors.h:68
#define GOSSIP_MAX_MENU_ITEMS
Definition GossipDef.h:29
GossipOptionIcon
Definition GossipDef.h:59
#define TC_LOG_DEBUG(filterType__,...)
Definition Log.h:156
#define TC_LOG_ERROR(filterType__,...)
Definition Log.h:165
uint32 MAKE_PAIR32(uint16 l, uint16 h)
#define sObjectMgr
Definition ObjectMgr.h:1721
std::pair< GossipMenuItemsContainer::const_iterator, GossipMenuItemsContainer::const_iterator > GossipMenuItemsMapBounds
Definition ObjectMgr.h:800
#define QUEST_ITEM_OBJECTIVES_COUNT
Definition QuestDef.h:39
#define QUEST_EMOTE_COUNT
Definition QuestDef.h:45
size_t wpos() const
Definition ByteBuffer.h:321
void put(std::size_t pos, T value)
Definition ByteBuffer.h:137
uint32 GetMenuItemCount() const
Definition GossipDef.h:179
GossipMenuItemContainer _menuItems
Definition GossipDef.h:219
void SetLocale(LocaleConstant locale)
Definition GossipDef.h:174
LocaleConstant GetLocale() const
Definition GossipDef.h:175
uint32 GetMenuItemAction(uint32 menuItemId) const
uint32 AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::string const &message, uint32 sender, uint32 action, std::string const &boxMessage, uint32 boxMoney, bool coded=false)
Definition GossipDef.cpp:40
uint32 GetMenuId() const
Definition GossipDef.h:171
GossipMenuItemDataContainer _menuItemData
Definition GossipDef.h:220
LocaleConstant _locale
Definition GossipDef.h:223
GossipMenuItemContainer const & GetMenuItems() const
Definition GossipDef.h:213
uint32 GetMenuItemSender(uint32 menuItemId) const
bool IsMenuItemCoded(uint32 menuItemId) const
uint32 _menuId
Definition GossipDef.h:221
void AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi)
void ClearMenu()
void SetSenderGUID(ObjectGuid guid)
Definition GossipDef.h:172
ObjectGuid _senderGUID
Definition GossipDef.h:222
static ObjectGuid const Empty
Definition ObjectGuid.h:140
std::string ToString() const
uint32 GetEntry() const
Definition ObjectGuid.h:155
static TypeID GetTypeId(HighGuid high)
Definition ObjectGuid.h:191
void Clear()
Definition ObjectGuid.h:150
static std::string_view GetLocaleString(std::vector< std::string > const &data, size_t locale)
Definition ObjectMgr.h:1525
void SendCloseGossip()
void SendPointOfInterest(uint32 poiId) const
void SendQuestGiverOfferReward(Quest const *quest, ObjectGuid npcGUID, bool autoLaunched) const
QuestMenu _questMenu
Definition GossipDef.h:291
void SendQuestGiverQuestDetails(Quest const *quest, ObjectGuid npcGUID, bool activateAccept) const
void SendQuestGiverRequestItems(Quest const *quest, ObjectGuid npcGUID, bool canComplete, bool closeOnCancel) const
void ClearMenus()
PlayerMenu(WorldSession *session)
void SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
GossipMenu _gossipMenu
Definition GossipDef.h:290
void SendQuestGiverStatus(uint8 questStatus, ObjectGuid npcGUID) const
void SendQuestQueryResponse(Quest const *quest) const
WorldSession * _session
Definition GossipDef.h:292
void SendQuestGiverQuestList(QEmote const &eEmote, const std::string &Title, ObjectGuid npcGUID)
ObjectGuid GetPlayerSharingQuest() const
Definition Player.h:1357
QuestMenuItem const & GetItem(uint16 index) const
Definition GossipDef.h:247
uint8 GetMenuItemCount() const
Definition GossipDef.h:235
QuestMenuItemList _questMenuItems
Definition GossipDef.h:253
bool HasItem(uint32 questId) const
void ClearMenu()
void AddMenuItem(uint32 QuestId, uint8 Icon)
uint32 DetailsEmote[QUEST_EMOTE_COUNT]
Definition QuestDef.h:317
uint32 OfferRewardEmote[QUEST_EMOTE_COUNT]
Definition QuestDef.h:319
WorldPacket BuildQueryData(LocaleConstant loc) const
Definition QuestDef.cpp:382
uint32 GetReqItemsCount() const
Definition QuestDef.h:322
std::string const & GetRequestItemsText() const
Definition QuestDef.h:267
WorldPacket QueryData[TOTAL_LOCALES]
Definition QuestDef.h:340
std::string const & GetObjectives() const
Definition QuestDef.h:265
uint32 DetailsEmoteDelay[QUEST_EMOTE_COUNT]
Definition QuestDef.h:318
std::string const & GetDetails() const
Definition QuestDef.h:264
uint32 GetFlags() const
Definition QuestDef.h:288
void BuildQuestRewards(WorldPackets::Quest::QuestRewards &rewards, Player *player, bool sendHiddenRewards=false) const
Definition QuestDef.cpp:238
uint32 OfferRewardEmoteDelay[QUEST_EMOTE_COUNT]
Definition QuestDef.h:320
uint32 GetQuestId() const
Definition QuestDef.h:229
uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT]
Definition QuestDef.h:305
uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT]
Definition QuestDef.h:304
std::string const & GetOfferRewardText() const
Definition QuestDef.h:266
int32 GetRewOrReqMoney(Player const *player=nullptr) const
Definition QuestDef.cpp:287
uint32 GetIncompleteEmote() const
Definition QuestDef.h:283
std::string const & GetTitle() const
Definition QuestDef.h:263
uint32 GetCompleteEmote() const
Definition QuestDef.h:284
uint32 GetSuggestedPlayers() const
Definition QuestDef.h:248
TaggedPosition< Position::XY > Pos
Definition NPCPackets.h:79
WorldPacket const * Write() override
std::vector< QuestDescEmote > DescEmotes
WorldPacket const * Write() override
Player session in the World.
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
LocaleConstant GetSessionDbLocaleIndex() const
Player * GetPlayer() const
@ SMSG_QUESTGIVER_QUEST_LIST
Definition Opcodes.h:418
@ SMSG_GOSSIP_MESSAGE
Definition Opcodes.h:410
@ SMSG_QUESTGIVER_STATUS
Definition Opcodes.h:416
@ SMSG_QUESTGIVER_REQUEST_ITEMS
Definition Opcodes.h:424
@ SMSG_GOSSIP_COMPLETE
Definition Opcodes.h:411
#define sWorld
Definition World.h:900
@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT
Definition World.h:152
@ CONFIG_CACHE_DATA_QUERIES
Definition World.h:176
std::string const & GetText(LocaleConstant locale=DEFAULT_LOCALE, uint8 gender=GENDER_MALE, bool forceGender=false) const
Definition ObjectMgr.h:496
uint32 GossipActionMenuId
Definition GossipDef.h:146
uint32 OptionType
Definition GossipDef.h:136
std::string BoxMessage
Definition GossipDef.h:137
uint32 BoxMoney
Definition GossipDef.h:138
uint8 MenuItemIcon
Definition GossipDef.h:132
std::string Message
Definition GossipDef.h:134
std::string Name
Definition ObjectMgr.h:768
uint32 Importance
Definition ObjectMgr.h:767
void Relocate(float x, float y)
Definition Position.h:66
uint32 _Emote
Definition NPCHandler.h:23
uint32 _Delay
Definition NPCHandler.h:24
uint32 QuestId
Definition GossipDef.h:155
uint8 QuestIcon
Definition GossipDef.h:156
Position Pos
Definition Position.h:226