1. #ifndef __INC_PACKET_H__
  2. #define __INC_PACKET_H__
  3. #include "stdafx.h"
  4. enum
  5. {
  6. HEADER_CG_HANDSHAKE = 0xff,
  7. HEADER_CG_PONG = 0xfe,
  8. HEADER_CG_TIME_SYNC = 0xfc,
  9. HEADER_CG_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_
  10. HEADER_CG_LOGIN = 1,
  11. HEADER_CG_ATTACK = 2,
  12. HEADER_CG_CHAT = 3,
  13. HEADER_CG_CHARACTER_CREATE = 4,
  14. HEADER_CG_CHARACTER_DELETE = 5,
  15. HEADER_CG_CHARACTER_SELECT = 6,
  16. HEADER_CG_MOVE = 7,
  17. HEADER_CG_SYNC_POSITION = 8,
  18. HEADER_CG_ENTERGAME = 10,
  19. HEADER_CG_ITEM_USE = 11,
  20. HEADER_CG_ITEM_DROP = 12,
  21. HEADER_CG_ITEM_MOVE = 13,
  22. HEADER_CG_ITEM_PICKUP = 15,
  23. HEADER_CG_QUICKSLOT_ADD = 16,
  24. HEADER_CG_QUICKSLOT_DEL = 17,
  25. HEADER_CG_QUICKSLOT_SWAP = 18,
  26. HEADER_CG_WHISPER = 19,
  27. HEADER_CG_ITEM_DROP2 = 20,
  28. HEADER_CG_ON_CLICK = 26,
  29. HEADER_CG_EXCHANGE = 27,
  30. HEADER_CG_CHARACTER_POSITION = 28,
  31. HEADER_CG_SCRIPT_ANSWER = 29,
  32. HEADER_CG_QUEST_INPUT_STRING = 30,
  33. HEADER_CG_QUEST_CONFIRM = 31,
  34. HEADER_CG_SHOP = 50,
  35. HEADER_CG_FLY_TARGETING = 51,
  36. HEADER_CG_USE_SKILL = 52,
  37. HEADER_CG_ADD_FLY_TARGETING = 53,
  38. HEADER_CG_SHOOT = 54,
  39. HEADER_CG_MYSHOP = 55,
  40. HEADER_CG_ITEM_USE_TO_ITEM = 60,
  41. HEADER_CG_TARGET = 61,
  42. HEADER_CG_TEXT = 64, // @ 로 시작되면 텍스트를 파싱한다.
  43. HEADER_CG_WARP = 65,
  44. HEADER_CG_SCRIPT_BUTTON = 66,
  45. HEADER_CG_MESSENGER = 67,
  46. HEADER_CG_MALL_CHECKOUT = 69,
  47. HEADER_CG_SAFEBOX_CHECKIN = 70, // 아이템을 창고에 넣†š는다.
  48. HEADER_CG_SAFEBOX_CHECKOUT = 71, // 아이템을 창고로 부터 빼온다.
  49. HEADER_CG_PARTY_INVITE = 72,
  50. HEADER_CG_PARTY_INVITE_ANSWER = 73,
  51. HEADER_CG_PARTY_REMOVE = 74,
  52. HEADER_CG_PARTY_SET_STATE = 75,
  53. HEADER_CG_PARTY_USE_SKILL = 76,
  54. HEADER_CG_SAFEBOX_ITEM_MOVE = 77,
  55. HEADER_CG_PARTY_PARAMETER = 78,
  56. HEADER_CG_GUILD = 80,
  57. HEADER_CG_ANSWER_MAKE_GUILD = 81,
  58. HEADER_CG_FISHING = 82,
  59. HEADER_CG_ITEM_GIVE = 83,
  60. HEADER_CG_EMPIRE = 90,
  61. HEADER_CG_REFINE = 96,
  62. HEADER_CG_MARK_LOGIN = 100,
  63. HEADER_CG_MARK_CRCLIST = 101,
  64. HEADER_CG_MARK_UPLOAD = 102,
  65. HEADER_CG_MARK_IDXLIST = 104,
  66. HEADER_CG_HACK = 105,
  67. HEADER_CG_CHANGE_NAME = 106,
  68. HEADER_CG_LOGIN2 = 109,
  69. HEADER_CG_DUNGEON = 110,
  70. HEADER_CG_LOGIN3 = 111,
  71. HEADER_CG_GUILD_SYMBOL_UPLOAD = 112,
  72. HEADER_CG_SYMBOL_CRC = 113,
  73. // SCRIPT_SELECT_ITEM
  74. HEADER_CG_SCRIPT_SELECT_ITEM = 114,
  75. // END_OF_SCRIPT_SELECT_ITEM
  76. HEADER_CG_LOGIN5_OPENID = 116, //OpenID : 클라이언트로부터 OpenID 인증키를 받는다.
  77. // HEADER_CG_ROULETTE = 200,
  78. // HEADER_CG_RUNUP_MATRIX_ANSWER = 201,
  79. //
  80. HEADER_CG_PASSPOD_ANSWER = 202,
  81. //NOTE : 이런 개XXX 정말 이거 Packet설계한 사람은 누구냐. 이렇게 코딩하고 밥이 넘어가나.
  82. //enum을 별도로 구별을 하던가. 아님 namepsace로 구별을 하던가..
  83. //정말 packet generator까지는 바라지도 않는다. 이런 씨XX
  84. //이러다가 숫자 겹치면 누가 책임지는데???
  85. HEADER_CG_HS_ACK = 203,
  86. HEADER_CG_XTRAP_ACK = 204,
  87. HEADER_CG_DRAGON_SOUL_REFINE = 205,
  88. HEADER_CG_STATE_CHECKER = 206,
  89. HEADER_CG_CLIENT_VERSION = 0xfd,
  90. HEADER_CG_CLIENT_VERSION2 = 0xf1,
  91. /********************************************************/
  92. HEADER_GC_KEY_AGREEMENT_COMPLETED = 0xfa, // _IMPROVED_PACKET_ENCRYPTION_
  93. HEADER_GC_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_
  94. HEADER_GC_TIME_SYNC = 0xfc,
  95. HEADER_GC_PHASE = 0xfd,
  96. HEADER_GC_BINDUDP = 0xfe,
  97. HEADER_GC_HANDSHAKE = 0xff,
  98. HEADER_GC_CHARACTER_ADD = 1,
  99. HEADER_GC_CHARACTER_DEL = 2,
  100. HEADER_GC_MOVE = 3,
  101. HEADER_GC_CHAT = 4,
  102. HEADER_GC_SYNC_POSITION = 5,
  103. HEADER_GC_LOGIN_SUCCESS = 6,
  104. HEADER_GC_LOGIN_SUCCESS_NEWSLOT = 32,
  105. HEADER_GC_LOGIN_FAILURE = 7,
  106. HEADER_GC_CHARACTER_CREATE_SUCCESS = 8,
  107. HEADER_GC_CHARACTER_CREATE_FAILURE = 9,
  108. HEADER_GC_CHARACTER_DELETE_SUCCESS = 10,
  109. HEADER_GC_CHARACTER_DELETE_WRONG_SOCIAL_ID = 11,
  110. HEADER_GC_ATTACK = 12,
  111. HEADER_GC_STUN = 13,
  112. HEADER_GC_DEAD = 14,
  113. HEADER_GC_MAIN_CHARACTER_OLD = 15,
  114. HEADER_GC_CHARACTER_POINTS = 16,
  115. HEADER_GC_CHARACTER_POINT_CHANGE = 17,
  116. HEADER_GC_CHANGE_SPEED = 18,
  117. HEADER_GC_CHARACTER_UPDATE = 19,
  118. HEADER_GC_CHARACTER_UPDATE_NEW = 24,
  119. HEADER_GC_ITEM_DEL = 20,
  120. HEADER_GC_ITEM_SET = 21,
  121. HEADER_GC_ITEM_USE = 22,
  122. HEADER_GC_ITEM_DROP = 23,
  123. HEADER_GC_ITEM_UPDATE = 25,
  124. HEADER_GC_ITEM_GROUND_ADD = 26,
  125. HEADER_GC_ITEM_GROUND_DEL = 27,
  126. HEADER_GC_QUICKSLOT_ADD = 28,
  127. HEADER_GC_QUICKSLOT_DEL = 29,
  128. HEADER_GC_QUICKSLOT_SWAP = 30,
  129. HEADER_GC_ITEM_OWNERSHIP = 31,
  130. HEADER_GC_WHISPER = 34,
  131. HEADER_GC_MOTION = 36,
  132. HEADER_GC_PARTS = 37,
  133. HEADER_GC_SHOP = 38,
  134. HEADER_GC_SHOP_SIGN = 39,
  135. HEADER_GC_DUEL_START = 40,
  136. HEADER_GC_PVP = 41,
  137. HEADER_GC_EXCHANGE = 42,
  138. HEADER_GC_CHARACTER_POSITION = 43,
  139. HEADER_GC_PING = 44,
  140. HEADER_GC_SCRIPT = 45,
  141. HEADER_GC_QUEST_CONFIRM = 46,
  142. HEADER_GC_MOUNT = 61,
  143. HEADER_GC_OWNERSHIP = 62,
  144. HEADER_GC_TARGET = 63,
  145. #ifdef __SEND_TARGET_INFO__
  146. HEADER_GC_TARGET_INFO = 58,
  147. HEADER_CG_TARGET_INFO_LOAD = 59,
  148. #endif
  149. HEADER_GC_WARP = 65,
  150. HEADER_GC_ADD_FLY_TARGETING = 69,
  151. HEADER_GC_CREATE_FLY = 70,
  152. HEADER_GC_FLY_TARGETING = 71,
  153. HEADER_GC_SKILL_LEVEL_OLD = 72,
  154. HEADER_GC_SKILL_LEVEL = 76,
  155. HEADER_GC_MESSENGER = 74,
  156. HEADER_GC_GUILD = 75,
  157. HEADER_GC_PARTY_INVITE = 77,
  158. HEADER_GC_PARTY_ADD = 78,
  159. HEADER_GC_PARTY_UPDATE = 79,
  160. HEADER_GC_PARTY_REMOVE = 80,
  161. HEADER_GC_QUEST_INFO = 81,
  162. HEADER_GC_REQUEST_MAKE_GUILD = 82,
  163. HEADER_GC_PARTY_PARAMETER = 83,
  164. HEADER_GC_SAFEBOX_SET = 85,
  165. HEADER_GC_SAFEBOX_DEL = 86,
  166. HEADER_GC_SAFEBOX_WRONG_PASSWORD = 87,
  167. HEADER_GC_SAFEBOX_SIZE = 88,
  168. HEADER_GC_FISHING = 89,
  169. HEADER_GC_EMPIRE = 90,
  170. HEADER_GC_PARTY_LINK = 91,
  171. HEADER_GC_PARTY_UNLINK = 92,
  172. HEADER_GC_REFINE_INFORMATION_OLD = 95,
  173. HEADER_GC_VIEW_EQUIP = 99,
  174. HEADER_GC_MARK_BLOCK = 100,
  175. HEADER_GC_MARK_IDXLIST = 102,
  176. HEADER_GC_TIME = 106,
  177. HEADER_GC_CHANGE_NAME = 107,
  178. HEADER_GC_DUNGEON = 110,
  179. HEADER_GC_WALK_MODE = 111,
  180. HEADER_GC_SKILL_GROUP = 112,
  181. HEADER_GC_MAIN_CHARACTER = 113,
  182. // HEADER_GC_USE_POTION = 114,
  183. HEADER_GC_SEPCIAL_EFFECT = 114,
  184. HEADER_GC_NPC_POSITION = 115,
  185. HEADER_GC_MATRIX_CARD = 116,
  186. HEADER_GC_LOGIN_KEY = 118,
  187. HEADER_GC_REFINE_INFORMATION = 119,
  188. HEADER_GC_CHANNEL = 121,
  189. // 122 HEADER_GC_MALL_OPEN
  190. HEADER_GC_TARGET_UPDATE = 123,
  191. HEADER_GC_TARGET_DELETE = 124,
  192. HEADER_GC_TARGET_CREATE = 125,
  193. HEADER_GC_AFFECT_ADD = 126,
  194. HEADER_GC_AFFECT_REMOVE = 127,
  195. HEADER_GC_MALL_OPEN = 122,
  196. HEADER_GC_MALL_SET = 128,
  197. HEADER_GC_MALL_DEL = 129,
  198. HEADER_GC_LAND_LIST = 130,
  199. HEADER_GC_LOVER_INFO = 131,
  200. HEADER_GC_LOVE_POINT_UPDATE = 132,
  201. HEADER_GC_SYMBOL_DATA = 133,
  202. // MINING
  203. HEADER_GC_DIG_MOTION = 134,
  204. // END_OF_MINING
  205. HEADER_GC_DAMAGE_INFO = 135,
  206. HEADER_GC_CHAR_ADDITIONAL_INFO = 136,
  207. // SUPPORT_BGM
  208. HEADER_GC_MAIN_CHARACTER3_BGM = 137,
  209. HEADER_GC_MAIN_CHARACTER4_BGM_VOL = 138,
  210. // END_OF_SUPPORT_BGM
  211. HEADER_GC_AUTH_SUCCESS = 150,
  212. HEADER_GC_PANAMA_PACK = 151,
  213. //HYBRID CRYPT
  214. HEADER_GC_HYBRIDCRYPT_KEYS = 152,
  215. HEADER_GC_HYBRIDCRYPT_SDB = 153, // SDB means Supplmentary Data Blocks
  216. //HYBRID CRYPT
  217. HEADER_GC_AUTH_SUCCESS_OPENID = 154,
  218. // ROULETTE
  219. HEADER_GC_ROULETTE = 200,
  220. // END_ROULETTE
  221. //
  222. HEADER_GC_REQUEST_PASSPOD = 202,
  223. HEADER_GC_REQUEST_PASSPOD_FAILED = 203,
  224. HEADER_GC_HS_REQUEST = 204,
  225. HEADER_GC_XTRAP_CS1_REQUEST = 205,
  226. HEADER_GC_SPECIFIC_EFFECT = 208,
  227. HEADER_GC_DRAGON_SOUL_REFINE = 209,
  228. HEADER_GC_RESPOND_CHANNELSTATUS = 210,
  229. /////////////////////////////////////////////////////////////////////////////
  230. HEADER_GG_LOGIN = 1,
  231. HEADER_GG_LOGOUT = 2,
  232. HEADER_GG_RELAY = 3,
  233. HEADER_GG_NOTICE = 4,
  234. HEADER_GG_SHUTDOWN = 5,
  235. HEADER_GG_GUILD = 6,
  236. HEADER_GG_DISCONNECT = 7, // 누군가의 접속을 강제로 끊을 때
  237. HEADER_GG_SHOUT = 8,
  238. HEADER_GG_SETUP = 9,
  239. HEADER_GG_MESSENGER_ADD = 10,
  240. HEADER_GG_MESSENGER_REMOVE = 11,
  241. HEADER_GG_FIND_POSITION = 12,
  242. HEADER_GG_WARP_CHARACTER = 13,
  243. HEADER_GG_MESSENGER_MOBILE = 14,
  244. HEADER_GG_GUILD_WAR_ZONE_MAP_INDEX = 15,
  245. HEADER_GG_TRANSFER = 16,
  246. HEADER_GG_XMAS_WARP_SANTA = 17,
  247. HEADER_GG_XMAS_WARP_SANTA_REPLY = 18,
  248. HEADER_GG_RELOAD_CRC_LIST = 19,
  249. HEADER_GG_LOGIN_PING = 20,
  250. HEADER_GG_CHECK_CLIENT_VERSION = 21,
  251. HEADER_GG_BLOCK_CHAT = 22,
  252. HEADER_GG_BLOCK_EXCEPTION = 24,
  253. HEADER_GG_SIEGE = 25,
  254. HEADER_GG_MONARCH_NOTICE = 26,
  255. HEADER_GG_MONARCH_TRANSFER = 27,
  256. HEADER_GG_PCBANG_UPDATE = 28,
  257. HEADER_GG_CHECK_AWAKENESS = 29,
  258. };
  259. #pragma pack(1)
  260. typedef struct SPacketGGSetup
  261. {
  262. BYTE bHeader;
  263. WORD wPort;
  264. BYTE bChannel;
  265. } TPacketGGSetup;
  266. typedef struct SPacketGGLogin
  267. {
  268. BYTE bHeader;
  269. char szName[CHARACTER_NAME_MAX_LEN + 1];
  270. DWORD dwPID;
  271. BYTE bEmpire;
  272. long lMapIndex;
  273. BYTE bChannel;
  274. } TPacketGGLogin;
  275. typedef struct SPacketGGLogout
  276. {
  277. BYTE bHeader;
  278. char szName[CHARACTER_NAME_MAX_LEN + 1];
  279. } TPacketGGLogout;
  280. typedef struct SPacketGGRelay
  281. {
  282. BYTE bHeader;
  283. char szName[CHARACTER_NAME_MAX_LEN + 1];
  284. long lSize;
  285. } TPacketGGRelay;
  286. typedef struct SPacketGGNotice
  287. {
  288. BYTE bHeader;
  289. long lSize;
  290. } TPacketGGNotice;
  291. typedef struct SPacketGGMonarchNotice
  292. {
  293. BYTE bHeader;
  294. BYTE bEmpire;
  295. long lSize;
  296. } TPacketGGMonarchNotice;
  297. //FORKED_ROAD
  298. typedef struct SPacketGGForkedMapInfo
  299. {
  300. BYTE bHeader;
  301. BYTE bPass;
  302. BYTE bSungzi;
  303. } TPacketGGForkedMapInfo;
  304. //END_FORKED_ROAD
  305. typedef struct SPacketGGShutdown
  306. {
  307. BYTE bHeader;
  308. } TPacketGGShutdown;
  309. typedef struct SPacketGGGuild
  310. {
  311. BYTE bHeader;
  312. BYTE bSubHeader;
  313. DWORD dwGuild;
  314. } TPacketGGGuild;
  315. enum
  316. {
  317. GUILD_SUBHEADER_GG_CHAT,
  318. GUILD_SUBHEADER_GG_SET_MEMBER_COUNT_BONUS,
  319. };
  320. typedef struct SPacketGGGuildChat
  321. {
  322. BYTE bHeader;
  323. BYTE bSubHeader;
  324. DWORD dwGuild;
  325. char szText[CHAT_MAX_LEN + 1];
  326. } TPacketGGGuildChat;
  327. typedef struct SPacketGGParty
  328. {
  329. BYTE header;
  330. BYTE subheader;
  331. DWORD pid;
  332. DWORD leaderpid;
  333. } TPacketGGParty;
  334. enum
  335. {
  336. PARTY_SUBHEADER_GG_CREATE,
  337. PARTY_SUBHEADER_GG_DESTROY,
  338. PARTY_SUBHEADER_GG_JOIN,
  339. PARTY_SUBHEADER_GG_QUIT,
  340. };
  341. typedef struct SPacketGGDisconnect
  342. {
  343. BYTE bHeader;
  344. char szLogin[LOGIN_MAX_LEN + 1];
  345. } TPacketGGDisconnect;
  346. typedef struct SPacketGGShout
  347. {
  348. BYTE bHeader;
  349. BYTE bEmpire;
  350. char szText[CHAT_MAX_LEN + 1];
  351. } TPacketGGShout;
  352. typedef struct SPacketGGXmasWarpSanta
  353. {
  354. BYTE bHeader;
  355. BYTE bChannel;
  356. long lMapIndex;
  357. } TPacketGGXmasWarpSanta;
  358. typedef struct SPacketGGXmasWarpSantaReply
  359. {
  360. BYTE bHeader;
  361. BYTE bChannel;
  362. } TPacketGGXmasWarpSantaReply;
  363. typedef struct SMessengerData
  364. {
  365. char szMobile[MOBILE_MAX_LEN + 1];
  366. } TMessengerData;
  367. typedef struct SPacketGGMessenger
  368. {
  369. BYTE bHeader;
  370. char szAccount[CHARACTER_NAME_MAX_LEN + 1];
  371. char szCompanion[CHARACTER_NAME_MAX_LEN + 1];
  372. } TPacketGGMessenger;
  373. typedef struct SPacketGGMessengerMobile
  374. {
  375. BYTE bHeader;
  376. char szName[CHARACTER_NAME_MAX_LEN + 1];
  377. char szMobile[MOBILE_MAX_LEN + 1];
  378. } TPacketGGMessengerMobile;
  379. typedef struct SPacketGGFindPosition
  380. {
  381. BYTE header;
  382. DWORD dwFromPID; // 저 위치로 워프하려는 사람
  383. DWORD dwTargetPID; // 찾는 사람
  384. } TPacketGGFindPosition;
  385. typedef struct SPacketGGWarpCharacter
  386. {
  387. BYTE header;
  388. DWORD pid;
  389. long x;
  390. long y;
  391. #ifdef ENABLE_CMD_WARP_IN_DUNGEON
  392. int mapIndex;
  393. #endif
  394. } TPacketGGWarpCharacter;
  395. // HEADER_GG_GUILD_WAR_ZONE_MAP_INDEX = 15,
  396. typedef struct SPacketGGGuildWarMapIndex
  397. {
  398. BYTE bHeader;
  399. DWORD dwGuildID1;
  400. DWORD dwGuildID2;
  401. long lMapIndex;
  402. } TPacketGGGuildWarMapIndex;
  403. typedef struct SPacketGGTransfer
  404. {
  405. BYTE bHeader;
  406. char szName[CHARACTER_NAME_MAX_LEN + 1];
  407. long lX, lY;
  408. } TPacketGGTransfer;
  409. typedef struct SPacketGGLoginPing
  410. {
  411. BYTE bHeader;
  412. char szLogin[LOGIN_MAX_LEN + 1];
  413. } TPacketGGLoginPing;
  414. typedef struct SPacketGGBlockChat
  415. {
  416. BYTE bHeader;
  417. char szName[CHARACTER_NAME_MAX_LEN + 1];
  418. long lBlockDuration;
  419. } TPacketGGBlockChat;
  420. /* 클라이언트 측에서 보내는 패킷 */
  421. typedef struct command_text
  422. {
  423. BYTE bHeader;
  424. } TPacketCGText;
  425. /* 로그인 (1) */
  426. typedef struct command_handshake
  427. {
  428. BYTE bHeader;
  429. DWORD dwHandshake;
  430. DWORD dwTime;
  431. long lDelta;
  432. } TPacketCGHandshake;
  433. typedef struct command_login
  434. {
  435. BYTE header;
  436. char login[LOGIN_MAX_LEN + 1];
  437. char passwd[PASSWD_MAX_LEN + 1];
  438. } TPacketCGLogin;
  439. typedef struct command_login2
  440. {
  441. BYTE header;
  442. char login[LOGIN_MAX_LEN + 1];
  443. DWORD dwLoginKey;
  444. DWORD adwClientKey[4];
  445. } TPacketCGLogin2;
  446. typedef struct command_login3
  447. {
  448. BYTE header;
  449. char login[LOGIN_MAX_LEN + 1];
  450. char passwd[PASSWD_MAX_LEN + 1];
  451. DWORD adwClientKey[4];
  452. } TPacketCGLogin3;
  453. typedef struct command_login5
  454. {
  455. BYTE header;
  456. char authKey[OPENID_AUTHKEY_LEN + 1];
  457. DWORD adwClientKey[4];
  458. } TPacketCGLogin5;
  459. typedef struct command_matrix_card
  460. {
  461. BYTE bHeader;
  462. char szAnswer[MATRIX_ANSWER_MAX_LEN + 1];
  463. } TPacketCGMatrixCard;
  464. typedef struct packet_matrix_card
  465. {
  466. BYTE bHeader;
  467. DWORD dwRows;
  468. DWORD dwCols;
  469. } TPacketGCMatrixCard;
  470. typedef struct packet_login_key
  471. {
  472. BYTE bHeader;
  473. DWORD dwLoginKey;
  474. } TPacketGCLoginKey;
  475. typedef struct command_player_select
  476. {
  477. BYTE header;
  478. BYTE index;
  479. } TPacketCGPlayerSelect;
  480. typedef struct command_player_delete
  481. {
  482. BYTE header;
  483. BYTE index;
  484. char private_code[8];
  485. } TPacketCGPlayerDelete;
  486. typedef struct command_player_create
  487. {
  488. BYTE header;
  489. BYTE index;
  490. char name[CHARACTER_NAME_MAX_LEN + 1];
  491. WORD job;
  492. BYTE shape;
  493. BYTE Con;
  494. BYTE Int;
  495. BYTE Str;
  496. BYTE Dex;
  497. } TPacketCGPlayerCreate;
  498. typedef struct command_player_create_success
  499. {
  500. BYTE header;
  501. BYTE bAccountCharacterIndex;
  502. TSimplePlayer player;
  503. } TPacketGCPlayerCreateSuccess;
  504. // 공격
  505. typedef struct command_attack
  506. {
  507. BYTE bHeader;
  508. BYTE bType;
  509. DWORD dwVID;
  510. BYTE bCRCMagicCubeProcPiece;
  511. BYTE bCRCMagicCubeFilePiece;
  512. } TPacketCGAttack;
  513. enum EMoveFuncType
  514. {
  515. FUNC_WAIT,
  516. FUNC_MOVE,
  517. FUNC_ATTACK,
  518. FUNC_COMBO,
  519. FUNC_MOB_SKILL,
  520. _FUNC_SKILL,
  521. FUNC_MAX_NUM,
  522. FUNC_SKILL = 0x80,
  523. };
  524. // 이동
  525. typedef struct command_move
  526. {
  527. BYTE bHeader;
  528. BYTE bFunc;
  529. BYTE bArg;
  530. BYTE bRot;
  531. long lX;
  532. long lY;
  533. DWORD dwTime;
  534. } TPacketCGMove;
  535. typedef struct command_sync_position_element
  536. {
  537. DWORD dwVID;
  538. long lX;
  539. long lY;
  540. } TPacketCGSyncPositionElement;
  541. // 위치 동기화
  542. typedef struct command_sync_position // 가변 패킷
  543. {
  544. BYTE bHeader;
  545. WORD wSize;
  546. } TPacketCGSyncPosition;
  547. /* 채팅 (3) */
  548. typedef struct command_chat // 가변 패킷
  549. {
  550. BYTE header;
  551. WORD size;
  552. BYTE type;
  553. } TPacketCGChat;
  554. /* 귓속말 */
  555. typedef struct command_whisper
  556. {
  557. BYTE bHeader;
  558. WORD wSize;
  559. char szNameTo[CHARACTER_NAME_MAX_LEN + 1];
  560. } TPacketCGWhisper;
  561. typedef struct command_entergame
  562. {
  563. BYTE header;
  564. } TPacketCGEnterGame;
  565. typedef struct command_item_use
  566. {
  567. BYTE header;
  568. TItemPos Cell;
  569. } TPacketCGItemUse;
  570. typedef struct command_item_use_to_item
  571. {
  572. BYTE header;
  573. TItemPos Cell;
  574. TItemPos TargetCell;
  575. } TPacketCGItemUseToItem;
  576. typedef struct command_item_drop
  577. {
  578. BYTE header;
  579. TItemPos Cell;
  580. DWORD gold;
  581. } TPacketCGItemDrop;
  582. typedef struct command_item_drop2
  583. {
  584. BYTE header;
  585. TItemPos Cell;
  586. DWORD gold;
  587. BYTE count;
  588. } TPacketCGItemDrop2;
  589. typedef struct command_item_move
  590. {
  591. BYTE header;
  592. TItemPos Cell;
  593. TItemPos CellTo;
  594. BYTE count;
  595. } TPacketCGItemMove;
  596. typedef struct command_item_pickup
  597. {
  598. BYTE header;
  599. DWORD vid;
  600. } TPacketCGItemPickup;
  601. typedef struct command_quickslot_add
  602. {
  603. BYTE header;
  604. BYTE pos;
  605. TQuickslot slot;
  606. } TPacketCGQuickslotAdd;
  607. typedef struct command_quickslot_del
  608. {
  609. BYTE header;
  610. BYTE pos;
  611. } TPacketCGQuickslotDel;
  612. typedef struct command_quickslot_swap
  613. {
  614. BYTE header;
  615. BYTE pos;
  616. BYTE change_pos;
  617. } TPacketCGQuickslotSwap;
  618. enum
  619. {
  620. SHOP_SUBHEADER_CG_END,
  621. SHOP_SUBHEADER_CG_BUY,
  622. SHOP_SUBHEADER_CG_SELL,
  623. SHOP_SUBHEADER_CG_SELL2
  624. };
  625. typedef struct command_shop_buy
  626. {
  627. BYTE count;
  628. } TPacketCGShopBuy;
  629. typedef struct command_shop_sell
  630. {
  631. BYTE pos;
  632. BYTE count;
  633. } TPacketCGShopSell;
  634. typedef struct command_shop
  635. {
  636. BYTE header;
  637. BYTE subheader;
  638. } TPacketCGShop;
  639. typedef struct command_on_click
  640. {
  641. BYTE header;
  642. DWORD vid;
  643. } TPacketCGOnClick;
  644. enum
  645. {
  646. EXCHANGE_SUBHEADER_CG_START, /* arg1 == vid of target character */
  647. EXCHANGE_SUBHEADER_CG_ITEM_ADD, /* arg1 == position of item */
  648. EXCHANGE_SUBHEADER_CG_ITEM_DEL, /* arg1 == position of item */
  649. EXCHANGE_SUBHEADER_CG_ELK_ADD, /* arg1 == amount of gold */
  650. EXCHANGE_SUBHEADER_CG_ACCEPT, /* arg1 == not used */
  651. EXCHANGE_SUBHEADER_CG_CANCEL, /* arg1 == not used */
  652. };
  653. typedef struct command_exchange
  654. {
  655. BYTE header;
  656. BYTE sub_header;
  657. DWORD arg1;
  658. BYTE arg2;
  659. TItemPos Pos;
  660. } TPacketCGExchange;
  661. typedef struct command_position
  662. {
  663. BYTE header;
  664. BYTE position;
  665. } TPacketCGPosition;
  666. typedef struct command_script_answer
  667. {
  668. BYTE header;
  669. BYTE answer;
  670. //char file[32 + 1];
  671. //BYTE answer[16 + 1];
  672. } TPacketCGScriptAnswer;
  673. typedef struct command_script_button
  674. {
  675. BYTE header;
  676. unsigned int idx;
  677. } TPacketCGScriptButton;
  678. typedef struct command_quest_input_string
  679. {
  680. BYTE header;
  681. char msg[64+1];
  682. } TPacketCGQuestInputString;
  683. typedef struct command_quest_confirm
  684. {
  685. BYTE header;
  686. BYTE answer;
  687. DWORD requestPID;
  688. } TPacketCGQuestConfirm;
  689. /*
  690. * 서버 측에서 보내는 패킷
  691. */
  692. typedef struct packet_quest_confirm
  693. {
  694. BYTE header;
  695. char msg[64+1];
  696. long timeout;
  697. DWORD requestPID;
  698. } TPacketGCQuestConfirm;
  699. typedef struct packet_handshake
  700. {
  701. BYTE bHeader;
  702. DWORD dwHandshake;
  703. DWORD dwTime;
  704. long lDelta;
  705. } TPacketGCHandshake;
  706. enum EPhase
  707. {
  708. PHASE_CLOSE,
  709. PHASE_HANDSHAKE,
  710. PHASE_LOGIN,
  711. PHASE_SELECT,
  712. PHASE_LOADING,
  713. PHASE_GAME,
  714. PHASE_DEAD,
  715. PHASE_CLIENT_CONNECTING,
  716. PHASE_DBCLIENT,
  717. PHASE_P2P,
  718. PHASE_AUTH,
  719. PHASE_TEEN,
  720. PHASE_PASSPOD,
  721. };
  722. typedef struct packet_phase
  723. {
  724. BYTE header;
  725. BYTE phase;
  726. } TPacketGCPhase;
  727. typedef struct packet_bindudp
  728. {
  729. BYTE header;
  730. DWORD addr;
  731. WORD port;
  732. } TPacketGCBindUDP;
  733. enum
  734. {
  735. LOGIN_FAILURE_ALREADY = 1,
  736. LOGIN_FAILURE_ID_NOT_EXIST = 2,
  737. LOGIN_FAILURE_WRONG_PASS = 3,
  738. LOGIN_FAILURE_FALSE = 4,
  739. LOGIN_FAILURE_NOT_TESTOR = 5,
  740. LOGIN_FAILURE_NOT_TEST_TIME = 6,
  741. LOGIN_FAILURE_FULL = 7
  742. };
  743. typedef struct packet_login_success
  744. {
  745. BYTE bHeader;
  746. TSimplePlayer players[PLAYER_PER_ACCOUNT];
  747. DWORD guild_id[PLAYER_PER_ACCOUNT];
  748. char guild_name[PLAYER_PER_ACCOUNT][GUILD_NAME_MAX_LEN+1];
  749. DWORD handle;
  750. DWORD random_key;
  751. } TPacketGCLoginSuccess;
  752. typedef struct packet_auth_success
  753. {
  754. BYTE bHeader;
  755. DWORD dwLoginKey;
  756. BYTE bResult;
  757. } TPacketGCAuthSuccess;
  758. typedef struct packet_auth_success_openid
  759. {
  760. BYTE bHeader;
  761. DWORD dwLoginKey;
  762. BYTE bResult;
  763. char login[LOGIN_MAX_LEN + 1];
  764. } TPacketGCAuthSuccessOpenID;
  765. typedef struct packet_login_failure
  766. {
  767. BYTE header;
  768. char szStatus[ACCOUNT_STATUS_MAX_LEN + 1];
  769. } TPacketGCLoginFailure;
  770. typedef struct packet_create_failure
  771. {
  772. BYTE header;
  773. BYTE bType;
  774. } TPacketGCCreateFailure;
  775. enum
  776. {
  777. ADD_CHARACTER_STATE_DEAD = (1 << 0),
  778. ADD_CHARACTER_STATE_SPAWN = (1 << 1),
  779. ADD_CHARACTER_STATE_GUNGON = (1 << 2),
  780. ADD_CHARACTER_STATE_KILLER = (1 << 3),
  781. ADD_CHARACTER_STATE_PARTY = (1 << 4),
  782. };
  783. enum ECharacterEquipmentPart
  784. {
  785. CHR_EQUIPPART_ARMOR,
  786. CHR_EQUIPPART_WEAPON,
  787. CHR_EQUIPPART_HEAD,
  788. CHR_EQUIPPART_HAIR,
  789. CHR_EQUIPPART_NUM,
  790. };
  791. typedef struct packet_add_char
  792. {
  793. BYTE header;
  794. DWORD dwVID;
  795. float angle;
  796. long x;
  797. long y;
  798. long z;
  799. BYTE bType;
  800. WORD wRaceNum;
  801. BYTE bMovingSpeed;
  802. BYTE bAttackSpeed;
  803. BYTE bStateFlag;
  804. DWORD dwAffectFlag[2]; // 효과
  805. } TPacketGCCharacterAdd;
  806. typedef struct packet_char_additional_info
  807. {
  808. BYTE header;
  809. DWORD dwVID;
  810. char name[CHARACTER_NAME_MAX_LEN + 1];
  811. WORD awPart[CHR_EQUIPPART_NUM];
  812. BYTE bEmpire;
  813. DWORD dwGuildID;
  814. DWORD dwLevel;
  815. short sAlignment;
  816. BYTE bPKMode;
  817. DWORD dwMountVnum;
  818. } TPacketGCCharacterAdditionalInfo;
  819. /*
  820. typedef struct packet_update_char_old
  821. {
  822. BYTE header;
  823. DWORD dwVID;
  824. WORD awPart[CHR_EQUIPPART_NUM];
  825. BYTE bMovingSpeed;
  826. BYTE bAttackSpeed;
  827. BYTE bStateFlag;
  828. DWORD dwAffectFlag[2];
  829. DWORD dwGuildID;
  830. short sAlignment;
  831. BYTE bPKMode;
  832. DWORD dwMountVnum;
  833. } TPacketGCCharacterUpdateOld;
  834. */
  835. typedef struct packet_update_char
  836. {
  837. BYTE header;
  838. DWORD dwVID;
  839. WORD awPart[CHR_EQUIPPART_NUM];
  840. BYTE bMovingSpeed;
  841. BYTE bAttackSpeed;
  842. BYTE bStateFlag;
  843. DWORD dwAffectFlag[2];
  844. DWORD dwGuildID;
  845. short sAlignment;
  846. BYTE bPKMode;
  847. DWORD dwMountVnum;
  848. //WORD wRaceNum;
  849. #ifdef ENABLE_AUTO_HUNTING_SYSTEM
  850. bool bAutoHuntStatus;
  851. #endif
  852. } TPacketGCCharacterUpdate;
  853. typedef struct packet_del_char
  854. {
  855. BYTE header;
  856. DWORD id;
  857. } TPacketGCCharacterDelete;
  858. typedef struct packet_chat // 가변 패킷
  859. {
  860. BYTE header;
  861. WORD size;
  862. BYTE type;
  863. DWORD id;
  864. BYTE bEmpire;
  865. } TPacketGCChat;
  866. typedef struct packet_whisper // 가변 패킷
  867. {
  868. BYTE bHeader;
  869. WORD wSize;
  870. BYTE bType;
  871. char szNameFrom[CHARACTER_NAME_MAX_LEN + 1];
  872. } TPacketGCWhisper;
  873. typedef struct packet_main_character
  874. {
  875. BYTE header;
  876. DWORD dwVID;
  877. WORD wRaceNum;
  878. char szName[CHARACTER_NAME_MAX_LEN + 1];
  879. long lx, ly, lz;
  880. BYTE empire;
  881. BYTE skill_group;
  882. } TPacketGCMainCharacter;
  883. // SUPPORT_BGM
  884. typedef struct packet_main_character3_bgm
  885. {
  886. enum
  887. {
  888. MUSIC_NAME_LEN = 24,
  889. };
  890. BYTE header;
  891. DWORD dwVID;
  892. WORD wRaceNum;
  893. char szChrName[CHARACTER_NAME_MAX_LEN + 1];
  894. char szBGMName[MUSIC_NAME_LEN + 1];
  895. long lx, ly, lz;
  896. BYTE empire;
  897. BYTE skill_group;
  898. } TPacketGCMainCharacter3_BGM;
  899. typedef struct packet_main_character4_bgm_vol
  900. {
  901. enum
  902. {
  903. MUSIC_NAME_LEN = 24,
  904. };
  905. BYTE header;
  906. DWORD dwVID;
  907. WORD wRaceNum;
  908. char szChrName[CHARACTER_NAME_MAX_LEN + 1];
  909. char szBGMName[MUSIC_NAME_LEN + 1];
  910. float fBGMVol;
  911. long lx, ly, lz;
  912. BYTE empire;
  913. BYTE skill_group;
  914. } TPacketGCMainCharacter4_BGM_VOL;
  915. // END_OF_SUPPORT_BGM
  916. typedef struct packet_points
  917. {
  918. BYTE header;
  919. INT points[POINT_MAX_NUM];
  920. } TPacketGCPoints;
  921. typedef struct packet_skill_level
  922. {
  923. BYTE bHeader;
  924. TPlayerSkill skills[SKILL_MAX_NUM];
  925. } TPacketGCSkillLevel;
  926. typedef struct packet_point_change
  927. {
  928. int header;
  929. DWORD dwVID;
  930. BYTE type;
  931. long amount;
  932. long value;
  933. } TPacketGCPointChange;
  934. typedef struct packet_stun
  935. {
  936. BYTE header;
  937. DWORD vid;
  938. } TPacketGCStun;
  939. typedef struct packet_dead
  940. {
  941. BYTE header;
  942. DWORD vid;
  943. } TPacketGCDead;
  944. struct TPacketGCItemDelDeprecated
  945. {
  946. BYTE header;
  947. TItemPos Cell;
  948. DWORD vnum;
  949. BYTE count;
  950. long alSockets[ITEM_SOCKET_MAX_NUM];
  951. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  952. };
  953. typedef struct packet_item_set
  954. {
  955. BYTE header;
  956. TItemPos Cell;
  957. DWORD vnum;
  958. BYTE count;
  959. DWORD flags;
  960. DWORD anti_flags;
  961. bool highlight;
  962. long alSockets[ITEM_SOCKET_MAX_NUM];
  963. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  964. } TPacketGCItemSet;
  965. typedef struct packet_item_del
  966. {
  967. BYTE header;
  968. BYTE pos;
  969. } TPacketGCItemDel;
  970. struct packet_item_use
  971. {
  972. BYTE header;
  973. TItemPos Cell;
  974. DWORD ch_vid;
  975. DWORD victim_vid;
  976. DWORD vnum;
  977. };
  978. struct packet_item_move
  979. {
  980. BYTE header;
  981. TItemPos Cell;
  982. TItemPos CellTo;
  983. };
  984. typedef struct packet_item_update
  985. {
  986. BYTE header;
  987. TItemPos Cell;
  988. BYTE count;
  989. long alSockets[ITEM_SOCKET_MAX_NUM];
  990. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  991. } TPacketGCItemUpdate;
  992. typedef struct packet_item_ground_add
  993. {
  994. BYTE bHeader;
  995. long x, y, z;
  996. DWORD dwVID;
  997. DWORD dwVnum;
  998. } TPacketGCItemGroundAdd;
  999. typedef struct packet_item_ownership
  1000. {
  1001. BYTE bHeader;
  1002. DWORD dwVID;
  1003. char szName[CHARACTER_NAME_MAX_LEN + 1];
  1004. } TPacketGCItemOwnership;
  1005. typedef struct packet_item_ground_del
  1006. {
  1007. BYTE bHeader;
  1008. DWORD dwVID;
  1009. } TPacketGCItemGroundDel;
  1010. struct packet_quickslot_add
  1011. {
  1012. BYTE header;
  1013. BYTE pos;
  1014. TQuickslot slot;
  1015. };
  1016. struct packet_quickslot_del
  1017. {
  1018. BYTE header;
  1019. BYTE pos;
  1020. };
  1021. struct packet_quickslot_swap
  1022. {
  1023. BYTE header;
  1024. BYTE pos;
  1025. BYTE pos_to;
  1026. };
  1027. struct packet_motion
  1028. {
  1029. BYTE header;
  1030. DWORD vid;
  1031. DWORD victim_vid;
  1032. WORD motion;
  1033. };
  1034. enum EPacketShopSubHeaders
  1035. {
  1036. SHOP_SUBHEADER_GC_START,
  1037. SHOP_SUBHEADER_GC_END,
  1038. SHOP_SUBHEADER_GC_UPDATE_ITEM,
  1039. SHOP_SUBHEADER_GC_UPDATE_PRICE,
  1040. SHOP_SUBHEADER_GC_OK,
  1041. SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY,
  1042. SHOP_SUBHEADER_GC_SOLDOUT,
  1043. SHOP_SUBHEADER_GC_INVENTORY_FULL,
  1044. SHOP_SUBHEADER_GC_INVALID_POS,
  1045. SHOP_SUBHEADER_GC_SOLD_OUT,
  1046. SHOP_SUBHEADER_GC_START_EX,
  1047. SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY_EX,
  1048. };
  1049. struct packet_shop_item
  1050. {
  1051. DWORD vnum;
  1052. #ifdef FULL_YANG
  1053. long long price;
  1054. #else
  1055. DWORD price;
  1056. #endif
  1057. BYTE count;
  1058. BYTE display_pos;
  1059. long alSockets[ITEM_SOCKET_MAX_NUM];
  1060. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1061. };
  1062. typedef struct packet_shop_start
  1063. {
  1064. DWORD owner_vid;
  1065. struct packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM];
  1066. } TPacketGCShopStart;
  1067. typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴.
  1068. {
  1069. typedef struct sub_packet_shop_tab
  1070. {
  1071. char name[SHOP_TAB_NAME_MAX];
  1072. BYTE coin_type;
  1073. packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM];
  1074. } TSubPacketShopTab;
  1075. DWORD owner_vid;
  1076. BYTE shop_tab_count;
  1077. } TPacketGCShopStartEx;
  1078. typedef struct packet_shop_update_item
  1079. {
  1080. BYTE pos;
  1081. struct packet_shop_item item;
  1082. } TPacketGCShopUpdateItem;
  1083. typedef struct packet_shop_update_price
  1084. {
  1085. int iPrice;
  1086. } TPacketGCShopUpdatePrice;
  1087. typedef struct packet_shop // 가변 패킷
  1088. {
  1089. BYTE header;
  1090. WORD size;
  1091. BYTE subheader;
  1092. } TPacketGCShop;
  1093. struct packet_exchange
  1094. {
  1095. BYTE header;
  1096. BYTE sub_header;
  1097. BYTE is_me;
  1098. DWORD arg1; // vnum
  1099. TItemPos arg2; // cell
  1100. DWORD arg3; // count
  1101. long alSockets[ITEM_SOCKET_MAX_NUM];
  1102. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1103. };
  1104. enum EPacketTradeSubHeaders
  1105. {
  1106. EXCHANGE_SUBHEADER_GC_START, /* arg1 == vid */
  1107. EXCHANGE_SUBHEADER_GC_ITEM_ADD, /* arg1 == vnum arg2 == pos arg3 == count */
  1108. EXCHANGE_SUBHEADER_GC_ITEM_DEL,
  1109. EXCHANGE_SUBHEADER_GC_GOLD_ADD, /* arg1 == gold */
  1110. EXCHANGE_SUBHEADER_GC_ACCEPT, /* arg1 == accept */
  1111. EXCHANGE_SUBHEADER_GC_END, /* arg1 == not used */
  1112. EXCHANGE_SUBHEADER_GC_ALREADY, /* arg1 == not used */
  1113. EXCHANGE_SUBHEADER_GC_LESS_GOLD, /* arg1 == not used */
  1114. };
  1115. struct packet_position
  1116. {
  1117. BYTE header;
  1118. DWORD vid;
  1119. BYTE position;
  1120. };
  1121. typedef struct packet_ping
  1122. {
  1123. BYTE header;
  1124. } TPacketGCPing;
  1125. struct packet_script
  1126. {
  1127. BYTE header;
  1128. WORD size;
  1129. BYTE skin;
  1130. WORD src_size;
  1131. };
  1132. typedef struct packet_change_speed
  1133. {
  1134. BYTE header;
  1135. DWORD vid;
  1136. WORD moving_speed;
  1137. } TPacketGCChangeSpeed;
  1138. struct packet_mount
  1139. {
  1140. BYTE header;
  1141. DWORD vid;
  1142. DWORD mount_vid;
  1143. BYTE pos;
  1144. DWORD x, y;
  1145. };
  1146. typedef struct packet_move
  1147. {
  1148. BYTE bHeader;
  1149. BYTE bFunc;
  1150. BYTE bArg;
  1151. BYTE bRot;
  1152. DWORD dwVID;
  1153. long lX;
  1154. long lY;
  1155. DWORD dwTime;
  1156. DWORD dwDuration;
  1157. } TPacketGCMove;
  1158. // 소유권
  1159. typedef struct packet_ownership
  1160. {
  1161. BYTE bHeader;
  1162. DWORD dwOwnerVID;
  1163. DWORD dwVictimVID;
  1164. } TPacketGCOwnership;
  1165. // 위치 동기화 패킷의 bCount 만큼 붙는 단위
  1166. typedef struct packet_sync_position_element
  1167. {
  1168. DWORD dwVID;
  1169. long lX;
  1170. long lY;
  1171. } TPacketGCSyncPositionElement;
  1172. // 위치 동기화
  1173. typedef struct packet_sync_position // 가변 패킷
  1174. {
  1175. BYTE bHeader;
  1176. WORD wSize; // 개수 = (wSize - sizeof(TPacketGCSyncPosition)) / sizeof(TPacketGCSyncPositionElement)
  1177. } TPacketGCSyncPosition;
  1178. typedef struct packet_fly
  1179. {
  1180. BYTE bHeader;
  1181. BYTE bType;
  1182. DWORD dwStartVID;
  1183. DWORD dwEndVID;
  1184. } TPacketGCCreateFly;
  1185. typedef struct command_fly_targeting
  1186. {
  1187. BYTE bHeader;
  1188. DWORD dwTargetVID;
  1189. long x, y;
  1190. } TPacketCGFlyTargeting;
  1191. typedef struct packet_fly_targeting
  1192. {
  1193. BYTE bHeader;
  1194. DWORD dwShooterVID;
  1195. DWORD dwTargetVID;
  1196. long x, y;
  1197. } TPacketGCFlyTargeting;
  1198. typedef struct packet_shoot
  1199. {
  1200. BYTE bHeader;
  1201. BYTE bType;
  1202. } TPacketCGShoot;
  1203. typedef struct packet_duel_start
  1204. {
  1205. BYTE header;
  1206. WORD wSize; // DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4
  1207. } TPacketGCDuelStart;
  1208. enum EPVPModes
  1209. {
  1210. PVP_MODE_NONE,
  1211. PVP_MODE_AGREE,
  1212. PVP_MODE_FIGHT,
  1213. PVP_MODE_REVENGE
  1214. };
  1215. typedef struct packet_pvp
  1216. {
  1217. BYTE bHeader;
  1218. DWORD dwVIDSrc;
  1219. DWORD dwVIDDst;
  1220. BYTE bMode; // 0 이면 끔, 1이면 켬
  1221. } TPacketGCPVP;
  1222. typedef struct command_use_skill
  1223. {
  1224. BYTE bHeader;
  1225. DWORD dwVnum;
  1226. DWORD dwVID;
  1227. } TPacketCGUseSkill;
  1228. typedef struct command_target
  1229. {
  1230. BYTE header;
  1231. DWORD dwVID;
  1232. } TPacketCGTarget;
  1233. typedef struct packet_target
  1234. {
  1235. BYTE header;
  1236. DWORD dwVID;
  1237. BYTE bHPPercent;
  1238. } TPacketGCTarget;
  1239. #ifdef __SEND_TARGET_INFO__
  1240. typedef struct packet_target_info
  1241. {
  1242. BYTE header;
  1243. DWORD dwVID;
  1244. DWORD race;
  1245. DWORD dwVnum;
  1246. BYTE count;
  1247. } TPacketGCTargetInfo;
  1248. typedef struct packet_target_info_load
  1249. {
  1250. BYTE header;
  1251. DWORD dwVID;
  1252. } TPacketCGTargetInfoLoad;
  1253. #endif
  1254. typedef struct packet_warp
  1255. {
  1256. BYTE bHeader;
  1257. long lX;
  1258. long lY;
  1259. long lAddr;
  1260. WORD wPort;
  1261. } TPacketGCWarp;
  1262. typedef struct command_warp
  1263. {
  1264. BYTE bHeader;
  1265. } TPacketCGWarp;
  1266. struct packet_quest_info
  1267. {
  1268. BYTE header;
  1269. WORD size;
  1270. WORD index;
  1271. BYTE flag;
  1272. };
  1273. enum
  1274. {
  1275. MESSENGER_SUBHEADER_GC_LIST,
  1276. MESSENGER_SUBHEADER_GC_LOGIN,
  1277. MESSENGER_SUBHEADER_GC_LOGOUT,
  1278. MESSENGER_SUBHEADER_GC_INVITE,
  1279. MESSENGER_SUBHEADER_GC_MOBILE
  1280. };
  1281. typedef struct packet_messenger
  1282. {
  1283. BYTE header;
  1284. WORD size;
  1285. BYTE subheader;
  1286. } TPacketGCMessenger;
  1287. typedef struct packet_messenger_guild_list
  1288. {
  1289. BYTE connected;
  1290. BYTE length;
  1291. //char login[LOGIN_MAX_LEN+1];
  1292. } TPacketGCMessengerGuildList;
  1293. typedef struct packet_messenger_guild_login
  1294. {
  1295. BYTE length;
  1296. //char login[LOGIN_MAX_LEN+1];
  1297. } TPacketGCMessengerGuildLogin;
  1298. typedef struct packet_messenger_guild_logout
  1299. {
  1300. BYTE length;
  1301. //char login[LOGIN_MAX_LEN+1];
  1302. } TPacketGCMessengerGuildLogout;
  1303. typedef struct packet_messenger_list_offline
  1304. {
  1305. BYTE connected; // always 0
  1306. BYTE length;
  1307. } TPacketGCMessengerListOffline;
  1308. typedef struct packet_messenger_list_online
  1309. {
  1310. BYTE connected; // always 1
  1311. BYTE length;
  1312. } TPacketGCMessengerListOnline;
  1313. enum
  1314. {
  1315. MESSENGER_SUBHEADER_CG_ADD_BY_VID,
  1316. MESSENGER_SUBHEADER_CG_ADD_BY_NAME,
  1317. MESSENGER_SUBHEADER_CG_REMOVE,
  1318. MESSENGER_SUBHEADER_CG_INVITE_ANSWER,
  1319. };
  1320. typedef struct command_messenger
  1321. {
  1322. BYTE header;
  1323. BYTE subheader;
  1324. } TPacketCGMessenger;
  1325. typedef struct command_messenger_add_by_vid
  1326. {
  1327. DWORD vid;
  1328. } TPacketCGMessengerAddByVID;
  1329. typedef struct command_messenger_add_by_name
  1330. {
  1331. BYTE length;
  1332. //char login[LOGIN_MAX_LEN+1];
  1333. } TPacketCGMessengerAddByName;
  1334. typedef struct command_messenger_remove
  1335. {
  1336. char login[LOGIN_MAX_LEN+1];
  1337. //DWORD account;
  1338. } TPacketCGMessengerRemove;
  1339. typedef struct command_safebox_checkout
  1340. {
  1341. BYTE bHeader;
  1342. BYTE bSafePos;
  1343. TItemPos ItemPos;
  1344. } TPacketCGSafeboxCheckout;
  1345. typedef struct command_safebox_checkin
  1346. {
  1347. BYTE bHeader;
  1348. BYTE bSafePos;
  1349. TItemPos ItemPos;
  1350. } TPacketCGSafeboxCheckin;
  1351. ///////////////////////////////////////////////////////////////////////////////////
  1352. // Party
  1353. typedef struct command_party_parameter
  1354. {
  1355. BYTE bHeader;
  1356. BYTE bDistributeMode;
  1357. } TPacketCGPartyParameter;
  1358. typedef struct paryt_parameter
  1359. {
  1360. BYTE bHeader;
  1361. BYTE bDistributeMode;
  1362. } TPacketGCPartyParameter;
  1363. typedef struct packet_party_add
  1364. {
  1365. BYTE header;
  1366. DWORD pid;
  1367. char name[CHARACTER_NAME_MAX_LEN+1];
  1368. } TPacketGCPartyAdd;
  1369. typedef struct command_party_invite
  1370. {
  1371. BYTE header;
  1372. DWORD vid;
  1373. } TPacketCGPartyInvite;
  1374. typedef struct packet_party_invite
  1375. {
  1376. BYTE header;
  1377. DWORD leader_vid;
  1378. } TPacketGCPartyInvite;
  1379. typedef struct command_party_invite_answer
  1380. {
  1381. BYTE header;
  1382. DWORD leader_vid;
  1383. BYTE accept;
  1384. } TPacketCGPartyInviteAnswer;
  1385. typedef struct packet_party_update
  1386. {
  1387. BYTE header;
  1388. DWORD pid;
  1389. BYTE role;
  1390. BYTE percent_hp;
  1391. short affects[7];
  1392. } TPacketGCPartyUpdate;
  1393. typedef struct packet_party_remove
  1394. {
  1395. BYTE header;
  1396. DWORD pid;
  1397. } TPacketGCPartyRemove;
  1398. typedef struct packet_party_link
  1399. {
  1400. BYTE header;
  1401. DWORD pid;
  1402. DWORD vid;
  1403. } TPacketGCPartyLink;
  1404. typedef struct packet_party_unlink
  1405. {
  1406. BYTE header;
  1407. DWORD pid;
  1408. DWORD vid;
  1409. } TPacketGCPartyUnlink;
  1410. typedef struct command_party_remove
  1411. {
  1412. BYTE header;
  1413. DWORD pid;
  1414. } TPacketCGPartyRemove;
  1415. typedef struct command_party_set_state
  1416. {
  1417. BYTE header;
  1418. DWORD pid;
  1419. BYTE byRole;
  1420. BYTE flag;
  1421. } TPacketCGPartySetState;
  1422. enum
  1423. {
  1424. PARTY_SKILL_HEAL = 1,
  1425. PARTY_SKILL_WARP = 2
  1426. };
  1427. typedef struct command_party_use_skill
  1428. {
  1429. BYTE header;
  1430. BYTE bySkillIndex;
  1431. DWORD vid;
  1432. } TPacketCGPartyUseSkill;
  1433. typedef struct packet_safebox_size
  1434. {
  1435. BYTE bHeader;
  1436. BYTE bSize;
  1437. } TPacketCGSafeboxSize;
  1438. typedef struct packet_safebox_wrong_password
  1439. {
  1440. BYTE bHeader;
  1441. } TPacketCGSafeboxWrongPassword;
  1442. typedef struct command_empire
  1443. {
  1444. BYTE bHeader;
  1445. BYTE bEmpire;
  1446. } TPacketCGEmpire;
  1447. typedef struct packet_empire
  1448. {
  1449. BYTE bHeader;
  1450. BYTE bEmpire;
  1451. } TPacketGCEmpire;
  1452. enum
  1453. {
  1454. SAFEBOX_MONEY_STATE_SAVE,
  1455. SAFEBOX_MONEY_STATE_WITHDRAW,
  1456. };
  1457. typedef struct command_safebox_money
  1458. {
  1459. BYTE bHeader;
  1460. BYTE bState;
  1461. long lMoney;
  1462. } TPacketCGSafeboxMoney;
  1463. typedef struct packet_safebox_money_change
  1464. {
  1465. BYTE bHeader;
  1466. long lMoney;
  1467. } TPacketGCSafeboxMoneyChange;
  1468. // Guild
  1469. enum
  1470. {
  1471. GUILD_SUBHEADER_GC_LOGIN,
  1472. GUILD_SUBHEADER_GC_LOGOUT,
  1473. GUILD_SUBHEADER_GC_LIST,
  1474. GUILD_SUBHEADER_GC_GRADE,
  1475. GUILD_SUBHEADER_GC_ADD,
  1476. GUILD_SUBHEADER_GC_REMOVE,
  1477. GUILD_SUBHEADER_GC_GRADE_NAME,
  1478. GUILD_SUBHEADER_GC_GRADE_AUTH,
  1479. GUILD_SUBHEADER_GC_INFO,
  1480. GUILD_SUBHEADER_GC_COMMENTS,
  1481. GUILD_SUBHEADER_GC_CHANGE_EXP,
  1482. GUILD_SUBHEADER_GC_CHANGE_MEMBER_GRADE,
  1483. GUILD_SUBHEADER_GC_SKILL_INFO,
  1484. GUILD_SUBHEADER_GC_CHANGE_MEMBER_GENERAL,
  1485. GUILD_SUBHEADER_GC_GUILD_INVITE,
  1486. GUILD_SUBHEADER_GC_WAR,
  1487. GUILD_SUBHEADER_GC_GUILD_NAME,
  1488. GUILD_SUBHEADER_GC_GUILD_WAR_LIST,
  1489. GUILD_SUBHEADER_GC_GUILD_WAR_END_LIST,
  1490. GUILD_SUBHEADER_GC_WAR_SCORE,
  1491. GUILD_SUBHEADER_GC_MONEY_CHANGE,
  1492. };
  1493. enum GUILD_SUBHEADER_CG
  1494. {
  1495. GUILD_SUBHEADER_CG_ADD_MEMBER,
  1496. GUILD_SUBHEADER_CG_REMOVE_MEMBER,
  1497. GUILD_SUBHEADER_CG_CHANGE_GRADE_NAME,
  1498. GUILD_SUBHEADER_CG_CHANGE_GRADE_AUTHORITY,
  1499. GUILD_SUBHEADER_CG_OFFER,
  1500. GUILD_SUBHEADER_CG_POST_COMMENT,
  1501. GUILD_SUBHEADER_CG_DELETE_COMMENT,
  1502. GUILD_SUBHEADER_CG_REFRESH_COMMENT,
  1503. GUILD_SUBHEADER_CG_CHANGE_MEMBER_GRADE,
  1504. GUILD_SUBHEADER_CG_USE_SKILL,
  1505. GUILD_SUBHEADER_CG_CHANGE_MEMBER_GENERAL,
  1506. GUILD_SUBHEADER_CG_GUILD_INVITE_ANSWER,
  1507. GUILD_SUBHEADER_CG_CHARGE_GSP,
  1508. GUILD_SUBHEADER_CG_DEPOSIT_MONEY,
  1509. GUILD_SUBHEADER_CG_WITHDRAW_MONEY,
  1510. };
  1511. typedef struct packet_guild
  1512. {
  1513. BYTE header;
  1514. WORD size;
  1515. BYTE subheader;
  1516. } TPacketGCGuild;
  1517. typedef struct packet_guild_name_t
  1518. {
  1519. BYTE header;
  1520. WORD size;
  1521. BYTE subheader;
  1522. DWORD guildID;
  1523. char guildName[GUILD_NAME_MAX_LEN];
  1524. } TPacketGCGuildName;
  1525. typedef struct packet_guild_war
  1526. {
  1527. DWORD dwGuildSelf;
  1528. DWORD dwGuildOpp;
  1529. BYTE bType;
  1530. BYTE bWarState;
  1531. } TPacketGCGuildWar;
  1532. typedef struct command_guild
  1533. {
  1534. BYTE header;
  1535. BYTE subheader;
  1536. } TPacketCGGuild;
  1537. typedef struct command_guild_answer_make_guild
  1538. {
  1539. BYTE header;
  1540. char guild_name[GUILD_NAME_MAX_LEN+1];
  1541. } TPacketCGAnswerMakeGuild;
  1542. typedef struct command_guild_use_skill
  1543. {
  1544. DWORD dwVnum;
  1545. DWORD dwPID;
  1546. } TPacketCGGuildUseSkill;
  1547. // Guild Mark
  1548. typedef struct command_mark_login
  1549. {
  1550. BYTE header;
  1551. DWORD handle;
  1552. DWORD random_key;
  1553. } TPacketCGMarkLogin;
  1554. typedef struct command_mark_upload
  1555. {
  1556. BYTE header;
  1557. DWORD gid;
  1558. BYTE image[16*12*4];
  1559. } TPacketCGMarkUpload;
  1560. typedef struct command_mark_idxlist
  1561. {
  1562. BYTE header;
  1563. } TPacketCGMarkIDXList;
  1564. typedef struct command_mark_crclist
  1565. {
  1566. BYTE header;
  1567. BYTE imgIdx;
  1568. DWORD crclist[80];
  1569. } TPacketCGMarkCRCList;
  1570. typedef struct packet_mark_idxlist
  1571. {
  1572. BYTE header;
  1573. DWORD bufSize;
  1574. WORD count;
  1575. //뒤에 size * (WORD + WORD)만큼 데이터 붙음
  1576. } TPacketGCMarkIDXList;
  1577. typedef struct packet_mark_block
  1578. {
  1579. BYTE header;
  1580. DWORD bufSize;
  1581. BYTE imgIdx;
  1582. DWORD count;
  1583. // 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음
  1584. } TPacketGCMarkBlock;
  1585. typedef struct command_symbol_upload
  1586. {
  1587. BYTE header;
  1588. WORD size;
  1589. DWORD guild_id;
  1590. } TPacketCGGuildSymbolUpload;
  1591. typedef struct command_symbol_crc
  1592. {
  1593. BYTE header;
  1594. DWORD guild_id;
  1595. DWORD crc;
  1596. DWORD size;
  1597. } TPacketCGSymbolCRC;
  1598. typedef struct packet_symbol_data
  1599. {
  1600. BYTE header;
  1601. WORD size;
  1602. DWORD guild_id;
  1603. } TPacketGCGuildSymbolData;
  1604. // Fishing
  1605. typedef struct command_fishing
  1606. {
  1607. BYTE header;
  1608. BYTE dir;
  1609. } TPacketCGFishing;
  1610. typedef struct packet_fishing
  1611. {
  1612. BYTE header;
  1613. BYTE subheader;
  1614. DWORD info;
  1615. BYTE dir;
  1616. } TPacketGCFishing;
  1617. enum
  1618. {
  1619. FISHING_SUBHEADER_GC_START,
  1620. FISHING_SUBHEADER_GC_STOP,
  1621. FISHING_SUBHEADER_GC_REACT,
  1622. FISHING_SUBHEADER_GC_SUCCESS,
  1623. FISHING_SUBHEADER_GC_FAIL,
  1624. FISHING_SUBHEADER_GC_FISH,
  1625. };
  1626. typedef struct command_give_item
  1627. {
  1628. BYTE byHeader;
  1629. DWORD dwTargetVID;
  1630. TItemPos ItemPos;
  1631. BYTE byItemCount;
  1632. } TPacketCGGiveItem;
  1633. typedef struct SPacketCGHack
  1634. {
  1635. BYTE bHeader;
  1636. char szBuf[255 + 1];
  1637. } TPacketCGHack;
  1638. // SubHeader - Dungeon
  1639. enum
  1640. {
  1641. DUNGEON_SUBHEADER_GC_TIME_ATTACK_START = 0,
  1642. DUNGEON_SUBHEADER_GC_DESTINATION_POSITION = 1,
  1643. };
  1644. typedef struct packet_dungeon
  1645. {
  1646. BYTE bHeader;
  1647. WORD size;
  1648. BYTE subheader;
  1649. } TPacketGCDungeon;
  1650. typedef struct packet_dungeon_dest_position
  1651. {
  1652. long x;
  1653. long y;
  1654. } TPacketGCDungeonDestPosition;
  1655. typedef struct SPacketGCShopSign
  1656. {
  1657. BYTE bHeader;
  1658. DWORD dwVID;
  1659. char szSign[SHOP_SIGN_MAX_LEN + 1];
  1660. } TPacketGCShopSign;
  1661. typedef struct SPacketCGMyShop
  1662. {
  1663. BYTE bHeader;
  1664. char szSign[SHOP_SIGN_MAX_LEN + 1];
  1665. BYTE bCount;
  1666. #ifdef OFFLINE_SHOP
  1667. BYTE days;
  1668. #endif
  1669. } TPacketCGMyShop;
  1670. typedef struct SPacketGCTime
  1671. {
  1672. BYTE bHeader;
  1673. time_t time;
  1674. } TPacketGCTime;
  1675. enum
  1676. {
  1677. WALKMODE_RUN,
  1678. WALKMODE_WALK,
  1679. };
  1680. typedef struct SPacketGCWalkMode
  1681. {
  1682. BYTE header;
  1683. DWORD vid;
  1684. BYTE mode;
  1685. } TPacketGCWalkMode;
  1686. typedef struct SPacketGCChangeSkillGroup
  1687. {
  1688. BYTE header;
  1689. BYTE skill_group;
  1690. } TPacketGCChangeSkillGroup;
  1691. typedef struct SPacketCGRefine
  1692. {
  1693. BYTE header;
  1694. BYTE pos;
  1695. BYTE type;
  1696. } TPacketCGRefine;
  1697. typedef struct SPacketCGRequestRefineInfo
  1698. {
  1699. BYTE header;
  1700. BYTE pos;
  1701. } TPacketCGRequestRefineInfo;
  1702. typedef struct SPacketGCRefineInformaion
  1703. {
  1704. BYTE header;
  1705. BYTE type;
  1706. BYTE pos;
  1707. DWORD src_vnum;
  1708. DWORD result_vnum;
  1709. BYTE material_count;
  1710. int cost; // 소요 비용
  1711. int prob; // 확률
  1712. TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
  1713. } TPacketGCRefineInformation;
  1714. struct TNPCPosition
  1715. {
  1716. BYTE bType;
  1717. char name[CHARACTER_NAME_MAX_LEN+1];
  1718. long x;
  1719. long y;
  1720. };
  1721. typedef struct SPacketGCNPCPosition
  1722. {
  1723. BYTE header;
  1724. WORD size;
  1725. WORD count;
  1726. // array of TNPCPosition
  1727. } TPacketGCNPCPosition;
  1728. typedef struct SPacketGCSpecialEffect
  1729. {
  1730. BYTE header;
  1731. BYTE type;
  1732. DWORD vid;
  1733. } TPacketGCSpecialEffect;
  1734. typedef struct SPacketCGChangeName
  1735. {
  1736. BYTE header;
  1737. BYTE index;
  1738. char name[CHARACTER_NAME_MAX_LEN+1];
  1739. } TPacketCGChangeName;
  1740. typedef struct SPacketGCChangeName
  1741. {
  1742. BYTE header;
  1743. DWORD pid;
  1744. char name[CHARACTER_NAME_MAX_LEN+1];
  1745. } TPacketGCChangeName;
  1746. typedef struct command_client_version
  1747. {
  1748. BYTE header;
  1749. char filename[32+1];
  1750. char timestamp[32+1];
  1751. } TPacketCGClientVersion;
  1752. typedef struct command_client_version2
  1753. {
  1754. BYTE header;
  1755. char filename[32+1];
  1756. char timestamp[32+1];
  1757. } TPacketCGClientVersion2;
  1758. typedef struct packet_channel
  1759. {
  1760. BYTE header;
  1761. BYTE channel;
  1762. } TPacketGCChannel;
  1763. typedef struct SEquipmentItemSet
  1764. {
  1765. DWORD vnum;
  1766. BYTE count;
  1767. long alSockets[ITEM_SOCKET_MAX_NUM];
  1768. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1769. } TEquipmentItemSet;
  1770. typedef struct pakcet_view_equip
  1771. {
  1772. BYTE header;
  1773. DWORD vid;
  1774. TEquipmentItemSet equips[WEAR_MAX_NUM];
  1775. } TPacketViewEquip;
  1776. typedef struct
  1777. {
  1778. DWORD dwID;
  1779. long x, y;
  1780. long width, height;
  1781. DWORD dwGuildID;
  1782. } TLandPacketElement;
  1783. typedef struct packet_land_list
  1784. {
  1785. BYTE header;
  1786. WORD size;
  1787. } TPacketGCLandList;
  1788. typedef struct
  1789. {
  1790. BYTE bHeader;
  1791. long lID;
  1792. char szName[32+1];
  1793. DWORD dwVID;
  1794. BYTE bType;
  1795. } TPacketGCTargetCreate;
  1796. typedef struct
  1797. {
  1798. BYTE bHeader;
  1799. long lID;
  1800. long lX, lY;
  1801. } TPacketGCTargetUpdate;
  1802. typedef struct
  1803. {
  1804. BYTE bHeader;
  1805. long lID;
  1806. } TPacketGCTargetDelete;
  1807. typedef struct
  1808. {
  1809. BYTE bHeader;
  1810. TPacketAffectElement elem;
  1811. } TPacketGCAffectAdd;
  1812. typedef struct
  1813. {
  1814. BYTE bHeader;
  1815. DWORD dwType;
  1816. BYTE bApplyOn;
  1817. } TPacketGCAffectRemove;
  1818. typedef struct packet_lover_info
  1819. {
  1820. BYTE header;
  1821. char name[CHARACTER_NAME_MAX_LEN + 1];
  1822. BYTE love_point;
  1823. } TPacketGCLoverInfo;
  1824. typedef struct packet_love_point_update
  1825. {
  1826. BYTE header;
  1827. BYTE love_point;
  1828. } TPacketGCLovePointUpdate;
  1829. // MINING
  1830. typedef struct packet_dig_motion
  1831. {
  1832. BYTE header;
  1833. DWORD vid;
  1834. DWORD target_vid;
  1835. BYTE count;
  1836. } TPacketGCDigMotion;
  1837. // END_OF_MINING
  1838. // SCRIPT_SELECT_ITEM
  1839. typedef struct command_script_select_item
  1840. {
  1841. BYTE header;
  1842. DWORD selection;
  1843. } TPacketCGScriptSelectItem;
  1844. // END_OF_SCRIPT_SELECT_ITEM
  1845. typedef struct packet_damage_info
  1846. {
  1847. BYTE header;
  1848. DWORD dwVID;
  1849. BYTE flag;
  1850. int damage;
  1851. } TPacketGCDamageInfo;
  1852. enum
  1853. {
  1854. RUNUP_MATRIX_ANSWER_MAX_LEN = 4,
  1855. RUNUP_MATRIX_QUIZ_MAX_LEN = 8 ,
  1856. };
  1857. typedef struct packet_runup_matrix_quiz
  1858. {
  1859. BYTE bHeader;
  1860. char szQuiz[RUNUP_MATRIX_QUIZ_MAX_LEN + 1];
  1861. } TPacketGCRunupMatrixQuiz;
  1862. typedef struct command_runup_matrix_answer
  1863. {
  1864. BYTE bHeader;
  1865. char szAnswer[RUNUP_MATRIX_ANSWER_MAX_LEN + 1];
  1866. } TPacketCGRunupMatrixAnswer;
  1867. typedef struct packet_passpod
  1868. {
  1869. BYTE bHeader;
  1870. char szAnswer[8+1];
  1871. } TPacketCGPasspod;
  1872. typedef struct packet_passpod_failed
  1873. {
  1874. BYTE bHeader;
  1875. char szMessage[128];
  1876. } TPacketCGPasspodFailed;
  1877. typedef struct tag_GGSiege
  1878. {
  1879. BYTE bHeader;
  1880. BYTE bEmpire;
  1881. BYTE bTowerCount;
  1882. } TPacketGGSiege;
  1883. typedef struct SPacketGGMonarchTransfer
  1884. {
  1885. BYTE bHeader;
  1886. DWORD dwTargetPID;
  1887. long x;
  1888. long y;
  1889. } TPacketMonarchGGTransfer;
  1890. typedef struct SPacketGGPCBangUpdate
  1891. {
  1892. BYTE bHeader;
  1893. unsigned long ulPCBangID;
  1894. } TPacketPCBangUpdate;
  1895. typedef struct SPacketGGCheckAwakeness
  1896. {
  1897. BYTE bHeader;
  1898. } TPacketGGCheckAwakeness;
  1899. typedef struct SPacketGCPanamaPack
  1900. {
  1901. BYTE bHeader;
  1902. char szPackName[256];
  1903. BYTE abIV[32];
  1904. } TPacketGCPanamaPack;
  1905. //TODO : 아우 짱나..가변패킷 사이즈 받아들일수 있게 패킷 핸들러 Refactoring 하자.
  1906. typedef struct SPacketGCHybridCryptKeys
  1907. {
  1908. SPacketGCHybridCryptKeys() : m_pStream(NULL) {}
  1909. ~SPacketGCHybridCryptKeys()
  1910. {
  1911. //GCC 에선 NULL delete 해도 괜찮나? 일단 안전하게 NULL 체크 하자. ( 근데 이거 C++ 표준아니었나 --a )
  1912. if( m_pStream )
  1913. {
  1914. delete[] m_pStream;
  1915. m_pStream = NULL;
  1916. }
  1917. }
  1918. DWORD GetStreamSize()
  1919. {
  1920. return sizeof(bHeader) + sizeof(WORD) + sizeof(int) + KeyStreamLen;
  1921. }
  1922. BYTE* GetStreamData()
  1923. {
  1924. if( m_pStream )
  1925. delete[] m_pStream;
  1926. uDynamicPacketSize = (WORD)GetStreamSize();
  1927. m_pStream = new BYTE[ uDynamicPacketSize ];
  1928. memcpy( m_pStream, &bHeader, 1 );
  1929. memcpy( m_pStream+1, &uDynamicPacketSize, 2 );
  1930. memcpy( m_pStream+3, &KeyStreamLen, 4 );
  1931. if( KeyStreamLen > 0 )
  1932. memcpy( m_pStream+7, pDataKeyStream, KeyStreamLen );
  1933. return m_pStream;
  1934. }
  1935. BYTE bHeader;
  1936. WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
  1937. int KeyStreamLen;
  1938. BYTE* pDataKeyStream;
  1939. private:
  1940. BYTE* m_pStream;
  1941. } TPacketGCHybridCryptKeys;
  1942. typedef struct SPacketGCPackageSDB
  1943. {
  1944. SPacketGCPackageSDB() : m_pDataSDBStream(NULL), m_pStream(NULL) {}
  1945. ~SPacketGCPackageSDB()
  1946. {
  1947. if( m_pStream )
  1948. {
  1949. delete[] m_pStream;
  1950. m_pStream = NULL;
  1951. }
  1952. }
  1953. DWORD GetStreamSize()
  1954. {
  1955. return sizeof(bHeader) + sizeof(WORD) + sizeof(int) + iStreamLen;
  1956. }
  1957. BYTE* GetStreamData()
  1958. {
  1959. if( m_pStream )
  1960. delete[] m_pStream;
  1961. uDynamicPacketSize = GetStreamSize();
  1962. m_pStream = new BYTE[ uDynamicPacketSize ];
  1963. memcpy( m_pStream, &bHeader, 1 );
  1964. memcpy( m_pStream+1, &uDynamicPacketSize, 2 );
  1965. memcpy( m_pStream+3, &iStreamLen, 4 );
  1966. if( iStreamLen > 0 )
  1967. memcpy( m_pStream+7, m_pDataSDBStream, iStreamLen );
  1968. return m_pStream;
  1969. }
  1970. BYTE bHeader;
  1971. WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
  1972. int iStreamLen;
  1973. BYTE* m_pDataSDBStream;
  1974. private:
  1975. BYTE* m_pStream;
  1976. } TPacketGCPackageSDB;
  1977. #ifdef _IMPROVED_PACKET_ENCRYPTION_
  1978. struct TPacketKeyAgreement
  1979. {
  1980. static const int MAX_DATA_LEN = 256;
  1981. BYTE bHeader;
  1982. WORD wAgreedLength;
  1983. WORD wDataLength;
  1984. BYTE data[MAX_DATA_LEN];
  1985. };
  1986. struct TPacketKeyAgreementCompleted
  1987. {
  1988. BYTE bHeader;
  1989. BYTE data[3]; // dummy (not used)
  1990. };
  1991. #endif // _IMPROVED_PACKET_ENCRYPTION_
  1992. #define MAX_EFFECT_FILE_NAME 128
  1993. typedef struct SPacketGCSpecificEffect
  1994. {
  1995. BYTE header;
  1996. DWORD vid;
  1997. char effect_file[MAX_EFFECT_FILE_NAME];
  1998. } TPacketGCSpecificEffect;
  1999. // 용혼석
  2000. enum EDragonSoulRefineWindowRefineType
  2001. {
  2002. DragonSoulRefineWindow_UPGRADE,
  2003. DragonSoulRefineWindow_IMPROVEMENT,
  2004. DragonSoulRefineWindow_REFINE,
  2005. };
  2006. enum EPacketCGDragonSoulSubHeaderType
  2007. {
  2008. DS_SUB_HEADER_OPEN,
  2009. DS_SUB_HEADER_CLOSE,
  2010. DS_SUB_HEADER_DO_REFINE_GRADE,
  2011. DS_SUB_HEADER_DO_REFINE_STEP,
  2012. DS_SUB_HEADER_DO_REFINE_STRENGTH,
  2013. DS_SUB_HEADER_REFINE_FAIL,
  2014. DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE,
  2015. DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL,
  2016. DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY,
  2017. DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL,
  2018. DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL,
  2019. DS_SUB_HEADER_REFINE_SUCCEED,
  2020. };
  2021. typedef struct SPacketCGDragonSoulRefine
  2022. {
  2023. SPacketCGDragonSoulRefine() : header (HEADER_CG_DRAGON_SOUL_REFINE)
  2024. {}
  2025. BYTE header;
  2026. BYTE bSubType;
  2027. TItemPos ItemGrid[DRAGON_SOUL_REFINE_GRID_SIZE];
  2028. } TPacketCGDragonSoulRefine;
  2029. typedef struct SPacketGCDragonSoulRefine
  2030. {
  2031. SPacketGCDragonSoulRefine() : header(HEADER_GC_DRAGON_SOUL_REFINE)
  2032. {}
  2033. BYTE header;
  2034. BYTE bSubType;
  2035. TItemPos Pos;
  2036. } TPacketGCDragonSoulRefine;
  2037. typedef struct SPacketCGStateCheck
  2038. {
  2039. BYTE header;
  2040. unsigned long key;
  2041. unsigned long index;
  2042. } TPacketCGStateCheck;
  2043. typedef struct SPacketGCStateCheck
  2044. {
  2045. BYTE header;
  2046. unsigned long key;
  2047. unsigned long index;
  2048. unsigned char state;
  2049. } TPacketGCStateCheck;
  2050. #ifdef ENABLE_SHOW_CHEST_DROP
  2051. enum
  2052. {
  2053. HEADER_CG_CHEST_DROP_INFO = 215,
  2054. HEADER_GC_CHEST_DROP_INFO = 220,
  2055. };
  2056. typedef struct SPacketCGChestDropInfo
  2057. {
  2058. BYTE header;
  2059. WORD wInventoryCell;
  2060. } TPacketCGChestDropInfo;
  2061. typedef struct SChestDropInfoTable
  2062. {
  2063. BYTE bPageIndex;
  2064. BYTE bSlotIndex;
  2065. DWORD dwItemVnum;
  2066. BYTE bItemCount;
  2067. } TChestDropInfoTable;
  2068. typedef struct SPacketGCChestDropInfo
  2069. {
  2070. BYTE bHeader;
  2071. WORD wSize;
  2072. DWORD dwChestVnum;
  2073. } TPacketGCChestDropInfo;
  2074. #endif
  2075. #pragma pack()
  2076. #endif