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

Server