packets.hpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef PACKETS_HPP
  4. #define PACKETS_HPP
  5. #pragma warning( push )
  6. #pragma warning( disable : 4200 )
  7. // Required for MESSAGE_SIZE, TALKBOX_MESSAGE_SIZE
  8. #include "map.hpp"
  9. #define MAX_ITEM_OPTIONS MAX_ITEM_RDM_OPT
  10. #define UNAVAILABLE_STRUCT int8 _____unavailable
  11. /* packet size constant for itemlist */
  12. #if MAX_INVENTORY > MAX_STORAGE && MAX_INVENTORY > MAX_CART
  13. #define MAX_ITEMLIST MAX_INVENTORY
  14. #elif MAX_CART > MAX_INVENTORY && MAX_CART > MAX_STORAGE
  15. #define MAX_ITEMLIST MAX_CART
  16. #else
  17. #define MAX_ITEMLIST MAX_STORAGE
  18. #endif
  19. #define MAX_ACHIEVEMENT_DB MAX_ACHIEVEMENT_OBJECTIVES
  20. #define DEFINE_PACKET_HEADER(name, id) const int16 HEADER_##name = id;
  21. #define DEFINE_PACKET_ID(name, id) DEFINE_PACKET_HEADER(name, id)
  22. #include "packets_struct.hpp"
  23. // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
  24. #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
  25. #pragma pack( push, 1 )
  26. #endif
  27. struct PACKET_ZC_PC_PURCHASE_RESULT{
  28. int16 packetType;
  29. uint8 result;
  30. } __attribute__((packed));
  31. struct PACKET_CZ_REQ_MAKINGARROW{
  32. int16 packetType;
  33. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  34. uint32 itemId;
  35. #else
  36. uint16 itemId;
  37. #endif
  38. } __attribute__((packed));
  39. struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST_sub{
  40. uint32 itemId;
  41. uint32 amount;
  42. uint16 tab;
  43. } __attribute__((packed));
  44. struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST{
  45. int16 packetType;
  46. int16 packetLength;
  47. uint16 count;
  48. uint32 kafraPoints;
  49. struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST_sub items[];
  50. } __attribute__((packed));
  51. struct PACKET_CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO{
  52. int16 packetType;
  53. int16 packetLength;
  54. uint32 AID;
  55. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  56. uint32 itemId;
  57. #else
  58. uint16 itemId;
  59. #endif
  60. } __attribute__((packed));
  61. struct PACKET_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO{
  62. int16 packetType;
  63. uint16 result;
  64. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  65. uint32 itemId;
  66. #else
  67. uint16 itemId;
  68. #endif
  69. uint32 price;
  70. } __attribute__((packed));
  71. struct PACKET_CZ_REQ_APPLY_BARGAIN_SALE_ITEM{
  72. int16 packetType;
  73. uint32 AID;
  74. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  75. uint32 itemId;
  76. #else
  77. uint16 itemId;
  78. #endif
  79. uint32 amount;
  80. uint32 startTime;
  81. #if PACKETVER >= 20150520
  82. uint16 hours;
  83. #else
  84. uint8 hours;
  85. #endif
  86. } __attribute__((packed));
  87. struct PACKET_CZ_REQ_REMOVE_BARGAIN_SALE_ITEM{
  88. int16 packetType;
  89. uint32 AID;
  90. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  91. uint32 itemId;
  92. #else
  93. uint16 itemId;
  94. #endif
  95. } __attribute__((packed));
  96. struct PACKET_ZC_NOTIFY_BARGAIN_SALE_SELLING{
  97. int16 packetType;
  98. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  99. uint32 itemId;
  100. #else
  101. uint16 itemId;
  102. #endif
  103. uint32 remainingTime;
  104. } __attribute__((packed));
  105. struct PACKET_ZC_NOTIFY_BARGAIN_SALE_CLOSE{
  106. int16 packetType;
  107. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  108. uint32 itemId;
  109. #else
  110. uint16 itemId;
  111. #endif
  112. } __attribute__((packed));
  113. struct PACKET_ZC_ACK_COUNT_BARGAIN_SALE_ITEM{
  114. int16 packetType;
  115. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  116. uint32 itemId;
  117. #else
  118. uint16 itemId;
  119. #endif
  120. uint32 amount;
  121. } __attribute__((packed));
  122. struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub{
  123. uint32 id;
  124. #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
  125. uint32 itemId;
  126. #else
  127. uint16 itemId;
  128. #endif
  129. int32 amount;
  130. uint8 action;
  131. int32 refine;
  132. int64 uniqueId;
  133. uint8 IsIdentified;
  134. uint16 itemType;
  135. struct EQUIPSLOTINFO slot;
  136. char name[NAME_LENGTH];
  137. char time[NAME_LENGTH];
  138. uint8 attribute;
  139. } __attribute__((packed));
  140. struct PACKET_ZC_ACK_GUILDSTORAGE_LOG{
  141. int16 packetType;
  142. int16 PacketLength;
  143. uint16 result;
  144. uint16 amount;
  145. struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub items[];
  146. } __attribute__((packed));
  147. struct PACKET_CZ_UNCONFIRMED_TSTATUS_UP{
  148. int16 packetType;
  149. int16 type;
  150. int16 amount;
  151. } __attribute__((packed));
  152. struct PACKET_CZ_GUILD_EMBLEM_CHANGE2 {
  153. int16 packetType;
  154. uint32 guild_id;
  155. uint32 version;
  156. } __attribute__((packed));
  157. struct PACKET_ZC_CHANGE_GUILD {
  158. int16 packetType;
  159. #if PACKETVER < 20190724
  160. uint32 aid;
  161. uint32 guild_id;
  162. uint16 emblem_id;
  163. #else
  164. uint32 guild_id;
  165. uint32 emblem_id;
  166. uint32 unknown;
  167. #endif
  168. } __attribute__((packed));
  169. struct PACKET_ZC_BROADCAST{
  170. int16 packetType;
  171. int16 PacketLength;
  172. char message[];
  173. } __attribute__((packed));
  174. struct PACKET_ZC_BROADCAST2{
  175. int16 packetType;
  176. int16 PacketLength;
  177. uint32 fontColor;
  178. int16 fontType;
  179. int16 fontSize;
  180. int16 fontAlign;
  181. int16 fontY;
  182. char message[];
  183. } __attribute__((packed));
  184. struct PACKET_ZC_SOULENERGY{
  185. int16 PacketType;
  186. uint32 AID;
  187. uint16 num;
  188. } __attribute__((packed));
  189. struct PACKET_ZC_ENTRY_QUEUE_INIT {
  190. int16 packetType;
  191. } __attribute__((packed));
  192. struct PACKET_CZ_UNCONFIRMED_RODEX_RETURN{
  193. int16 packetType;
  194. uint32 msgId;
  195. } __attribute__((packed));
  196. struct PACKET_CZ_REQ_STYLE_CLOSE{
  197. int16 packetType;
  198. } __attribute__((packed));
  199. struct PACKET_ZC_SUMMON_HP_INIT {
  200. int16 PacketType;
  201. uint32 summonAID;
  202. uint32 CurrentHP;
  203. uint32 MaxHP;
  204. } __attribute__((packed));
  205. struct PACKET_ZC_SUMMON_HP_UPDATE {
  206. int16 PacketType;
  207. uint32 summonAID;
  208. uint16 VarId;
  209. uint32 Value;
  210. } __attribute__((packed));
  211. struct PACKET_ZC_REPUTE_INFO_sub{
  212. uint64 type;
  213. int64 points;
  214. } __attribute__((packed));
  215. struct PACKET_ZC_REPUTE_INFO{
  216. int16 packetType;
  217. int16 packetLength;
  218. uint8 success;
  219. struct PACKET_ZC_REPUTE_INFO_sub list[];
  220. } __attribute__((packed));
  221. struct PACKET_ZC_OPEN_REFORM_UI{
  222. int16 packetType;
  223. uint32 itemId;
  224. } __attribute__((packed));
  225. struct PACKET_CZ_CLOSE_REFORM_UI{
  226. int16 packetType;
  227. } __attribute__((packed));
  228. struct PACKET_CZ_ITEM_REFORM{
  229. int16 packetType;
  230. uint32 itemId;
  231. uint16 index;
  232. } __attribute__((packed));
  233. struct PACKET_ZC_ITEM_REFORM_ACK{
  234. int16 packetType;
  235. uint16 index;
  236. uint8 result;
  237. } __attribute__((packed));
  238. struct PACKET_ZC_UI_OPEN_V3{
  239. int16 packetType;
  240. uint8 type;
  241. uint64 data;
  242. } __attribute__((packed));
  243. struct PACKET_CZ_REQUEST_RANDOM_ENCHANT{
  244. int16 packetType;
  245. uint64 clientLuaIndex;
  246. uint16 index;
  247. } __attribute__((packed));
  248. struct PACKET_CZ_REQUEST_PERFECT_ENCHANT{
  249. int16 packetType;
  250. uint64 clientLuaIndex;
  251. uint16 index;
  252. uint32 itemId;
  253. } __attribute__((packed));
  254. struct PACKET_CZ_REQUEST_UPGRADE_ENCHANT{
  255. int16 packetType;
  256. uint64 clientLuaIndex;
  257. uint16 index;
  258. uint16 slot;
  259. } __attribute__((packed));
  260. struct PACKET_CZ_REQUEST_RESET_ENCHANT{
  261. int16 packetType;
  262. uint64 clientLuaIndex;
  263. uint16 index;
  264. } __attribute__((packed));
  265. struct PACKET_ZC_RESPONSE_ENCHANT{
  266. int16 packetType;
  267. uint32 messageId;
  268. uint32 enchantItemId;
  269. } __attribute__((packed));
  270. struct PACKET_CZ_CLOSE_UI_ENCHANT{
  271. int16 packetType;
  272. } __attribute__((packed));
  273. struct PACKET_ZC_TARGET_SPIRITS {
  274. int16 packetType;
  275. uint32 GID;
  276. uint32 unknown_val;
  277. uint16 amount;
  278. } __attribute__((packed));
  279. struct PACKET_CZ_USE_PACKAGEITEM{
  280. int16 PacketType;
  281. uint16 index;
  282. uint32 AID;
  283. uint32 itemID;
  284. uint32 BoxIndex;
  285. } __attribute__((packed));
  286. struct PACKET_ZC_FRIENDS_LIST_sub{
  287. uint32 AID;
  288. uint32 CID;
  289. #if !( PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328 ) || PACKETVER >= 20200902
  290. char name[NAME_LENGTH];
  291. #endif
  292. } __attribute__((packed));
  293. struct PACKET_ZC_FRIENDS_LIST{
  294. int16 packetType;
  295. int16 PacketLength;
  296. struct PACKET_ZC_FRIENDS_LIST_sub friends[];
  297. } __attribute__((packed));
  298. struct PACKET_CZ_PC_SELL_ITEMLIST_sub {
  299. uint16 index;
  300. uint16 amount;
  301. } __attribute__((packed));
  302. struct PACKET_CZ_PC_SELL_ITEMLIST {
  303. int16 packetType;
  304. int16 packetLength;
  305. PACKET_CZ_PC_SELL_ITEMLIST_sub sellList[];
  306. } __attribute__((packed));
  307. // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
  308. #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
  309. #pragma pack( pop )
  310. #endif
  311. DEFINE_PACKET_HEADER(ZC_NOTIFY_CHAT, 0x8d)
  312. DEFINE_PACKET_HEADER(ZC_BROADCAST, 0x9a)
  313. DEFINE_PACKET_HEADER(ZC_ITEM_ENTRY, 0x9d)
  314. DEFINE_PACKET_HEADER(ZC_PC_PURCHASE_RESULT, 0xca)
  315. DEFINE_PACKET_HEADER(ZC_MVP_GETTING_ITEM, 0x10a)
  316. DEFINE_PACKET_HEADER(CZ_REQMAKINGITEM, 0x18e)
  317. DEFINE_PACKET_HEADER(ZC_ACK_REQMAKINGITEM, 0x18f)
  318. DEFINE_PACKET_HEADER(CZ_REQ_MAKINGARROW, 0x1ae)
  319. DEFINE_PACKET_HEADER(ZC_BROADCAST2, 0x1c3)
  320. #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
  321. DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0xb66)
  322. #else
  323. DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0x1fd)
  324. #endif
  325. #if PACKETVER >= 20190724
  326. DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x0b47)
  327. #else
  328. DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x1b4)
  329. #endif
  330. DEFINE_PACKET_HEADER(ZC_FRIENDS_LIST, 0x201)
  331. DEFINE_PACKET_HEADER(ZC_NOTIFY_WEAPONITEMLIST, 0x221)
  332. DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223)
  333. DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b)
  334. DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298)
  335. DEFINE_PACKET_HEADER(ZC_CASH_ITEM_DELETE, 0x299)
  336. DEFINE_PACKET_HEADER(ZC_FAILED_TRADE_BUYING_STORE_TO_SELLER, 0x824)
  337. DEFINE_PACKET_HEADER(CZ_SSILIST_ITEM_CLICK, 0x83c)
  338. DEFINE_PACKET_HEADER(ZC_ENTRY_QUEUE_INIT, 0x90e);
  339. DEFINE_PACKET_HEADER(CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ac)
  340. DEFINE_PACKET_HEADER(ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ad)
  341. DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM, 0x9ae)
  342. DEFINE_PACKET_HEADER(CZ_REQ_REMOVE_BARGAIN_SALE_ITEM, 0x9b0)
  343. DEFINE_PACKET_HEADER(ZC_NOTIFY_BARGAIN_SALE_SELLING, 0x9b2)
  344. DEFINE_PACKET_HEADER(ZC_NOTIFY_BARGAIN_SALE_CLOSE, 0x9b3)
  345. DEFINE_PACKET_HEADER(ZC_ACK_COUNT_BARGAIN_SALE_ITEM, 0x9c4)
  346. DEFINE_PACKET_HEADER(ZC_ACK_GUILDSTORAGE_LOG, 0x9da)
  347. DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM2, 0xa3d)
  348. DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE, 0xa46)
  349. DEFINE_PACKET_HEADER(ZC_STYLE_CHANGE_RES, 0xa47)
  350. DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CLOSE, 0xa48)
  351. DEFINE_PACKET_HEADER(ZC_GROUP_ISALIVE, 0xab2)
  352. DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE2, 0xafc)
  353. DEFINE_PACKET_HEADER(ZC_REMOVE_EFFECT, 0x0b0d)
  354. DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_TSTATUS_UP, 0x0b24)
  355. DEFINE_PACKET_HEADER(CZ_GUILD_EMBLEM_CHANGE2, 0x0b46)
  356. DEFINE_PACKET_HEADER(ZC_TARGET_SPIRITS, 0xb68)
  357. DEFINE_PACKET_HEADER(ZC_SOULENERGY, 0xb73)
  358. DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_RODEX_RETURN, 0xb98)
  359. DEFINE_PACKET_HEADER(ZC_SUMMON_HP_INIT, 0xb6b)
  360. DEFINE_PACKET_HEADER(ZC_SUMMON_HP_UPDATE, 0xb6c)
  361. DEFINE_PACKET_HEADER(ZC_REPUTE_INFO, 0x0b8d)
  362. DEFINE_PACKET_HEADER(ZC_OPEN_REFORM_UI, 0x0b8f)
  363. DEFINE_PACKET_HEADER(CZ_CLOSE_REFORM_UI, 0x0b90)
  364. DEFINE_PACKET_HEADER(CZ_ITEM_REFORM, 0x0b91)
  365. DEFINE_PACKET_HEADER(ZC_ITEM_REFORM_ACK, 0x0b92)
  366. DEFINE_PACKET_HEADER(ZC_UI_OPEN_V3, 0x0b9a)
  367. DEFINE_PACKET_HEADER(CZ_REQUEST_RANDOM_ENCHANT, 0x0b9b)
  368. DEFINE_PACKET_HEADER(CZ_REQUEST_PERFECT_ENCHANT, 0x0b9c)
  369. DEFINE_PACKET_HEADER(CZ_REQUEST_UPGRADE_ENCHANT, 0x0b9d)
  370. DEFINE_PACKET_HEADER(CZ_REQUEST_RESET_ENCHANT, 0x0b9e)
  371. DEFINE_PACKET_HEADER(ZC_RESPONSE_ENCHANT, 0x0b9f)
  372. DEFINE_PACKET_HEADER(CZ_CLOSE_UI_ENCHANT, 0x0ba0)
  373. DEFINE_PACKET_HEADER(CZ_USE_PACKAGEITEM, 0x0baf)
  374. DEFINE_PACKET_HEADER(CZ_PC_SELL_ITEMLIST, 0x00c9)
  375. const int16 MAX_INVENTORY_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_normal ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
  376. const int16 MAX_INVENTORY_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_equip ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );
  377. const int16 MAX_STORAGE_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct ZC_STORE_ITEMLIST_NORMAL ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
  378. const int16 MAX_STORAGE_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct ZC_STORE_ITEMLIST_EQUIP ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );
  379. const int16 MAX_GUILD_STORAGE_LOG_PACKET = ( ( INT16_MAX - sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG ) ) / sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub ) );
  380. #undef MAX_ITEM_OPTIONS
  381. #undef UNAVAILABLE_STRUCT
  382. #undef MAX_ITEMLIST
  383. #undef MAX_ACHIEVEMENT_DB
  384. #undef MAX_PACKET_POS
  385. #undef DEFINE_PACKET_HEADER
  386. #pragma warning( pop )
  387. #endif /* PACKETS_HPP */