Guest User

packet.h / game

a guest
Jun 12th, 2023
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 51.12 KB | None | 0 0
  1. #ifndef __INC_PACKET_H__
  2. #define __INC_PACKET_H__
  3. #include "stdafx.h"
  4.  
  5. enum
  6. {
  7. HEADER_CG_HANDSHAKE = 0xff,
  8. HEADER_CG_PONG = 0xfe,
  9. HEADER_CG_TIME_SYNC = 0xfc,
  10. HEADER_CG_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_
  11.  
  12. HEADER_CG_LOGIN = 1,
  13. HEADER_CG_ATTACK = 2,
  14. HEADER_CG_CHAT = 3,
  15. HEADER_CG_CHARACTER_CREATE = 4,
  16. HEADER_CG_CHARACTER_DELETE = 5,
  17. HEADER_CG_CHARACTER_SELECT = 6,
  18. HEADER_CG_MOVE = 7,
  19. HEADER_CG_SYNC_POSITION = 8,
  20. HEADER_CG_ENTERGAME = 10,
  21.  
  22. HEADER_CG_ITEM_USE = 11,
  23. HEADER_CG_ITEM_DROP = 12,
  24. HEADER_CG_ITEM_MOVE = 13,
  25. HEADER_CG_ITEM_PICKUP = 15,
  26.  
  27. HEADER_CG_QUICKSLOT_ADD = 16,
  28. HEADER_CG_QUICKSLOT_DEL = 17,
  29. HEADER_CG_QUICKSLOT_SWAP = 18,
  30. HEADER_CG_WHISPER = 19,
  31. HEADER_CG_ITEM_DROP2 = 20,
  32.  
  33. HEADER_CG_ON_CLICK = 26,
  34. HEADER_CG_EXCHANGE = 27,
  35. HEADER_CG_CHARACTER_POSITION = 28,
  36. HEADER_CG_SCRIPT_ANSWER = 29,
  37. HEADER_CG_QUEST_INPUT_STRING = 30,
  38. HEADER_CG_QUEST_CONFIRM = 31,
  39.  
  40. HEADER_CG_SHOP = 50,
  41. HEADER_CG_FLY_TARGETING = 51,
  42. HEADER_CG_USE_SKILL = 52,
  43. HEADER_CG_ADD_FLY_TARGETING = 53,
  44. HEADER_CG_SHOOT = 54,
  45. HEADER_CG_MYSHOP = 55,
  46.  
  47. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  48. HEADER_CG_OFFLINE_SHOP = 56,
  49. HEADER_CG_MY_OFFLINE_SHOP = 57,
  50. #endif
  51.  
  52. HEADER_CG_ITEM_USE_TO_ITEM = 60,
  53. HEADER_CG_TARGET = 61,
  54.  
  55. HEADER_CG_TEXT = 64,
  56. HEADER_CG_WARP = 65,
  57. HEADER_CG_SCRIPT_BUTTON = 66,
  58. HEADER_CG_MESSENGER = 67,
  59.  
  60. HEADER_CG_MALL_CHECKOUT = 69,
  61. HEADER_CG_SAFEBOX_CHECKIN = 70,
  62. HEADER_CG_SAFEBOX_CHECKOUT = 71,
  63.  
  64. HEADER_CG_PARTY_INVITE = 72,
  65. HEADER_CG_PARTY_INVITE_ANSWER = 73,
  66. HEADER_CG_PARTY_REMOVE = 74,
  67. HEADER_CG_PARTY_SET_STATE = 75,
  68. HEADER_CG_PARTY_USE_SKILL = 76,
  69. HEADER_CG_SAFEBOX_ITEM_MOVE = 77,
  70. HEADER_CG_PARTY_PARAMETER = 78,
  71.  
  72. HEADER_CG_GUILD = 80,
  73. HEADER_CG_ANSWER_MAKE_GUILD = 81,
  74.  
  75. HEADER_CG_FISHING = 82,
  76.  
  77. HEADER_CG_ITEM_GIVE = 83,
  78.  
  79. #ifdef GUILD_ACTIVE
  80. HEADER_CG_FETCH_AVAIL_GUILDS = 89,
  81. #endif
  82.  
  83.  
  84. HEADER_CG_EMPIRE = 90,
  85.  
  86. HEADER_CG_REFINE = 96,
  87.  
  88. HEADER_CG_MARK_LOGIN = 100,
  89. HEADER_CG_MARK_CRCLIST = 101,
  90. HEADER_CG_MARK_UPLOAD = 102,
  91. HEADER_CG_MARK_IDXLIST = 104,
  92.  
  93. HEADER_CG_HACK = 105,
  94. HEADER_CG_CHANGE_NAME = 106,
  95. HEADER_CG_LOGIN2 = 109,
  96. HEADER_CG_DUNGEON = 110,
  97. HEADER_CG_LOGIN3 = 111,
  98.  
  99. HEADER_CG_GUILD_SYMBOL_UPLOAD = 112,
  100. HEADER_CG_SYMBOL_CRC = 113,
  101.  
  102. // SCRIPT_SELECT_ITEM
  103. HEADER_CG_SCRIPT_SELECT_ITEM = 114,
  104. // END_OF_SCRIPT_SELECT_ITEM
  105.  
  106.  
  107.  
  108. #ifdef WEEKLY_RANK_BYLUZER
  109. HEADER_CG_WEEKLY_RANK = 130,
  110. #endif
  111.  
  112. #ifdef ENABLE_SORT_INVEN
  113. SORT_INVEN = 140,
  114. #endif
  115.  
  116. HEADER_CG_DRAGON_SOUL_REFINE = 205,
  117. HEADER_CG_STATE_CHECKER = 206,
  118.  
  119.  
  120. #if defined(__BL_MOVE_CHANNEL__)
  121. HEADER_CG_MOVE_CHANNEL = 229,
  122. #endif
  123.  
  124.  
  125.  
  126. HEADER_CG_CLIENT_VERSION = 0xfd,
  127. HEADER_CG_CLIENT_VERSION2 = 0xf1,
  128.  
  129. /********************************************************/
  130. HEADER_GC_KEY_AGREEMENT_COMPLETED = 0xfa, // _IMPROVED_PACKET_ENCRYPTION_
  131. HEADER_GC_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_
  132. HEADER_GC_TIME_SYNC = 0xfc,
  133. HEADER_GC_PHASE = 0xfd,
  134. HEADER_GC_BINDUDP = 0xfe,
  135. HEADER_GC_HANDSHAKE = 0xff,
  136.  
  137. HEADER_GC_CHARACTER_ADD = 1,
  138. HEADER_GC_CHARACTER_DEL = 2,
  139. HEADER_GC_MOVE = 3,
  140. HEADER_GC_CHAT = 4,
  141. HEADER_GC_SYNC_POSITION = 5,
  142.  
  143. HEADER_GC_LOGIN_SUCCESS = 6,
  144. HEADER_GC_LOGIN_SUCCESS_NEWSLOT = 32,
  145. HEADER_GC_LOGIN_FAILURE = 7,
  146.  
  147. HEADER_GC_CHARACTER_CREATE_SUCCESS = 8,
  148. HEADER_GC_CHARACTER_CREATE_FAILURE = 9,
  149. HEADER_GC_CHARACTER_DELETE_SUCCESS = 10,
  150. HEADER_GC_CHARACTER_DELETE_WRONG_SOCIAL_ID = 11,
  151.  
  152. HEADER_GC_ATTACK = 12,
  153. HEADER_GC_STUN = 13,
  154. HEADER_GC_DEAD = 14,
  155.  
  156. HEADER_GC_MAIN_CHARACTER_OLD = 15,
  157. HEADER_GC_CHARACTER_POINTS = 16,
  158. HEADER_GC_CHARACTER_POINT_CHANGE = 17,
  159. HEADER_GC_CHANGE_SPEED = 18,
  160. HEADER_GC_CHARACTER_UPDATE = 19,
  161.  
  162. HEADER_GC_ITEM_DEL = 20,
  163. HEADER_GC_ITEM_SET = 21,
  164. HEADER_GC_ITEM_USE = 22,
  165. HEADER_GC_ITEM_DROP = 23,
  166. HEADER_GC_ITEM_UPDATE = 25,
  167.  
  168. HEADER_GC_ITEM_GROUND_ADD = 26,
  169. HEADER_GC_ITEM_GROUND_DEL = 27,
  170.  
  171. HEADER_GC_QUICKSLOT_ADD = 28,
  172. HEADER_GC_QUICKSLOT_DEL = 29,
  173. HEADER_GC_QUICKSLOT_SWAP = 30,
  174.  
  175. HEADER_GC_ITEM_OWNERSHIP = 31,
  176.  
  177. HEADER_GC_WHISPER = 34,
  178.  
  179. HEADER_GC_MOTION = 36,
  180. HEADER_GC_PARTS = 37,
  181.  
  182. HEADER_GC_SHOP = 38,
  183. HEADER_GC_SHOP_SIGN = 39,
  184.  
  185. HEADER_GC_DUEL_START = 40,
  186. HEADER_GC_PVP = 41,
  187. HEADER_GC_EXCHANGE = 42,
  188. HEADER_GC_CHARACTER_POSITION = 43,
  189.  
  190. HEADER_GC_PING = 44,
  191. HEADER_GC_SCRIPT = 45,
  192. HEADER_GC_QUEST_CONFIRM = 46,
  193.  
  194. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  195. HEADER_GC_OFFLINE_SHOP = 47,
  196. HEADER_GC_OFFLINE_SHOP_SIGN = 48,
  197. HEADER_GC_GOLD = 49,
  198. #endif
  199.  
  200. HEADER_GC_MOUNT = 61,
  201. HEADER_GC_OWNERSHIP = 62,
  202. HEADER_GC_TARGET = 63,
  203.  
  204. HEADER_GC_WARP = 65,
  205.  
  206. HEADER_GC_ADD_FLY_TARGETING = 69,
  207. HEADER_GC_CREATE_FLY = 70,
  208. HEADER_GC_FLY_TARGETING = 71,
  209. HEADER_GC_SKILL_LEVEL_OLD = 72,
  210. HEADER_GC_MESSENGER = 74,
  211. HEADER_GC_GUILD = 75,
  212. HEADER_GC_SKILL_LEVEL = 76,
  213. HEADER_GC_PARTY_INVITE = 77,
  214. HEADER_GC_PARTY_ADD = 78,
  215. HEADER_GC_PARTY_UPDATE = 79,
  216. HEADER_GC_PARTY_REMOVE = 80,
  217. HEADER_GC_QUEST_INFO = 81,
  218. HEADER_GC_REQUEST_MAKE_GUILD = 82,
  219. HEADER_GC_PARTY_PARAMETER = 83,
  220.  
  221. HEADER_GC_SAFEBOX_SET = 85,
  222. HEADER_GC_SAFEBOX_DEL = 86,
  223. HEADER_GC_SAFEBOX_WRONG_PASSWORD = 87,
  224. HEADER_GC_SAFEBOX_SIZE = 88,
  225.  
  226. HEADER_GC_FISHING = 89,
  227.  
  228. HEADER_GC_EMPIRE = 90,
  229.  
  230. HEADER_GC_PARTY_LINK = 91,
  231. HEADER_GC_PARTY_UNLINK = 92,
  232.  
  233. HEADER_GC_REFINE_INFORMATION_OLD = 95,
  234.  
  235. HEADER_GC_VIEW_EQUIP = 99,
  236.  
  237. HEADER_GC_MARK_BLOCK = 100,
  238. HEADER_GC_MARK_IDXLIST = 102,
  239.  
  240. #ifdef GUILD_ACTIVE
  241. HEADER_GC_GIVE_AVAIL_GUILDS = 103,
  242. #endif
  243.  
  244. HEADER_GC_TIME = 106,
  245. HEADER_GC_CHANGE_NAME = 107,
  246.  
  247. HEADER_GC_DUNGEON = 110,
  248.  
  249. HEADER_GC_WALK_MODE = 111,
  250. HEADER_GC_SKILL_GROUP = 112,
  251. HEADER_GC_MAIN_CHARACTER = 113,
  252.  
  253. HEADER_GC_SEPCIAL_EFFECT = 114,
  254.  
  255. HEADER_GC_NPC_POSITION = 115,
  256.  
  257. HEADER_GC_LOGIN_KEY = 118,
  258. HEADER_GC_REFINE_INFORMATION = 119,
  259. HEADER_GC_CHANNEL = 121,
  260.  
  261. HEADER_GC_TARGET_UPDATE = 123,
  262. HEADER_GC_TARGET_DELETE = 124,
  263. HEADER_GC_TARGET_CREATE = 125,
  264.  
  265. HEADER_GC_AFFECT_ADD = 126,
  266. HEADER_GC_AFFECT_REMOVE = 127,
  267.  
  268. HEADER_GC_MALL_OPEN = 122,
  269. HEADER_GC_MALL_SET = 128,
  270. HEADER_GC_MALL_DEL = 129,
  271.  
  272. HEADER_GC_LAND_LIST = 130,
  273. HEADER_GC_LOVER_INFO = 131,
  274. HEADER_GC_LOVE_POINT_UPDATE = 132,
  275.  
  276. HEADER_GC_SYMBOL_DATA = 133,
  277.  
  278. // MINING
  279. HEADER_GC_DIG_MOTION = 134,
  280. // END_OF_MINING
  281.  
  282. HEADER_GC_DAMAGE_INFO = 135,
  283. HEADER_GC_CHAR_ADDITIONAL_INFO = 136,
  284.  
  285. // SUPPORT_BGM
  286. HEADER_GC_MAIN_CHARACTER3_BGM = 137,
  287. HEADER_GC_MAIN_CHARACTER4_BGM_VOL = 138,
  288. // END_OF_SUPPORT_BGM
  289.  
  290. HEADER_GC_AUTH_SUCCESS = 150,
  291.  
  292. HEADER_GC_PANAMA_PACK = 151,
  293.  
  294. //HYBRID CRYPT
  295. HEADER_GC_HYBRIDCRYPT_KEYS = 152,
  296. HEADER_GC_HYBRIDCRYPT_SDB = 153, // SDB means Supplmentary Data Blocks
  297. //HYBRID CRYPT
  298.  
  299. #ifdef WEEKLY_RANK_BYLUZER
  300. HEADER_GC_WEEKLY_RANK = 165,
  301. HEADER_GC_WEEKLY_PAGE = 166,
  302. #endif
  303.  
  304. // ROULETTE
  305. HEADER_GC_ROULETTE = 200,
  306. // END_ROULETTE
  307.  
  308. HEADER_GC_SPECIFIC_EFFECT = 208,
  309.  
  310. HEADER_GC_DRAGON_SOUL_REFINE = 209,
  311. HEADER_GC_RESPOND_CHANNELSTATUS = 210,
  312.  
  313.  
  314. /////////////////////////////////////////////////////////////////////////////
  315.  
  316. HEADER_GG_LOGIN = 1,
  317. HEADER_GG_LOGOUT = 2,
  318. HEADER_GG_RELAY = 3,
  319. HEADER_GG_NOTICE = 4,
  320. HEADER_GG_SHUTDOWN = 5,
  321. HEADER_GG_GUILD = 6,
  322. HEADER_GG_DISCONNECT = 7,
  323. HEADER_GG_SHOUT = 8,
  324. HEADER_GG_SETUP = 9,
  325. HEADER_GG_MESSENGER_ADD = 10,
  326. HEADER_GG_MESSENGER_REMOVE = 11,
  327. HEADER_GG_FIND_POSITION = 12,
  328. HEADER_GG_WARP_CHARACTER = 13,
  329. HEADER_GG_MESSENGER_MOBILE = 14,
  330. HEADER_GG_GUILD_WAR_ZONE_MAP_INDEX = 15,
  331. HEADER_GG_TRANSFER = 16,
  332. HEADER_GG_XMAS_WARP_SANTA = 17,
  333. HEADER_GG_XMAS_WARP_SANTA_REPLY = 18,
  334. HEADER_GG_RELOAD_CRC_LIST = 19,
  335. HEADER_GG_LOGIN_PING = 20,
  336. HEADER_GG_CHECK_CLIENT_VERSION = 21,
  337. HEADER_GG_BLOCK_CHAT = 22,
  338.  
  339. HEADER_GG_BLOCK_EXCEPTION = 24,
  340. HEADER_GG_SIEGE = 25,
  341. HEADER_GG_MONARCH_NOTICE = 26,
  342. HEADER_GG_MONARCH_TRANSFER = 27,
  343.  
  344. HEADER_GG_CHECK_AWAKENESS = 29,
  345. #ifdef ENABLE_FULL_NOTICE
  346. HEADER_GG_BIG_NOTICE = 30,
  347. #endif
  348.  
  349. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  350. HEADER_GG_REMOVE_OFFLINE_SHOP = 31,
  351. HEADER_GG_CHANGE_OFFLINE_SHOP_TIME = 32,
  352. HEADER_GG_OFFLINE_SHOP_BUY = 33,
  353. #endif
  354.  
  355. };
  356.  
  357. #pragma pack(1)
  358. typedef struct SPacketGGSetup
  359. {
  360. BYTE bHeader;
  361. WORD wPort;
  362. BYTE bChannel;
  363. } TPacketGGSetup;
  364.  
  365. typedef struct SPacketGGLogin
  366. {
  367. BYTE bHeader;
  368. char szName[CHARACTER_NAME_MAX_LEN + 1];
  369. DWORD dwPID;
  370. BYTE bEmpire;
  371. long lMapIndex;
  372. BYTE bChannel;
  373. } TPacketGGLogin;
  374.  
  375. typedef struct SPacketGGLogout
  376. {
  377. BYTE bHeader;
  378. char szName[CHARACTER_NAME_MAX_LEN + 1];
  379. } TPacketGGLogout;
  380.  
  381. typedef struct SPacketGGRelay
  382. {
  383. BYTE bHeader;
  384. char szName[CHARACTER_NAME_MAX_LEN + 1];
  385. long lSize;
  386. } TPacketGGRelay;
  387.  
  388. typedef struct SPacketGGNotice
  389. {
  390. BYTE bHeader;
  391. long lSize;
  392. } TPacketGGNotice;
  393.  
  394. typedef struct SPacketGGMonarchNotice
  395. {
  396. BYTE bHeader;
  397. BYTE bEmpire;
  398. long lSize;
  399. } TPacketGGMonarchNotice;
  400.  
  401. //FORKED_ROAD
  402. typedef struct SPacketGGForkedMapInfo
  403. {
  404. BYTE bHeader;
  405. BYTE bPass;
  406. BYTE bSungzi;
  407. } TPacketGGForkedMapInfo;
  408. //END_FORKED_ROAD
  409. typedef struct SPacketGGShutdown
  410. {
  411. BYTE bHeader;
  412. } TPacketGGShutdown;
  413.  
  414. typedef struct SPacketGGGuild
  415. {
  416. BYTE bHeader;
  417. BYTE bSubHeader;
  418. DWORD dwGuild;
  419. } TPacketGGGuild;
  420.  
  421. enum
  422. {
  423. GUILD_SUBHEADER_GG_CHAT,
  424. GUILD_SUBHEADER_GG_SET_MEMBER_COUNT_BONUS,
  425. };
  426.  
  427. typedef struct SPacketGGGuildChat
  428. {
  429. BYTE bHeader;
  430. BYTE bSubHeader;
  431. DWORD dwGuild;
  432. char szText[CHAT_MAX_LEN + 1];
  433. } TPacketGGGuildChat;
  434.  
  435. typedef struct SPacketGGParty
  436. {
  437. BYTE header;
  438. BYTE subheader;
  439. DWORD pid;
  440. DWORD leaderpid;
  441. } TPacketGGParty;
  442.  
  443. enum
  444. {
  445. PARTY_SUBHEADER_GG_CREATE,
  446. PARTY_SUBHEADER_GG_DESTROY,
  447. PARTY_SUBHEADER_GG_JOIN,
  448. PARTY_SUBHEADER_GG_QUIT,
  449. };
  450.  
  451. typedef struct SPacketGGDisconnect
  452. {
  453. BYTE bHeader;
  454. char szLogin[LOGIN_MAX_LEN + 1];
  455. } TPacketGGDisconnect;
  456.  
  457. typedef struct SPacketGGShout
  458. {
  459. BYTE bHeader;
  460. BYTE bEmpire;
  461. char szText[CHAT_MAX_LEN + 1];
  462. } TPacketGGShout;
  463.  
  464. typedef struct SPacketGGXmasWarpSanta
  465. {
  466. BYTE bHeader;
  467. BYTE bChannel;
  468. long lMapIndex;
  469. } TPacketGGXmasWarpSanta;
  470.  
  471. typedef struct SPacketGGXmasWarpSantaReply
  472. {
  473. BYTE bHeader;
  474. BYTE bChannel;
  475. } TPacketGGXmasWarpSantaReply;
  476.  
  477. typedef struct SMessengerData
  478. {
  479. char szMobile[MOBILE_MAX_LEN + 1];
  480. } TMessengerData;
  481.  
  482. typedef struct SPacketGGMessenger
  483. {
  484. BYTE bHeader;
  485. char szAccount[CHARACTER_NAME_MAX_LEN + 1];
  486. char szCompanion[CHARACTER_NAME_MAX_LEN + 1];
  487. } TPacketGGMessenger;
  488.  
  489. typedef struct SPacketGGMessengerMobile
  490. {
  491. BYTE bHeader;
  492. char szName[CHARACTER_NAME_MAX_LEN + 1];
  493. char szMobile[MOBILE_MAX_LEN + 1];
  494. } TPacketGGMessengerMobile;
  495.  
  496. typedef struct SPacketGGFindPosition
  497. {
  498. BYTE header;
  499. DWORD dwFromPID;
  500. DWORD dwTargetPID;
  501. } TPacketGGFindPosition;
  502.  
  503. typedef struct SPacketGGWarpCharacter
  504. {
  505. BYTE header;
  506. DWORD pid;
  507. long x;
  508. long y;
  509. #ifdef ENABLE_CMD_WARP_IN_DUNGEON
  510. int mapIndex;
  511. #endif
  512. } TPacketGGWarpCharacter;
  513.  
  514. // HEADER_GG_GUILD_WAR_ZONE_MAP_INDEX = 15,
  515.  
  516. typedef struct SPacketGGGuildWarMapIndex
  517. {
  518. BYTE bHeader;
  519. DWORD dwGuildID1;
  520. DWORD dwGuildID2;
  521. long lMapIndex;
  522. } TPacketGGGuildWarMapIndex;
  523.  
  524. typedef struct SPacketGGTransfer
  525. {
  526. BYTE bHeader;
  527. char szName[CHARACTER_NAME_MAX_LEN + 1];
  528. long lX, lY;
  529. } TPacketGGTransfer;
  530.  
  531. typedef struct SPacketGGLoginPing
  532. {
  533. BYTE bHeader;
  534. char szLogin[LOGIN_MAX_LEN + 1];
  535. } TPacketGGLoginPing;
  536.  
  537. typedef struct SPacketGGBlockChat
  538. {
  539. BYTE bHeader;
  540. char szName[CHARACTER_NAME_MAX_LEN + 1];
  541. long lBlockDuration;
  542. } TPacketGGBlockChat;
  543.  
  544.  
  545.  
  546. typedef struct command_text
  547. {
  548. BYTE bHeader;
  549. } TPacketCGText;
  550.  
  551.  
  552. typedef struct command_handshake
  553. {
  554. BYTE bHeader;
  555. DWORD dwHandshake;
  556. DWORD dwTime;
  557. long lDelta;
  558. } TPacketCGHandshake;
  559.  
  560. typedef struct command_login
  561. {
  562. BYTE header;
  563. char login[LOGIN_MAX_LEN + 1];
  564. char passwd[PASSWD_MAX_LEN + 1];
  565. } TPacketCGLogin;
  566.  
  567. typedef struct command_login2
  568. {
  569. BYTE header;
  570. char login[LOGIN_MAX_LEN + 1];
  571. DWORD dwLoginKey;
  572. DWORD adwClientKey[4];
  573. } TPacketCGLogin2;
  574.  
  575. typedef struct command_login3
  576. {
  577. BYTE header;
  578. char login[LOGIN_MAX_LEN + 1];
  579. char passwd[PASSWD_MAX_LEN + 1];
  580. DWORD adwClientKey[4];
  581. } TPacketCGLogin3;
  582.  
  583. typedef struct packet_login_key
  584. {
  585. BYTE bHeader;
  586. DWORD dwLoginKey;
  587. } TPacketGCLoginKey;
  588.  
  589. typedef struct command_player_select
  590. {
  591. BYTE header;
  592. BYTE index;
  593. } TPacketCGPlayerSelect;
  594.  
  595. typedef struct command_player_delete
  596. {
  597. BYTE header;
  598. BYTE index;
  599. char private_code[8];
  600. } TPacketCGPlayerDelete;
  601.  
  602. typedef struct command_player_create
  603. {
  604. BYTE header;
  605. BYTE index;
  606. char name[CHARACTER_NAME_MAX_LEN + 1];
  607. WORD job;
  608. BYTE shape;
  609. BYTE Con;
  610. BYTE Int;
  611. BYTE Str;
  612. BYTE Dex;
  613. } TPacketCGPlayerCreate;
  614.  
  615. typedef struct command_player_create_success
  616. {
  617. BYTE header;
  618. BYTE bAccountCharacterIndex;
  619. TSimplePlayer player;
  620. } TPacketGCPlayerCreateSuccess;
  621.  
  622.  
  623. typedef struct command_attack
  624. {
  625. BYTE bHeader;
  626. BYTE bType;
  627. DWORD dwVID;
  628. BYTE bCRCMagicCubeProcPiece;
  629. BYTE bCRCMagicCubeFilePiece;
  630. } TPacketCGAttack;
  631.  
  632. enum EMoveFuncType
  633. {
  634. FUNC_WAIT,
  635. FUNC_MOVE,
  636. FUNC_ATTACK,
  637. FUNC_COMBO,
  638. FUNC_MOB_SKILL,
  639. _FUNC_SKILL,
  640. FUNC_MAX_NUM,
  641. FUNC_SKILL = 0x80,
  642. };
  643.  
  644.  
  645. typedef struct command_move
  646. {
  647. BYTE bHeader;
  648. BYTE bFunc;
  649. BYTE bArg;
  650. BYTE bRot;
  651. long lX;
  652. long lY;
  653. DWORD dwTime;
  654. } TPacketCGMove;
  655.  
  656. typedef struct command_sync_position_element
  657. {
  658. DWORD dwVID;
  659. long lX;
  660. long lY;
  661. } TPacketCGSyncPositionElement;
  662.  
  663.  
  664. typedef struct command_sync_position
  665. {
  666. BYTE bHeader;
  667. WORD wSize;
  668. } TPacketCGSyncPosition;
  669.  
  670.  
  671. typedef struct command_chat
  672. {
  673. BYTE header;
  674. WORD size;
  675. BYTE type;
  676. } TPacketCGChat;
  677.  
  678.  
  679. typedef struct command_whisper
  680. {
  681. BYTE bHeader;
  682. WORD wSize;
  683. char szNameTo[CHARACTER_NAME_MAX_LEN + 1];
  684. } TPacketCGWhisper;
  685.  
  686. typedef struct command_entergame
  687. {
  688. BYTE header;
  689. } TPacketCGEnterGame;
  690.  
  691. typedef struct command_item_use
  692. {
  693. BYTE header;
  694. TItemPos Cell;
  695. } TPacketCGItemUse;
  696.  
  697. typedef struct command_item_use_to_item
  698. {
  699. BYTE header;
  700. TItemPos Cell;
  701. TItemPos TargetCell;
  702. } TPacketCGItemUseToItem;
  703.  
  704. typedef struct command_item_drop
  705. {
  706. BYTE header;
  707. TItemPos Cell;
  708. DWORD gold;
  709. } TPacketCGItemDrop;
  710.  
  711. typedef struct command_item_drop2
  712. {
  713. BYTE header;
  714. TItemPos Cell;
  715. DWORD gold;
  716. BYTE count;
  717. } TPacketCGItemDrop2;
  718.  
  719. typedef struct command_item_move
  720. {
  721. BYTE header;
  722. TItemPos Cell;
  723. TItemPos CellTo;
  724. BYTE count;
  725. } TPacketCGItemMove;
  726.  
  727. #ifdef ENABLE_SORT_INVEN
  728. typedef struct sort_inven
  729. {
  730. BYTE header;
  731. BYTE option;
  732. } TPacketCGSortInven;
  733. #endif
  734.  
  735.  
  736. typedef struct command_item_pickup
  737. {
  738. BYTE header;
  739. DWORD vid;
  740. } TPacketCGItemPickup;
  741.  
  742. typedef struct command_quickslot_add
  743. {
  744. BYTE header;
  745. BYTE pos;
  746. TQuickslot slot;
  747. } TPacketCGQuickslotAdd;
  748.  
  749. typedef struct command_quickslot_del
  750. {
  751. BYTE header;
  752. BYTE pos;
  753. } TPacketCGQuickslotDel;
  754.  
  755. typedef struct command_quickslot_swap
  756. {
  757. BYTE header;
  758. BYTE pos;
  759. BYTE change_pos;
  760. } TPacketCGQuickslotSwap;
  761.  
  762. enum
  763. {
  764. SHOP_SUBHEADER_CG_END,
  765. SHOP_SUBHEADER_CG_BUY,
  766. SHOP_SUBHEADER_CG_SELL,
  767. SHOP_SUBHEADER_CG_SELL2
  768. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  769. ,SHOP_SUBHEADER_CG_ADD_ITEM,
  770. SHOP_SUBHEADER_CG_REMOVE_ITEM,
  771. SHOP_SUBHEADER_CG_DESTROY_OFFLINE_SHOP,
  772. SHOP_SUBHEADER_CG_REFRESH,
  773. SHOP_SUBHEADER_CG_REFRESH_MONEY,
  774. SHOP_SUBHEADER_CG_WITHDRAW_MONEY,
  775. #endif
  776. };
  777.  
  778. typedef struct command_shop_buy
  779. {
  780. BYTE count;
  781. } TPacketCGShopBuy;
  782.  
  783. #if defined(__BL_MOVE_CHANNEL__)
  784. typedef struct command_move_channel
  785. {
  786. BYTE header;
  787. BYTE channel;
  788. } TPacketCGMoveChannel;
  789. #endif
  790.  
  791. typedef struct command_shop_sell
  792. {
  793. BYTE pos;
  794. BYTE count;
  795. } TPacketCGShopSell;
  796.  
  797. typedef struct command_shop
  798. {
  799. BYTE header;
  800. BYTE subheader;
  801. } TPacketCGShop;
  802.  
  803. typedef struct command_on_click
  804. {
  805. BYTE header;
  806. DWORD vid;
  807. } TPacketCGOnClick;
  808.  
  809. enum
  810. {
  811. EXCHANGE_SUBHEADER_CG_START, /* arg1 == vid of target character */
  812. EXCHANGE_SUBHEADER_CG_ITEM_ADD, /* arg1 == position of item */
  813. EXCHANGE_SUBHEADER_CG_ITEM_DEL, /* arg1 == position of item */
  814. EXCHANGE_SUBHEADER_CG_ELK_ADD, /* arg1 == amount of gold */
  815. EXCHANGE_SUBHEADER_CG_ACCEPT, /* arg1 == not used */
  816. EXCHANGE_SUBHEADER_CG_CANCEL, /* arg1 == not used */
  817. };
  818.  
  819. typedef struct command_exchange
  820. {
  821. BYTE header;
  822. BYTE sub_header;
  823. long long arg1;
  824. BYTE arg2;
  825. TItemPos Pos;
  826. } TPacketCGExchange;
  827.  
  828. typedef struct command_position
  829. {
  830. BYTE header;
  831. BYTE position;
  832. } TPacketCGPosition;
  833.  
  834. typedef struct command_script_answer
  835. {
  836. BYTE header;
  837. BYTE answer;
  838. //char file[32 + 1];
  839. //BYTE answer[16 + 1];
  840. } TPacketCGScriptAnswer;
  841.  
  842.  
  843. typedef struct command_script_button
  844. {
  845. BYTE header;
  846. unsigned int idx;
  847. } TPacketCGScriptButton;
  848.  
  849. typedef struct command_quest_input_string
  850. {
  851. BYTE header;
  852. char msg[64+1];
  853. } TPacketCGQuestInputString;
  854.  
  855. typedef struct command_quest_confirm
  856. {
  857. BYTE header;
  858. BYTE answer;
  859. DWORD requestPID;
  860. } TPacketCGQuestConfirm;
  861.  
  862.  
  863. typedef struct packet_quest_confirm
  864. {
  865. BYTE header;
  866. char msg[64+1];
  867. long timeout;
  868. DWORD requestPID;
  869. } TPacketGCQuestConfirm;
  870.  
  871. typedef struct packet_handshake
  872. {
  873. BYTE bHeader;
  874. DWORD dwHandshake;
  875. DWORD dwTime;
  876. long lDelta;
  877. } TPacketGCHandshake;
  878.  
  879. enum EPhase
  880. {
  881. PHASE_CLOSE,
  882. PHASE_HANDSHAKE,
  883. PHASE_LOGIN,
  884. PHASE_SELECT,
  885. PHASE_LOADING,
  886. PHASE_GAME,
  887. PHASE_DEAD,
  888.  
  889. PHASE_CLIENT_CONNECTING,
  890. PHASE_DBCLIENT,
  891. PHASE_P2P,
  892. PHASE_AUTH,
  893. };
  894.  
  895. typedef struct packet_phase
  896. {
  897. BYTE header;
  898. BYTE phase;
  899. } TPacketGCPhase;
  900.  
  901. typedef struct packet_bindudp
  902. {
  903. BYTE header;
  904. DWORD addr;
  905. WORD port;
  906. } TPacketGCBindUDP;
  907.  
  908. enum
  909. {
  910. LOGIN_FAILURE_ALREADY = 1,
  911. LOGIN_FAILURE_ID_NOT_EXIST = 2,
  912. LOGIN_FAILURE_WRONG_PASS = 3,
  913. LOGIN_FAILURE_FALSE = 4,
  914. LOGIN_FAILURE_NOT_TESTOR = 5,
  915. LOGIN_FAILURE_NOT_TEST_TIME = 6,
  916. LOGIN_FAILURE_FULL = 7
  917. };
  918.  
  919. typedef struct packet_login_success
  920. {
  921. BYTE bHeader;
  922. TSimplePlayer players[PLAYER_PER_ACCOUNT];
  923. DWORD guild_id[PLAYER_PER_ACCOUNT];
  924. char guild_name[PLAYER_PER_ACCOUNT][GUILD_NAME_MAX_LEN+1];
  925.  
  926. DWORD handle;
  927. DWORD random_key;
  928. } TPacketGCLoginSuccess;
  929.  
  930. typedef struct packet_auth_success
  931. {
  932. BYTE bHeader;
  933. DWORD dwLoginKey;
  934. BYTE bResult;
  935. } TPacketGCAuthSuccess;
  936.  
  937. typedef struct packet_login_failure
  938. {
  939. BYTE header;
  940. char szStatus[ACCOUNT_STATUS_MAX_LEN + 1];
  941. } TPacketGCLoginFailure;
  942.  
  943. typedef struct packet_create_failure
  944. {
  945. BYTE header;
  946. BYTE bType;
  947. } TPacketGCCreateFailure;
  948.  
  949. enum
  950. {
  951. ADD_CHARACTER_STATE_DEAD = (1 << 0),
  952. ADD_CHARACTER_STATE_SPAWN = (1 << 1),
  953. ADD_CHARACTER_STATE_GUNGON = (1 << 2),
  954. ADD_CHARACTER_STATE_KILLER = (1 << 3),
  955. ADD_CHARACTER_STATE_PARTY = (1 << 4),
  956. };
  957.  
  958. enum ECharacterEquipmentPart
  959. {
  960. CHR_EQUIPPART_ARMOR,
  961. CHR_EQUIPPART_WEAPON,
  962. CHR_EQUIPPART_HEAD,
  963. CHR_EQUIPPART_HAIR,
  964. #ifdef ENABLE_ACCE_COSTUME_SYSTEM
  965. CHR_EQUIPPART_ACCE,
  966. #endif
  967. CHR_EQUIPPART_NUM,
  968. };
  969.  
  970. typedef struct packet_add_char
  971. {
  972. BYTE header;
  973. DWORD dwVID;
  974.  
  975. float angle;
  976. long x;
  977. long y;
  978. long z;
  979.  
  980. BYTE bType;
  981. WORD wRaceNum;
  982. BYTE bMovingSpeed;
  983. BYTE bAttackSpeed;
  984.  
  985. BYTE bStateFlag;
  986. DWORD dwAffectFlag[2];
  987. #if defined(__BL_PORTAL_UPDATE__)
  988. int iPortalMinLevelLimit;
  989. int iPortalMaxLevelLimit;
  990. #endif
  991. } TPacketGCCharacterAdd;
  992.  
  993. typedef struct packet_char_additional_info
  994. {
  995. BYTE header;
  996. DWORD dwVID;
  997. char name[CHARACTER_NAME_MAX_LEN + 1];
  998. DWORD awPart[CHR_EQUIPPART_NUM];
  999. BYTE bEmpire;
  1000. DWORD dwGuildID;
  1001. DWORD dwLevel;
  1002. int sAlignment;
  1003. BYTE bPKMode;
  1004. DWORD dwMountVnum;
  1005. } TPacketGCCharacterAdditionalInfo;
  1006.  
  1007. typedef struct packet_update_char
  1008. {
  1009. BYTE header;
  1010. DWORD dwVID;
  1011.  
  1012. DWORD awPart[CHR_EQUIPPART_NUM];
  1013. BYTE bMovingSpeed;
  1014. BYTE bAttackSpeed;
  1015.  
  1016. BYTE bStateFlag;
  1017. DWORD dwAffectFlag[2];
  1018.  
  1019. DWORD dwGuildID;
  1020. int sAlignment;
  1021. BYTE bPKMode;
  1022. DWORD dwMountVnum;
  1023. //WORD wRaceNum;
  1024. } TPacketGCCharacterUpdate;
  1025.  
  1026. typedef struct packet_del_char
  1027. {
  1028. BYTE header;
  1029. DWORD id;
  1030. } TPacketGCCharacterDelete;
  1031.  
  1032. typedef struct packet_chat
  1033. {
  1034. BYTE header;
  1035. WORD size;
  1036. BYTE type;
  1037. DWORD id;
  1038. BYTE bEmpire;
  1039. } TPacketGCChat;
  1040.  
  1041. typedef struct packet_whisper
  1042. {
  1043. BYTE bHeader;
  1044. WORD wSize;
  1045. BYTE bType;
  1046. char szNameFrom[CHARACTER_NAME_MAX_LEN + 1];
  1047. } TPacketGCWhisper;
  1048.  
  1049. typedef struct packet_main_character
  1050. {
  1051. BYTE header;
  1052. DWORD dwVID;
  1053. WORD wRaceNum;
  1054. char szName[CHARACTER_NAME_MAX_LEN + 1];
  1055. long lx, ly, lz;
  1056. BYTE empire;
  1057. BYTE skill_group;
  1058. } TPacketGCMainCharacter;
  1059.  
  1060. // SUPPORT_BGM
  1061. typedef struct packet_main_character3_bgm
  1062. {
  1063. enum
  1064. {
  1065. MUSIC_NAME_LEN = 24,
  1066. };
  1067.  
  1068. BYTE header;
  1069. DWORD dwVID;
  1070. WORD wRaceNum;
  1071. char szChrName[CHARACTER_NAME_MAX_LEN + 1];
  1072. char szBGMName[MUSIC_NAME_LEN + 1];
  1073. long lx, ly, lz;
  1074. BYTE empire;
  1075. BYTE skill_group;
  1076. } TPacketGCMainCharacter3_BGM;
  1077.  
  1078. typedef struct packet_main_character4_bgm_vol
  1079. {
  1080. enum
  1081. {
  1082. MUSIC_NAME_LEN = 24,
  1083. };
  1084.  
  1085. BYTE header;
  1086. DWORD dwVID;
  1087. WORD wRaceNum;
  1088. char szChrName[CHARACTER_NAME_MAX_LEN + 1];
  1089. char szBGMName[MUSIC_NAME_LEN + 1];
  1090. float fBGMVol;
  1091. long lx, ly, lz;
  1092. BYTE empire;
  1093. BYTE skill_group;
  1094. } TPacketGCMainCharacter4_BGM_VOL;
  1095. // END_OF_SUPPORT_BGM
  1096.  
  1097. typedef struct packet_points
  1098. {
  1099. BYTE header;
  1100. long long points[POINT_MAX_NUM];
  1101. } TPacketGCPoints;
  1102.  
  1103. typedef struct packet_skill_level
  1104. {
  1105. BYTE bHeader;
  1106. TPlayerSkill skills[SKILL_MAX_NUM];
  1107. } TPacketGCSkillLevel;
  1108.  
  1109. typedef struct packet_point_change
  1110. {
  1111. int header;
  1112. DWORD dwVID;
  1113. BYTE type;
  1114. long long amount;
  1115. long long value;
  1116. } TPacketGCPointChange;
  1117.  
  1118. typedef struct packet_stun
  1119. {
  1120. BYTE header;
  1121. DWORD vid;
  1122. } TPacketGCStun;
  1123.  
  1124. typedef struct packet_dead
  1125. {
  1126. BYTE header;
  1127. DWORD vid;
  1128. } TPacketGCDead;
  1129.  
  1130. struct TPacketGCItemDelDeprecated
  1131. {
  1132. BYTE header;
  1133. TItemPos Cell;
  1134. DWORD vnum;
  1135. BYTE count;
  1136. long alSockets[ITEM_SOCKET_MAX_NUM];
  1137. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1138. };
  1139.  
  1140. typedef struct packet_item_set
  1141. {
  1142. BYTE header;
  1143. TItemPos Cell;
  1144. DWORD vnum;
  1145. BYTE count;
  1146. DWORD flags;
  1147. DWORD anti_flags;
  1148. bool highlight;
  1149. long alSockets[ITEM_SOCKET_MAX_NUM];
  1150. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1151. } TPacketGCItemSet;
  1152.  
  1153. typedef struct packet_item_del
  1154. {
  1155. BYTE header;
  1156. BYTE pos;
  1157. } TPacketGCItemDel;
  1158.  
  1159. struct packet_item_use
  1160. {
  1161. BYTE header;
  1162. TItemPos Cell;
  1163. DWORD ch_vid;
  1164. DWORD victim_vid;
  1165. DWORD vnum;
  1166. };
  1167.  
  1168. struct packet_item_move
  1169. {
  1170. BYTE header;
  1171. TItemPos Cell;
  1172. TItemPos CellTo;
  1173. };
  1174.  
  1175. typedef struct packet_item_update
  1176. {
  1177. BYTE header;
  1178. TItemPos Cell;
  1179. BYTE count;
  1180. long alSockets[ITEM_SOCKET_MAX_NUM];
  1181. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1182. } TPacketGCItemUpdate;
  1183.  
  1184. typedef struct packet_item_ground_add
  1185. {
  1186. BYTE bHeader;
  1187. long x, y, z;
  1188. DWORD dwVID;
  1189. DWORD dwVnum;
  1190. } TPacketGCItemGroundAdd;
  1191.  
  1192. typedef struct packet_item_ownership
  1193. {
  1194. BYTE bHeader;
  1195. DWORD dwVID;
  1196. char szName[CHARACTER_NAME_MAX_LEN + 1];
  1197. } TPacketGCItemOwnership;
  1198.  
  1199. typedef struct packet_item_ground_del
  1200. {
  1201. BYTE bHeader;
  1202. DWORD dwVID;
  1203. } TPacketGCItemGroundDel;
  1204.  
  1205. struct packet_quickslot_add
  1206. {
  1207. BYTE header;
  1208. BYTE pos;
  1209. TQuickslot slot;
  1210. };
  1211.  
  1212. struct packet_quickslot_del
  1213. {
  1214. BYTE header;
  1215. BYTE pos;
  1216. };
  1217.  
  1218. struct packet_quickslot_swap
  1219. {
  1220. BYTE header;
  1221. BYTE pos;
  1222. BYTE pos_to;
  1223. };
  1224.  
  1225. struct packet_motion
  1226. {
  1227. BYTE header;
  1228. DWORD vid;
  1229. DWORD victim_vid;
  1230. WORD motion;
  1231. };
  1232.  
  1233. enum EPacketShopSubHeaders
  1234. {
  1235. SHOP_SUBHEADER_GC_START,
  1236. SHOP_SUBHEADER_GC_END,
  1237. SHOP_SUBHEADER_GC_UPDATE_ITEM,
  1238. SHOP_SUBHEADER_GC_UPDATE_PRICE,
  1239. SHOP_SUBHEADER_GC_OK,
  1240. SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY,
  1241. SHOP_SUBHEADER_GC_SOLDOUT,
  1242. SHOP_SUBHEADER_GC_INVENTORY_FULL,
  1243. SHOP_SUBHEADER_GC_INVALID_POS,
  1244. SHOP_SUBHEADER_GC_SOLD_OUT,
  1245. SHOP_SUBHEADER_GC_START_EX,
  1246. SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY_EX,
  1247. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  1248. SHOP_SUBHEADER_GC_UPDATE_ITEM2,
  1249. SHOP_SUBHEADER_GC_REFRESH_MONEY,
  1250. #endif
  1251. };
  1252.  
  1253. struct packet_shop_item
  1254. {
  1255. DWORD vnum;
  1256. long long price;
  1257. BYTE count;
  1258. BYTE display_pos;
  1259. long alSockets[ITEM_SOCKET_MAX_NUM];
  1260. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1261. };
  1262.  
  1263. typedef struct packet_shop_start
  1264. {
  1265. DWORD owner_vid;
  1266. struct packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM];
  1267. } TPacketGCShopStart;
  1268.  
  1269. typedef struct packet_shop_start_ex
  1270. {
  1271. typedef struct sub_packet_shop_tab
  1272. {
  1273. char name[SHOP_TAB_NAME_MAX];
  1274. BYTE coin_type;
  1275. packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM];
  1276. } TSubPacketShopTab;
  1277. DWORD owner_vid;
  1278. BYTE shop_tab_count;
  1279. } TPacketGCShopStartEx;
  1280.  
  1281. typedef struct packet_shop_update_item
  1282. {
  1283. BYTE pos;
  1284. struct packet_shop_item item;
  1285. } TPacketGCShopUpdateItem;
  1286.  
  1287. typedef struct packet_shop_update_price
  1288. {
  1289. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  1290. BYTE bPos;
  1291. #endif
  1292. long long iPrice;
  1293. } TPacketGCShopUpdatePrice;
  1294.  
  1295. typedef struct packet_shop
  1296. {
  1297. BYTE header;
  1298. WORD size;
  1299. BYTE subheader;
  1300. } TPacketGCShop;
  1301.  
  1302. struct packet_exchange
  1303. {
  1304. BYTE header;
  1305. BYTE sub_header;
  1306. BYTE is_me;
  1307. long long arg1; // vnum
  1308. TItemPos arg2; // cell
  1309. DWORD arg3; // count
  1310. long alSockets[ITEM_SOCKET_MAX_NUM];
  1311. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1312. };
  1313.  
  1314. enum EPacketTradeSubHeaders
  1315. {
  1316. EXCHANGE_SUBHEADER_GC_START, /* arg1 == vid */
  1317. EXCHANGE_SUBHEADER_GC_ITEM_ADD, /* arg1 == vnum arg2 == pos arg3 == count */
  1318. EXCHANGE_SUBHEADER_GC_ITEM_DEL,
  1319. EXCHANGE_SUBHEADER_GC_GOLD_ADD, /* arg1 == gold */
  1320. EXCHANGE_SUBHEADER_GC_ACCEPT, /* arg1 == accept */
  1321. EXCHANGE_SUBHEADER_GC_END, /* arg1 == not used */
  1322. EXCHANGE_SUBHEADER_GC_ALREADY, /* arg1 == not used */
  1323. EXCHANGE_SUBHEADER_GC_LESS_GOLD, /* arg1 == not used */
  1324. };
  1325.  
  1326. struct packet_position
  1327. {
  1328. BYTE header;
  1329. DWORD vid;
  1330. BYTE position;
  1331. };
  1332.  
  1333. typedef struct packet_ping
  1334. {
  1335. BYTE header;
  1336. } TPacketGCPing;
  1337.  
  1338. struct packet_script
  1339. {
  1340. BYTE header;
  1341. WORD size;
  1342. BYTE skin;
  1343. WORD src_size;
  1344. #ifdef ENABLE_QUEST_CATEGORY
  1345. BYTE quest_flag;
  1346. #endif
  1347. };
  1348.  
  1349. typedef struct packet_change_speed
  1350. {
  1351. BYTE header;
  1352. DWORD vid;
  1353. WORD moving_speed;
  1354. } TPacketGCChangeSpeed;
  1355.  
  1356. struct packet_mount
  1357. {
  1358. BYTE header;
  1359. DWORD vid;
  1360. DWORD mount_vid;
  1361. BYTE pos;
  1362. DWORD x, y;
  1363. };
  1364.  
  1365. typedef struct packet_move
  1366. {
  1367. BYTE bHeader;
  1368. BYTE bFunc;
  1369. BYTE bArg;
  1370. BYTE bRot;
  1371. DWORD dwVID;
  1372. long lX;
  1373. long lY;
  1374. DWORD dwTime;
  1375. DWORD dwDuration;
  1376. } TPacketGCMove;
  1377.  
  1378.  
  1379. typedef struct packet_ownership
  1380. {
  1381. BYTE bHeader;
  1382. DWORD dwOwnerVID;
  1383. DWORD dwVictimVID;
  1384. } TPacketGCOwnership;
  1385.  
  1386.  
  1387. typedef struct packet_sync_position_element
  1388. {
  1389. DWORD dwVID;
  1390. long lX;
  1391. long lY;
  1392. } TPacketGCSyncPositionElement;
  1393.  
  1394.  
  1395. typedef struct packet_sync_position
  1396. {
  1397. BYTE bHeader;
  1398. WORD wSize;
  1399. } TPacketGCSyncPosition;
  1400.  
  1401. typedef struct packet_fly
  1402. {
  1403. BYTE bHeader;
  1404. BYTE bType;
  1405. DWORD dwStartVID;
  1406. DWORD dwEndVID;
  1407. } TPacketGCCreateFly;
  1408.  
  1409. typedef struct command_fly_targeting
  1410. {
  1411. BYTE bHeader;
  1412. DWORD dwTargetVID;
  1413. long x, y;
  1414. } TPacketCGFlyTargeting;
  1415.  
  1416. typedef struct packet_fly_targeting
  1417. {
  1418. BYTE bHeader;
  1419. DWORD dwShooterVID;
  1420. DWORD dwTargetVID;
  1421. long x, y;
  1422. } TPacketGCFlyTargeting;
  1423.  
  1424. typedef struct packet_shoot
  1425. {
  1426. BYTE bHeader;
  1427. BYTE bType;
  1428. } TPacketCGShoot;
  1429.  
  1430. typedef struct packet_duel_start
  1431. {
  1432. BYTE header;
  1433. WORD wSize;
  1434. } TPacketGCDuelStart;
  1435.  
  1436. enum EPVPModes
  1437. {
  1438. PVP_MODE_NONE,
  1439. PVP_MODE_AGREE,
  1440. PVP_MODE_FIGHT,
  1441. PVP_MODE_REVENGE
  1442. };
  1443.  
  1444. typedef struct packet_pvp
  1445. {
  1446. BYTE bHeader;
  1447. DWORD dwVIDSrc;
  1448. DWORD dwVIDDst;
  1449. BYTE bMode;
  1450. } TPacketGCPVP;
  1451.  
  1452. typedef struct command_use_skill
  1453. {
  1454. BYTE bHeader;
  1455. DWORD dwVnum;
  1456. DWORD dwVID;
  1457. } TPacketCGUseSkill;
  1458.  
  1459. typedef struct command_target
  1460. {
  1461. BYTE header;
  1462. DWORD dwVID;
  1463. } TPacketCGTarget;
  1464.  
  1465. typedef struct packet_target
  1466. {
  1467. BYTE header;
  1468. DWORD dwVID;
  1469. #if defined(__SHIP_DEFENSE__)
  1470. bool bAlliance;
  1471. int64_t iAllianceMinHP, iAllianceMaxHP;
  1472. #endif
  1473. BYTE bHPPercent;
  1474. DWORD dwHp;
  1475. DWORD dwHpMax;
  1476. #ifdef __VIEW_TARGET_DECIMAL_HP__
  1477. int iMinHP;
  1478. int iMaxHP;
  1479. #endif
  1480.  
  1481. } TPacketGCTarget;
  1482.  
  1483. typedef struct packet_warp
  1484. {
  1485. BYTE bHeader;
  1486. long lX;
  1487. long lY;
  1488. long lAddr;
  1489. WORD wPort;
  1490. } TPacketGCWarp;
  1491.  
  1492. typedef struct command_warp
  1493. {
  1494. BYTE bHeader;
  1495. } TPacketCGWarp;
  1496.  
  1497. struct packet_quest_info
  1498. {
  1499. BYTE header;
  1500. WORD size;
  1501. WORD index;
  1502. #ifdef ENABLE_QUEST_CATEGORY
  1503. WORD c_index;
  1504. #endif
  1505. BYTE flag;
  1506. };
  1507.  
  1508. enum
  1509. {
  1510. MESSENGER_SUBHEADER_GC_LIST,
  1511. MESSENGER_SUBHEADER_GC_LOGIN,
  1512. MESSENGER_SUBHEADER_GC_LOGOUT,
  1513. MESSENGER_SUBHEADER_GC_INVITE,
  1514. MESSENGER_SUBHEADER_GC_MOBILE
  1515. };
  1516.  
  1517. typedef struct packet_messenger
  1518. {
  1519. BYTE header;
  1520. WORD size;
  1521. BYTE subheader;
  1522. } TPacketGCMessenger;
  1523.  
  1524. typedef struct packet_messenger_guild_list
  1525. {
  1526. BYTE connected;
  1527. BYTE length;
  1528. //char login[LOGIN_MAX_LEN+1];
  1529. } TPacketGCMessengerGuildList;
  1530.  
  1531. typedef struct packet_messenger_guild_login
  1532. {
  1533. BYTE length;
  1534. //char login[LOGIN_MAX_LEN+1];
  1535. } TPacketGCMessengerGuildLogin;
  1536.  
  1537. typedef struct packet_messenger_guild_logout
  1538. {
  1539. BYTE length;
  1540.  
  1541. //char login[LOGIN_MAX_LEN+1];
  1542. } TPacketGCMessengerGuildLogout;
  1543.  
  1544. typedef struct packet_messenger_list_offline
  1545. {
  1546. BYTE connected; // always 0
  1547. BYTE length;
  1548. } TPacketGCMessengerListOffline;
  1549.  
  1550. typedef struct packet_messenger_list_online
  1551. {
  1552. BYTE connected; // always 1
  1553. BYTE length;
  1554. } TPacketGCMessengerListOnline;
  1555.  
  1556. enum
  1557. {
  1558. MESSENGER_SUBHEADER_CG_ADD_BY_VID,
  1559. MESSENGER_SUBHEADER_CG_ADD_BY_NAME,
  1560. MESSENGER_SUBHEADER_CG_REMOVE,
  1561. MESSENGER_SUBHEADER_CG_INVITE_ANSWER,
  1562. };
  1563.  
  1564. typedef struct command_messenger
  1565. {
  1566. BYTE header;
  1567. BYTE subheader;
  1568. } TPacketCGMessenger;
  1569.  
  1570. typedef struct command_messenger_add_by_vid
  1571. {
  1572. DWORD vid;
  1573. } TPacketCGMessengerAddByVID;
  1574.  
  1575. typedef struct command_messenger_add_by_name
  1576. {
  1577. BYTE length;
  1578. //char login[LOGIN_MAX_LEN+1];
  1579. } TPacketCGMessengerAddByName;
  1580.  
  1581. typedef struct command_messenger_remove
  1582. {
  1583. char login[LOGIN_MAX_LEN+1];
  1584. //DWORD account;
  1585. } TPacketCGMessengerRemove;
  1586.  
  1587. typedef struct command_safebox_checkout
  1588. {
  1589. BYTE bHeader;
  1590. BYTE bSafePos;
  1591. TItemPos ItemPos;
  1592. } TPacketCGSafeboxCheckout;
  1593.  
  1594. typedef struct command_safebox_checkin
  1595. {
  1596. BYTE bHeader;
  1597. BYTE bSafePos;
  1598. TItemPos ItemPos;
  1599. } TPacketCGSafeboxCheckin;
  1600.  
  1601. ///////////////////////////////////////////////////////////////////////////////////
  1602. // Party
  1603.  
  1604. typedef struct command_party_parameter
  1605. {
  1606. BYTE bHeader;
  1607. BYTE bDistributeMode;
  1608. } TPacketCGPartyParameter;
  1609.  
  1610. typedef struct paryt_parameter
  1611. {
  1612. BYTE bHeader;
  1613. BYTE bDistributeMode;
  1614. } TPacketGCPartyParameter;
  1615.  
  1616. typedef struct packet_party_add
  1617. {
  1618. BYTE header;
  1619. DWORD pid;
  1620. char name[CHARACTER_NAME_MAX_LEN+1];
  1621. } TPacketGCPartyAdd;
  1622.  
  1623. typedef struct command_party_invite
  1624. {
  1625. BYTE header;
  1626. DWORD vid;
  1627. } TPacketCGPartyInvite;
  1628.  
  1629. typedef struct packet_party_invite
  1630. {
  1631. BYTE header;
  1632. DWORD leader_vid;
  1633. } TPacketGCPartyInvite;
  1634.  
  1635. typedef struct command_party_invite_answer
  1636. {
  1637. BYTE header;
  1638. DWORD leader_vid;
  1639. BYTE accept;
  1640. } TPacketCGPartyInviteAnswer;
  1641.  
  1642. typedef struct packet_party_update
  1643. {
  1644. BYTE header;
  1645. DWORD pid;
  1646. BYTE role;
  1647. BYTE percent_hp;
  1648. short affects[7];
  1649. } TPacketGCPartyUpdate;
  1650.  
  1651. typedef struct packet_party_remove
  1652. {
  1653. BYTE header;
  1654. DWORD pid;
  1655. } TPacketGCPartyRemove;
  1656.  
  1657. typedef struct packet_party_link
  1658. {
  1659. BYTE header;
  1660. DWORD pid;
  1661. DWORD vid;
  1662. } TPacketGCPartyLink;
  1663.  
  1664. typedef struct packet_party_unlink
  1665. {
  1666. BYTE header;
  1667. DWORD pid;
  1668. DWORD vid;
  1669. } TPacketGCPartyUnlink;
  1670.  
  1671. typedef struct command_party_remove
  1672. {
  1673. BYTE header;
  1674. DWORD pid;
  1675. } TPacketCGPartyRemove;
  1676.  
  1677. typedef struct command_party_set_state
  1678. {
  1679. BYTE header;
  1680. DWORD pid;
  1681. BYTE byRole;
  1682. BYTE flag;
  1683. } TPacketCGPartySetState;
  1684.  
  1685. enum
  1686. {
  1687. PARTY_SKILL_HEAL = 1,
  1688. PARTY_SKILL_WARP = 2
  1689. };
  1690.  
  1691. typedef struct command_party_use_skill
  1692. {
  1693. BYTE header;
  1694. BYTE bySkillIndex;
  1695. DWORD vid;
  1696. } TPacketCGPartyUseSkill;
  1697.  
  1698. typedef struct packet_safebox_size
  1699. {
  1700. BYTE bHeader;
  1701. BYTE bSize;
  1702. } TPacketCGSafeboxSize;
  1703.  
  1704. typedef struct packet_safebox_wrong_password
  1705. {
  1706. BYTE bHeader;
  1707. } TPacketCGSafeboxWrongPassword;
  1708.  
  1709. typedef struct command_empire
  1710. {
  1711. BYTE bHeader;
  1712. BYTE bEmpire;
  1713. } TPacketCGEmpire;
  1714.  
  1715. typedef struct packet_empire
  1716. {
  1717. BYTE bHeader;
  1718. BYTE bEmpire;
  1719. } TPacketGCEmpire;
  1720.  
  1721. enum
  1722. {
  1723. SAFEBOX_MONEY_STATE_SAVE,
  1724. SAFEBOX_MONEY_STATE_WITHDRAW,
  1725. };
  1726.  
  1727. typedef struct command_safebox_money
  1728. {
  1729. BYTE bHeader;
  1730. BYTE bState;
  1731. long lMoney;
  1732. } TPacketCGSafeboxMoney;
  1733.  
  1734. typedef struct packet_safebox_money_change
  1735. {
  1736. BYTE bHeader;
  1737. long lMoney;
  1738. } TPacketGCSafeboxMoneyChange;
  1739.  
  1740. // Guild
  1741.  
  1742. enum
  1743. {
  1744. GUILD_SUBHEADER_GC_LOGIN,
  1745. GUILD_SUBHEADER_GC_LOGOUT,
  1746. GUILD_SUBHEADER_GC_LIST,
  1747. GUILD_SUBHEADER_GC_GRADE,
  1748. GUILD_SUBHEADER_GC_ADD,
  1749. GUILD_SUBHEADER_GC_REMOVE,
  1750. GUILD_SUBHEADER_GC_GRADE_NAME,
  1751. GUILD_SUBHEADER_GC_GRADE_AUTH,
  1752. GUILD_SUBHEADER_GC_INFO,
  1753. GUILD_SUBHEADER_GC_COMMENTS,
  1754. GUILD_SUBHEADER_GC_CHANGE_EXP,
  1755. GUILD_SUBHEADER_GC_CHANGE_MEMBER_GRADE,
  1756. GUILD_SUBHEADER_GC_SKILL_INFO,
  1757. GUILD_SUBHEADER_GC_CHANGE_MEMBER_GENERAL,
  1758. GUILD_SUBHEADER_GC_GUILD_INVITE,
  1759. GUILD_SUBHEADER_GC_WAR,
  1760. GUILD_SUBHEADER_GC_GUILD_NAME,
  1761. GUILD_SUBHEADER_GC_GUILD_WAR_LIST,
  1762. GUILD_SUBHEADER_GC_GUILD_WAR_END_LIST,
  1763. GUILD_SUBHEADER_GC_WAR_SCORE,
  1764. GUILD_SUBHEADER_GC_MONEY_CHANGE,
  1765. #ifdef __NEW_GUILD_SYSTEM_BYLUZER__
  1766. GUILD_SUBHEADER_GC_WAR_INFO,
  1767. #endif
  1768. };
  1769.  
  1770. enum GUILD_SUBHEADER_CG
  1771. {
  1772. GUILD_SUBHEADER_CG_ADD_MEMBER,
  1773. GUILD_SUBHEADER_CG_REMOVE_MEMBER,
  1774. GUILD_SUBHEADER_CG_CHANGE_GRADE_NAME,
  1775. GUILD_SUBHEADER_CG_CHANGE_GRADE_AUTHORITY,
  1776. GUILD_SUBHEADER_CG_OFFER,
  1777. GUILD_SUBHEADER_CG_POST_COMMENT,
  1778. GUILD_SUBHEADER_CG_DELETE_COMMENT,
  1779. GUILD_SUBHEADER_CG_REFRESH_COMMENT,
  1780. GUILD_SUBHEADER_CG_CHANGE_MEMBER_GRADE,
  1781. GUILD_SUBHEADER_CG_USE_SKILL,
  1782. GUILD_SUBHEADER_CG_CHANGE_MEMBER_GENERAL,
  1783. GUILD_SUBHEADER_CG_GUILD_INVITE_ANSWER,
  1784. GUILD_SUBHEADER_CG_CHARGE_GSP,
  1785. GUILD_SUBHEADER_CG_DEPOSIT_MONEY,
  1786. GUILD_SUBHEADER_CG_WITHDRAW_MONEY,
  1787. };
  1788.  
  1789. typedef struct packet_guild
  1790. {
  1791. BYTE header;
  1792. WORD size;
  1793. BYTE subheader;
  1794. } TPacketGCGuild;
  1795.  
  1796. typedef struct packet_guild_name_t
  1797. {
  1798. BYTE header;
  1799. WORD size;
  1800. BYTE subheader;
  1801. DWORD guildID;
  1802. char guildName[GUILD_NAME_MAX_LEN];
  1803. } TPacketGCGuildName;
  1804.  
  1805. typedef struct packet_guild_war
  1806. {
  1807. DWORD dwGuildSelf;
  1808. DWORD dwGuildOpp;
  1809. BYTE bType;
  1810. BYTE bWarState;
  1811. } TPacketGCGuildWar;
  1812.  
  1813. typedef struct command_guild
  1814. {
  1815. BYTE header;
  1816. BYTE subheader;
  1817. } TPacketCGGuild;
  1818.  
  1819. typedef struct command_guild_answer_make_guild
  1820. {
  1821. BYTE header;
  1822. char guild_name[GUILD_NAME_MAX_LEN+1];
  1823. } TPacketCGAnswerMakeGuild;
  1824.  
  1825. typedef struct command_guild_use_skill
  1826. {
  1827. DWORD dwVnum;
  1828. DWORD dwPID;
  1829. } TPacketCGGuildUseSkill;
  1830.  
  1831. // Guild Mark
  1832. typedef struct command_mark_login
  1833. {
  1834. BYTE header;
  1835. DWORD handle;
  1836. DWORD random_key;
  1837. } TPacketCGMarkLogin;
  1838.  
  1839. typedef struct command_mark_upload
  1840. {
  1841. BYTE header;
  1842. DWORD gid;
  1843. BYTE image[16*12*4];
  1844. } TPacketCGMarkUpload;
  1845.  
  1846. typedef struct command_mark_idxlist
  1847. {
  1848. BYTE header;
  1849. } TPacketCGMarkIDXList;
  1850.  
  1851. typedef struct command_mark_crclist
  1852. {
  1853. BYTE header;
  1854. BYTE imgIdx;
  1855. DWORD crclist[80];
  1856. } TPacketCGMarkCRCList;
  1857.  
  1858. typedef struct packet_mark_idxlist
  1859. {
  1860. BYTE header;
  1861. DWORD bufSize;
  1862. WORD count;
  1863.  
  1864. } TPacketGCMarkIDXList;
  1865.  
  1866. typedef struct packet_mark_block
  1867. {
  1868. BYTE header;
  1869. DWORD bufSize;
  1870. BYTE imgIdx;
  1871. DWORD count;
  1872.  
  1873. } TPacketGCMarkBlock;
  1874.  
  1875. typedef struct command_symbol_upload
  1876. {
  1877. BYTE header;
  1878. WORD size;
  1879. DWORD guild_id;
  1880. } TPacketCGGuildSymbolUpload;
  1881.  
  1882. typedef struct command_symbol_crc
  1883. {
  1884. BYTE header;
  1885. DWORD guild_id;
  1886. DWORD crc;
  1887. DWORD size;
  1888. } TPacketCGSymbolCRC;
  1889.  
  1890. typedef struct packet_symbol_data
  1891. {
  1892. BYTE header;
  1893. WORD size;
  1894. DWORD guild_id;
  1895. } TPacketGCGuildSymbolData;
  1896.  
  1897. // Fishing
  1898.  
  1899. typedef struct command_fishing
  1900. {
  1901. BYTE header;
  1902. BYTE dir;
  1903. } TPacketCGFishing;
  1904.  
  1905. typedef struct packet_fishing
  1906. {
  1907. BYTE header;
  1908. BYTE subheader;
  1909. DWORD info;
  1910. BYTE dir;
  1911. } TPacketGCFishing;
  1912.  
  1913. enum
  1914. {
  1915. FISHING_SUBHEADER_GC_START,
  1916. FISHING_SUBHEADER_GC_STOP,
  1917. FISHING_SUBHEADER_GC_REACT,
  1918. FISHING_SUBHEADER_GC_SUCCESS,
  1919. FISHING_SUBHEADER_GC_FAIL,
  1920. FISHING_SUBHEADER_GC_FISH,
  1921. };
  1922.  
  1923. typedef struct command_give_item
  1924. {
  1925. BYTE byHeader;
  1926. DWORD dwTargetVID;
  1927. TItemPos ItemPos;
  1928. BYTE byItemCount;
  1929. } TPacketCGGiveItem;
  1930.  
  1931. typedef struct SPacketCGHack
  1932. {
  1933. BYTE bHeader;
  1934. char szBuf[255 + 1];
  1935. } TPacketCGHack;
  1936.  
  1937. // SubHeader - Dungeon
  1938. enum
  1939. {
  1940. DUNGEON_SUBHEADER_GC_TIME_ATTACK_START = 0,
  1941. DUNGEON_SUBHEADER_GC_DESTINATION_POSITION = 1,
  1942. };
  1943.  
  1944. typedef struct packet_dungeon
  1945. {
  1946. BYTE bHeader;
  1947. WORD size;
  1948. BYTE subheader;
  1949. } TPacketGCDungeon;
  1950.  
  1951. typedef struct packet_dungeon_dest_position
  1952. {
  1953. long x;
  1954. long y;
  1955. } TPacketGCDungeonDestPosition;
  1956.  
  1957. typedef struct SPacketGCShopSign
  1958. {
  1959. BYTE bHeader;
  1960. DWORD dwVID;
  1961. char szSign[SHOP_SIGN_MAX_LEN + 1];
  1962. } TPacketGCShopSign;
  1963.  
  1964. typedef struct SPacketCGMyShop
  1965. {
  1966. BYTE bHeader;
  1967. char szSign[SHOP_SIGN_MAX_LEN + 1];
  1968. BYTE bCount;
  1969. } TPacketCGMyShop;
  1970.  
  1971. typedef struct SPacketGCTime
  1972. {
  1973. BYTE bHeader;
  1974. time_t time;
  1975. } TPacketGCTime;
  1976.  
  1977. enum
  1978. {
  1979. WALKMODE_RUN,
  1980. WALKMODE_WALK,
  1981. };
  1982.  
  1983. typedef struct SPacketGCWalkMode
  1984. {
  1985. BYTE header;
  1986. DWORD vid;
  1987. BYTE mode;
  1988. } TPacketGCWalkMode;
  1989.  
  1990. typedef struct SPacketGCChangeSkillGroup
  1991. {
  1992. BYTE header;
  1993. BYTE skill_group;
  1994. } TPacketGCChangeSkillGroup;
  1995.  
  1996. typedef struct SPacketCGRefine
  1997. {
  1998. BYTE header;
  1999. BYTE pos;
  2000. BYTE type;
  2001. } TPacketCGRefine;
  2002.  
  2003. typedef struct SPacketCGRequestRefineInfo
  2004. {
  2005. BYTE header;
  2006. BYTE pos;
  2007. } TPacketCGRequestRefineInfo;
  2008.  
  2009. typedef struct SPacketGCRefineInformaion
  2010. {
  2011. BYTE header;
  2012. BYTE type;
  2013. BYTE pos;
  2014. DWORD src_vnum;
  2015. DWORD result_vnum;
  2016. BYTE material_count;
  2017. int cost;
  2018. int prob;
  2019. #ifdef __NEW_GUILD_SYSTEM_BYLUZER__
  2020. int special_prob;
  2021. bool special_material;
  2022. BYTE special_material_c;
  2023. DWORD special_material_i;
  2024. #endif
  2025. TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
  2026. } TPacketGCRefineInformation;
  2027.  
  2028. struct TNPCPosition
  2029. {
  2030. BYTE bType;
  2031. char name[CHARACTER_NAME_MAX_LEN+1];
  2032. long x;
  2033. long y;
  2034. };
  2035.  
  2036. typedef struct SPacketGCNPCPosition
  2037. {
  2038. BYTE header;
  2039. WORD size;
  2040. WORD count;
  2041.  
  2042. // array of TNPCPosition
  2043. } TPacketGCNPCPosition;
  2044.  
  2045. typedef struct SPacketGCSpecialEffect
  2046. {
  2047. BYTE header;
  2048. BYTE type;
  2049. DWORD vid;
  2050. } TPacketGCSpecialEffect;
  2051.  
  2052. typedef struct SPacketCGChangeName
  2053. {
  2054. BYTE header;
  2055. BYTE index;
  2056. char name[CHARACTER_NAME_MAX_LEN+1];
  2057. } TPacketCGChangeName;
  2058.  
  2059. typedef struct SPacketGCChangeName
  2060. {
  2061. BYTE header;
  2062. DWORD pid;
  2063. char name[CHARACTER_NAME_MAX_LEN+1];
  2064. } TPacketGCChangeName;
  2065.  
  2066.  
  2067. typedef struct command_client_version
  2068. {
  2069. BYTE header;
  2070. char filename[32+1];
  2071. char timestamp[32+1];
  2072. } TPacketCGClientVersion;
  2073.  
  2074. typedef struct command_client_version2
  2075. {
  2076. BYTE header;
  2077. char filename[32+1];
  2078. char timestamp[32+1];
  2079. } TPacketCGClientVersion2;
  2080.  
  2081. typedef struct packet_channel
  2082. {
  2083. BYTE header;
  2084. BYTE channel;
  2085. } TPacketGCChannel;
  2086.  
  2087. typedef struct SEquipmentItemSet
  2088. {
  2089. DWORD vnum;
  2090. BYTE count;
  2091. long alSockets[ITEM_SOCKET_MAX_NUM];
  2092. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  2093. } TEquipmentItemSet;
  2094.  
  2095. typedef struct pakcet_view_equip
  2096. {
  2097. BYTE header;
  2098. DWORD vid;
  2099. TEquipmentItemSet equips[WEAR_MAX_NUM];
  2100. } TPacketViewEquip;
  2101.  
  2102. typedef struct SLandPacketElement
  2103. {
  2104. DWORD dwID;
  2105. long x, y;
  2106. long width, height;
  2107. DWORD dwGuildID;
  2108. } TLandPacketElement;
  2109.  
  2110. typedef struct packet_land_list
  2111. {
  2112. BYTE header;
  2113. WORD size;
  2114. } TPacketGCLandList;
  2115.  
  2116. typedef struct SPacketGCTargetCreate
  2117. {
  2118. BYTE bHeader;
  2119. long lID;
  2120. char szName[32+1];
  2121. DWORD dwVID;
  2122. BYTE bType;
  2123. } TPacketGCTargetCreate;
  2124.  
  2125. typedef struct SPacketGCTargetUpdate
  2126. {
  2127. BYTE bHeader;
  2128. long lID;
  2129. long lX, lY;
  2130. } TPacketGCTargetUpdate;
  2131.  
  2132. typedef struct SPacketGCTargetDelete
  2133. {
  2134. BYTE bHeader;
  2135. long lID;
  2136. } TPacketGCTargetDelete;
  2137.  
  2138. typedef struct SPacketGCAffectAdd
  2139. {
  2140. BYTE bHeader;
  2141. TPacketAffectElement elem;
  2142. } TPacketGCAffectAdd;
  2143.  
  2144. typedef struct SPacketGCAffectRemove
  2145. {
  2146. BYTE bHeader;
  2147. DWORD dwType;
  2148. BYTE bApplyOn;
  2149. } TPacketGCAffectRemove;
  2150.  
  2151. typedef struct packet_lover_info
  2152. {
  2153. BYTE header;
  2154. char name[CHARACTER_NAME_MAX_LEN + 1];
  2155. BYTE love_point;
  2156. } TPacketGCLoverInfo;
  2157.  
  2158. typedef struct packet_love_point_update
  2159. {
  2160. BYTE header;
  2161. BYTE love_point;
  2162. } TPacketGCLovePointUpdate;
  2163.  
  2164. // MINING
  2165. typedef struct packet_dig_motion
  2166. {
  2167. BYTE header;
  2168. DWORD vid;
  2169. DWORD target_vid;
  2170. BYTE count;
  2171. } TPacketGCDigMotion;
  2172. // END_OF_MINING
  2173.  
  2174. // SCRIPT_SELECT_ITEM
  2175. typedef struct command_script_select_item
  2176. {
  2177. BYTE header;
  2178. DWORD selection;
  2179. } TPacketCGScriptSelectItem;
  2180. // END_OF_SCRIPT_SELECT_ITEM
  2181.  
  2182. typedef struct packet_damage_info
  2183. {
  2184. BYTE header;
  2185. DWORD dwVID;
  2186. BYTE flag;
  2187. int damage;
  2188. } TPacketGCDamageInfo;
  2189.  
  2190. typedef struct tag_GGSiege
  2191. {
  2192. BYTE bHeader;
  2193. BYTE bEmpire;
  2194. BYTE bTowerCount;
  2195. } TPacketGGSiege;
  2196.  
  2197. typedef struct SPacketGGMonarchTransfer
  2198. {
  2199. BYTE bHeader;
  2200. DWORD dwTargetPID;
  2201. long x;
  2202. long y;
  2203. } TPacketMonarchGGTransfer;
  2204.  
  2205. typedef struct SPacketGGCheckAwakeness
  2206. {
  2207. BYTE bHeader;
  2208. } TPacketGGCheckAwakeness;
  2209.  
  2210. typedef struct SPacketGCPanamaPack
  2211. {
  2212. BYTE bHeader;
  2213. char szPackName[256];
  2214. BYTE abIV[32];
  2215. } TPacketGCPanamaPack;
  2216.  
  2217.  
  2218. typedef struct SPacketGCHybridCryptKeys
  2219. {
  2220. SPacketGCHybridCryptKeys() : m_pStream(NULL) {}
  2221. ~SPacketGCHybridCryptKeys()
  2222. {
  2223.  
  2224. if( m_pStream )
  2225. {
  2226. delete[] m_pStream;
  2227. m_pStream = NULL;
  2228. }
  2229. }
  2230.  
  2231. DWORD GetStreamSize()
  2232. {
  2233. return sizeof(bHeader) + sizeof(WORD) + sizeof(int) + KeyStreamLen;
  2234. }
  2235.  
  2236. BYTE* GetStreamData()
  2237. {
  2238. if( m_pStream )
  2239. delete[] m_pStream;
  2240.  
  2241. uDynamicPacketSize = (WORD)GetStreamSize();
  2242.  
  2243. m_pStream = new BYTE[ uDynamicPacketSize ];
  2244.  
  2245. memcpy( m_pStream, &bHeader, 1 );
  2246. memcpy( m_pStream+1, &uDynamicPacketSize, 2 );
  2247. memcpy( m_pStream+3, &KeyStreamLen, 4 );
  2248.  
  2249. if( KeyStreamLen > 0 )
  2250. memcpy( m_pStream+7, pDataKeyStream, KeyStreamLen );
  2251.  
  2252. return m_pStream;
  2253. }
  2254.  
  2255. BYTE bHeader;
  2256. WORD uDynamicPacketSize;
  2257. int KeyStreamLen;
  2258. BYTE* pDataKeyStream;
  2259.  
  2260. private:
  2261. BYTE* m_pStream;
  2262.  
  2263.  
  2264. } TPacketGCHybridCryptKeys;
  2265.  
  2266.  
  2267. typedef struct SPacketGCPackageSDB
  2268. {
  2269. SPacketGCPackageSDB() : m_pDataSDBStream(NULL), m_pStream(NULL) {}
  2270. ~SPacketGCPackageSDB()
  2271. {
  2272. if( m_pStream )
  2273. {
  2274. delete[] m_pStream;
  2275. m_pStream = NULL;
  2276. }
  2277. }
  2278.  
  2279. DWORD GetStreamSize()
  2280. {
  2281. return sizeof(bHeader) + sizeof(WORD) + sizeof(int) + iStreamLen;
  2282. }
  2283.  
  2284. BYTE* GetStreamData()
  2285. {
  2286. if( m_pStream )
  2287. delete[] m_pStream;
  2288.  
  2289. uDynamicPacketSize = GetStreamSize();
  2290.  
  2291. m_pStream = new BYTE[ uDynamicPacketSize ];
  2292.  
  2293. memcpy( m_pStream, &bHeader, 1 );
  2294. memcpy( m_pStream+1, &uDynamicPacketSize, 2 );
  2295. memcpy( m_pStream+3, &iStreamLen, 4 );
  2296.  
  2297. if( iStreamLen > 0 )
  2298. memcpy( m_pStream+7, m_pDataSDBStream, iStreamLen );
  2299.  
  2300. return m_pStream;
  2301. }
  2302.  
  2303. BYTE bHeader;
  2304. WORD uDynamicPacketSize;
  2305. int iStreamLen;
  2306. BYTE* m_pDataSDBStream;
  2307.  
  2308. private:
  2309. BYTE* m_pStream;
  2310.  
  2311.  
  2312. } TPacketGCPackageSDB;
  2313.  
  2314. #ifdef ENABLE_OFFLINE_SHOP_SYSTEM
  2315. typedef struct SPacketGGRemoveOfflineShop
  2316. {
  2317. BYTE bHeader;
  2318. long lMapIndex;
  2319. char szNpcName[CHARACTER_NAME_MAX_LEN + 1];
  2320. } TPacketGGRemoveOfflineShop;
  2321.  
  2322. typedef struct SPacketGGOfflineShopBuy
  2323. {
  2324. BYTE bHeader;
  2325. long long dwMoney;
  2326. char szBuyerName[CHARACTER_NAME_MAX_LEN + 1];
  2327. } TPacketGGOfflineShopBuy;
  2328.  
  2329. typedef struct packet_offline_shop_start
  2330. {
  2331. DWORD owner_vid;
  2332. struct packet_shop_item items[OFFLINE_SHOP_HOST_ITEM_MAX_NUM];
  2333. } TPacketGCOfflineShopStart;
  2334.  
  2335. typedef struct packet_offline_shop_money
  2336. {
  2337. long long dwMoney;
  2338. } TPacketGCOfflineShopMoney;
  2339.  
  2340. typedef struct TPacketCGMyOfflineShop
  2341. {
  2342. BYTE bHeader;
  2343. char szSign[SHOP_SIGN_MAX_LEN + 1];
  2344. BYTE bCount;
  2345. BYTE bTime;
  2346. } TPacketCGMyOfflineShop;
  2347.  
  2348. typedef struct packet_gold_new
  2349. {
  2350. BYTE header;
  2351. DWORD vid;
  2352. long long gold;
  2353. } TPacketGold;
  2354. #endif
  2355.  
  2356. #ifdef _IMPROVED_PACKET_ENCRYPTION_
  2357. struct TPacketKeyAgreement
  2358. {
  2359. static const int MAX_DATA_LEN = 256;
  2360. BYTE bHeader;
  2361. WORD wAgreedLength;
  2362. WORD wDataLength;
  2363. BYTE data[MAX_DATA_LEN];
  2364. };
  2365.  
  2366. struct TPacketKeyAgreementCompleted
  2367. {
  2368. BYTE bHeader;
  2369. BYTE data[3]; // dummy (not used)
  2370. };
  2371.  
  2372. #endif // _IMPROVED_PACKET_ENCRYPTION_
  2373.  
  2374. #define MAX_EFFECT_FILE_NAME 128
  2375. typedef struct SPacketGCSpecificEffect
  2376. {
  2377. BYTE header;
  2378. DWORD vid;
  2379. char effect_file[MAX_EFFECT_FILE_NAME];
  2380. } TPacketGCSpecificEffect;
  2381.  
  2382.  
  2383. enum EDragonSoulRefineWindowRefineType
  2384. {
  2385. DragonSoulRefineWindow_UPGRADE,
  2386. DragonSoulRefineWindow_IMPROVEMENT,
  2387. DragonSoulRefineWindow_REFINE,
  2388. };
  2389.  
  2390. enum EPacketCGDragonSoulSubHeaderType
  2391. {
  2392. DS_SUB_HEADER_OPEN,
  2393. DS_SUB_HEADER_CLOSE,
  2394. DS_SUB_HEADER_DO_REFINE_GRADE,
  2395. DS_SUB_HEADER_DO_REFINE_STEP,
  2396. DS_SUB_HEADER_DO_REFINE_STRENGTH,
  2397. DS_SUB_HEADER_REFINE_FAIL,
  2398. DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE,
  2399. DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL,
  2400. DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY,
  2401. DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL,
  2402. DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL,
  2403. DS_SUB_HEADER_REFINE_SUCCEED,
  2404. };
  2405. typedef struct SPacketCGDragonSoulRefine
  2406. {
  2407. SPacketCGDragonSoulRefine() : header (HEADER_CG_DRAGON_SOUL_REFINE)
  2408. {}
  2409. BYTE header;
  2410. BYTE bSubType;
  2411. TItemPos ItemGrid[DRAGON_SOUL_REFINE_GRID_SIZE];
  2412. } TPacketCGDragonSoulRefine;
  2413.  
  2414. typedef struct SPacketGCDragonSoulRefine
  2415. {
  2416. SPacketGCDragonSoulRefine() : header(HEADER_GC_DRAGON_SOUL_REFINE)
  2417. {}
  2418. BYTE header;
  2419. BYTE bSubType;
  2420. TItemPos Pos;
  2421. #ifdef __NEW_GUILD_SYSTEM_BYLUZER__
  2422. DWORD npcvnum;
  2423. #endif
  2424. } TPacketGCDragonSoulRefine;
  2425.  
  2426. typedef struct SPacketCGStateCheck
  2427. {
  2428. BYTE header;
  2429. unsigned long key;
  2430. unsigned long index;
  2431. } TPacketCGStateCheck;
  2432.  
  2433. typedef struct SPacketGCStateCheck
  2434. {
  2435. BYTE header;
  2436. unsigned long key;
  2437. unsigned long index;
  2438. unsigned char state;
  2439. } TPacketGCStateCheck;
  2440.  
  2441. #ifdef ENABLE_DROP_INFO
  2442. enum EDropInfoConfig
  2443. {
  2444. HEADER_GC_DROP_INFO = 93,
  2445. HEADER_CG_DROP_INFO = 99,
  2446. };
  2447.  
  2448. typedef struct SPacketDropInfoItem
  2449. {
  2450. DWORD dwVnum;
  2451. BYTE byMinCount;
  2452. BYTE byMaxCount;
  2453. } TPacketDropInfoItem;
  2454.  
  2455. typedef struct SPacketDropInfo
  2456. {
  2457. BYTE header;
  2458. WORD size;
  2459. WORD item_count;
  2460. DWORD gold_min;
  2461. DWORD gold_max;
  2462. DWORD mob_vnum;
  2463. } TPacketDropInfo;
  2464. #endif
  2465.  
  2466. #ifdef __ITEM_SHOP__
  2467. enum
  2468. {
  2469. ITEMSHOP_SUBHEADER_GC_ITEM,
  2470. ITEMSHOP_SUBHEADER_GC_COINS,
  2471. ITEMSHOP_SUBHEADER_GC_CLEAR,
  2472. ITEMSHOP_SUBHEADER_GC_OPEN,
  2473. ITEMSHOP_SUBHEADER_GC_EDITOR,
  2474. ITEMSHOP_SUBHEADER_GC_UPDATE,
  2475. ITEMSHOP_SUBHEADER_GC_DELETE,
  2476. ITEMSHOP_SUBHEADER_GC_ERROR,
  2477. ITEMSHOP_SUBHEADER_GC_BUY_STATS,
  2478. ITEMSHOP_SUBHEADER_GC_LIMITED_COUNT,
  2479. ITEMSHOP_SUBHEADER_GC_REWARD,
  2480. ITEMSHOP_SUBHEADER_GC_REWARD_STATUS,
  2481. ITEMSHOP_SUBHEADER_GC_POPUP,
  2482. ITEMSHOP_SUBHEADER_GC_CATEGORY,
  2483.  
  2484. ITEMSHOP_SUBHEADER_CG_OPEN = 0,
  2485. ITEMSHOP_SUBHEADER_CG_BUY,
  2486. ITEMSHOP_SUBHEADER_CG_ADD,
  2487. ITEMSHOP_SUBHEADER_CG_GET_DAILY_REWARD,
  2488.  
  2489. HEADER_CG_ITEMSHOP = 34,
  2490. HEADER_GC_ITEMSHOP = 139,
  2491.  
  2492. CATEGORY_NAME_MAX_NUM = 32,
  2493. };
  2494.  
  2495. enum EItemShopError: BYTE
  2496. {
  2497. ITEMSHOP_ERROR_NOT_ENOUGH_COINS,
  2498. ITEMSHOP_ERROR_INVENTORY_FULL,
  2499. ITEMSHOP_ERROR_WARP,
  2500. ITEMSHOP_ERROR_NON_EDITOR,
  2501. ITEMSHOP_ERROR_COUNT,
  2502. ITEMSHOP_ERROR_UNKNOWN_ERROR,
  2503. };
  2504.  
  2505. enum EItemShopPopupType
  2506. {
  2507. ITEMSHOP_POPUP_ITEM_PROMO,
  2508. ITEMSHOP_POPUP_ITEM_LIMITED,
  2509. ITEMSHOP_POPUP_NEW_ITEM,
  2510. };
  2511.  
  2512. typedef struct item_shop_packet
  2513. {
  2514. BYTE header;
  2515. DWORD size;
  2516. BYTE subheader;
  2517. } TItemShopGCPacket;
  2518.  
  2519. typedef struct item_shop_client_packet
  2520. {
  2521. BYTE header;
  2522. BYTE subheader;
  2523. } TItemShopCGPacket;
  2524.  
  2525. typedef struct SItemShopItem
  2526. {
  2527. DWORD vnum;
  2528. BYTE count;
  2529. DWORD price;
  2530. #ifdef __EXTENDED_COIN__
  2531. BYTE price_type;
  2532. #endif
  2533. BYTE bonus_type;
  2534. BYTE category;
  2535. DWORD id;
  2536. long alSockets[ITEM_SOCKET_MAX_NUM];
  2537. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  2538. BYTE is_vip;
  2539. BYTE fixed_count;
  2540. DWORD additional_time;
  2541. DWORD add_time;
  2542. BYTE discount;
  2543. DWORD discount_time;
  2544. DWORD limited_time;
  2545. DWORD limited_count;
  2546. DWORD limited_buy_count;
  2547. DWORD limited_buy_time;
  2548.  
  2549. SItemShopItem()
  2550. {
  2551. vnum = 0;
  2552. price = 0;
  2553. #ifdef __EXTENDED_COIN__
  2554. price_type = 0;
  2555. #endif
  2556. bonus_type = 0;
  2557. count = 0;
  2558. category = 0;
  2559. id = 0;
  2560. is_vip = false;
  2561. fixed_count = false;
  2562. additional_time = 0;
  2563.  
  2564. add_time = 0;
  2565. discount = 0;
  2566. discount_time = 0;
  2567.  
  2568. limited_time = 0;
  2569. limited_count = 0;
  2570. limited_buy_count = 0;
  2571.  
  2572. limited_buy_time = 0;
  2573.  
  2574. memset(&alSockets, 0, sizeof(alSockets));
  2575. memset(&aAttr, 0, sizeof(aAttr));
  2576. }
  2577.  
  2578. } TItemShopItem;
  2579.  
  2580. typedef struct item_shop_delete_item
  2581. {
  2582. DWORD id;
  2583. DWORD category;
  2584. } TItemShopItemDeletePacket;
  2585.  
  2586. typedef struct item_shop_buy
  2587. {
  2588. DWORD id;
  2589. DWORD category;
  2590. BYTE count;
  2591. BYTE bonus_type;
  2592. } TPacketCGItemShopBuy;
  2593.  
  2594. typedef struct item_shop_add
  2595. {
  2596. TItemShopItem aItemShopItem;
  2597. BYTE bFlag;
  2598. } TPacketCGItemShopAddItem;
  2599.  
  2600. typedef struct item_shop_buy_stats
  2601. {
  2602. DWORD dwID;
  2603. DWORD dwCategory;
  2604. DWORD dwCount;
  2605.  
  2606. item_shop_buy_stats(DWORD id, DWORD category)
  2607. {
  2608. dwID = id;
  2609. dwCategory = category;
  2610. dwCount = 1;
  2611. }
  2612. item_shop_buy_stats()
  2613. {
  2614. dwID = 0;
  2615. dwCategory = 0;
  2616. dwCount = 1;
  2617. }
  2618. } TItemShopBuyStats;
  2619.  
  2620. typedef struct itemshop_open_packet
  2621. {
  2622. BYTE byDailyRewardDay;
  2623. time_t ttDataTime;
  2624. } TItemShopOpenPacket;
  2625.  
  2626. typedef struct item_shop_daily_reward
  2627. {
  2628. DWORD dwVnum;
  2629. BYTE byCount;
  2630. } TItemShopDailyReward;
  2631.  
  2632. #ifdef __EXTENDED_COIN__
  2633. typedef struct item_shop_cash
  2634. {
  2635. BYTE type;
  2636. DWORD value;
  2637. } TItemShopCashPacket;
  2638. #endif
  2639.  
  2640. typedef struct item_shop_popup_packet
  2641. {
  2642. BYTE type;
  2643. DWORD id;
  2644. DWORD category;
  2645. } TItemShopPopupPacket;
  2646.  
  2647. typedef struct item_shop_category_packet
  2648. {
  2649. BYTE index;
  2650. char szName[CATEGORY_NAME_MAX_NUM + 1];
  2651. } TItemShopCategoryPacket;
  2652. #endif
  2653.  
  2654. #ifdef __TOMBOLA__
  2655. enum
  2656. {
  2657. HEADER_CG_TOMBOLA = 37,
  2658. TOMBOLA_CG_SUBHEADER_START = 0,
  2659. TOMBOLA_CG_SUBHEADER_OPEN = 1,
  2660.  
  2661. HEADER_GC_TOMBOLA = 50,
  2662. TOMBOLA_GC_SUBHEADER_ITEM = 0,
  2663. TOMBOLA_GC_SUBHEADER_START = 1,
  2664. TOMBOLA_GC_SUBHEADER_OPEN = 2,
  2665. };
  2666.  
  2667. typedef struct tombola_packet
  2668. {
  2669. BYTE byHeader;
  2670. WORD wSize;
  2671. BYTE bySubHeader;
  2672. } TPacketGCTombola;
  2673.  
  2674. typedef struct tombola_client_packet
  2675. {
  2676. BYTE byHeader;
  2677. BYTE bySubHeader;
  2678. } TPacketCGTombola;
  2679. #endif
  2680.  
  2681. #ifdef ENABLE_ACCE_COSTUME_SYSTEM
  2682. enum
  2683. {
  2684. HEADER_CG_ACCE = 211,
  2685. HEADER_GC_ACCE = 215,
  2686. ACCE_SUBHEADER_GC_OPEN = 0,
  2687. ACCE_SUBHEADER_GC_CLOSE,
  2688. ACCE_SUBHEADER_GC_ADDED,
  2689. ACCE_SUBHEADER_GC_REMOVED,
  2690. ACCE_SUBHEADER_CG_REFINED,
  2691. ACCE_SUBHEADER_CG_CLOSE = 0,
  2692. ACCE_SUBHEADER_CG_ADD,
  2693. ACCE_SUBHEADER_CG_REMOVE,
  2694. ACCE_SUBHEADER_CG_REFINE,
  2695. };
  2696.  
  2697. typedef struct SPacketAcce
  2698. {
  2699. BYTE header;
  2700. BYTE subheader;
  2701. bool bWindow;
  2702. DWORD dwPrice;
  2703. BYTE bPos;
  2704. TItemPos tPos;
  2705. DWORD dwItemVnum;
  2706. DWORD dwMinAbs;
  2707. DWORD dwMaxAbs;
  2708. } TPacketAcce;
  2709. #endif
  2710.  
  2711. #ifdef WEEKLY_RANK_BYLUZER
  2712. typedef struct packet_send_weekly_rank
  2713. {
  2714. int rank;
  2715. char name[CHARACTER_NAME_MAX_LEN+1];
  2716. int points;
  2717. } TPacketGCTableWeeklyRank;
  2718.  
  2719. typedef struct packet_send_weekly_rank2
  2720. {
  2721. BYTE bHeader;
  2722. TPacketGCTableWeeklyRank rankingData[10];
  2723. } TPacketGCSendWeeklyRank;
  2724.  
  2725. typedef struct packet_send_weekly_page
  2726. {
  2727. BYTE bHeader;
  2728. BYTE page;
  2729. int season;
  2730. bool can_select;
  2731. } TPacketGCSelectWeeklyPage;
  2732.  
  2733. typedef struct packet_select_weekly_rank
  2734. {
  2735. BYTE bHeader;
  2736. BYTE page;
  2737. } TPacketCGSelectWeeklyRank;
  2738. #endif
  2739.  
  2740. #ifdef GUILD_ACTIVE
  2741. typedef struct packet_fetch_avail_guilds
  2742. {
  2743. BYTE bHeader;
  2744. } TPacketFetchAvailGuilds;
  2745.  
  2746. typedef struct packet_send_avail_guilds
  2747. {
  2748. BYTE bHeader;
  2749. char availGuilds[4096+1];
  2750. } TPacketGCGiveAvailGuilds;
  2751. #endif
  2752.  
  2753.  
  2754. #pragma pack()
  2755. #endif
  2756.  
Advertisement
Add Comment
Please, Sign In to add comment