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