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