1/**
2 * The Forgotten Server - a free and open-source MMORPG server emulator
3 * Copyright (C) 2019 Mark Samman <mark.samman@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20#ifndef FS_ENUMS_H_003445999FEE4A67BCECBE918B0124CE
21#define FS_ENUMS_H_003445999FEE4A67BCECBE918B0124CE
22
23#include <cstdint>
24#include <list>
25#include <string>
26#include <utility>
27
28enum RuleViolationType_t : uint8_t {
29 REPORT_TYPE_NAME = 0,
30 REPORT_TYPE_STATEMENT = 1,
31 REPORT_TYPE_BOT = 2
32};
33
34enum RuleViolationReasons_t : uint8_t {
35 REPORT_REASON_NAMEINAPPROPRIATE = 0,
36 REPORT_REASON_NAMEPOORFORMATTED = 1,
37 REPORT_REASON_NAMEADVERTISING = 2,
38 REPORT_REASON_NAMEUNFITTING = 3,
39 REPORT_REASON_NAMERULEVIOLATION = 4,
40 REPORT_REASON_INSULTINGSTATEMENT = 5,
41 REPORT_REASON_SPAMMING = 6,
42 REPORT_REASON_ADVERTISINGSTATEMENT = 7,
43 REPORT_REASON_UNFITTINGSTATEMENT = 8,
44 REPORT_REASON_LANGUAGESTATEMENT = 9,
45 REPORT_REASON_DISCLOSURE = 10,
46 REPORT_REASON_RULEVIOLATION = 11,
47 REPORT_REASON_STATEMENT_BUGABUSE = 12,
48 REPORT_REASON_UNOFFICIALSOFTWARE = 13,
49 REPORT_REASON_PRETENDING = 14,
50 REPORT_REASON_HARASSINGOWNERS = 15,
51 REPORT_REASON_FALSEINFO = 16,
52 REPORT_REASON_ACCOUNTSHARING = 17,
53 REPORT_REASON_STEALINGDATA = 18,
54 REPORT_REASON_SERVICEATTACKING = 19,
55 REPORT_REASON_SERVICEAGREEMENT = 20
56};
57
58enum BugReportType_t : uint8_t {
59 BUG_CATEGORY_MAP = 0,
60 BUG_CATEGORY_TYPO = 1,
61 BUG_CATEGORY_TECHNICAL = 2,
62 BUG_CATEGORY_OTHER = 3
63};
64
65enum ThreadState {
66 THREAD_STATE_RUNNING,
67 THREAD_STATE_CLOSING,
68 THREAD_STATE_TERMINATED,
69};
70
71enum itemAttrTypes : uint32_t {
72 ITEM_ATTRIBUTE_NONE,
73
74 ITEM_ATTRIBUTE_ACTIONID = 1 << 0,
75 ITEM_ATTRIBUTE_UNIQUEID = 1 << 1,
76 ITEM_ATTRIBUTE_DESCRIPTION = 1 << 2,
77 ITEM_ATTRIBUTE_TEXT = 1 << 3,
78 ITEM_ATTRIBUTE_DATE = 1 << 4,
79 ITEM_ATTRIBUTE_WRITER = 1 << 5,
80 ITEM_ATTRIBUTE_NAME = 1 << 6,
81 ITEM_ATTRIBUTE_ARTICLE = 1 << 7,
82 ITEM_ATTRIBUTE_PLURALNAME = 1 << 8,
83 ITEM_ATTRIBUTE_WEIGHT = 1 << 9,
84 ITEM_ATTRIBUTE_ATTACK = 1 << 10,
85 ITEM_ATTRIBUTE_DEFENSE = 1 << 11,
86 ITEM_ATTRIBUTE_EXTRADEFENSE = 1 << 12,
87 ITEM_ATTRIBUTE_ARMOR = 1 << 13,
88 ITEM_ATTRIBUTE_HITCHANCE = 1 << 14,
89 ITEM_ATTRIBUTE_SHOOTRANGE = 1 << 15,
90 ITEM_ATTRIBUTE_OWNER = 1 << 16,
91 ITEM_ATTRIBUTE_DURATION = 1 << 17,
92 ITEM_ATTRIBUTE_DECAYSTATE = 1 << 18,
93 ITEM_ATTRIBUTE_CORPSEOWNER = 1 << 19,
94 ITEM_ATTRIBUTE_CHARGES = 1 << 20,
95 ITEM_ATTRIBUTE_FLUIDTYPE = 1 << 21,
96 ITEM_ATTRIBUTE_DOORID = 1 << 22,
97 ITEM_ATTRIBUTE_DECAYTO = 1 << 23,
98 ITEM_ATTRIBUTE_WRAPID = 1 << 24,
99
100 ITEM_ATTRIBUTE_CUSTOM = 1U << 31
101};
102
103enum VipStatus_t : uint8_t {
104 VIPSTATUS_OFFLINE = 0,
105 VIPSTATUS_ONLINE = 1,
106 VIPSTATUS_PENDING = 2
107};
108
109enum MarketAction_t {
110 MARKETACTION_BUY = 0,
111 MARKETACTION_SELL = 1,
112};
113
114enum MarketRequest_t {
115 MARKETREQUEST_OWN_OFFERS = 0xFFFE,
116 MARKETREQUEST_OWN_HISTORY = 0xFFFF,
117};
118
119enum MarketOfferState_t {
120 OFFERSTATE_ACTIVE = 0,
121 OFFERSTATE_CANCELLED = 1,
122 OFFERSTATE_EXPIRED = 2,
123 OFFERSTATE_ACCEPTED = 3,
124
125 OFFERSTATE_ACCEPTEDEX = 255,
126};
127
128enum ChannelEvent_t : uint8_t {
129 CHANNELEVENT_JOIN = 0,
130 CHANNELEVENT_LEAVE = 1,
131 CHANNELEVENT_INVITE = 2,
132 CHANNELEVENT_EXCLUDE = 3,
133};
134
135enum CreatureType_t : uint8_t {
136 CREATURETYPE_PLAYER = 0,
137 CREATURETYPE_MONSTER = 1,
138 CREATURETYPE_NPC = 2,
139 CREATURETYPE_SUMMON_OWN = 3,
140 CREATURETYPE_SUMMON_OTHERS = 4,
141};
142
143enum OperatingSystem_t : uint8_t {
144 CLIENTOS_NONE = 0,
145
146 CLIENTOS_LINUX = 1,
147 CLIENTOS_WINDOWS = 2,
148 CLIENTOS_FLASH = 3,
149
150 CLIENTOS_OTCLIENT_LINUX = 10,
151 CLIENTOS_OTCLIENT_WINDOWS = 11,
152 CLIENTOS_OTCLIENT_MAC = 12,
153
154 // by default OTCv8 uses CLIENTOS_WINDOWS for backward compatibility
155 // for correct value enable g_game.enableFeature(GameExtendedOpcode)
156 // in modules/game_features/features.lua
157 CLIENTOS_OTCLIENTV8_LINUX = 20,
158 CLIENTOS_OTCLIENTV8_WINDOWS = 21,
159 CLIENTOS_OTCLIENTV8_MAC = 22,
160 CLIENTOS_OTCLIENTV8_ANDROID = 23,
161 CLIENTOS_OTCLIENTV8_IOS = 24,
162 CLIENTOS_OTCLIENTV8_WEB = 25
163};
164
165enum SpellGroup_t : uint8_t {
166 SPELLGROUP_NONE = 0,
167 SPELLGROUP_ATTACK = 1,
168 SPELLGROUP_HEALING = 2,
169 SPELLGROUP_SUPPORT = 3,
170 SPELLGROUP_SPECIAL = 4,
171};
172
173enum SpellType_t : uint8_t {
174 SPELL_UNDEFINED = 0,
175 SPELL_INSTANT = 1,
176 SPELL_RUNE = 2,
177};
178
179enum AccountType_t : uint8_t {
180 ACCOUNT_TYPE_NORMAL = 1,
181 ACCOUNT_TYPE_TUTOR = 2,
182 ACCOUNT_TYPE_SENIORTUTOR = 3,
183 ACCOUNT_TYPE_GAMEMASTER = 4,
184 ACCOUNT_TYPE_GOD = 5
185};
186
187enum RaceType_t : uint8_t {
188 RACE_NONE,
189 RACE_VENOM,
190 RACE_BLOOD,
191 RACE_UNDEAD,
192 RACE_FIRE,
193 RACE_ENERGY,
194};
195
196enum CombatType_t : uint16_t {
197 COMBAT_NONE = 0,
198
199 COMBAT_PHYSICALDAMAGE = 1 << 0,
200 COMBAT_ENERGYDAMAGE = 1 << 1,
201 COMBAT_EARTHDAMAGE = 1 << 2,
202 COMBAT_FIREDAMAGE = 1 << 3,
203 COMBAT_UNDEFINEDDAMAGE = 1 << 4,
204 COMBAT_LIFEDRAIN = 1 << 5,
205 COMBAT_MANADRAIN = 1 << 6,
206 COMBAT_HEALING = 1 << 7,
207 COMBAT_DROWNDAMAGE = 1 << 8,
208 COMBAT_ICEDAMAGE = 1 << 9,
209 COMBAT_HOLYDAMAGE = 1 << 10,
210 COMBAT_DEATHDAMAGE = 1 << 11,
211
212 COMBAT_COUNT = 12
213};
214
215enum CombatParam_t {
216 COMBAT_PARAM_TYPE,
217 COMBAT_PARAM_EFFECT,
218 COMBAT_PARAM_DISTANCEEFFECT,
219 COMBAT_PARAM_BLOCKSHIELD,
220 COMBAT_PARAM_BLOCKARMOR,
221 COMBAT_PARAM_TARGETCASTERORTOPMOST,
222 COMBAT_PARAM_CREATEITEM,
223 COMBAT_PARAM_AGGRESSIVE,
224 COMBAT_PARAM_DISPEL,
225 COMBAT_PARAM_USECHARGES,
226};
227
228enum CallBackParam_t {
229 CALLBACK_PARAM_LEVELMAGICVALUE,
230 CALLBACK_PARAM_SKILLVALUE,
231 CALLBACK_PARAM_TARGETTILE,
232 CALLBACK_PARAM_TARGETCREATURE,
233};
234
235enum ConditionParam_t {
236 CONDITION_PARAM_OWNER = 1,
237 CONDITION_PARAM_TICKS = 2,
238 // CONDITION_PARAM_OUTFIT = 3,
239 CONDITION_PARAM_HEALTHGAIN = 4,
240 CONDITION_PARAM_HEALTHTICKS = 5,
241 CONDITION_PARAM_MANAGAIN = 6,
242 CONDITION_PARAM_MANATICKS = 7,
243 CONDITION_PARAM_DELAYED = 8,
244 CONDITION_PARAM_SPEED = 9,
245 CONDITION_PARAM_LIGHT_LEVEL = 10,
246 CONDITION_PARAM_LIGHT_COLOR = 11,
247 CONDITION_PARAM_SOULGAIN = 12,
248 CONDITION_PARAM_SOULTICKS = 13,
249 CONDITION_PARAM_MINVALUE = 14,
250 CONDITION_PARAM_MAXVALUE = 15,
251 CONDITION_PARAM_STARTVALUE = 16,
252 CONDITION_PARAM_TICKINTERVAL = 17,
253 CONDITION_PARAM_FORCEUPDATE = 18,
254 CONDITION_PARAM_SKILL_MELEE = 19,
255 CONDITION_PARAM_SKILL_FIST = 20,
256 CONDITION_PARAM_SKILL_CLUB = 21,
257 CONDITION_PARAM_SKILL_SWORD = 22,
258 CONDITION_PARAM_SKILL_AXE = 23,
259 CONDITION_PARAM_SKILL_DISTANCE = 24,
260 CONDITION_PARAM_SKILL_SHIELD = 25,
261 CONDITION_PARAM_SKILL_FISHING = 26,
262 CONDITION_PARAM_STAT_MAXHITPOINTS = 27,
263 CONDITION_PARAM_STAT_MAXMANAPOINTS = 28,
264 // CONDITION_PARAM_STAT_SOULPOINTS = 29,
265 CONDITION_PARAM_STAT_MAGICPOINTS = 30,
266 CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT = 31,
267 CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT = 32,
268 // CONDITION_PARAM_STAT_SOULPOINTSPERCENT = 33,
269 CONDITION_PARAM_STAT_MAGICPOINTSPERCENT = 34,
270 CONDITION_PARAM_PERIODICDAMAGE = 35,
271 CONDITION_PARAM_SKILL_MELEEPERCENT = 36,
272 CONDITION_PARAM_SKILL_FISTPERCENT = 37,
273 CONDITION_PARAM_SKILL_CLUBPERCENT = 38,
274 CONDITION_PARAM_SKILL_SWORDPERCENT = 39,
275 CONDITION_PARAM_SKILL_AXEPERCENT = 40,
276 CONDITION_PARAM_SKILL_DISTANCEPERCENT = 41,
277 CONDITION_PARAM_SKILL_SHIELDPERCENT = 42,
278 CONDITION_PARAM_SKILL_FISHINGPERCENT = 43,
279 CONDITION_PARAM_BUFF_SPELL = 44,
280 CONDITION_PARAM_SUBID = 45,
281 CONDITION_PARAM_FIELD = 46,
282 CONDITION_PARAM_DISABLE_DEFENSE = 47,
283 CONDITION_PARAM_SPECIALSKILL_CRITICALHITCHANCE = 48,
284 CONDITION_PARAM_SPECIALSKILL_CRITICALHITAMOUNT = 49,
285 CONDITION_PARAM_SPECIALSKILL_LIFELEECHCHANCE = 50,
286 CONDITION_PARAM_SPECIALSKILL_LIFELEECHAMOUNT = 51,
287 CONDITION_PARAM_SPECIALSKILL_MANALEECHCHANCE = 52,
288 CONDITION_PARAM_SPECIALSKILL_MANALEECHAMOUNT = 53,
289 CONDITION_PARAM_AGGRESSIVE = 54,
290};
291
292enum BlockType_t : uint8_t {
293 BLOCK_NONE,
294 BLOCK_DEFENSE,
295 BLOCK_ARMOR,
296 BLOCK_IMMUNITY
297};
298
299enum skills_t : uint8_t {
300 SKILL_FIST = 0,
301 SKILL_CLUB = 1,
302 SKILL_SWORD = 2,
303 SKILL_AXE = 3,
304 SKILL_DISTANCE = 4,
305 SKILL_SHIELD = 5,
306 SKILL_FISHING = 6,
307
308 SKILL_MAGLEVEL = 7,
309 SKILL_LEVEL = 8,
310
311 SKILL_FIRST = SKILL_FIST,
312 SKILL_LAST = SKILL_FISHING
313};
314
315enum stats_t {
316 STAT_MAXHITPOINTS,
317 STAT_MAXMANAPOINTS,
318 STAT_SOULPOINTS, // unused
319 STAT_MAGICPOINTS,
320
321 STAT_FIRST = STAT_MAXHITPOINTS,
322 STAT_LAST = STAT_MAGICPOINTS
323};
324
325enum SpecialSkills_t {
326 SPECIALSKILL_CRITICALHITCHANCE,
327 SPECIALSKILL_CRITICALHITAMOUNT,
328 SPECIALSKILL_LIFELEECHCHANCE,
329 SPECIALSKILL_LIFELEECHAMOUNT,
330 SPECIALSKILL_MANALEECHCHANCE,
331 SPECIALSKILL_MANALEECHAMOUNT,
332
333 SPECIALSKILL_FIRST = SPECIALSKILL_CRITICALHITCHANCE,
334 SPECIALSKILL_LAST = SPECIALSKILL_MANALEECHAMOUNT
335};
336
337enum Archetype_t : uint8_t {
338 ARCHETYPE_NONE = 0,
339 ARCHETYPE_WARFARE = 1,
340 ARCHETYPE_ARCHERY = 2,
341 ARCHETYPE_PROTECTION = 3,
342 ARCHETYPE_SHADOW = 4,
343 ARCHETYPE_WIZARDRY = 5,
344 ARCHETYPE_HOLY = 6,
345 ARCHETYPE_WITCHCRAFT = 7,
346 ARCHETYPE_SPIRITUAL = 8,
347
348 ARCHETYPE_FIRST = ARCHETYPE_WARFARE,
349 ARCHETYPE_LAST = ARCHETYPE_SPIRITUAL
350};
351
352enum ArchetypeResource_t : uint16_t {
353 ARCHETYPE_RESOURCE_AETHER = 1,
354};
355
356enum formulaType_t {
357 COMBAT_FORMULA_UNDEFINED,
358 COMBAT_FORMULA_LEVELMAGIC,
359 COMBAT_FORMULA_SKILL,
360 COMBAT_FORMULA_DAMAGE,
361};
362
363enum ConditionType_t {
364 CONDITION_NONE,
365
366 CONDITION_POISON = 1 << 0,
367 CONDITION_FIRE = 1 << 1,
368 CONDITION_ENERGY = 1 << 2,
369 CONDITION_BLEEDING = 1 << 3,
370 CONDITION_HASTE = 1 << 4,
371 CONDITION_PARALYZE = 1 << 5,
372 CONDITION_OUTFIT = 1 << 6,
373 CONDITION_INVISIBLE = 1 << 7,
374 CONDITION_LIGHT = 1 << 8,
375 CONDITION_MANASHIELD = 1 << 9,
376 CONDITION_INFIGHT = 1 << 10,
377 CONDITION_DRUNK = 1 << 11,
378 CONDITION_EXHAUST_WEAPON = 1 << 12, // unused
379 CONDITION_REGENERATION = 1 << 13,
380 CONDITION_SOUL = 1 << 14,
381 CONDITION_DROWN = 1 << 15,
382 CONDITION_MUTED = 1 << 16,
383 CONDITION_CHANNELMUTEDTICKS = 1 << 17,
384 CONDITION_YELLTICKS = 1 << 18,
385 CONDITION_ATTRIBUTES = 1 << 19,
386 CONDITION_FREEZING = 1 << 20,
387 CONDITION_DAZZLED = 1 << 21,
388 CONDITION_CURSED = 1 << 22,
389 CONDITION_EXHAUST_COMBAT = 1 << 23, // unused
390 CONDITION_EXHAUST_HEAL = 1 << 24, // unused
391 CONDITION_PACIFIED = 1 << 25,
392 CONDITION_SPELLCOOLDOWN = 1 << 26,
393 CONDITION_SPELLGROUPCOOLDOWN = 1 << 27,
394};
395
396enum ConditionId_t : int8_t {
397 CONDITIONID_DEFAULT = -1,
398 CONDITIONID_COMBAT,
399 CONDITIONID_HEAD,
400 CONDITIONID_NECKLACE,
401 CONDITIONID_BACKPACK,
402 CONDITIONID_ARMOR,
403 CONDITIONID_RIGHT,
404 CONDITIONID_LEFT,
405 CONDITIONID_LEGS,
406 CONDITIONID_FEET,
407 CONDITIONID_RING,
408 CONDITIONID_AMMO,
409};
410
411enum PlayerSex_t : uint8_t {
412 PLAYERSEX_FEMALE = 0,
413 PLAYERSEX_MALE = 1,
414
415 PLAYERSEX_LAST = PLAYERSEX_MALE
416};
417
418enum Vocation_t : uint16_t { VOCATION_NONE = 0 };
419
420enum ReturnValue {
421 RETURNVALUE_NOERROR,
422 RETURNVALUE_NOTPOSSIBLE,
423 RETURNVALUE_NOTENOUGHROOM,
424 RETURNVALUE_PLAYERISPZLOCKED,
425 RETURNVALUE_PLAYERISNOTINVITED,
426 RETURNVALUE_CANNOTTHROW,
427 RETURNVALUE_THEREISNOWAY,
428 RETURNVALUE_DESTINATIONOUTOFREACH,
429 RETURNVALUE_CREATUREBLOCK,
430 RETURNVALUE_NOTMOVEABLE,
431 RETURNVALUE_DROPTWOHANDEDITEM,
432 RETURNVALUE_BOTHHANDSNEEDTOBEFREE,
433 RETURNVALUE_CANONLYUSEONEWEAPON,
434 RETURNVALUE_NEEDEXCHANGE,
435 RETURNVALUE_CANNOTBEDRESSED,
436 RETURNVALUE_PUTTHISOBJECTINYOURHAND,
437 RETURNVALUE_PUTTHISOBJECTINBOTHHANDS,
438 RETURNVALUE_TOOFARAWAY,
439 RETURNVALUE_FIRSTGODOWNSTAIRS,
440 RETURNVALUE_FIRSTGOUPSTAIRS,
441 RETURNVALUE_CONTAINERNOTENOUGHROOM,
442 RETURNVALUE_NOTENOUGHCAPACITY,
443 RETURNVALUE_CANNOTPICKUP,
444 RETURNVALUE_THISISIMPOSSIBLE,
445 RETURNVALUE_DEPOTISFULL,
446 RETURNVALUE_CREATUREDOESNOTEXIST,
447 RETURNVALUE_CANNOTUSETHISOBJECT,
448 RETURNVALUE_PLAYERWITHTHISNAMEISNOTONLINE,
449 RETURNVALUE_NOTREQUIREDLEVELTOUSERUNE,
450 RETURNVALUE_YOUAREALREADYTRADING,
451 RETURNVALUE_THISPLAYERISALREADYTRADING,
452 RETURNVALUE_YOUMAYNOTLOGOUTDURINGAFIGHT,
453 RETURNVALUE_DIRECTPLAYERSHOOT,
454 RETURNVALUE_NOTENOUGHLEVEL,
455 RETURNVALUE_NOTENOUGHMAGICLEVEL,
456 RETURNVALUE_NOTENOUGHMANA,
457 RETURNVALUE_NOTENOUGHSOUL,
458 RETURNVALUE_YOUAREEXHAUSTED,
459 RETURNVALUE_YOUCANNOTUSEOBJECTSTHATFAST,
460 RETURNVALUE_PLAYERISNOTREACHABLE,
461 RETURNVALUE_CANONLYUSETHISRUNEONCREATURES,
462 RETURNVALUE_ACTIONNOTPERMITTEDINPROTECTIONZONE,
463 RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER,
464 RETURNVALUE_YOUMAYNOTATTACKAPERSONINPROTECTIONZONE,
465 RETURNVALUE_YOUMAYNOTATTACKAPERSONWHILEINPROTECTIONZONE,
466 RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE,
467 RETURNVALUE_YOUCANONLYUSEITONCREATURES,
468 RETURNVALUE_CREATUREISNOTREACHABLE,
469 RETURNVALUE_TURNSECUREMODETOATTACKUNMARKEDPLAYERS,
470 RETURNVALUE_YOUNEEDPREMIUMACCOUNT,
471 RETURNVALUE_YOUNEEDTOLEARNTHISSPELL,
472 RETURNVALUE_YOURVOCATIONCANNOTUSETHISSPELL,
473 RETURNVALUE_YOUNEEDAWEAPONTOUSETHISSPELL,
474 RETURNVALUE_PLAYERISPZLOCKEDLEAVEPVPZONE,
475 RETURNVALUE_PLAYERISPZLOCKEDENTERPVPZONE,
476 RETURNVALUE_ACTIONNOTPERMITTEDINANOPVPZONE,
477 RETURNVALUE_YOUCANNOTLOGOUTHERE,
478 RETURNVALUE_YOUNEEDAMAGICITEMTOCASTSPELL,
479 RETURNVALUE_CANNOTCONJUREITEMHERE,
480 RETURNVALUE_YOUNEEDTOSPLITYOURSPEARS,
481 RETURNVALUE_NAMEISTOOAMBIGUOUS,
482 RETURNVALUE_CANONLYUSEONESHIELD,
483 RETURNVALUE_NOPARTYMEMBERSINRANGE,
484 RETURNVALUE_YOUARENOTTHEOWNER,
485 RETURNVALUE_NOSUCHRAIDEXISTS,
486 RETURNVALUE_ANOTHERRAIDISALREADYEXECUTING,
487 RETURNVALUE_TRADEPLAYERFARAWAY,
488 RETURNVALUE_YOUDONTOWNTHISHOUSE,
489 RETURNVALUE_TRADEPLAYERALREADYOWNSAHOUSE,
490 RETURNVALUE_TRADEPLAYERHIGHESTBIDDER,
491 RETURNVALUE_YOUCANNOTTRADETHISHOUSE,
492 RETURNVALUE_YOUDONTHAVEREQUIREDPROFESSION,
493};
494
495enum SpeechBubble_t {
496 SPEECHBUBBLE_NONE = 0,
497 SPEECHBUBBLE_NORMAL = 1,
498 SPEECHBUBBLE_TRADE = 2,
499 SPEECHBUBBLE_QUEST = 3,
500 SPEECHBUBBLE_QUESTTRADER = 4,
501};
502
503enum MapMark_t {
504 MAPMARK_TICK = 0,
505 MAPMARK_QUESTION = 1,
506 MAPMARK_EXCLAMATION = 2,
507 MAPMARK_STAR = 3,
508 MAPMARK_CROSS = 4,
509 MAPMARK_TEMPLE = 5,
510 MAPMARK_KISS = 6,
511 MAPMARK_SHOVEL = 7,
512 MAPMARK_SWORD = 8,
513 MAPMARK_FLAG = 9,
514 MAPMARK_LOCK = 10,
515 MAPMARK_BAG = 11,
516 MAPMARK_SKULL = 12,
517 MAPMARK_DOLLAR = 13,
518 MAPMARK_REDNORTH = 14,
519 MAPMARK_REDSOUTH = 15,
520 MAPMARK_REDEAST = 16,
521 MAPMARK_REDWEST = 17,
522 MAPMARK_GREENNORTH = 18,
523 MAPMARK_GREENSOUTH = 19,
524};
525
526struct OutfitOffset {
527 int16_t lookX = 0;
528 int16_t lookY = 0;
529 int16_t meleeX = 0;
530 int16_t meleeY = 0;
531 int16_t rangeX = 0;
532 int16_t rangeY = 0;
533};
534
535struct Outfit_t {
536 uint16_t lookType = 0;
537 uint16_t lookTypeEx = 0;
538 uint16_t lookMount = 0;
539 uint16_t lookWings = 0;
540 uint16_t lookAura = 0;
541 uint16_t lookShader = 0;
542 uint16_t lookRuneEffect = 0;
543 uint8_t lookHead = 0;
544 uint8_t lookBody = 0;
545 uint8_t lookLegs = 0;
546 uint8_t lookFeet = 0;
547 uint8_t lookAddons = 0;
548 uint8_t attackRange = 1;
549 OutfitOffset offsets[4];
550};
551
552struct LightInfo {
553 uint8_t level = 0;
554 uint8_t color = 0;
555 constexpr LightInfo() = default;
556 constexpr LightInfo(uint8_t level, uint8_t color)
557 : level(level), color(color) {}
558};
559
560struct ShopInfo {
561 uint16_t itemId;
562 int32_t subType;
563 uint32_t buyPrice;
564 uint32_t sellPrice;
565 std::string realName;
566
567 ShopInfo() {
568 itemId = 0;
569 subType = 1;
570 buyPrice = 0;
571 sellPrice = 0;
572 }
573
574 ShopInfo(uint16_t itemId, int32_t subType = 0, uint32_t buyPrice = 0,
575 uint32_t sellPrice = 0, std::string realName = "")
576 : itemId(itemId), subType(subType), buyPrice(buyPrice),
577 sellPrice(sellPrice), realName(std::move(realName)) {}
578};
579
580struct MarketOffer {
581 uint32_t price;
582 uint32_t timestamp;
583 uint16_t amount;
584 uint16_t counter;
585 uint16_t itemId;
586 std::string playerName;
587};
588
589struct MarketOfferEx {
590 MarketOfferEx() = default;
591 MarketOfferEx(MarketOfferEx &&other)
592 : id(other.id), playerId(other.playerId), timestamp(other.timestamp),
593 price(other.price), amount(other.amount), counter(other.counter),
594 itemId(other.itemId), type(other.type),
595 playerName(std::move(other.playerName)) {}
596
597 uint32_t id;
598 uint32_t playerId;
599 uint32_t timestamp;
600 uint32_t price;
601 uint16_t amount;
602 uint16_t counter;
603 uint16_t itemId;
604 MarketAction_t type;
605 std::string playerName;
606};
607
608struct HistoryMarketOffer {
609 uint32_t timestamp;
610 uint32_t price;
611 uint16_t itemId;
612 uint16_t amount;
613 MarketOfferState_t state;
614};
615
616struct MarketStatistics {
617 MarketStatistics() {
618 numTransactions = 0;
619 highestPrice = 0;
620 totalPrice = 0;
621 lowestPrice = 0;
622 }
623
624 uint32_t numTransactions;
625 uint32_t highestPrice;
626 uint64_t totalPrice;
627 uint32_t lowestPrice;
628};
629
630struct ModalWindow {
631 std::list<std::pair<std::string, uint8_t>> buttons, choices;
632 std::string title, message;
633 uint32_t id;
634 uint8_t defaultEnterButton, defaultEscapeButton;
635 bool priority;
636
637 ModalWindow(uint32_t id, std::string title, std::string message)
638 : title(std::move(title)), message(std::move(message)), id(id),
639 defaultEnterButton(0xFF), defaultEscapeButton(0xFF), priority(false) {}
640};
641
642enum CombatOrigin {
643 ORIGIN_NONE,
644 ORIGIN_CONDITION,
645 ORIGIN_SPELL,
646 ORIGIN_MELEE,
647 ORIGIN_RANGED,
648};
649
650struct CombatDamage {
651 struct {
652 CombatType_t type;
653 int32_t value;
654 } primary, secondary;
655
656 CombatOrigin origin;
657 BlockType_t blockType;
658 bool critical;
659 CombatDamage() {
660 origin = ORIGIN_NONE;
661 blockType = BLOCK_NONE;
662 primary.type = secondary.type = COMBAT_NONE;
663 primary.value = secondary.value = 0;
664 critical = false;
665 }
666};
667
668using MarketOfferList = std::list<MarketOffer>;
669using HistoryMarketOfferList = std::list<HistoryMarketOffer>;
670using ShopInfoList = std::list<ShopInfo>;
671
672enum MonstersEvent_t : uint8_t {
673 MONSTERS_EVENT_NONE = 0,
674 MONSTERS_EVENT_THINK = 1,
675 MONSTERS_EVENT_APPEAR = 2,
676 MONSTERS_EVENT_DISAPPEAR = 3,
677 MONSTERS_EVENT_MOVE = 4,
678 MONSTERS_EVENT_SAY = 5,
679};
680
681#endif
682