Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
GossipDef.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRESERVER_GOSSIP_H
7#define SKYFIRESERVER_GOSSIP_H
8
9#include "Common.h"
10#include "NPCHandler.h"
11#include "QuestDef.h"
12
13class WorldSession;
14
15#define GOSSIP_MAX_MENU_ITEMS 64 // client supported items unknown, but provided number must be enough
16#define DEFAULT_GOSSIP_MESSAGE 0xffffff
17
19{
20 GOSSIP_OPTION_NONE = 0, //UNIT_NPC_FLAG_NONE (0)
21 GOSSIP_OPTION_GOSSIP = 1, //UNIT_NPC_FLAG_GOSSIP (1)
22 GOSSIP_OPTION_QUESTGIVER = 2, //UNIT_NPC_FLAG_QUESTGIVER (2)
23 GOSSIP_OPTION_VENDOR = 3, //UNIT_NPC_FLAG_VENDOR (128)
24 GOSSIP_OPTION_TAXIVENDOR = 4, //UNIT_NPC_FLAG_TAXIVENDOR (8192)
25 GOSSIP_OPTION_TRAINER = 5, //UNIT_NPC_FLAG_TRAINER (16)
26 GOSSIP_OPTION_SPIRITHEALER = 6, //UNIT_NPC_FLAG_SPIRITHEALER (16384)
27 GOSSIP_OPTION_SPIRITGUIDE = 7, //UNIT_NPC_FLAG_SPIRITGUIDE (32768)
28 GOSSIP_OPTION_INNKEEPER = 8, //UNIT_NPC_FLAG_INNKEEPER (65536)
29 GOSSIP_OPTION_BANKER = 9, //UNIT_NPC_FLAG_BANKER (131072)
30 GOSSIP_OPTION_PETITIONER = 10, //UNIT_NPC_FLAG_PETITIONER (262144)
31 GOSSIP_OPTION_TABARDDESIGNER = 11, //UNIT_NPC_FLAG_TABARDDESIGNER (524288)
32 GOSSIP_OPTION_BATTLEFIELD = 12, //UNIT_NPC_FLAG_BATTLEFIELDPERSON (1048576)
33 GOSSIP_OPTION_AUCTIONEER = 13, //UNIT_NPC_FLAG_AUCTIONEER (2097152)
34 GOSSIP_OPTION_STABLEPET = 14, //UNIT_NPC_FLAG_STABLE (4194304)
35 GOSSIP_OPTION_ARMORER = 15, //UNIT_NPC_FLAG_ARMORER (4096)
36 GOSSIP_OPTION_UNLEARNTALENTS = 16, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER)
37 GOSSIP_OPTION_UNLEARNPETTALENTS = 17, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER)
38 GOSSIP_OPTION_LEARNDUALSPEC = 18, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER)
39 GOSSIP_OPTION_OUTDOORPVP = 19, //added by code (option for outdoor pvp creatures)
40 GOSSIP_OPTION_UNLEARN_SPEC = 20, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER)
42};
43
45{
46 GOSSIP_ICON_CHAT = 0, // white chat bubble
47 GOSSIP_ICON_VENDOR = 1, // brown bag
48 GOSSIP_ICON_TAXI = 2, // flightmarker (paperplane)
49 GOSSIP_ICON_TRAINER = 3, // brown book (trainer)
50 GOSSIP_ICON_INTERACT_1 = 4, // golden interaction wheel
51 GOSSIP_ICON_INTERACT_2 = 5, // golden interaction wheel
52 GOSSIP_ICON_MONEY_BAG = 6, // brown bag (with gold coin in lower corner)
53 GOSSIP_ICON_TALK = 7, // white chat bubble (with "..." inside)
54 GOSSIP_ICON_TABARD = 8, // white tabard
55 GOSSIP_ICON_BATTLE = 9, // two crossed swords
56 GOSSIP_ICON_DOT = 10, // yellow dot/point
57 GOSSIP_ICON_CHAT_11 = 11, // white chat bubble
58 GOSSIP_ICON_CHAT_12 = 12, // white chat bubble
59 GOSSIP_ICON_CHAT_13 = 13, // white chat bubble
60 GOSSIP_ICON_UNK_14 = 14, // INVALID - DO NOT USE
61 GOSSIP_ICON_UNK_15 = 15, // INVALID - DO NOT USE
62 GOSSIP_ICON_CHAT_16 = 16, // white chat bubble
63 GOSSIP_ICON_CHAT_17 = 17, // white chat bubble
64 GOSSIP_ICON_CHAT_18 = 18, // white chat bubble
65 GOSSIP_ICON_CHAT_19 = 19, // white chat bubble
66 GOSSIP_ICON_CHAT_20 = 20, // white chat bubble
68};
69
70//POI icons. Many more exist, list not complete.
72{
73 ICON_POI_BLANK = 0, // Blank (not visible)
74 ICON_POI_GREY_AV_MINE = 1, // Grey mine lorry
75 ICON_POI_RED_AV_MINE = 2, // Red mine lorry
76 ICON_POI_BLUE_AV_MINE = 3, // Blue mine lorry
77 ICON_POI_BWTOMB = 4, // Blue and White Tomb Stone
78 ICON_POI_SMALL_HOUSE = 5, // Small house
79 ICON_POI_GREYTOWER = 6, // Grey Tower
80 ICON_POI_REDFLAG = 7, // Red Flag w/Yellow !
81 ICON_POI_TOMBSTONE = 8, // Normal tomb stone (brown)
82 ICON_POI_BWTOWER = 9, // Blue and White Tower
83 ICON_POI_REDTOWER = 10, // Red Tower
84 ICON_POI_BLUETOWER = 11, // Blue Tower
85 ICON_POI_RWTOWER = 12, // Red and White Tower
86 ICON_POI_REDTOMB = 13, // Red Tomb Stone
87 ICON_POI_RWTOMB = 14, // Red and White Tomb Stone
88 ICON_POI_BLUETOMB = 15, // Blue Tomb Stone
89 ICON_POI_16 = 16, // Grey ?
90 ICON_POI_17 = 17, // Blue/White ?
91 ICON_POI_18 = 18, // Blue ?
92 ICON_POI_19 = 19, // Red and White ?
93 ICON_POI_20 = 20, // Red ?
94 ICON_POI_GREYLOGS = 21, // Grey Wood Logs
95 ICON_POI_BWLOGS = 22, // Blue and White Wood Logs
96 ICON_POI_BLUELOGS = 23, // Blue Wood Logs
97 ICON_POI_RWLOGS = 24, // Red and White Wood Logs
98 ICON_POI_REDLOGS = 25, // Red Wood Logs
99 ICON_POI_26 = 26, // Grey ?
100 ICON_POI_27 = 27, // Blue and White ?
101 ICON_POI_28 = 28, // Blue ?
102 ICON_POI_29 = 29, // Red and White ?
103 ICON_POI_30 = 30, // Red ?
104 ICON_POI_GREYHOUSE = 31, // Grey House
105 ICON_POI_BWHOUSE = 32, // Blue and White House
106 ICON_POI_BLUEHOUSE = 33, // Blue House
107 ICON_POI_RWHOUSE = 34, // Red and White House
108 ICON_POI_REDHOUSE = 35, // Red House
109 ICON_POI_GREYHORSE = 36, // Grey Horse
110 ICON_POI_BWHORSE = 37, // Blue and White Horse
111 ICON_POI_BLUEHORSE = 38, // Blue Horse
112 ICON_POI_RWHORSE = 39, // Red and White Horse
113 ICON_POI_REDHORSE = 40 // Red Horse
114};
115
128
129// need an ordered container
130typedef std::map<uint32, GossipMenuItem> GossipMenuItemContainer;
131
133{
134 uint32 GossipActionMenuId; // MenuId of the gossip triggered by this action
136};
137
138// need an ordered container
139typedef std::map<uint32, GossipMenuItemData> GossipMenuItemDataContainer;
140
147
148typedef std::vector<QuestMenuItem> QuestMenuItemList;
149
151{
152public:
155
156 void AddMenuItem(int32 menuItemId, uint8 icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded = false);
157 void AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action);
158
159 void SetMenuId(uint32 menu_id) { _menuId = menu_id; }
160 uint32 GetMenuId() const { return _menuId; }
161 void SetLocale(LocaleConstant locale) { _locale = locale; }
162 LocaleConstant GetLocale() const { return _locale; }
163
164 void AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi);
165
167 {
168 return _menuItems.size();
169 }
170
171 bool Empty() const
172 {
173 return _menuItems.empty();
174 }
175
177 {
178 GossipMenuItemContainer::const_iterator itr = _menuItems.find(id);
179 if (itr != _menuItems.end())
180 return &itr->second;
181
182 return NULL;
183 }
184
186 {
187 GossipMenuItemDataContainer::const_iterator itr = _menuItemData.find(indexId);
188 if (itr != _menuItemData.end())
189 return &itr->second;
190
191 return NULL;
192 }
193
194 uint32 GetMenuItemSender(uint32 menuItemId) const;
195 uint32 GetMenuItemAction(uint32 menuItemId) const;
196 bool IsMenuItemCoded(uint32 menuItemId) const;
197
198 void ClearMenu();
199
201 {
202 return _menuItems;
203 }
204
205private:
210};
211
213{
214public:
215 QuestMenu();
216 ~QuestMenu();
217
218 void AddMenuItem(uint32 QuestId, uint8 Icon);
219 void ClearMenu();
220
222 {
223 return _questMenuItems.size();
224 }
225
226 bool Empty() const
227 {
228 return _questMenuItems.empty();
229 }
230
231 bool HasItem(uint32 questId) const;
232
233 QuestMenuItem const& GetItem(uint16 index) const
234 {
235 return _questMenuItems[index];
236 }
237
238private:
240};
241
243{
244public:
245 explicit PlayerMenu(WorldSession* session);
246 ~PlayerMenu();
247
250
251 bool Empty() const { return _gossipMenu.Empty() && _questMenu.Empty(); }
252
253 void ClearMenus();
254 uint32 GetGossipOptionSender(uint32 selection) const { return _gossipMenu.GetMenuItemSender(selection); }
255 uint32 GetGossipOptionAction(uint32 selection) const { return _gossipMenu.GetMenuItemAction(selection); }
256 bool IsGossipOptionCoded(uint32 selection) const { return _gossipMenu.IsMenuItemCoded(selection); }
257
258 void SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const;
259 void SendCloseGossip() const;
260 void SendPointOfInterest(uint32 poiId) const;
261
262 /*********************************************************/
263 /*** QUEST SYSTEM ***/
264 /*********************************************************/
265 void SendQuestGiverStatus(uint32 questStatus, uint64 npcGUID) const;
266
267 void SendQuestGiverQuestList(QEmote eEmote, const std::string& Title, uint64 npcGUID);
268
269 void SendQuestQueryResponse(Quest const* quest) const;
270 void SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID, bool activateAccept, bool displayPopup = false) const;
271
272 void SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, bool enableNext) const;
273 void SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID, bool canComplete, bool closeOnCancel) const;
274
275 static void AddQuestLevelToTitle(std::string& title, int32 level);
276
277private:
281};
282#endif
LocaleConstant
Definition Common.h:138
@ LOCALE_enUS
Definition Common.h:139
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
std::uint16_t uint16
Definition Define.h:78
Poi_Icon
Definition GossipDef.h:72
@ ICON_POI_REDHORSE
Definition GossipDef.h:113
@ ICON_POI_BLUETOMB
Definition GossipDef.h:88
@ ICON_POI_BLUEHORSE
Definition GossipDef.h:111
@ ICON_POI_20
Definition GossipDef.h:93
@ ICON_POI_RWTOWER
Definition GossipDef.h:85
@ ICON_POI_GREYLOGS
Definition GossipDef.h:94
@ ICON_POI_REDHOUSE
Definition GossipDef.h:108
@ ICON_POI_BWTOWER
Definition GossipDef.h:82
@ ICON_POI_BWTOMB
Definition GossipDef.h:77
@ ICON_POI_GREYTOWER
Definition GossipDef.h:79
@ ICON_POI_REDTOMB
Definition GossipDef.h:86
@ ICON_POI_RWTOMB
Definition GossipDef.h:87
@ ICON_POI_REDFLAG
Definition GossipDef.h:80
@ ICON_POI_19
Definition GossipDef.h:92
@ ICON_POI_27
Definition GossipDef.h:100
@ ICON_POI_BWHOUSE
Definition GossipDef.h:105
@ ICON_POI_BLANK
Definition GossipDef.h:73
@ ICON_POI_GREYHOUSE
Definition GossipDef.h:104
@ ICON_POI_REDTOWER
Definition GossipDef.h:83
@ ICON_POI_BLUETOWER
Definition GossipDef.h:84
@ ICON_POI_26
Definition GossipDef.h:99
@ ICON_POI_RWLOGS
Definition GossipDef.h:97
@ ICON_POI_BWHORSE
Definition GossipDef.h:110
@ ICON_POI_BLUEHOUSE
Definition GossipDef.h:106
@ ICON_POI_16
Definition GossipDef.h:89
@ ICON_POI_BLUE_AV_MINE
Definition GossipDef.h:76
@ ICON_POI_RED_AV_MINE
Definition GossipDef.h:75
@ ICON_POI_28
Definition GossipDef.h:101
@ ICON_POI_18
Definition GossipDef.h:91
@ ICON_POI_29
Definition GossipDef.h:102
@ ICON_POI_GREY_AV_MINE
Definition GossipDef.h:74
@ ICON_POI_GREYHORSE
Definition GossipDef.h:109
@ ICON_POI_SMALL_HOUSE
Definition GossipDef.h:78
@ ICON_POI_17
Definition GossipDef.h:90
@ ICON_POI_REDLOGS
Definition GossipDef.h:98
@ ICON_POI_30
Definition GossipDef.h:103
@ ICON_POI_RWHORSE
Definition GossipDef.h:112
@ ICON_POI_RWHOUSE
Definition GossipDef.h:107
@ ICON_POI_BWLOGS
Definition GossipDef.h:95
@ ICON_POI_TOMBSTONE
Definition GossipDef.h:81
@ ICON_POI_BLUELOGS
Definition GossipDef.h:96
std::vector< QuestMenuItem > QuestMenuItemList
Definition GossipDef.h:148
GossipOptionIcon
Definition GossipDef.h:45
@ GOSSIP_ICON_CHAT_20
Definition GossipDef.h:66
@ GOSSIP_ICON_CHAT_11
Definition GossipDef.h:57
@ GOSSIP_ICON_CHAT
Definition GossipDef.h:46
@ GOSSIP_ICON_DOT
Definition GossipDef.h:56
@ GOSSIP_ICON_CHAT_17
Definition GossipDef.h:63
@ GOSSIP_ICON_TABARD
Definition GossipDef.h:54
@ GOSSIP_ICON_CHAT_18
Definition GossipDef.h:64
@ GOSSIP_ICON_CHAT_16
Definition GossipDef.h:62
@ GOSSIP_ICON_MONEY_BAG
Definition GossipDef.h:52
@ GOSSIP_ICON_INTERACT_2
Definition GossipDef.h:51
@ GOSSIP_ICON_CHAT_13
Definition GossipDef.h:59
@ GOSSIP_ICON_CHAT_19
Definition GossipDef.h:65
@ GOSSIP_ICON_CHAT_12
Definition GossipDef.h:58
@ GOSSIP_ICON_INTERACT_1
Definition GossipDef.h:50
@ GOSSIP_ICON_TAXI
Definition GossipDef.h:48
@ GOSSIP_ICON_BATTLE
Definition GossipDef.h:55
@ GOSSIP_ICON_TRAINER
Definition GossipDef.h:49
@ GOSSIP_ICON_MAX
Definition GossipDef.h:67
@ GOSSIP_ICON_VENDOR
Definition GossipDef.h:47
@ GOSSIP_ICON_UNK_15
Definition GossipDef.h:61
@ GOSSIP_ICON_TALK
Definition GossipDef.h:53
@ GOSSIP_ICON_UNK_14
Definition GossipDef.h:60
Gossip_Option
Definition GossipDef.h:19
@ GOSSIP_OPTION_UNLEARN_SPEC
Definition GossipDef.h:40
@ GOSSIP_OPTION_AUCTIONEER
Definition GossipDef.h:33
@ GOSSIP_OPTION_UNLEARNTALENTS
Definition GossipDef.h:36
@ GOSSIP_OPTION_TRAINER
Definition GossipDef.h:25
@ GOSSIP_OPTION_ARMORER
Definition GossipDef.h:35
@ GOSSIP_OPTION_UNLEARNPETTALENTS
Definition GossipDef.h:37
@ GOSSIP_OPTION_VENDOR
Definition GossipDef.h:23
@ GOSSIP_OPTION_OUTDOORPVP
Definition GossipDef.h:39
@ GOSSIP_OPTION_BATTLEFIELD
Definition GossipDef.h:32
@ GOSSIP_OPTION_TABARDDESIGNER
Definition GossipDef.h:31
@ GOSSIP_OPTION_TAXIVENDOR
Definition GossipDef.h:24
@ GOSSIP_OPTION_QUESTGIVER
Definition GossipDef.h:22
@ GOSSIP_OPTION_LEARNDUALSPEC
Definition GossipDef.h:38
@ GOSSIP_OPTION_INNKEEPER
Definition GossipDef.h:28
@ GOSSIP_OPTION_NONE
Definition GossipDef.h:20
@ GOSSIP_OPTION_SPIRITGUIDE
Definition GossipDef.h:27
@ GOSSIP_OPTION_MAX
Definition GossipDef.h:41
@ GOSSIP_OPTION_PETITIONER
Definition GossipDef.h:30
@ GOSSIP_OPTION_BANKER
Definition GossipDef.h:29
@ GOSSIP_OPTION_GOSSIP
Definition GossipDef.h:21
@ GOSSIP_OPTION_SPIRITHEALER
Definition GossipDef.h:26
@ GOSSIP_OPTION_STABLEPET
Definition GossipDef.h:34
std::map< uint32, GossipMenuItemData > GossipMenuItemDataContainer
Definition GossipDef.h:139
std::map< uint32, GossipMenuItem > GossipMenuItemContainer
Definition GossipDef.h:130
bool Empty() const
Definition GossipDef.h:171
void SetMenuId(uint32 menu_id)
Definition GossipDef.h:159
uint32 GetMenuItemCount() const
Definition GossipDef.h:166
GossipMenuItemContainer _menuItems
Definition GossipDef.h:206
void SetLocale(LocaleConstant locale)
Definition GossipDef.h:161
LocaleConstant GetLocale() const
Definition GossipDef.h:162
uint32 GetMenuItemAction(uint32 menuItemId) const
void AddMenuItem(int32 menuItemId, uint8 icon, std::string const &message, uint32 sender, uint32 action, std::string const &boxMessage, uint32 boxMoney, bool coded=false)
Definition GossipDef.cpp:14
GossipMenuItem const * GetItem(uint32 id) const
Definition GossipDef.h:176
uint32 GetMenuId() const
Definition GossipDef.h:160
GossipMenuItemDataContainer _menuItemData
Definition GossipDef.h:207
GossipMenuItemData const * GetItemData(uint32 indexId) const
Definition GossipDef.h:185
LocaleConstant _locale
Definition GossipDef.h:209
GossipMenuItemContainer const & GetMenuItems() const
Definition GossipDef.h:200
uint32 GetMenuItemSender(uint32 menuItemId) const
Definition GossipDef.cpp:95
bool IsMenuItemCoded(uint32 menuItemId) const
uint32 _menuId
Definition GossipDef.h:208
void AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi)
Definition GossipDef.cpp:87
void ClearMenu()
void SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const
void SendPointOfInterest(uint32 poiId) const
QuestMenu _questMenu
Definition GossipDef.h:279
void SendQuestGiverStatus(uint32 questStatus, uint64 npcGUID) const
void SendQuestGiverQuestList(QEmote eEmote, const std::string &Title, uint64 npcGUID)
QuestMenu & GetQuestMenu()
Definition GossipDef.h:249
void ClearMenus()
PlayerMenu(WorldSession *session)
bool IsGossipOptionCoded(uint32 selection) const
Definition GossipDef.h:256
GossipMenu _gossipMenu
Definition GossipDef.h:278
bool Empty() const
Definition GossipDef.h:251
void SendQuestGiverQuestDetails(Quest const *quest, uint64 npcGUID, bool activateAccept, bool displayPopup=false) const
static void AddQuestLevelToTitle(std::string &title, int32 level)
void SendQuestQueryResponse(Quest const *quest) const
WorldSession * _session
Definition GossipDef.h:280
uint32 GetGossipOptionSender(uint32 selection) const
Definition GossipDef.h:254
GossipMenu & GetGossipMenu()
Definition GossipDef.h:248
void SendQuestGiverRequestItems(Quest const *quest, uint64 npcGUID, bool canComplete, bool closeOnCancel) const
void SendQuestGiverOfferReward(Quest const *quest, uint64 npcGUID, bool enableNext) const
uint32 GetGossipOptionAction(uint32 selection) const
Definition GossipDef.h:255
void SendCloseGossip() const
QuestMenuItem const & GetItem(uint16 index) const
Definition GossipDef.h:233
bool Empty() const
Definition GossipDef.h:226
uint8 GetMenuItemCount() const
Definition GossipDef.h:221
QuestMenuItemList _questMenuItems
Definition GossipDef.h:239
bool HasItem(uint32 questId) const
void ClearMenu()
void AddMenuItem(uint32 QuestId, uint8 Icon)
Player session in the World.
uint32 GossipActionMenuId
Definition GossipDef.h:134
uint32 OptionType
Definition GossipDef.h:124
std::string BoxMessage
Definition GossipDef.h:125
uint32 BoxMoney
Definition GossipDef.h:126
uint8 MenuItemIcon
Definition GossipDef.h:120
std::string Message
Definition GossipDef.h:122
uint32 QuestId
Definition GossipDef.h:144
uint8 QuestIcon
Definition GossipDef.h:145