9
3

Items.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  1. /*
  2. EQ2Emulator: Everquest II Server Emulator
  3. Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
  4. This file is part of EQ2Emulator.
  5. EQ2Emulator 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 3 of the License, or
  8. (at your option) any later version.
  9. EQ2Emulator is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with EQ2Emulator. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #ifndef __EQ2_ITEMS__
  17. #define __EQ2_ITEMS__
  18. #include <map>
  19. #include <vector>
  20. #include "../../common/types.h"
  21. #include "../../common/DataBuffer.h"
  22. #include "../../common/MiscFunctions.h"
  23. #include "../Commands/Commands.h"
  24. #include "../../common/ConfigReader.h"
  25. using namespace std;
  26. class MasterItemList;
  27. class Player;
  28. class Entity;
  29. extern MasterItemList master_item_list;
  30. #define EQ2_PRIMARY_SLOT 0
  31. #define EQ2_SECONDARY_SLOT 1
  32. #define EQ2_HEAD_SLOT 2
  33. #define EQ2_CHEST_SLOT 3
  34. #define EQ2_SHOULDERS_SLOT 4
  35. #define EQ2_FOREARMS_SLOT 5
  36. #define EQ2_HANDS_SLOT 6
  37. #define EQ2_LEGS_SLOT 7
  38. #define EQ2_FEET_SLOT 8
  39. #define EQ2_LRING_SLOT 9
  40. #define EQ2_RRING_SLOT 10
  41. #define EQ2_EARS_SLOT_1 11
  42. #define EQ2_EARS_SLOT_2 12
  43. #define EQ2_NECK_SLOT 13
  44. #define EQ2_LWRIST_SLOT 14
  45. #define EQ2_RWRIST_SLOT 15
  46. #define EQ2_RANGE_SLOT 16
  47. #define EQ2_AMMO_SLOT 17
  48. #define EQ2_WAIST_SLOT 18
  49. #define EQ2_CLOAK_SLOT 19
  50. #define EQ2_CHARM_SLOT_1 20
  51. #define EQ2_CHARM_SLOT_2 21
  52. #define EQ2_FOOD_SLOT 22
  53. #define EQ2_DRINK_SLOT 23
  54. #define EQ2_TEXTURES_SLOT 24
  55. #define EQ2_HAIR_SLOT 25
  56. #define EQ2_BEARD_SLOT 26
  57. #define EQ2_WINGS_SLOT 27
  58. #define EQ2_NAKED_CHEST_SLOT 28
  59. #define EQ2_NAKED_LEGS_SLOT 29
  60. #define EQ2_BACK_SLOT 30
  61. #define EQ2_ORIG_FOOD_SLOT 18
  62. #define EQ2_ORIG_DRINK_SLOT 19
  63. #define EQ2_DOF_FOOD_SLOT 20
  64. #define EQ2_DOF_DRINK_SLOT 21
  65. #define PRIMARY_SLOT 1
  66. #define SECONDARY_SLOT 2
  67. #define HEAD_SLOT 4
  68. #define CHEST_SLOT 8
  69. #define SHOULDERS_SLOT 16
  70. #define FOREARMS_SLOT 32
  71. #define HANDS_SLOT 64
  72. #define LEGS_SLOT 128
  73. #define FEET_SLOT 256
  74. #define LRING_SLOT 512
  75. #define RRING_SLOT 1024
  76. #define EARS_SLOT_1 2048
  77. #define EARS_SLOT_2 4096
  78. #define NECK_SLOT 8192
  79. #define LWRIST_SLOT 16384
  80. #define RWRIST_SLOT 32768
  81. #define RANGE_SLOT 65536
  82. #define AMMO_SLOT 131072
  83. #define WAIST_SLOT 262144
  84. #define CLOAK_SLOT 524288
  85. #define CHARM_SLOT_1 1048576
  86. #define CHARM_SLOT_2 2097152
  87. #define FOOD_SLOT 4194304
  88. #define DRINK_SLOT 8388608
  89. #define TEXTURES_SLOT 16777216
  90. #define HAIR_SLOT 33554432
  91. #define BEARD_SLOT 67108864
  92. #define WINGS_SLOT 134217728
  93. #define NAKED_CHEST_SLOT 268435456
  94. #define NAKED_LEGS_SLOT 536870912
  95. #define BACK_SLOT 1073741824
  96. #define ORIG_FOOD_SLOT 524288
  97. #define ORIG_DRINK_SLOT 1048576
  98. #define DOF_FOOD_SLOT 1048576
  99. #define DOF_DRINK_SLOT 2097152
  100. #define CLASSIC_EQ_MAX_BAG_SLOTS 20
  101. #define NUM_BANK_SLOTS 12
  102. #define NUM_SHARED_BANK_SLOTS 8
  103. #define NUM_SLOTS 25
  104. #define NUM_INV_SLOTS 6
  105. #define INV_SLOT1 0
  106. #define INV_SLOT2 50
  107. #define INV_SLOT3 100
  108. #define INV_SLOT4 150
  109. #define INV_SLOT5 200
  110. #define INV_SLOT6 250
  111. #define BANK_SLOT1 1000
  112. #define BANK_SLOT2 1100
  113. #define BANK_SLOT3 1200
  114. #define BANK_SLOT4 1300
  115. #define BANK_SLOT5 1400
  116. #define BANK_SLOT6 1500
  117. #define BANK_SLOT7 1600
  118. #define BANK_SLOT8 1700
  119. #define ATTUNED 1
  120. #define ATTUNEABLE 2
  121. #define ARTIFACT 4
  122. #define LORE 8
  123. #define TEMPORARY 16
  124. #define NO_TRADE 32
  125. #define NO_VALUE 64
  126. #define NO_ZONE 128
  127. #define NO_DESTROY 256
  128. #define CRAFTED 512
  129. #define GOOD_ONLY 1024
  130. #define EVIL_ONLY 2048
  131. #define STACK_LORE 4096
  132. #define LORE_EQUIP 8192
  133. #define NO_TRANSMUTE 16384
  134. #define FLAGS_32768 32768
  135. #define ORNATE 1
  136. #define HEIRLOOM 2
  137. #define APPEARANCE_ONLY 4
  138. #define UNLOCKED 8
  139. #define REFORGED 16
  140. #define NO_REPAIR 32
  141. #define ETHERAL 64
  142. #define REFINED 128
  143. #define NO_SALVAGE 256 //not used at this time
  144. #define FLAGS2_512 512//not used at this time
  145. #define FLAGS2_1024 1024//not used at this time
  146. #define FLAGS2_2048 2048//not used at this time
  147. #define FLAGS2_4096 4096//not used at this time
  148. #define FLAGS2_8192 8192//not used at this time
  149. #define FLAGS2_16384 16384//not used at this time
  150. #define FLAGS2_32768 32768//not used at this time
  151. #define ITEM_WIELD_TYPE_DUAL 1
  152. #define ITEM_WIELD_TYPE_SINGLE 2
  153. #define ITEM_WIELD_TYPE_TWO_HAND 4
  154. #define ITEM_TYPE_NORMAL 0
  155. #define ITEM_TYPE_WEAPON 1
  156. #define ITEM_TYPE_RANGED 2
  157. #define ITEM_TYPE_ARMOR 3
  158. #define ITEM_TYPE_SHIELD 4
  159. #define ITEM_TYPE_BAG 5
  160. #define ITEM_TYPE_SKILL 6
  161. #define ITEM_TYPE_RECIPE 7
  162. #define ITEM_TYPE_FOOD 8
  163. #define ITEM_TYPE_BAUBLE 9
  164. #define ITEM_TYPE_HOUSE 10
  165. #define ITEM_TYPE_THROWN 11
  166. #define ITEM_TYPE_HOUSE_CONTAINER 12
  167. #define ITEM_TYPE_ADORNMENT 13
  168. #define ITEM_TYPE_GENERIC_ADORNMENT 14
  169. #define ITEM_TYPE_PROFILE 16
  170. #define ITEM_TYPE_PATTERN 17
  171. #define ITEM_TYPE_ARMORSET 18
  172. #define ITEM_TYPE_ITEMCRATE 18
  173. #define ITEM_TYPE_BOOK 19
  174. #define ITEM_TYPE_DECORATION 20
  175. #define ITEM_TYPE_DUNGEON_MAKER 21
  176. #define ITEM_TYPE_MARKETPLACE 22
  177. //DOV defines everything till 13 is the same
  178. //#define ITEM_TYPE_BOOK 13
  179. //#define ITEM_TYPE_ADORNMENT 14
  180. //#define ITEM_TYPE_PATTERN 15
  181. //#define ITEM_TYPE_ARMORSET 16
  182. #define ITEM_MENU_TYPE_GENERIC 1 //0
  183. #define ITEM_MENU_TYPE_EQUIP 2 //1
  184. #define ITEM_MENU_TYPE_BAG 4//2
  185. #define ITEM_MENU_TYPE_HOUSE 8 //3 Place
  186. #define ITEM_MENU_TYPE_EMPTY_BAG 16 //4
  187. #define ITEM_MENU_TYPE_SCRIBE 32//5
  188. #define ITEM_MENU_TYPE_BANK_BAG 64//6
  189. #define ITEM_MENU_TYPE_INSUFFICIENT_KNOWLEDGE 128//7
  190. #define ITEM_MENU_TYPE_ACTIVATE 256//8
  191. #define ITEM_MENU_TYPE_BROKEN 512//9
  192. #define ITEM_MENU_TYPE_TWO_HANDED 1024//10
  193. #define ITEM_MENU_TYPE_ATTUNED 2048//11
  194. #define ITEM_MENU_TYPE_ATTUNEABLE 4096//12
  195. #define ITEM_MENU_TYPE_BOOK 8192//13
  196. #define ITEM_MENU_TYPE_DISPLAY_CHARGES 16384//14
  197. #define ITEM_MENU_TYPE_TEST1 32768//15 Possibly toogle decorator mode
  198. #define ITEM_MENU_TYPE_NAMEPET 65536 //16 Right CLick Menu
  199. #define ITEM_MENU_TYPE_TEST2 131072 //sets a purple background on item
  200. #define ITEM_MENU_TYPE_CONSUME 262144//18
  201. #define ITEM_MENU_TYPE_USE 524288//19
  202. #define ITEM_MENU_TYPE_CONSUME_OFF 1048576//20
  203. #define ITEM_MENU_TYPE_TEST3 1310720// bad number combo of 2 bits
  204. #define ITEM_MENU_TYPE_TEST4 2097152//21
  205. #define ITEM_MENU_TYPE_TEST5 4194304//22 infusable
  206. #define ITEM_MENU_TYPE_TEST6 8388608 //drink option on menu
  207. #define ITEM_MENU_TYPE_TEST7 16777216//24
  208. #define ITEM_MENU_TYPE_TEST8 33554432 // bit 25 use option in bags
  209. #define ITEM_MENU_TYPE_TEST9 67108864//26
  210. #define ITEM_MENU_TYPE_DAMAGED 134217728 //27
  211. #define ITEM_MENU_TYPE_BROKEN2 268435456 //28
  212. #define ITEM_MENU_TYPE_REDEEM 536870912 //29 //READ??
  213. #define ITEM_MENU_TYPE_TEST10 1073741824 //30
  214. #define ITEM_MENU_TYPE_UNPACK 2147483648//31 * on items i found this unpack is used at same time as UNPACK below
  215. #define ORIG_ITEM_MENU_TYPE_FOOD 2048
  216. #define ORIG_ITEM_MENU_TYPE_DRINK 4096
  217. #define ORIG_ITEM_MENU_TYPE_ATTUNED 8192
  218. #define ORIG_ITEM_MENU_TYPE_ATTUNEABLE 16384
  219. #define ORIG_ITEM_MENU_TYPE_BOOK 32768
  220. #define ORIG_ITEM_MENU_TYPE_STACKABLE 65536
  221. #define ITEM_MENU_TYPE2_TEST1 1 //0 auto consume on
  222. #define ITEM_MENU_TYPE2_TEST2 2 //1
  223. #define ITEM_MENU_TYPE2_UNPACK 4//2
  224. #define ITEM_MENU_TYPE2_TEST4 8 //3
  225. #define ITEM_MENU_TYPE2_TEST5 16 //4
  226. #define ITEM_MENU_TYPE2_TEST6 32//5
  227. #define ITEM_MENU_TYPE2_TEST7 64//6
  228. #define ITEM_MENU_TYPE2_TEST8 128//7
  229. #define ITEM_MENU_TYPE2_TEST9 256//8
  230. #define ITEM_MENU_TYPE2_TEST10 512//9
  231. #define ITEM_MENU_TYPE2_TEST11 1024//10
  232. #define ITEM_MENU_TYPE2_TEST12 2048//11
  233. #define ITEM_MENU_TYPE2_TEST13 4096//12
  234. #define ITEM_MENU_TYPE2_TEST14 8192//13
  235. #define ITEM_MENU_TYPE2_TEST15 16384//14
  236. #define ITEM_MENU_TYPE2_TEST16 32768//15
  237. #define ITEM_TAG_UNCOMMON 3 //tier tags
  238. #define ITEM_TAG_TREASURED 4
  239. #define ITEM_TAG_LEGENDARY 7
  240. #define ITEM_TAG_FABLED 9
  241. #define ITEM_TAG_MYTHICAL 12
  242. #define ITEM_BROKER_TYPE_ANY 0xFFFFFFFF
  243. #define ITEM_BROKER_TYPE_ADORNMENT 134217728
  244. #define ITEM_BROKER_TYPE_AMMO 1024
  245. #define ITEM_BROKER_TYPE_ATTUNEABLE 16384
  246. #define ITEM_BROKER_TYPE_BAG 2048
  247. #define ITEM_BROKER_TYPE_BAUBLE 16777216
  248. #define ITEM_BROKER_TYPE_BOOK 128
  249. #define ITEM_BROKER_TYPE_CHAINARMOR 2097152
  250. #define ITEM_BROKER_TYPE_CLOAK 1073741824
  251. #define ITEM_BROKER_TYPE_CLOTHARMOR 524288
  252. #define ITEM_BROKER_TYPE_COLLECTABLE 67108864
  253. #define ITEM_BROKER_TYPE_CRUSHWEAPON 4
  254. #define ITEM_BROKER_TYPE_DRINK 131072
  255. #define ITEM_BROKER_TYPE_FOOD 4096
  256. #define ITEM_BROKER_TYPE_HOUSEITEM 512
  257. #define ITEM_BROKER_TYPE_JEWELRY 262144
  258. #define ITEM_BROKER_TYPE_LEATHERARMOR 1048576
  259. #define ITEM_BROKER_TYPE_LORE 8192
  260. #define ITEM_BROKER_TYPE_MISC 1
  261. #define ITEM_BROKER_TYPE_PIERCEWEAPON 8
  262. #define ITEM_BROKER_TYPE_PLATEARMOR 4194304
  263. #define ITEM_BROKER_TYPE_POISON 65536
  264. #define ITEM_BROKER_TYPE_POTION 32768
  265. #define ITEM_BROKER_TYPE_RECIPEBOOK 8388608
  266. #define ITEM_BROKER_TYPE_SALESDISPLAY 33554432
  267. #define ITEM_BROKER_TYPE_SHIELD 32
  268. #define ITEM_BROKER_TYPE_SLASHWEAPON 2
  269. #define ITEM_BROKER_TYPE_SPELLSCROLL 64
  270. #define ITEM_BROKER_TYPE_TINKERED 268435456
  271. #define ITEM_BROKER_TYPE_TRADESKILL 256
  272. #define ITEM_BROKER_SLOT_ANY 0xFFFFFFFF
  273. #define ITEM_BROKER_SLOT_AMMO 65536
  274. #define ITEM_BROKER_SLOT_CHARM 524288
  275. #define ITEM_BROKER_SLOT_CHEST 32
  276. #define ITEM_BROKER_SLOT_CLOAK 262144
  277. #define ITEM_BROKER_SLOT_DRINK 2097152
  278. #define ITEM_BROKER_SLOT_EARS 4096
  279. #define ITEM_BROKER_SLOT_FEET 1024
  280. #define ITEM_BROKER_SLOT_FOOD 1048576
  281. #define ITEM_BROKER_SLOT_FOREARMS 128
  282. #define ITEM_BROKER_SLOT_HANDS 256
  283. #define ITEM_BROKER_SLOT_HEAD 16
  284. #define ITEM_BROKER_SLOT_LEGS 512
  285. #define ITEM_BROKER_SLOT_NECK 8192
  286. #define ITEM_BROKER_SLOT_PRIMARY 1
  287. #define ITEM_BROKER_SLOT_PRIMARY_2H 2
  288. #define ITEM_BROKER_SLOT_RANGE_WEAPON 32768
  289. #define ITEM_BROKER_SLOT_RING 2048
  290. #define ITEM_BROKER_SLOT_SECONDARY 8
  291. #define ITEM_BROKER_SLOT_SHOULDERS 64
  292. #define ITEM_BROKER_SLOT_WAIST 131072
  293. #define ITEM_BROKER_SLOT_WRIST 16384
  294. #define ITEM_BROKER_STAT_TYPE_NONE 0
  295. #define ITEM_BROKER_STAT_TYPE_DEF 2
  296. #define ITEM_BROKER_STAT_TYPE_STR 4
  297. #define ITEM_BROKER_STAT_TYPE_STA 8
  298. #define ITEM_BROKER_STAT_TYPE_AGI 16
  299. #define ITEM_BROKER_STAT_TYPE_WIS 32
  300. #define ITEM_BROKER_STAT_TYPE_INT 64
  301. #define ITEM_BROKER_STAT_TYPE_HEALTH 128
  302. #define ITEM_BROKER_STAT_TYPE_POWER 256
  303. #define ITEM_BROKER_STAT_TYPE_HEAT 512
  304. #define ITEM_BROKER_STAT_TYPE_COLD 1024
  305. #define ITEM_BROKER_STAT_TYPE_MAGIC 2048
  306. #define ITEM_BROKER_STAT_TYPE_MENTAL 4096
  307. #define ITEM_BROKER_STAT_TYPE_DIVINE 8192
  308. #define ITEM_BROKER_STAT_TYPE_POISON 16384
  309. #define ITEM_BROKER_STAT_TYPE_DISEASE 32768
  310. #define ITEM_BROKER_STAT_TYPE_CRUSH 65536
  311. #define ITEM_BROKER_STAT_TYPE_SLASH 131072
  312. #define ITEM_BROKER_STAT_TYPE_PIERCE 262144
  313. #define ITEM_BROKER_STAT_TYPE_CRITICAL 524288
  314. #define ITEM_BROKER_STAT_TYPE_DBL_ATTACK 1048576
  315. #define ITEM_BROKER_STAT_TYPE_ABILITY_MOD 2097152
  316. #define ITEM_BROKER_STAT_TYPE_POTENCY 4194304
  317. #define OVERFLOW_SLOT 0xFFFFFFFE
  318. #define SLOT_INVALID 0xFFFF
  319. #define ITEM_STAT_STR 0
  320. #define ITEM_STAT_STA 1
  321. #define ITEM_STAT_AGI 2
  322. #define ITEM_STAT_WIS 3
  323. #define ITEM_STAT_INT 4
  324. #define ITEM_STAT_ADORNING 100
  325. #define ITEM_STAT_AGGRESSION 101
  326. #define ITEM_STAT_ARTIFICING 102
  327. #define ITEM_STAT_ARTISTRY 103
  328. #define ITEM_STAT_CHEMISTRY 104
  329. #define ITEM_STAT_CRUSHING 105
  330. #define ITEM_STAT_DEFENSE 106
  331. #define ITEM_STAT_DEFLECTION 107
  332. #define ITEM_STAT_DISRUPTION 108
  333. #define ITEM_STAT_FISHING 109
  334. #define ITEM_STAT_FLETCHING 110
  335. #define ITEM_STAT_FOCUS 111
  336. #define ITEM_STAT_FORESTING 112
  337. #define ITEM_STAT_GATHERING 113
  338. #define ITEM_STAT_METAL_SHAPING 114
  339. #define ITEM_STAT_METALWORKING 115
  340. #define ITEM_STAT_MINING 116
  341. #define ITEM_STAT_MINISTRATION 117
  342. #define ITEM_STAT_ORDINATION 118
  343. #define ITEM_STAT_PARRY 119
  344. #define ITEM_STAT_PIERCING 120
  345. #define ITEM_STAT_RANGED 121
  346. #define ITEM_STAT_SAFE_FALL 122
  347. #define ITEM_STAT_SCRIBING 123
  348. #define ITEM_STAT_SCULPTING 124
  349. #define ITEM_STAT_SLASHING 125
  350. #define ITEM_STAT_SUBJUGATION 126
  351. #define ITEM_STAT_SWIMMING 127
  352. #define ITEM_STAT_TAILORING 128
  353. #define ITEM_STAT_TINKERING 129
  354. #define ITEM_STAT_TRANSMUTING 130
  355. #define ITEM_STAT_TRAPPING 131
  356. #define ITEM_STAT_WEAPON_SKILLS 132
  357. #define ITEM_STAT_VS_PHYSICAL 200
  358. #define ITEM_STAT_VS_HEAT 201 //elemental
  359. #define ITEM_STAT_VS_POISON 202 //noxious
  360. #define ITEM_STAT_VS_MAGIC 203 //arcane
  361. #define ITEM_STAT_VS_DROWNING 210
  362. #define ITEM_STAT_VS_FALLING 211
  363. #define ITEM_STAT_VS_PAIN 212
  364. #define ITEM_STAT_VS_MELEE 213
  365. #define ITEM_STAT_VS_SLASH 204
  366. #define ITEM_STAT_VS_CRUSH 205
  367. #define ITEM_STAT_VS_PIERCE 206
  368. //#define ITEM_STAT_VS_HEAT 203 //just so no build error
  369. #define ITEM_STAT_VS_COLD 207
  370. //#define ITEM_STAT_VS_MAGIC 205 //just so no build error
  371. #define ITEM_STAT_VS_MENTAL 208
  372. #define ITEM_STAT_VS_DIVINE 209
  373. #define ITEM_STAT_VS_DISEASE 214
  374. //#define ITEM_STAT_VS_POISON 209 //just so no build error
  375. //#define ITEM_STAT_VS_DROWNING 210 //just so no build error
  376. //#define ITEM_STAT_VS_FALLING 211 //just so no build error
  377. //#define ITEM_STAT_VS_PAIN 212 //just so no build error
  378. //#define ITEM_STAT_VS_MELEE 213 //just so no build error
  379. #define ITEM_STAT_DMG_SLASH 300
  380. #define ITEM_STAT_DMG_CRUSH 301
  381. #define ITEM_STAT_DMG_PIERCE 302
  382. #define ITEM_STAT_DMG_HEAT 303
  383. #define ITEM_STAT_DMG_COLD 304
  384. #define ITEM_STAT_DMG_MAGIC 305
  385. #define ITEM_STAT_DMG_MENTAL 306
  386. #define ITEM_STAT_DMG_DIVINE 307
  387. #define ITEM_STAT_DMG_DISEASE 308
  388. #define ITEM_STAT_DMG_POISON 309
  389. #define ITEM_STAT_DMG_DROWNING 310
  390. #define ITEM_STAT_DMG_FALLING 311
  391. #define ITEM_STAT_DMG_PAIN 312
  392. #define ITEM_STAT_DMG_MELEE 313
  393. #define ITEM_STAT_DEFLECTIONCHANCE 400 //just so no build error
  394. #define ITEM_STAT_HEALTH 500
  395. #define ITEM_STAT_POWER 501
  396. #define ITEM_STAT_CONCENTRATION 502
  397. #define ITEM_STAT_SAVAGERY 503
  398. //this is the master stat list you should be using and names match what is in census. it is based off of DoV. the comment is what is displayed on items when examining
  399. //the itemstats table will maintain the custom lists per expansion
  400. // emu # is digits after the 6
  401. #define ITEM_STAT_HPREGEN 600 //Health Regeneration
  402. #define ITEM_STAT_MANAREGEN 601 //Power Regeneration
  403. #define ITEM_STAT_HPREGENPPT 602 //Out-of-Combat Health Regeneration %%?
  404. #define ITEM_STAT_MPREGENPPT 603 //Out-of-Combat Power Regeneration %%?
  405. #define ITEM_STAT_COMBATHPREGENPPT 604 //In-Combat Health Regeneration %%?
  406. #define ITEM_STAT_COMBATMPREGENPPT 605 //In-Combat Power Regeneration %%?
  407. #define ITEM_STAT_MAXHP 606 //Max Health
  408. #define ITEM_STAT_MAXHPPERC 607
  409. #define ITEM_STAT_MAXHPPERCFINAL 608 //% Max Mealth
  410. #define ITEM_STAT_SPEED 609 //Out of Combat Run Speed
  411. #define ITEM_STAT_SLOW 610 //Slow
  412. #define ITEM_STAT_MOUNTSPEED 611 //Ground Mount Speed
  413. #define ITEM_STAT_MOUNTAIRSPEED 612 //Mount Air Speed
  414. #define ITEM_STAT_LEAPSPEED 613
  415. #define ITEM_STAT_LEAPTIME 614
  416. #define ITEM_STAT_GLIDEEFFICIENCY 615
  417. #define ITEM_STAT_OFFENSIVESPEED 616 //In Combat Run Speed
  418. #define ITEM_STAT_ATTACKSPEED 617 //% Attack Speed
  419. #define ITEM_STAT_SPELLWEAPONATTACKSPEED 618
  420. #define ITEM_STAT_MAXMANA 619 //Max Power
  421. #define ITEM_STAT_MAXMANAPERC 620 //% Max Power
  422. #define ITEM_STAT_MAXATTPERC 621 //All Attributes //is this a percent or is it a stat change
  423. #define ITEM_STAT_BLURVISION 622 //Blurs Vision
  424. #define ITEM_STAT_MAGICLEVELIMMUNITY 623 //Magic Level Immunity
  425. #define ITEM_STAT_HATEGAINMOD 624 //% Hate Gain
  426. #define ITEM_STAT_COMBATEXPMOD 625 //Combat XP Gain
  427. #define ITEM_STAT_TRADESKILLEXPMOD 626 //Tradeskill XP Gain
  428. #define ITEM_STAT_ACHIEVEMENTEXPMOD 627 //AA XP Gain
  429. #define ITEM_STAT_SIZEMOD 628 //Size
  430. #define ITEM_STAT_DPS 629 //%Damage Per Second
  431. #define ITEM_STAT_SPELLWEAPONDPS 630 //%Damage Per Second
  432. #define ITEM_STAT_STEALTH 631 //Stealth
  433. #define ITEM_STAT_INVIS 632 //Invisibility
  434. #define ITEM_STAT_SEESTEALTH 633 //See Stealth
  435. #define ITEM_STAT_SEEINVIS 634 //See Invisible
  436. #define ITEM_STAT_EFFECTIVELEVELMOD 635 //Effective Level
  437. #define ITEM_STAT_RIPOSTECHANCE 636 //%Extra Riposte Chance
  438. #define ITEM_STAT_PARRYCHANCE 637 //%Extra Parry Chance
  439. #define ITEM_STAT_DODGECHANCE 638 //%Extra Dodge Chance
  440. #define ITEM_STAT_AEAUTOATTACKCHANCE 639 //% AE Autoattck Chance
  441. #define ITEM_STAT_SPELLWEAPONAEAUTOATTACKCHANCE 640 //
  442. #define ITEM_STAT_MULTIATTACKCHANCE 641 //% Multi Attack Chance // inconsistant with db
  443. #define ITEM_STAT_PVPDOUBLEATTACKCHANCE 642
  444. #define ITEM_STAT_SPELLWEAPONDOUBLEATTACKCHANCE 643 // missing in db
  445. #define ITEM_STAT_PVPSPELLWEAPONDOUBLEATTACKCHANCE 644
  446. #define ITEM_STAT_SPELLMULTIATTACKCHANCE 645 //% Spell Multi Atttack Chance
  447. #define ITEM_STAT_PVPSPELLDOUBLEATTACKCHANCE 646
  448. #define ITEM_STAT_FLURRY 647 //%Flurry
  449. #define ITEM_STAT_SPELLWEAPONFLURRY 648
  450. #define ITEM_STAT_MELEEDAMAGEMULTIPLIER 649 //Melee Damage Multiplier
  451. #define ITEM_STAT_EXTRAHARVESTCHANCE 650 //Extra Harvest Chance
  452. #define ITEM_STAT_EXTRASHIELDBLOCKCHANCE 651 //Block Chance
  453. #define ITEM_STAT_ITEMHPREGENPPT 652 //In-Combat Health Regeneration
  454. #define ITEM_STAT_ITEMPPREGENPPT 653 //In-Combat Power Regeneration
  455. #define ITEM_STAT_MELEECRITCHANCE 654 //% Crit Chance
  456. #define ITEM_STAT_CRITAVOIDANCE 655 //% Crit Avoidance
  457. #define ITEM_STAT_BENEFICIALCRITCHANCE 656 //% Beneficial Crit Chance
  458. #define ITEM_STAT_CRITBONUS 657 //% Crit Bonus
  459. #define ITEM_STAT_PVPCRITBONUS 658
  460. #define ITEM_STAT_POTENCY 659 //% Potency
  461. #define ITEM_STAT_PVPPOTENCY 660
  462. #define ITEM_STAT_UNCONSCIOUSHPMOD 661 //Unconcious Health
  463. #define ITEM_STAT_ABILITYREUSESPEED 662 //% Ability Reuse Speed
  464. #define ITEM_STAT_ABILITYRECOVERYSPEED 663 //% Ability Recovery Speed
  465. #define ITEM_STAT_ABILITYCASTINGSPEED 664 //% Ability Casting Speed
  466. #define ITEM_STAT_SPELLREUSESPEED 665 //% Spell Reuse Speed
  467. #define ITEM_STAT_MELEEWEAPONRANGE 666 //% Melee Weapon Range Increase
  468. #define ITEM_STAT_RANGEDWEAPONRANGE 667 //% Ranged Weapon Range Increase
  469. #define ITEM_STAT_FALLINGDAMAGEREDUCTION 668 //Fallling Damage Reduction
  470. #define ITEM_STAT_RIPOSTEDAMAGE 669 //% Riposte Damage
  471. #define ITEM_STAT_MINIMUMDEFLECTIONCHANCE 670 //% Minimum Block Chance
  472. #define ITEM_STAT_MOVEMENTWEAVE 671 //Movement Weave
  473. #define ITEM_STAT_COMBATHPREGEN 672 //Combat HP Regen
  474. #define ITEM_STAT_COMBATMANAREGEN 673 //Combat Mana Regen
  475. #define ITEM_STAT_CONTESTSPEEDBOOST 674 //Contest Only Speed
  476. #define ITEM_STAT_TRACKINGAVOIDANCE 675 //Tracking avoidance
  477. #define ITEM_STAT_STEALTHINVISSPEEDMOD 676 //Movement Bonus whie Stealthed or Invisible
  478. #define ITEM_STAT_LOOT_COIN 677 //Loot Coin
  479. #define ITEM_STAT_ARMORMITIGATIONINCREASE 678 //% Mitigation Increase
  480. #define ITEM_STAT_AMMOCONSERVATION 679 // Ammo Conservation
  481. #define ITEM_STAT_STRIKETHROUGH 680 //Strikethrough
  482. #define ITEM_STAT_STATUSBONUS 681 //Status Bonus
  483. #define ITEM_STAT_ACCURACY 682 //% Accuracy
  484. #define ITEM_STAT_COUNTERSTRIKE 683 //CounterStrike
  485. #define ITEM_STAT_SHIELDBASH 684 //Shield Bash
  486. #define ITEM_STAT_WEAPONDAMAGEBONUS 685 //Weapon Damage Bonus
  487. #define ITEM_STAT_WEAPONDAMAGEBONUSMELEEONLY 686 //additional chance to Riposte
  488. #define ITEM_STAT_ADDITIONALRIPOSTECHANCE 687 //additional chance to Riposte
  489. #define ITEM_STAT_CRITICALMITIGATION 688 //Critical Mitigation
  490. #define ITEM_STAT_PVPTOUGHNESS 689 //Toughness
  491. #define ITEM_STAT_PVPLETHALITY 690 //
  492. #define ITEM_STAT_STAMINABONUS 691 //Stamina Bonus
  493. #define ITEM_STAT_WISDOMMITBONUS 692 //Wisdom Mitigation Bonus
  494. #define ITEM_STAT_HEALRECEIVE 693 //Applied Heals
  495. #define ITEM_STAT_HEALRECEIVEPERC 694 //% Applied Heals
  496. #define ITEM_STAT_PVPCRITICALMITIGATION 695 //PvP Critical Mitigation
  497. #define ITEM_STAT_BASEAVOIDANCEBONUS 696
  498. #define ITEM_STAT_INCOMBATSAVAGERYREGEN 697
  499. #define ITEM_STAT_OUTOFCOMBATSAVAGERYREGEN 698
  500. #define ITEM_STAT_SAVAGERYREGEN 699
  501. #define ITEM_STAT_SAVAGERYGAINMOD 6100
  502. #define ITEM_STAT_MAXSAVAGERYLEVEL 6101
  503. #define ITEM_STAT_SPELLWEAPONDAMAGEBONUS 6102
  504. #define ITEM_STAT_INCOMBATDISSONANCEREGEN 6103
  505. #define ITEM_STAT_OUTOFCOMBATDISSONANCEREGEN 6104
  506. #define ITEM_STAT_DISSONANCEREGEN 6105
  507. #define ITEM_STAT_DISSONANCEGAINMOD 6106
  508. #define ITEM_STAT_AEAUTOATTACKAVOID 6107
  509. #define ITEM_STAT_AGNOSTICDAMAGEBONUS 6108
  510. #define ITEM_STAT_AGNOSTICHEALBONUS 6109
  511. #define ITEM_STAT_TITHEGAIN 6110
  512. #define ITEM_STAT_FERVER 6111
  513. #define ITEM_STAT_RESOLVE 6112
  514. #define ITEM_STAT_COMBATMITIGATION 6113
  515. #define ITEM_STAT_ABILITYMITIGATION 6114
  516. #define ITEM_STAT_MULTIATTACKAVOIDANCE 6115
  517. #define ITEM_STAT_DOUBLECASTAVOIDANCE 6116
  518. #define ITEM_STAT_ABILITYDOUBLECASTAVOIDANCE 6117
  519. #define ITEM_STAT_DAMAGEPERSECONDMITIGATION 6118
  520. #define ITEM_STAT_FERVERMITIGATION 6119
  521. #define ITEM_STAT_FLURRYAVOIDANCE 6120
  522. #define ITEM_STAT_WEAPONDAMAGEBONUSMITIGATION 6121
  523. #define ITEM_STAT_ABILITYDOUBLECASTCHANCE 6122
  524. #define ITEM_STAT_ABILITYMODIFIERMITIGATATION 6123
  525. #define ITEM_STAT_STATUSEARNED 6124
  526. #define ITEM_STAT_SPELL_DAMAGE 700
  527. #define ITEM_STAT_HEAL_AMOUNT 701
  528. #define ITEM_STAT_SPELL_AND_HEAL 702
  529. #define ITEM_STAT_COMBAT_ART_DAMAGE 703
  530. #define ITEM_STAT_SPELL_AND_COMBAT_ART_DAMAGE 704
  531. #define ITEM_STAT_TAUNT_AMOUNT 705
  532. #define ITEM_STAT_TAUNT_AND_COMBAT_ART_DAMAGE 706
  533. #define ITEM_STAT_ABILITY_MODIFIER 707
  534. // Other stats not listed above (not sent from the server), never send these to the client
  535. // using type 8 as it is not used by the client as far as we know
  536. #define ITEM_STAT_DURABILITY_MOD 800
  537. #define ITEM_STAT_DURABILITY_ADD 801
  538. #define ITEM_STAT_PROGRESS_ADD 802
  539. #define ITEM_STAT_PROGRESS_MOD 803
  540. #define ITEM_STAT_SUCCESS_MOD 804
  541. #define ITEM_STAT_CRIT_SUCCESS_MOD 805
  542. #define ITEM_STAT_EX_DURABILITY_MOD 806
  543. #define ITEM_STAT_EX_DURABILITY_ADD 807
  544. #define ITEM_STAT_EX_PROGRESS_MOD 808
  545. #define ITEM_STAT_EX_PROGRESS_ADD 809
  546. #define ITEM_STAT_EX_SUCCESS_MOD 810
  547. #define ITEM_STAT_EX_CRIT_SUCCESS_MOD 811
  548. #define ITEM_STAT_EX_CRIT_FAILURE_MOD 812
  549. #define ITEM_STAT_RARE_HARVEST_CHANCE 813
  550. #define ITEM_STAT_MAX_CRAFTING 814
  551. #define ITEM_STAT_COMPONENT_REFUND 815
  552. #define ITEM_STAT_BOUNTIFUL_HARVEST 816
  553. #define ITEM_STAT_UNCONTESTED_PARRY 850
  554. #define ITEM_STAT_UNCONTESTED_BLOCK 851
  555. #define ITEM_STAT_UNCONTESTED_DODGE 852
  556. #define ITEM_STAT_UNCONTESTED_RIPOSTE 853
  557. #define DISPLAY_FLAG_RED_TEXT 1 // old clients
  558. #define DISPLAY_FLAG_NO_GUILD_STATUS 8
  559. #define DISPLAY_FLAG_NO_BUYBACK 16
  560. #define DISPLAY_FLAG_NOT_FOR_SALE 64
  561. #pragma pack(1)
  562. struct ItemStatsValues{
  563. sint16 str;
  564. sint16 sta;
  565. sint16 agi;
  566. sint16 wis;
  567. sint16 int_;
  568. sint16 vs_slash;
  569. sint16 vs_crush;
  570. sint16 vs_pierce;
  571. sint16 vs_heat;
  572. sint16 vs_cold;
  573. sint16 vs_magic;
  574. sint16 vs_mental;
  575. sint16 vs_divine;
  576. sint16 vs_disease;
  577. sint16 vs_poison;
  578. sint16 health;
  579. sint16 power;
  580. sint8 concentration;
  581. sint16 ability_modifier;
  582. sint16 criticalmitigation;
  583. sint16 extrashieldblockchance;
  584. sint16 beneficialcritchance;
  585. sint16 critbonus;
  586. sint16 potency;
  587. sint16 hategainmod;
  588. sint16 abilityreusespeed;
  589. sint16 abilitycastingspeed;
  590. sint16 abilityrecoveryspeed;
  591. sint16 spellreusespeed;
  592. sint16 spellmultiattackchance;
  593. sint16 dps;
  594. sint16 attackspeed;
  595. sint16 multiattackchance;
  596. sint16 flurry;
  597. sint16 aeautoattackchance;
  598. sint16 strikethrough;
  599. sint16 accuracy;
  600. sint16 offensivespeed;
  601. float uncontested_parry;
  602. float uncontested_block;
  603. float uncontested_dodge;
  604. float uncontested_riposte;
  605. };
  606. struct ItemCore{
  607. int32 item_id;
  608. sint32 soe_id;
  609. int32 bag_id;
  610. sint32 inv_slot_id;
  611. sint16 slot_id;
  612. int8 index;
  613. int16 icon;
  614. int16 count;
  615. int8 tier;
  616. int8 num_slots;
  617. int32 unique_id;
  618. int8 num_free_slots;
  619. int16 recommended_level;
  620. };
  621. #pragma pack()
  622. struct ItemStat{
  623. string stat_name;
  624. int8 stat_type;
  625. sint16 stat_subtype;
  626. int16 stat_type_combined;
  627. float value;
  628. };
  629. struct ItemSet{
  630. int32 item_id;
  631. int32 item_crc;
  632. int16 item_icon;
  633. int16 item_stack_size;
  634. int32 item_list_color;
  635. };
  636. struct Classifications{
  637. int32 classification_id; //classifications MJ
  638. string classification_name;
  639. };
  640. struct ItemLevelOverride{
  641. int8 adventure_class;
  642. int8 tradeskill_class;
  643. int16 level;
  644. };
  645. struct ItemClass{
  646. int8 adventure_class;
  647. int8 tradeskill_class;
  648. int16 level;
  649. };
  650. struct ItemAppearance{
  651. int16 type;
  652. int8 red;
  653. int8 green;
  654. int8 blue;
  655. int8 highlight_red;
  656. int8 highlight_green;
  657. int8 highlight_blue;
  658. };
  659. class PlayerItemList;
  660. class Item{
  661. public:
  662. #pragma pack(1)
  663. struct ItemStatString{
  664. EQ2_8BitString stat_string;
  665. };
  666. struct Generic_Info{
  667. int8 show_name;
  668. int8 creator_flag;
  669. int16 item_flags;
  670. int16 item_flags2;
  671. int8 condition;
  672. int32 weight; // num/10
  673. int32 skill_req1;
  674. int32 skill_req2;
  675. int16 skill_min;
  676. int8 item_type; //0=normal, 1=weapon, 2=range, 3=armor, 4=shield, 5=bag, 6=scroll, 7=recipe, 8=food, 9=bauble, 10=house item, 11=thrown, 12=house container, 13=adormnet, 14=??, 16=profile, 17=patter set, 18=item set, 19=book, 20=decoration, 21=dungeon maker, 22=marketplace
  677. int16 appearance_id;
  678. int8 appearance_red;
  679. int8 appearance_green;
  680. int8 appearance_blue;
  681. int8 appearance_highlight_red;
  682. int8 appearance_highlight_green;
  683. int8 appearance_highlight_blue;
  684. int8 collectable;
  685. int32 offers_quest_id;
  686. int32 part_of_quest_id;
  687. int16 max_charges;
  688. int8 display_charges;
  689. int64 adventure_classes;
  690. int64 tradeskill_classes;
  691. int16 adventure_default_level;
  692. int16 tradeskill_default_level;
  693. int8 usable;
  694. int8 harvest;
  695. int8 body_drop;
  696. };
  697. struct Armor_Info {
  698. int16 mitigation_low;
  699. int16 mitigation_high;
  700. };
  701. struct Adornment_Info {
  702. float duration;
  703. int16 item_types;
  704. int16 slot_type;
  705. };
  706. struct Weapon_Info {
  707. int16 wield_type;
  708. int16 damage_low1;
  709. int16 damage_high1;
  710. int16 damage_low2;
  711. int16 damage_high2;
  712. int16 damage_low3;
  713. int16 damage_high3;
  714. int16 delay;
  715. float rating;
  716. };
  717. struct Shield_Info {
  718. Armor_Info armor_info;
  719. };
  720. struct Ranged_Info {
  721. Weapon_Info weapon_info;
  722. int16 range_low;
  723. int16 range_high;
  724. };
  725. struct Bag_Info {
  726. int8 num_slots;
  727. int16 weight_reduction;
  728. };
  729. struct Food_Info{
  730. int8 type; //0=water, 1=food
  731. int8 level;
  732. float duration;
  733. int8 satiation;
  734. };
  735. struct Bauble_Info{
  736. int16 cast;
  737. int16 recovery;
  738. int32 duration;
  739. float recast;
  740. int8 display_slot_optional;
  741. int8 display_cast_time;
  742. int8 display_bauble_type;
  743. float effect_radius;
  744. int32 max_aoe_targets;
  745. int8 display_until_cancelled;
  746. };
  747. struct Book_Info{
  748. int8 language;
  749. EQ2_16BitString author;
  750. EQ2_16BitString title;
  751. };
  752. struct Book_Info_Pages {
  753. int8 page;
  754. EQ2_16BitString page_text;
  755. int8 page_text_valign;
  756. int8 page_text_halign;
  757. };
  758. struct Skill_Info{
  759. int32 spell_id;
  760. int32 spell_tier;
  761. };
  762. struct HouseItem_Info{
  763. int32 status_rent_reduction;
  764. float coin_rent_reduction;
  765. int8 house_only;
  766. };
  767. struct HouseContainer_Info{
  768. int64 allowed_types;
  769. int8 num_slots;
  770. int8 broker_commission;
  771. int8 fence_commission;
  772. };
  773. struct RecipeBook_Info{
  774. vector<string> recipes;
  775. int8 uses;
  776. };
  777. struct ItemSet_Info{
  778. int32 item_id;
  779. int32 item_crc;
  780. int16 item_icon;
  781. int32 item_stack_size;
  782. int32 item_list_color;
  783. };
  784. struct Thrown_Info{
  785. sint32 range;
  786. sint32 damage_modifier;
  787. float hit_bonus;
  788. int32 damage_type;
  789. };
  790. struct ItemEffect{
  791. EQ2_16BitString effect;
  792. int8 percentage;
  793. int8 subbulletflag;
  794. };
  795. struct BookPage {
  796. int8 page;
  797. EQ2_16BitString page_text;
  798. int8 valign;
  799. int8 halign;
  800. };
  801. #pragma pack()
  802. Item();
  803. Item(Item* in_item);
  804. ~Item();
  805. string lowername;
  806. string name;
  807. string description;
  808. int16 stack_count;
  809. int32 sell_price;
  810. int32 sell_status;
  811. int32 max_sell_value;
  812. bool save_needed;
  813. int8 weapon_type;
  814. string adornment;
  815. string creator;
  816. int32 adorn0;
  817. int32 adorn1;
  818. int32 adorn2;
  819. vector<Classifications*>classifications; //classifications MJ
  820. vector<ItemStat*> item_stats;
  821. vector<ItemSet*> item_sets;
  822. vector<ItemStatString*> item_string_stats;
  823. vector<ItemLevelOverride*> item_level_overrides;
  824. vector<ItemEffect*> item_effects;
  825. vector<BookPage*> book_pages;
  826. Generic_Info generic_info;
  827. Weapon_Info* weapon_info;
  828. Ranged_Info* ranged_info;
  829. Armor_Info* armor_info;
  830. Adornment_Info* adornment_info;
  831. Bag_Info* bag_info;
  832. Food_Info* food_info;
  833. Bauble_Info* bauble_info;
  834. Book_Info* book_info;
  835. Book_Info_Pages* book_info_pages;
  836. HouseItem_Info* houseitem_info;
  837. HouseContainer_Info* housecontainer_info;
  838. Skill_Info* skill_info;
  839. RecipeBook_Info* recipebook_info;
  840. ItemSet_Info* itemset_info;
  841. Thrown_Info* thrown_info;
  842. vector<int8> slot_data;
  843. ItemCore details;
  844. int32 spell_id;
  845. int8 spell_tier;
  846. string item_script;
  847. bool no_buy_back;
  848. bool no_sale;
  849. void AddEffect(string effect, int8 percentage, int8 subbulletflag);
  850. void AddBookPage(int8 page, string page_text,int8 valign, int8 halign);
  851. int32 GetMaxSellValue();
  852. void SetMaxSellValue(int32 val);
  853. void SetItem(Item* old_item);
  854. int16 GetOverrideLevel(int8 adventure_class, int8 tradeskill_class);
  855. void AddLevelOverride(int8 adventure_class, int8 tradeskill_class, int16 level);
  856. void AddLevelOverride(ItemLevelOverride* class_);
  857. bool CheckClassLevel(int8 adventure_class, int8 tradeskill_class, int16 level);
  858. bool CheckClass(int8 adventure_class, int8 tradeskill_class);
  859. bool CheckArchetypeAdvClass(int8 adventure_class, map<int8, int16>* adv_class_levels = 0);
  860. bool CheckArchetypeAdvSubclass(int8 adventure_class, map<int8, int16>* adv_class_levels = 0);
  861. bool CheckLevel(int8 adventure_class, int8 tradeskill_class, int16 level);
  862. void SetAppearance(int16 type, int8 red, int8 green, int8 blue, int8 highlight_red, int8 highlight_green, int8 highlight_blue);
  863. void SetAppearance(ItemAppearance* appearance);
  864. void AddStat(ItemStat* in_stat);
  865. bool HasStat(uint32 statID);
  866. void DeleteItemSets();
  867. void AddSet(ItemSet* in_set);
  868. void AddStatString(ItemStatString* in_stat);
  869. void AddStat(int8 type, int16 subtype, float value, char* name = 0);
  870. void AddSet(int32 item_id, int32 item_crc, int16 item_icon, int32 item_stack_size, int32 item_list_color);
  871. void SetWeaponType(int8 type);
  872. int8 GetWeaponType();
  873. bool HasSlot(int8 slot, int8 slot2 = 255);
  874. bool HasAdorn0();
  875. bool HasAdorn1();
  876. bool HasAdorn2();
  877. bool IsNormal();
  878. bool IsWeapon();
  879. bool IsArmor();
  880. bool IsRanged();
  881. bool IsBag();
  882. bool IsFood();
  883. bool IsBauble();
  884. bool IsSkill();
  885. bool IsHouseItem();
  886. bool IsHouseContainer();
  887. bool IsShield();
  888. bool IsAdornment();
  889. bool IsAmmo();
  890. bool IsBook();
  891. bool IsChainArmor();
  892. bool IsClothArmor();
  893. bool IsCollectable();
  894. bool IsCloak();
  895. bool IsCrushWeapon();
  896. bool IsFoodFood();
  897. bool IsFoodDrink();
  898. bool IsJewelry();
  899. bool IsLeatherArmor();
  900. bool IsMisc();
  901. bool IsPierceWeapon();
  902. bool IsPlateArmor();
  903. bool IsPoison();
  904. bool IsPotion();
  905. bool IsRecipeBook();
  906. bool IsSalesDisplay();
  907. bool IsSlashWeapon();
  908. bool IsSpellScroll();
  909. bool IsTinkered();
  910. bool IsTradeskill();
  911. bool IsThrown();
  912. bool IsHarvest();
  913. bool IsBodyDrop();
  914. void SetItemScript(string name);
  915. const char* GetItemScript();
  916. int32 CalculateRepairCost();
  917. string CreateItemLink(int16 client_Version, bool bUseUniqueID=false);
  918. void SetItemType(int8 in_type);
  919. void serialize(PacketStruct* packet, bool show_name = false, Player* player = 0, int16 packet_type = 0, int8 subtype = 0, bool loot_item = false);
  920. EQ2Packet* serialize(int16 version, bool show_name = false, Player* player = 0, bool include_twice = true, int16 packet_type = 0, int8 subtype = 0, bool merchant_item = false, bool loot_item = false);
  921. PacketStruct* PrepareItem(int16 version, bool merchant_item = false, bool loot_item = false);
  922. bool CheckFlag(int32 flag);
  923. bool CheckFlag2(int32 flag);
  924. void AddSlot(int8 slot_id);
  925. void SetSlots(int32 slots);
  926. bool needs_deletion;
  927. };
  928. class MasterItemList{
  929. public:
  930. MasterItemList();
  931. ~MasterItemList();
  932. map<int32,Item*> items;
  933. Item* GetItem(int32 id);
  934. Item* GetItemByName(const char *name);
  935. ItemStatsValues* CalculateItemBonuses(int32 item_id, Entity* entity = 0);
  936. ItemStatsValues* CalculateItemBonuses(Item* desc, Entity* entity = 0, ItemStatsValues* values = 0);
  937. vector<Item*>* GetItems(string name, int32 itype, int32 ltype, int32 btype, int64 minprice, int64 maxprice, int8 minskill, int8 maxskill, string seller, string adornment, int8 mintier, int8 maxtier, int16 minlevel, int16 maxlevel, sint8 itemclass);
  938. vector<Item*>* GetItems(map<string, string> criteria);
  939. void AddItem(Item* item);
  940. bool IsBag(int32 item_id);
  941. void RemoveAll();
  942. static int32 NextUniqueID();
  943. static void ResetUniqueID(int32 new_id);
  944. static int32 next_unique_id;
  945. int32 GetItemStatIDByName(std::string name);
  946. std::string GetItemStatNameByID(int32 id);
  947. void AddMappedItemStat(int32 id, std::string lower_case_name);
  948. map<std::string, int32> mappedItemStatsStrings;
  949. map<int32, std::string> mappedItemStatTypeIDs;
  950. };
  951. class PlayerItemList {
  952. public:
  953. PlayerItemList();
  954. ~PlayerItemList();
  955. // int16 number;
  956. map<int32, Item*> indexed_items;
  957. map<sint32, map<int16, Item*> > items;
  958. // map< int8, Item* > inv_items;
  959. // map< int8, Item* > bank_items;
  960. bool SharedBankAddAllowed(Item* item);
  961. vector<Item*>* GetItemsFromBagID(sint32 bag_id);
  962. vector<Item*>* GetItemsInBag(Item* bag);
  963. Item* GetBag(int8 inventory_slot, bool lock = true);
  964. bool HasItem(int32 id, bool include_bank = false);
  965. Item* GetItemFromIndex(int32 index);
  966. void MoveItem(Item* item, sint32 inv_slot, int16 slot, bool erase_old = true);
  967. bool MoveItem(sint32 to_bag_id, int16 from_index, sint8 to, int8 charges);
  968. Item* GetItemFromUniqueID(int32 item_id, bool include_bank = false, bool lock = true);
  969. Item* GetItemFromID(int32 item_id, int8 count = 0, bool include_bank = false, bool lock = true);
  970. bool AssignItemToFreeSlot(Item* item);
  971. int16 GetNumberOfFreeSlots();
  972. int16 GetNumberOfItems();
  973. bool HasFreeSlot();
  974. bool HasFreeBagSlot();
  975. void DestroyItem(int16 index);
  976. Item* CanStack(Item* item, bool include_bank = false);
  977. void RemoveItem(Item* item, bool delete_item = false);
  978. void AddItem(Item* item);
  979. Item* GetItem(sint32 bag_slot, int16 slot);
  980. EQ2Packet* serialize(Player* player, int16 version);
  981. uchar* xor_packet;
  982. uchar* orig_packet;
  983. map<int32, Item*>* GetAllItems();
  984. bool HasFreeBankSlot();
  985. int8 FindFreeBankSlot();
  986. ///<summary>Get the first free slot and store them in the provided variables</summary>
  987. ///<param name='bag_id'>Will contain the bag id of the first free spot</param>
  988. ///<param name='slot'>Will contain the slot id of the first free slot</param>
  989. ///<returns>True if a free slot was found</returns>
  990. bool GetFirstFreeSlot(sint32* bag_id, sint16* slot);
  991. /// <summary>Get the first free slot in the bank and store it in the provided variables
  992. /// <param name='bag_id'>Will contain the bag id of the first free bank slot</param>
  993. /// <param name='slot'>Will contain the slot id of the first free bank slot</param>
  994. /// <returns>True if a free bank slot was found</returns>
  995. bool GetFirstFreeBankSlot(sint32* bag_id, sint16* slot);
  996. /// <summary></summary>
  997. Item* GetBankBag(int8 inventory_slot, bool lock = true);
  998. /// <summary></summary>
  999. bool AddOverflowItem(Item* item);
  1000. Item* GetOverflowItem();
  1001. void RemoveOverflowItem(Item* item);
  1002. vector<Item*>* GetOverflowItemList();
  1003. private:
  1004. void AddItemToPacket(PacketStruct* packet, Player* player, Item* item, int16 i, bool overflow = false);
  1005. void Stack(Item* orig_item, Item* item);
  1006. Mutex MPlayerItems;
  1007. int16 packet_count;
  1008. vector<Item*> overflowItems;
  1009. };
  1010. class EquipmentItemList{
  1011. public:
  1012. EquipmentItemList();
  1013. EquipmentItemList(const EquipmentItemList& list);
  1014. ~EquipmentItemList();
  1015. Item* items[NUM_SLOTS];
  1016. vector<Item*>* GetAllEquippedItems();
  1017. bool HasItem(int32 id);
  1018. int8 GetNumberOfItems();
  1019. Item* GetItemFromUniqueID(int32 item_id);
  1020. Item* GetItemFromItemID(int32 item_id);
  1021. void SetItem(int8 slot_id, Item* item, bool locked = false);
  1022. void RemoveItem(int8 slot, bool delete_item = false);
  1023. Item* GetItem(int8 slot_id);
  1024. bool AddItem(int8 slot, Item* item);
  1025. bool CheckEquipSlot(Item* tmp, int8 slot);
  1026. bool CanItemBeEquippedInSlot(Item* tmp, int8 slot);
  1027. int8 GetFreeSlot(Item* tmp, int8 slot_id = 255);
  1028. int8 GetSlotByItem(Item* item);
  1029. ItemStatsValues* CalculateEquipmentBonuses(Entity* entity = 0);
  1030. EQ2Packet* serialize(int16 version, Player* player);
  1031. uchar* xor_packet;
  1032. uchar* orig_packet;
  1033. private:
  1034. Mutex MEquipmentItems;
  1035. };
  1036. #endif