1. #ifndef __INC_TABLES_H__
  2. #define __INC_TABLES_H__
  3. #include "service.h"
  4. #include "length.h"
  5. #include "item_length.h"
  6. typedef DWORD IDENT;
  7. /**
  8. * @version 05/06/10 Bang2ni - Myshop Pricelist 관련 패킷 HEADER_XX_MYSHOP_PRICELIST_XXX 추가
  9. */
  10. enum
  11. {
  12. HEADER_GD_LOGIN = 1,
  13. HEADER_GD_LOGOUT = 2,
  14. HEADER_GD_PLAYER_LOAD = 3,
  15. HEADER_GD_PLAYER_SAVE = 4,
  16. HEADER_GD_PLAYER_CREATE = 5,
  17. HEADER_GD_PLAYER_DELETE = 6,
  18. HEADER_GD_LOGIN_KEY = 7,
  19. // 8 empty
  20. HEADER_GD_BOOT = 9,
  21. HEADER_GD_PLAYER_COUNT = 10,
  22. HEADER_GD_QUEST_SAVE = 11,
  23. HEADER_GD_SAFEBOX_LOAD = 12,
  24. HEADER_GD_SAFEBOX_SAVE = 13,
  25. HEADER_GD_SAFEBOX_CHANGE_SIZE = 14,
  26. HEADER_GD_EMPIRE_SELECT = 15,
  27. HEADER_GD_SAFEBOX_CHANGE_PASSWORD = 16,
  28. HEADER_GD_SAFEBOX_CHANGE_PASSWORD_SECOND = 17, // Not really a packet, used internal
  29. HEADER_GD_DIRECT_ENTER = 18,
  30. HEADER_GD_GUILD_SKILL_UPDATE = 19,
  31. HEADER_GD_GUILD_EXP_UPDATE = 20,
  32. HEADER_GD_GUILD_ADD_MEMBER = 21,
  33. HEADER_GD_GUILD_REMOVE_MEMBER = 22,
  34. HEADER_GD_GUILD_CHANGE_GRADE = 23,
  35. HEADER_GD_GUILD_CHANGE_MEMBER_DATA = 24,
  36. HEADER_GD_GUILD_DISBAND = 25,
  37. HEADER_GD_GUILD_WAR = 26,
  38. HEADER_GD_GUILD_WAR_SCORE = 27,
  39. HEADER_GD_GUILD_CREATE = 28,
  40. HEADER_GD_ITEM_SAVE = 30,
  41. HEADER_GD_ITEM_DESTROY = 31,
  42. HEADER_GD_ADD_AFFECT = 32,
  43. HEADER_GD_REMOVE_AFFECT = 33,
  44. HEADER_GD_HIGHSCORE_REGISTER = 34,
  45. HEADER_GD_ITEM_FLUSH = 35,
  46. HEADER_GD_PARTY_CREATE = 36,
  47. HEADER_GD_PARTY_DELETE = 37,
  48. HEADER_GD_PARTY_ADD = 38,
  49. HEADER_GD_PARTY_REMOVE = 39,
  50. HEADER_GD_PARTY_STATE_CHANGE = 40,
  51. HEADER_GD_PARTY_HEAL_USE = 41,
  52. HEADER_GD_FLUSH_CACHE = 42,
  53. HEADER_GD_RELOAD_PROTO = 43,
  54. HEADER_GD_CHANGE_NAME = 44,
  55. HEADER_GD_GUILD_CHANGE_LADDER_POINT = 46,
  56. HEADER_GD_GUILD_USE_SKILL = 47,
  57. HEADER_GD_REQUEST_EMPIRE_PRIV = 48,
  58. HEADER_GD_REQUEST_GUILD_PRIV = 49,
  59. HEADER_GD_MONEY_LOG = 50,
  60. HEADER_GD_GUILD_DEPOSIT_MONEY = 51,
  61. HEADER_GD_GUILD_WITHDRAW_MONEY = 52,
  62. HEADER_GD_GUILD_WITHDRAW_MONEY_GIVE_REPLY = 53,
  63. HEADER_GD_REQUEST_CHARACTER_PRIV = 54,
  64. HEADER_GD_SET_EVENT_FLAG = 55,
  65. HEADER_GD_PARTY_SET_MEMBER_LEVEL = 56,
  66. HEADER_GD_GUILD_WAR_BET = 57,
  67. HEADER_GD_CREATE_OBJECT = 60,
  68. HEADER_GD_DELETE_OBJECT = 61,
  69. HEADER_GD_UPDATE_LAND = 62,
  70. HEADER_GD_MARRIAGE_ADD = 70,
  71. HEADER_GD_MARRIAGE_UPDATE = 71,
  72. HEADER_GD_MARRIAGE_REMOVE = 72,
  73. HEADER_GD_WEDDING_REQUEST = 73,
  74. HEADER_GD_WEDDING_READY = 74,
  75. HEADER_GD_WEDDING_END = 75,
  76. HEADER_GD_AUTH_LOGIN = 100,
  77. HEADER_GD_LOGIN_BY_KEY = 101,
  78. HEADER_GD_MALL_LOAD = 107,
  79. HEADER_GD_MYSHOP_PRICELIST_UPDATE = 108, ///< 가격정보 갱신 요청
  80. HEADER_GD_MYSHOP_PRICELIST_REQ = 109, ///< 가격정보 리스트 요청
  81. HEADER_GD_BLOCK_CHAT = 110,
  82. // PCBANG_IP_LIST_BY_AUTH
  83. HEADER_GD_PCBANG_REQUEST_IP_LIST = 111,
  84. HEADER_GD_PCBANG_CLEAR_IP_LIST = 112,
  85. HEADER_GD_PCBANG_INSERT_IP = 113,
  86. // END_OF_PCBANG_IP_LIST_BY_AUTH
  87. HEADER_GD_HAMMER_OF_TOR = 114,
  88. HEADER_GD_RELOAD_ADMIN = 115, ///<운영자 정보 요청
  89. HEADER_GD_BREAK_MARRIAGE = 116, ///< 결혼 파기
  90. HEADER_GD_REQ_CHANGE_GUILD_MASTER = 129,
  91. HEADER_GD_REQ_SPARE_ITEM_ID_RANGE = 130,
  92. HEADER_GD_UPDATE_HORSE_NAME = 131,
  93. HEADER_GD_REQ_HORSE_NAME = 132,
  94. HEADER_GD_DC = 133, // Login Key를 지움
  95. HEADER_GD_VALID_LOGOUT = 134,
  96. HEADER_GD_REQUEST_CHARGE_CASH = 137,
  97. HEADER_GD_DELETE_AWARDID = 138, // delete gift notify icon
  98. HEADER_GD_UPDATE_CHANNELSTATUS = 139,
  99. HEADER_GD_REQUEST_CHANNELSTATUS = 140,
  100. #ifdef __ENABLE_NEW_OFFLINESHOP__
  101. HEADER_GD_NEW_OFFLINESHOP = 153,
  102. #endif
  103. HEADER_GD_SETUP = 0xff,
  104. ///////////////////////////////////////////////
  105. HEADER_DG_NOTICE = 1,
  106. HEADER_DG_LOGIN_SUCCESS = 30,
  107. HEADER_DG_LOGIN_NOT_EXIST = 31,
  108. HEADER_DG_LOGIN_WRONG_PASSWD = 33,
  109. HEADER_DG_LOGIN_ALREADY = 34,
  110. HEADER_DG_PLAYER_LOAD_SUCCESS = 35,
  111. HEADER_DG_PLAYER_LOAD_FAILED = 36,
  112. HEADER_DG_PLAYER_CREATE_SUCCESS = 37,
  113. HEADER_DG_PLAYER_CREATE_ALREADY = 38,
  114. HEADER_DG_PLAYER_CREATE_FAILED = 39,
  115. HEADER_DG_PLAYER_DELETE_SUCCESS = 40,
  116. HEADER_DG_PLAYER_DELETE_FAILED = 41,
  117. HEADER_DG_ITEM_LOAD = 42,
  118. HEADER_DG_BOOT = 43,
  119. HEADER_DG_QUEST_LOAD = 44,
  120. HEADER_DG_SAFEBOX_LOAD = 45,
  121. HEADER_DG_SAFEBOX_CHANGE_SIZE = 46,
  122. HEADER_DG_SAFEBOX_WRONG_PASSWORD = 47,
  123. HEADER_DG_SAFEBOX_CHANGE_PASSWORD_ANSWER = 48,
  124. HEADER_DG_EMPIRE_SELECT = 49,
  125. HEADER_DG_AFFECT_LOAD = 50,
  126. HEADER_DG_MALL_LOAD = 51,
  127. HEADER_DG_DIRECT_ENTER = 55,
  128. HEADER_DG_GUILD_SKILL_UPDATE = 56,
  129. HEADER_DG_GUILD_SKILL_RECHARGE = 57,
  130. HEADER_DG_GUILD_EXP_UPDATE = 58,
  131. HEADER_DG_PARTY_CREATE = 59,
  132. HEADER_DG_PARTY_DELETE = 60,
  133. HEADER_DG_PARTY_ADD = 61,
  134. HEADER_DG_PARTY_REMOVE = 62,
  135. HEADER_DG_PARTY_STATE_CHANGE = 63,
  136. HEADER_DG_PARTY_HEAL_USE = 64,
  137. HEADER_DG_PARTY_SET_MEMBER_LEVEL = 65,
  138. HEADER_DG_TIME = 90,
  139. HEADER_DG_ITEM_ID_RANGE = 91,
  140. HEADER_DG_GUILD_ADD_MEMBER = 92,
  141. HEADER_DG_GUILD_REMOVE_MEMBER = 93,
  142. HEADER_DG_GUILD_CHANGE_GRADE = 94,
  143. HEADER_DG_GUILD_CHANGE_MEMBER_DATA = 95,
  144. HEADER_DG_GUILD_DISBAND = 96,
  145. HEADER_DG_GUILD_WAR = 97,
  146. HEADER_DG_GUILD_WAR_SCORE = 98,
  147. HEADER_DG_GUILD_TIME_UPDATE = 99,
  148. HEADER_DG_GUILD_LOAD = 100,
  149. HEADER_DG_GUILD_LADDER = 101,
  150. HEADER_DG_GUILD_SKILL_USABLE_CHANGE = 102,
  151. HEADER_DG_GUILD_MONEY_CHANGE = 103,
  152. HEADER_DG_GUILD_WITHDRAW_MONEY_GIVE = 104,
  153. HEADER_DG_SET_EVENT_FLAG = 105,
  154. HEADER_DG_GUILD_WAR_RESERVE_ADD = 106,
  155. HEADER_DG_GUILD_WAR_RESERVE_DEL = 107,
  156. HEADER_DG_GUILD_WAR_BET = 108,
  157. HEADER_DG_RELOAD_PROTO = 120,
  158. HEADER_DG_CHANGE_NAME = 121,
  159. HEADER_DG_AUTH_LOGIN = 122,
  160. HEADER_DG_CHANGE_EMPIRE_PRIV = 124,
  161. HEADER_DG_CHANGE_GUILD_PRIV = 125,
  162. HEADER_DG_MONEY_LOG = 126,
  163. HEADER_DG_CHANGE_CHARACTER_PRIV = 127,
  164. HEADER_DG_CREATE_OBJECT = 140,
  165. HEADER_DG_DELETE_OBJECT = 141,
  166. HEADER_DG_UPDATE_LAND = 142,
  167. HEADER_DG_MARRIAGE_ADD = 150,
  168. HEADER_DG_MARRIAGE_UPDATE = 151,
  169. HEADER_DG_MARRIAGE_REMOVE = 152,
  170. HEADER_DG_WEDDING_REQUEST = 153,
  171. HEADER_DG_WEDDING_READY = 154,
  172. HEADER_DG_WEDDING_START = 155,
  173. HEADER_DG_WEDDING_END = 156,
  174. HEADER_DG_MYSHOP_PRICELIST_RES = 157, ///< 가격정보 리스트 응답
  175. HEADER_DG_RELOAD_ADMIN = 158, ///< 운영자 정보 리로드
  176. HEADER_DG_BREAK_MARRIAGE = 159, ///< 결혼 파기
  177. HEADER_DG_ACK_CHANGE_GUILD_MASTER = 173,
  178. HEADER_DG_ACK_SPARE_ITEM_ID_RANGE = 174,
  179. HEADER_DG_UPDATE_HORSE_NAME = 175,
  180. HEADER_DG_ACK_HORSE_NAME = 176,
  181. HEADER_DG_NEED_LOGIN_LOG = 177,
  182. HEADER_DG_RESULT_CHARGE_CASH = 179,
  183. HEADER_DG_ITEMAWARD_INFORMER = 180, //gift notify
  184. HEADER_DG_RESPOND_CHANNELSTATUS = 181,
  185. #ifdef __ENABLE_NEW_OFFLINESHOP__
  186. HEADER_DG_NEW_OFFLINESHOP = 190,
  187. #endif
  188. HEADER_DG_MAP_LOCATIONS = 0xfe,
  189. HEADER_DG_P2P = 0xff,
  190. };
  191. /* ----------------------------------------------
  192. * table
  193. * ----------------------------------------------
  194. */
  195. /* game Server -> DB Server */
  196. #pragma pack(1)
  197. enum ERequestChargeType
  198. {
  199. ERequestCharge_Cash = 0,
  200. ERequestCharge_Mileage,
  201. };
  202. typedef struct SRequestChargeCash
  203. {
  204. DWORD dwAID; // id(primary key) - Account Table
  205. DWORD dwAmount;
  206. ERequestChargeType eChargeType;
  207. } TRequestChargeCash;
  208. typedef struct SSimplePlayer
  209. {
  210. DWORD dwID;
  211. char szName[CHARACTER_NAME_MAX_LEN + 1];
  212. BYTE byJob;
  213. BYTE byLevel;
  214. DWORD dwPlayMinutes;
  215. BYTE byST, byHT, byDX, byIQ;
  216. WORD wMainPart;
  217. BYTE bChangeName;
  218. WORD wHairPart;
  219. BYTE bDummy[4];
  220. long x, y;
  221. long lAddr;
  222. WORD wPort;
  223. BYTE skill_group;
  224. } TSimplePlayer;
  225. typedef struct SAccountTable
  226. {
  227. DWORD id;
  228. char login[LOGIN_MAX_LEN + 1];
  229. char passwd[PASSWD_MAX_LEN + 1];
  230. char social_id[SOCIAL_ID_MAX_LEN + 1];
  231. char status[ACCOUNT_STATUS_MAX_LEN + 1];
  232. BYTE bEmpire;
  233. TSimplePlayer players[PLAYER_PER_ACCOUNT];
  234. } TAccountTable;
  235. typedef struct SPacketDGCreateSuccess
  236. {
  237. BYTE bAccountCharacterIndex;
  238. TSimplePlayer player;
  239. } TPacketDGCreateSuccess;
  240. typedef struct TPlayerItemAttribute
  241. {
  242. BYTE bType;
  243. short sValue;
  244. } TPlayerItemAttribute;
  245. typedef struct SPlayerItem
  246. {
  247. DWORD id;
  248. BYTE window;
  249. WORD pos;
  250. DWORD count;
  251. DWORD vnum;
  252. long alSockets[ITEM_SOCKET_MAX_NUM]; // 소켓번호
  253. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  254. DWORD owner;
  255. } TPlayerItem;
  256. typedef struct SQuickslot
  257. {
  258. BYTE type;
  259. BYTE pos;
  260. } TQuickslot;
  261. typedef struct SPlayerSkill
  262. {
  263. BYTE bMasterType;
  264. BYTE bLevel;
  265. time_t tNextRead;
  266. } TPlayerSkill;
  267. struct THorseInfo
  268. {
  269. BYTE bLevel;
  270. BYTE bRiding;
  271. short sStamina;
  272. short sHealth;
  273. DWORD dwHorseHealthDropTime;
  274. };
  275. typedef struct SPlayerTable
  276. {
  277. DWORD id;
  278. char name[CHARACTER_NAME_MAX_LEN + 1];
  279. char ip[IP_ADDRESS_LENGTH + 1];
  280. WORD job;
  281. BYTE voice;
  282. BYTE level;
  283. BYTE level_step;
  284. short st, ht, dx, iq;
  285. DWORD exp;
  286. INT gold;
  287. BYTE dir;
  288. INT x, y, z;
  289. INT lMapIndex;
  290. long lExitX, lExitY;
  291. long lExitMapIndex;
  292. int hp;
  293. int sp;
  294. short sRandomHP;
  295. short sRandomSP;
  296. int playtime;
  297. short stat_point;
  298. short skill_point;
  299. short sub_skill_point;
  300. short horse_skill_point;
  301. TPlayerSkill skills[SKILL_MAX_NUM];
  302. TQuickslot quickslot[QUICKSLOT_MAX_NUM];
  303. BYTE part_base;
  304. WORD parts[PART_MAX_NUM];
  305. short stamina;
  306. BYTE skill_group;
  307. long lAlignment;
  308. short stat_reset_count;
  309. THorseInfo horse;
  310. DWORD logoff_interval;
  311. int aiPremiumTimes[PREMIUM_MAX_NUM];
  312. } TPlayerTable;
  313. typedef struct SMobSkillLevel
  314. {
  315. DWORD dwVnum;
  316. BYTE bLevel;
  317. } TMobSkillLevel;
  318. typedef struct SEntityTable
  319. {
  320. DWORD dwVnum;
  321. } TEntityTable;
  322. typedef struct SMobTable : public SEntityTable
  323. {
  324. char szName[CHARACTER_NAME_MAX_LEN + 1];
  325. char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
  326. BYTE bType; // Monster, NPC
  327. BYTE bRank; // PAWN, KNIGHT, KING
  328. BYTE bBattleType; // MELEE, etc..
  329. BYTE bLevel; // Level
  330. BYTE bSize;
  331. DWORD dwGoldMin;
  332. DWORD dwGoldMax;
  333. DWORD dwExp;
  334. DWORD dwMaxHP;
  335. BYTE bRegenCycle;
  336. BYTE bRegenPercent;
  337. WORD wDef;
  338. DWORD dwAIFlag;
  339. DWORD dwRaceFlag;
  340. DWORD dwImmuneFlag;
  341. BYTE bStr, bDex, bCon, bInt;
  342. DWORD dwDamageRange[2];
  343. short sAttackSpeed;
  344. short sMovingSpeed;
  345. BYTE bAggresiveHPPct;
  346. WORD wAggressiveSight;
  347. WORD wAttackRange;
  348. char cEnchants[MOB_ENCHANTS_MAX_NUM];
  349. char cResists[MOB_RESISTS_MAX_NUM];
  350. DWORD dwResurrectionVnum;
  351. DWORD dwDropItemVnum;
  352. BYTE bMountCapacity;
  353. BYTE bOnClickType;
  354. BYTE bEmpire;
  355. char szFolder[64 + 1];
  356. float fDamMultiply;
  357. DWORD dwSummonVnum;
  358. DWORD dwDrainSP;
  359. DWORD dwMobColor;
  360. DWORD dwPolymorphItemVnum;
  361. TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
  362. BYTE bBerserkPoint;
  363. BYTE bStoneSkinPoint;
  364. BYTE bGodSpeedPoint;
  365. BYTE bDeathBlowPoint;
  366. BYTE bRevivePoint;
  367. } TMobTable;
  368. typedef struct SSkillTable
  369. {
  370. DWORD dwVnum;
  371. char szName[32 + 1];
  372. BYTE bType;
  373. BYTE bMaxLevel;
  374. DWORD dwSplashRange;
  375. char szPointOn[64];
  376. char szPointPoly[100 + 1];
  377. char szSPCostPoly[100 + 1];
  378. char szDurationPoly[100 + 1];
  379. char szDurationSPCostPoly[100 + 1];
  380. char szCooldownPoly[100 + 1];
  381. char szMasterBonusPoly[100 + 1];
  382. //char szAttackGradePoly[100 + 1];
  383. char szGrandMasterAddSPCostPoly[100 + 1];
  384. DWORD dwFlag;
  385. DWORD dwAffectFlag;
  386. // Data for secondary skill
  387. char szPointOn2[64];
  388. char szPointPoly2[100 + 1];
  389. char szDurationPoly2[100 + 1];
  390. DWORD dwAffectFlag2;
  391. // Data for grand master point
  392. char szPointOn3[64];
  393. char szPointPoly3[100 + 1];
  394. char szDurationPoly3[100 + 1];
  395. BYTE bLevelStep;
  396. BYTE bLevelLimit;
  397. DWORD preSkillVnum;
  398. BYTE preSkillLevel;
  399. long lMaxHit;
  400. char szSplashAroundDamageAdjustPoly[100 + 1];
  401. BYTE bSkillAttrType;
  402. DWORD dwTargetRange;
  403. } TSkillTable;
  404. typedef struct SShopItemTable
  405. {
  406. DWORD vnum;
  407. BYTE count;
  408. TItemPos pos; // PC 상점에만 이용
  409. DWORD price; // PC, shop_table_ex.txt 상점에만 이용
  410. BYTE display_pos; // PC, shop_table_ex.txt 상점에만 이용, 보일 위치.
  411. } TShopItemTable;
  412. typedef struct SShopTable
  413. {
  414. DWORD dwVnum;
  415. DWORD dwNPCVnum;
  416. BYTE byItemCount;
  417. TShopItemTable items[SHOP_HOST_ITEM_MAX_NUM];
  418. } TShopTable;
  419. #define QUEST_NAME_MAX_LEN 32
  420. #define QUEST_STATE_MAX_LEN 64
  421. typedef struct SQuestTable
  422. {
  423. DWORD dwPID;
  424. char szName[QUEST_NAME_MAX_LEN + 1];
  425. char szState[QUEST_STATE_MAX_LEN + 1];
  426. long lValue;
  427. } TQuestTable;
  428. typedef struct SItemLimit
  429. {
  430. BYTE bType;
  431. long lValue;
  432. } TItemLimit;
  433. typedef struct SItemApply
  434. {
  435. BYTE bType;
  436. long lValue;
  437. } TItemApply;
  438. typedef struct SItemTable : public SEntityTable
  439. {
  440. DWORD dwVnumRange;
  441. char szName[ITEM_NAME_MAX_LEN + 1];
  442. char szLocaleName[ITEM_NAME_MAX_LEN + 1];
  443. BYTE bType;
  444. BYTE bSubType;
  445. BYTE bWeight;
  446. BYTE bSize;
  447. DWORD dwAntiFlags;
  448. DWORD dwFlags;
  449. DWORD dwWearFlags;
  450. DWORD dwImmuneFlag;
  451. DWORD dwGold;
  452. DWORD dwShopBuyPrice;
  453. TItemLimit aLimits[ITEM_LIMIT_MAX_NUM];
  454. TItemApply aApplies[ITEM_APPLY_MAX_NUM];
  455. long alValues[ITEM_VALUES_MAX_NUM];
  456. long alSockets[ITEM_SOCKET_MAX_NUM];
  457. DWORD dwRefinedVnum;
  458. WORD wRefineSet;
  459. BYTE bAlterToMagicItemPct;
  460. BYTE bSpecular;
  461. BYTE bGainSocketPct;
  462. short int sAddonType; // 기본 속성
  463. // 아래 limit flag들은 realtime에 체크 할 일이 많고, 아이템 VNUM당 고정된 값인데,
  464. // 현재 구조대로 매번 아이템마다 필요한 경우에 LIMIT_MAX_NUM까지 루프돌면서 체크하는 부하가 커서 미리 저장 해 둠.
  465. char cLimitRealTimeFirstUseIndex; // 아이템 limit 필드값 중에서 LIMIT_REAL_TIME_FIRST_USE 플래그의 위치 (없으면 -1)
  466. char cLimitTimerBasedOnWearIndex; // 아이템 limit 필드값 중에서 LIMIT_TIMER_BASED_ON_WEAR 플래그의 위치 (없으면 -1)
  467. } TItemTable;
  468. struct TItemAttrTable
  469. {
  470. TItemAttrTable() :
  471. dwApplyIndex(0),
  472. dwProb(0)
  473. {
  474. szApply[0] = 0;
  475. memset(&lValues, 0, sizeof(lValues));
  476. memset(&bMaxLevelBySet, 0, sizeof(bMaxLevelBySet));
  477. }
  478. char szApply[APPLY_NAME_MAX_LEN + 1];
  479. DWORD dwApplyIndex;
  480. DWORD dwProb;
  481. long lValues[5];
  482. BYTE bMaxLevelBySet[ATTRIBUTE_SET_MAX_NUM];
  483. };
  484. typedef struct SConnectTable
  485. {
  486. char login[LOGIN_MAX_LEN + 1];
  487. IDENT ident;
  488. } TConnectTable;
  489. typedef struct SLoginPacket
  490. {
  491. char login[LOGIN_MAX_LEN + 1];
  492. char passwd[PASSWD_MAX_LEN + 1];
  493. } TLoginPacket;
  494. typedef struct SPlayerLoadPacket
  495. {
  496. DWORD account_id;
  497. DWORD player_id;
  498. BYTE account_index; /* account 에서의 위치 */
  499. } TPlayerLoadPacket;
  500. typedef struct SPlayerCreatePacket
  501. {
  502. char login[LOGIN_MAX_LEN + 1];
  503. char passwd[PASSWD_MAX_LEN + 1];
  504. DWORD account_id;
  505. BYTE account_index;
  506. TPlayerTable player_table;
  507. } TPlayerCreatePacket;
  508. typedef struct SPlayerDeletePacket
  509. {
  510. char login[LOGIN_MAX_LEN + 1];
  511. DWORD player_id;
  512. BYTE account_index;
  513. //char name[CHARACTER_NAME_MAX_LEN + 1];
  514. char private_code[8];
  515. } TPlayerDeletePacket;
  516. typedef struct SLogoutPacket
  517. {
  518. char login[LOGIN_MAX_LEN + 1];
  519. char passwd[PASSWD_MAX_LEN + 1];
  520. } TLogoutPacket;
  521. typedef struct SPlayerCountPacket
  522. {
  523. DWORD dwCount;
  524. } TPlayerCountPacket;
  525. #define SAFEBOX_MAX_NUM 135
  526. #define SAFEBOX_PASSWORD_MAX_LEN 6
  527. typedef struct SSafeboxTable
  528. {
  529. DWORD dwID;
  530. BYTE bSize;
  531. DWORD dwGold;
  532. WORD wItemCount;
  533. } TSafeboxTable;
  534. typedef struct SSafeboxChangeSizePacket
  535. {
  536. DWORD dwID;
  537. BYTE bSize;
  538. } TSafeboxChangeSizePacket;
  539. typedef struct SSafeboxLoadPacket
  540. {
  541. DWORD dwID;
  542. char szLogin[LOGIN_MAX_LEN + 1];
  543. char szPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
  544. } TSafeboxLoadPacket;
  545. typedef struct SSafeboxChangePasswordPacket
  546. {
  547. DWORD dwID;
  548. char szOldPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
  549. char szNewPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
  550. } TSafeboxChangePasswordPacket;
  551. typedef struct SSafeboxChangePasswordPacketAnswer
  552. {
  553. BYTE flag;
  554. } TSafeboxChangePasswordPacketAnswer;
  555. typedef struct SEmpireSelectPacket
  556. {
  557. DWORD dwAccountID;
  558. BYTE bEmpire;
  559. } TEmpireSelectPacket;
  560. typedef struct SPacketGDSetup
  561. {
  562. char szPublicIP[16]; // Public IP which listen to users
  563. BYTE bChannel; // 채널
  564. WORD wListenPort; // 클라이언트가 접속하는 포트 번호
  565. WORD wP2PPort; // 서버끼리 연결 시키는 P2P 포트 번호
  566. long alMaps[32];
  567. DWORD dwLoginCount;
  568. BYTE bAuthServer;
  569. } TPacketGDSetup;
  570. typedef struct SPacketDGMapLocations
  571. {
  572. BYTE bCount;
  573. } TPacketDGMapLocations;
  574. typedef struct SMapLocation
  575. {
  576. long alMaps[32];
  577. char szHost[MAX_HOST_LENGTH + 1];
  578. WORD wPort;
  579. } TMapLocation;
  580. typedef struct SPacketDGP2P
  581. {
  582. char szHost[MAX_HOST_LENGTH + 1];
  583. WORD wPort;
  584. BYTE bChannel;
  585. } TPacketDGP2P;
  586. typedef struct SPacketGDDirectEnter
  587. {
  588. char login[LOGIN_MAX_LEN + 1];
  589. char passwd[PASSWD_MAX_LEN + 1];
  590. BYTE index;
  591. } TPacketGDDirectEnter;
  592. typedef struct SPacketDGDirectEnter
  593. {
  594. TAccountTable accountTable;
  595. TPlayerTable playerTable;
  596. } TPacketDGDirectEnter;
  597. typedef struct SPacketGuildSkillUpdate
  598. {
  599. DWORD guild_id;
  600. int amount;
  601. BYTE skill_levels[12];
  602. BYTE skill_point;
  603. BYTE save;
  604. } TPacketGuildSkillUpdate;
  605. typedef struct SPacketGuildExpUpdate
  606. {
  607. DWORD guild_id;
  608. int amount;
  609. } TPacketGuildExpUpdate;
  610. typedef struct SPacketGuildChangeMemberData
  611. {
  612. DWORD guild_id;
  613. DWORD pid;
  614. DWORD offer;
  615. BYTE level;
  616. BYTE grade;
  617. } TPacketGuildChangeMemberData;
  618. typedef struct SPacketDGLoginAlready
  619. {
  620. char szLogin[LOGIN_MAX_LEN + 1];
  621. } TPacketDGLoginAlready;
  622. typedef struct TPacketAffectElement
  623. {
  624. DWORD dwType;
  625. BYTE bApplyOn;
  626. long lApplyValue;
  627. DWORD dwFlag;
  628. long lDuration;
  629. long lSPCost;
  630. } TPacketAffectElement;
  631. typedef struct SPacketGDAddAffect
  632. {
  633. DWORD dwPID;
  634. TPacketAffectElement elem;
  635. } TPacketGDAddAffect;
  636. typedef struct SPacketGDRemoveAffect
  637. {
  638. DWORD dwPID;
  639. DWORD dwType;
  640. BYTE bApplyOn;
  641. } TPacketGDRemoveAffect;
  642. typedef struct SPacketGDHighscore
  643. {
  644. DWORD dwPID;
  645. long lValue;
  646. char cDir;
  647. char szBoard[21];
  648. } TPacketGDHighscore;
  649. typedef struct SPacketPartyCreate
  650. {
  651. DWORD dwLeaderPID;
  652. } TPacketPartyCreate;
  653. typedef struct SPacketPartyDelete
  654. {
  655. DWORD dwLeaderPID;
  656. } TPacketPartyDelete;
  657. typedef struct SPacketPartyAdd
  658. {
  659. DWORD dwLeaderPID;
  660. DWORD dwPID;
  661. BYTE bState;
  662. } TPacketPartyAdd;
  663. typedef struct SPacketPartyRemove
  664. {
  665. DWORD dwLeaderPID;
  666. DWORD dwPID;
  667. } TPacketPartyRemove;
  668. typedef struct SPacketPartyStateChange
  669. {
  670. DWORD dwLeaderPID;
  671. DWORD dwPID;
  672. BYTE bRole;
  673. BYTE bFlag;
  674. } TPacketPartyStateChange;
  675. typedef struct SPacketPartySetMemberLevel
  676. {
  677. DWORD dwLeaderPID;
  678. DWORD dwPID;
  679. BYTE bLevel;
  680. } TPacketPartySetMemberLevel;
  681. typedef struct SPacketGDBoot
  682. {
  683. DWORD dwItemIDRange[2];
  684. char szIP[16];
  685. } TPacketGDBoot;
  686. typedef struct SPacketGuild
  687. {
  688. DWORD dwGuild;
  689. DWORD dwInfo;
  690. } TPacketGuild;
  691. typedef struct SPacketGDGuildAddMember
  692. {
  693. DWORD dwPID;
  694. DWORD dwGuild;
  695. BYTE bGrade;
  696. } TPacketGDGuildAddMember;
  697. typedef struct SPacketDGGuildMember
  698. {
  699. DWORD dwPID;
  700. DWORD dwGuild;
  701. BYTE bGrade;
  702. BYTE isGeneral;
  703. BYTE bJob;
  704. BYTE bLevel;
  705. DWORD dwOffer;
  706. char szName[CHARACTER_NAME_MAX_LEN + 1];
  707. } TPacketDGGuildMember;
  708. typedef struct SPacketGuildWar
  709. {
  710. BYTE bType;
  711. BYTE bWar;
  712. DWORD dwGuildFrom;
  713. DWORD dwGuildTo;
  714. long lWarPrice;
  715. long lInitialScore;
  716. } TPacketGuildWar;
  717. // Game -> DB : 상대적 변화값
  718. // DB -> Game : 토탈된 최종값
  719. typedef struct SPacketGuildWarScore
  720. {
  721. DWORD dwGuildGainPoint;
  722. DWORD dwGuildOpponent;
  723. long lScore;
  724. long lBetScore;
  725. } TPacketGuildWarScore;
  726. typedef struct SRefineMaterial
  727. {
  728. DWORD vnum;
  729. int count;
  730. } TRefineMaterial;
  731. typedef struct SRefineTable
  732. {
  733. //DWORD src_vnum;
  734. //DWORD result_vnum;
  735. DWORD id;
  736. BYTE material_count;
  737. int cost; // 소요 비용
  738. int prob; // 확률
  739. TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
  740. } TRefineTable;
  741. typedef struct SBanwordTable
  742. {
  743. char szWord[BANWORD_MAX_LEN + 1];
  744. } TBanwordTable;
  745. typedef struct SPacketGDChangeName
  746. {
  747. DWORD pid;
  748. char name[CHARACTER_NAME_MAX_LEN + 1];
  749. } TPacketGDChangeName;
  750. typedef struct SPacketDGChangeName
  751. {
  752. DWORD pid;
  753. char name[CHARACTER_NAME_MAX_LEN + 1];
  754. } TPacketDGChangeName;
  755. typedef struct SPacketGuildLadder
  756. {
  757. DWORD dwGuild;
  758. long lLadderPoint;
  759. long lWin;
  760. long lDraw;
  761. long lLoss;
  762. } TPacketGuildLadder;
  763. typedef struct SPacketGuildLadderPoint
  764. {
  765. DWORD dwGuild;
  766. long lChange;
  767. } TPacketGuildLadderPoint;
  768. typedef struct SPacketGuildUseSkill
  769. {
  770. DWORD dwGuild;
  771. DWORD dwSkillVnum;
  772. DWORD dwCooltime;
  773. } TPacketGuildUseSkill;
  774. typedef struct SPacketGuildSkillUsableChange
  775. {
  776. DWORD dwGuild;
  777. DWORD dwSkillVnum;
  778. BYTE bUsable;
  779. } TPacketGuildSkillUsableChange;
  780. typedef struct SPacketGDLoginKey
  781. {
  782. DWORD dwAccountID;
  783. DWORD dwLoginKey;
  784. } TPacketGDLoginKey;
  785. typedef struct SPacketGDAuthLogin
  786. {
  787. DWORD dwID;
  788. DWORD dwLoginKey;
  789. char szLogin[LOGIN_MAX_LEN + 1];
  790. char szSocialID[SOCIAL_ID_MAX_LEN + 1];
  791. DWORD adwClientKey[4];
  792. int iPremiumTimes[PREMIUM_MAX_NUM];
  793. } TPacketGDAuthLogin;
  794. typedef struct SPacketGDLoginByKey
  795. {
  796. char szLogin[LOGIN_MAX_LEN + 1];
  797. DWORD dwLoginKey;
  798. DWORD adwClientKey[4];
  799. char szIP[MAX_HOST_LENGTH + 1];
  800. } TPacketGDLoginByKey;
  801. /**
  802. * @version 05/06/08 Bang2ni - 지속시간 추가
  803. */
  804. typedef struct SPacketGiveGuildPriv
  805. {
  806. BYTE type;
  807. int value;
  808. DWORD guild_id;
  809. time_t duration_sec; ///< 지속시간
  810. } TPacketGiveGuildPriv;
  811. typedef struct SPacketGiveEmpirePriv
  812. {
  813. BYTE type;
  814. int value;
  815. BYTE empire;
  816. time_t duration_sec;
  817. } TPacketGiveEmpirePriv;
  818. typedef struct SPacketGiveCharacterPriv
  819. {
  820. BYTE type;
  821. int value;
  822. DWORD pid;
  823. } TPacketGiveCharacterPriv;
  824. typedef struct SPacketRemoveGuildPriv
  825. {
  826. BYTE type;
  827. DWORD guild_id;
  828. } TPacketRemoveGuildPriv;
  829. typedef struct SPacketRemoveEmpirePriv
  830. {
  831. BYTE type;
  832. BYTE empire;
  833. } TPacketRemoveEmpirePriv;
  834. typedef struct SPacketDGChangeCharacterPriv
  835. {
  836. BYTE type;
  837. int value;
  838. DWORD pid;
  839. BYTE bLog;
  840. } TPacketDGChangeCharacterPriv;
  841. /**
  842. * @version 05/06/08 Bang2ni - 지속시간 추가
  843. */
  844. typedef struct SPacketDGChangeGuildPriv
  845. {
  846. BYTE type;
  847. int value;
  848. DWORD guild_id;
  849. BYTE bLog;
  850. time_t end_time_sec; ///< 지속시간
  851. } TPacketDGChangeGuildPriv;
  852. typedef struct SPacketDGChangeEmpirePriv
  853. {
  854. BYTE type;
  855. int value;
  856. BYTE empire;
  857. BYTE bLog;
  858. time_t end_time_sec;
  859. } TPacketDGChangeEmpirePriv;
  860. typedef struct SPacketMoneyLog
  861. {
  862. BYTE type;
  863. DWORD vnum;
  864. INT gold;
  865. } TPacketMoneyLog;
  866. typedef struct SPacketGDGuildMoney
  867. {
  868. DWORD dwGuild;
  869. INT iGold;
  870. } TPacketGDGuildMoney;
  871. typedef struct SPacketDGGuildMoneyChange
  872. {
  873. DWORD dwGuild;
  874. INT iTotalGold;
  875. } TPacketDGGuildMoneyChange;
  876. typedef struct SPacketDGGuildMoneyWithdraw
  877. {
  878. DWORD dwGuild;
  879. INT iChangeGold;
  880. } TPacketDGGuildMoneyWithdraw;
  881. typedef struct SPacketGDGuildMoneyWithdrawGiveReply
  882. {
  883. DWORD dwGuild;
  884. INT iChangeGold;
  885. BYTE bGiveSuccess;
  886. } TPacketGDGuildMoneyWithdrawGiveReply;
  887. typedef struct SPacketSetEventFlag
  888. {
  889. char szFlagName[EVENT_FLAG_NAME_MAX_LEN + 1];
  890. long lValue;
  891. } TPacketSetEventFlag;
  892. typedef struct SPacketLoginOnSetup
  893. {
  894. DWORD dwID;
  895. char szLogin[LOGIN_MAX_LEN + 1];
  896. char szSocialID[SOCIAL_ID_MAX_LEN + 1];
  897. char szHost[MAX_HOST_LENGTH + 1];
  898. DWORD dwLoginKey;
  899. DWORD adwClientKey[4];
  900. } TPacketLoginOnSetup;
  901. typedef struct SPacketGDCreateObject
  902. {
  903. DWORD dwVnum;
  904. DWORD dwLandID;
  905. INT lMapIndex;
  906. INT x, y;
  907. float xRot;
  908. float yRot;
  909. float zRot;
  910. } TPacketGDCreateObject;
  911. typedef struct SPacketGDHammerOfTor
  912. {
  913. DWORD key;
  914. DWORD delay;
  915. } TPacketGDHammerOfTor;
  916. typedef struct SGuildReserve
  917. {
  918. DWORD dwID;
  919. DWORD dwGuildFrom;
  920. DWORD dwGuildTo;
  921. DWORD dwTime;
  922. BYTE bType;
  923. long lWarPrice;
  924. long lInitialScore;
  925. bool bStarted;
  926. DWORD dwBetFrom;
  927. DWORD dwBetTo;
  928. long lPowerFrom;
  929. long lPowerTo;
  930. long lHandicap;
  931. } TGuildWarReserve;
  932. typedef struct
  933. {
  934. DWORD dwWarID;
  935. char szLogin[LOGIN_MAX_LEN + 1];
  936. DWORD dwGold;
  937. DWORD dwGuild;
  938. } TPacketGDGuildWarBet;
  939. // Marriage
  940. typedef struct
  941. {
  942. DWORD dwPID1;
  943. DWORD dwPID2;
  944. time_t tMarryTime;
  945. char szName1[CHARACTER_NAME_MAX_LEN + 1];
  946. char szName2[CHARACTER_NAME_MAX_LEN + 1];
  947. } TPacketMarriageAdd;
  948. typedef struct
  949. {
  950. DWORD dwPID1;
  951. DWORD dwPID2;
  952. INT iLovePoint;
  953. BYTE byMarried;
  954. } TPacketMarriageUpdate;
  955. typedef struct
  956. {
  957. DWORD dwPID1;
  958. DWORD dwPID2;
  959. } TPacketMarriageRemove;
  960. typedef struct
  961. {
  962. DWORD dwPID1;
  963. DWORD dwPID2;
  964. } TPacketWeddingRequest;
  965. typedef struct
  966. {
  967. DWORD dwPID1;
  968. DWORD dwPID2;
  969. DWORD dwMapIndex;
  970. } TPacketWeddingReady;
  971. typedef struct
  972. {
  973. DWORD dwPID1;
  974. DWORD dwPID2;
  975. } TPacketWeddingStart;
  976. typedef struct
  977. {
  978. DWORD dwPID1;
  979. DWORD dwPID2;
  980. } TPacketWeddingEnd;
  981. /// 개인상점 가격정보의 헤더. 가변 패킷으로 이 뒤에 byCount 만큼의 TItemPriceInfo 가 온다.
  982. typedef struct SPacketMyshopPricelistHeader
  983. {
  984. DWORD dwOwnerID; ///< 가격정보를 가진 플레이어 ID
  985. BYTE byCount; ///< 가격정보 갯수
  986. } TPacketMyshopPricelistHeader;
  987. /// 개인상점의 단일 아이템에 대한 가격정보
  988. typedef struct SItemPriceInfo
  989. {
  990. DWORD dwVnum; ///< 아이템 vnum
  991. DWORD dwPrice; ///< 가격
  992. } TItemPriceInfo;
  993. /// 개인상점 아이템 가격정보 리스트 테이블
  994. typedef struct SItemPriceListTable
  995. {
  996. DWORD dwOwnerID; ///< 가격정보를 가진 플레이어 ID
  997. BYTE byCount; ///< 가격정보 리스트의 갯수
  998. TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< 가격정보 리스트
  999. } TItemPriceListTable;
  1000. typedef struct
  1001. {
  1002. char szName[CHARACTER_NAME_MAX_LEN + 1];
  1003. long lDuration;
  1004. } TPacketBlockChat;
  1005. // PCBANG_IP_LIST
  1006. typedef struct SPacketPCBangIP
  1007. {
  1008. DWORD id;
  1009. DWORD ip;
  1010. } TPacketPCBangIP;
  1011. // END_OF_PCBANG_IP_LIST
  1012. //ADMIN_MANAGER
  1013. typedef struct TAdminInfo
  1014. {
  1015. int m_ID; //고유ID
  1016. char m_szAccount[32]; //계정
  1017. char m_szName[32]; //캐릭터이름
  1018. char m_szContactIP[16]; //접근아이피
  1019. char m_szServerIP[16]; //서버아이피
  1020. int m_Authority; //권한
  1021. } tAdminInfo;
  1022. //END_ADMIN_MANAGER
  1023. //BOOT_LOCALIZATION
  1024. struct tLocale
  1025. {
  1026. char szValue[32];
  1027. char szKey[32];
  1028. };
  1029. //BOOT_LOCALIZATION
  1030. //RELOAD_ADMIN
  1031. typedef struct SPacketReloadAdmin
  1032. {
  1033. char szIP[16];
  1034. } TPacketReloadAdmin;
  1035. //END_RELOAD_ADMIN
  1036. typedef struct tChangeGuildMaster
  1037. {
  1038. DWORD dwGuildID;
  1039. DWORD idFrom;
  1040. DWORD idTo;
  1041. } TPacketChangeGuildMaster;
  1042. typedef struct tItemIDRange
  1043. {
  1044. DWORD dwMin;
  1045. DWORD dwMax;
  1046. DWORD dwUsableItemIDMin;
  1047. } TItemIDRangeTable;
  1048. typedef struct tUpdateHorseName
  1049. {
  1050. DWORD dwPlayerID;
  1051. char szHorseName[CHARACTER_NAME_MAX_LEN + 1];
  1052. } TPacketUpdateHorseName;
  1053. typedef struct tDC
  1054. {
  1055. char login[LOGIN_MAX_LEN + 1];
  1056. } TPacketDC;
  1057. typedef struct tNeedLoginLogInfo
  1058. {
  1059. DWORD dwPlayerID;
  1060. } TPacketNeedLoginLogInfo;
  1061. //독일 선물 알림 기능 테스트용 패킷 정보
  1062. typedef struct tItemAwardInformer
  1063. {
  1064. char login[LOGIN_MAX_LEN + 1];
  1065. char command[20]; //명령어
  1066. unsigned int vnum; //아이템
  1067. } TPacketItemAwardInfromer;
  1068. // 선물 알림 기능 삭제용 패킷 정보
  1069. typedef struct tDeleteAwardID
  1070. {
  1071. DWORD dwID;
  1072. } TPacketDeleteAwardID;
  1073. typedef struct SChannelStatus
  1074. {
  1075. short nPort;
  1076. BYTE bStatus;
  1077. } TChannelStatus;
  1078. #ifdef ENABLE_SWITCHBOT
  1079. struct TSwitchbotAttributeAlternativeTable
  1080. {
  1081. TPlayerItemAttribute attributes[MAX_NORM_ATTR_NUM];
  1082. bool IsConfigured() const
  1083. {
  1084. for (const auto& it : attributes)
  1085. {
  1086. if (it.bType && it.sValue)
  1087. {
  1088. return true;
  1089. }
  1090. }
  1091. return false;
  1092. }
  1093. };
  1094. struct TSwitchbotTable
  1095. {
  1096. DWORD player_id;
  1097. bool active[SWITCHBOT_SLOT_COUNT];
  1098. bool finished[SWITCHBOT_SLOT_COUNT];
  1099. DWORD items[SWITCHBOT_SLOT_COUNT];
  1100. TSwitchbotAttributeAlternativeTable alternatives[SWITCHBOT_SLOT_COUNT][SWITCHBOT_ALTERNATIVE_COUNT];
  1101. TSwitchbotTable() : player_id(0)
  1102. {
  1103. memset(&items, 0, sizeof(items));
  1104. memset(&alternatives, 0, sizeof(alternatives));
  1105. memset(&active, false, sizeof(active));
  1106. memset(&finished, false, sizeof(finished));
  1107. }
  1108. };
  1109. struct TSwitchbotAttributeTable
  1110. {
  1111. BYTE attribute_set;
  1112. int apply_num;
  1113. long max_value;
  1114. };
  1115. #endif
  1116. #ifdef __ENABLE_NEW_OFFLINESHOP__
  1117. //common
  1118. typedef struct {
  1119. BYTE bSubHeader;
  1120. } TPacketGDNewOfflineShop;
  1121. typedef struct {
  1122. BYTE bSubHeader;
  1123. } TPacketDGNewOfflineShop;
  1124. namespace offlineshop
  1125. {
  1126. //patch 08-03-2020
  1127. enum class ExpirationType {
  1128. EXPIRE_NONE,
  1129. EXPIRE_REAL_TIME,
  1130. EXPIRE_REAL_TIME_FIRST_USE,
  1131. };
  1132. typedef struct SPriceInfo
  1133. {
  1134. long long illYang;
  1135. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1136. int iCheque;
  1137. #endif
  1138. SPriceInfo() : illYang(0)
  1139. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1140. , iCheque(0)
  1141. #endif
  1142. {}
  1143. bool operator < (const SPriceInfo& rItem) const
  1144. {
  1145. return GetTotalYangAmount() < rItem.GetTotalYangAmount();
  1146. }
  1147. long long GetTotalYangAmount() const {
  1148. long long total = illYang;
  1149. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1150. total += (long long)YANG_PER_CHEQUE * (long long)iCheque;
  1151. #endif
  1152. return total;
  1153. }
  1154. } TPriceInfo;
  1155. typedef struct
  1156. {
  1157. DWORD dwVnum;
  1158. DWORD dwCount;
  1159. long alSockets[ITEM_SOCKET_MAX_NUM];
  1160. TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
  1161. #ifdef ENABLE_CHANGELOOK_SYSTEM
  1162. DWORD dwTransmutation;
  1163. #endif
  1164. #ifdef ENABLE_WEAPON_EVOLUTION_SYSTEM
  1165. int iEvolution;
  1166. #endif
  1167. //patch 08-03-2020
  1168. ExpirationType expiration;
  1169. } TItemInfoEx;
  1170. typedef struct
  1171. {
  1172. DWORD dwOwnerID, dwItemID;
  1173. TPriceInfo price;
  1174. TItemInfoEx item;
  1175. char dwOwnerName[CHARACTER_NAME_MAX_LEN + 1];//luigridex
  1176. } TItemInfo;
  1177. typedef struct {
  1178. DWORD dwOfferID, dwOwnerID, dwItemID, dwOffererID;
  1179. TPriceInfo price;
  1180. bool bNoticed, bAccepted;
  1181. //offlineshop-updated 03/08/19
  1182. char szBuyerName[CHARACTER_NAME_MAX_LEN + 1];
  1183. } TOfferInfo;
  1184. //AUCTION
  1185. typedef struct {
  1186. DWORD dwOwnerID;
  1187. char szOwnerName[CHARACTER_NAME_MAX_LEN + 1];
  1188. DWORD dwDuration;
  1189. TPriceInfo init_price;
  1190. TItemInfoEx item;
  1191. } TAuctionInfo;
  1192. typedef struct {
  1193. TPriceInfo price;
  1194. DWORD dwOwnerID;
  1195. DWORD dwBuyerID;
  1196. char szBuyerName[CHARACTER_NAME_MAX_LEN + 1];
  1197. } TAuctionOfferInfo;
  1198. typedef struct SValutesInfoa
  1199. {
  1200. long long illYang;
  1201. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1202. int iCheque;
  1203. #endif
  1204. void operator +=(const SValutesInfoa& r)
  1205. {
  1206. illYang += r.illYang;
  1207. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1208. iCheque += r.iCheque;
  1209. #endif
  1210. }
  1211. void operator -=(const SValutesInfoa& r)
  1212. {
  1213. illYang -= r.illYang;
  1214. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1215. iCheque -= r.iCheque;
  1216. #endif
  1217. }
  1218. SValutesInfoa() : illYang(0)
  1219. #ifdef __ENABLE_CHEQUE_SYSTEM__
  1220. , iCheque(0)
  1221. #endif
  1222. {}
  1223. } TValutesInfo;
  1224. typedef struct {
  1225. DWORD dwOwnerID;
  1226. DWORD dwDuration;
  1227. char szName[65];
  1228. DWORD dwCount;
  1229. } TShopInfo;
  1230. #ifdef ENABLE_OFFLINESHOP_REWORK
  1231. typedef struct SShopPosition
  1232. {
  1233. long lMapIndex;
  1234. long x, y;
  1235. BYTE bChannel;
  1236. } TShopPosition;
  1237. #endif
  1238. // ### GAME TO DB ###
  1239. enum eNewOfflineshopSubHeaderGD
  1240. {
  1241. SUBHEADER_GD_BUY_ITEM = 0,
  1242. SUBHEADER_GD_BUY_LOCK_ITEM,
  1243. SUBHEADER_GD_CANNOT_BUY_LOCK_ITEM, //topatch
  1244. SUBHEADER_GD_EDIT_ITEM,
  1245. SUBHEADER_GD_REMOVE_ITEM,
  1246. SUBHEADER_GD_ADD_ITEM,
  1247. SUBHEADER_GD_SHOP_FORCE_CLOSE,
  1248. SUBHEADER_GD_SHOP_CREATE_NEW,
  1249. SUBHEADER_GD_SHOP_CHANGE_NAME,
  1250. SUBHEADER_GD_OFFER_CREATE,
  1251. SUBHEADER_GD_OFFER_NOTIFIED,
  1252. SUBHEADER_GD_OFFER_ACCEPT,
  1253. SUBHEADER_GD_OFFER_CANCEL,
  1254. SUBHEADER_GD_SAFEBOX_GET_ITEM,
  1255. SUBHEADER_GD_SAFEBOX_GET_VALUTES,
  1256. SUBHEADER_GD_SAFEBOX_ADD_ITEM,
  1257. //AUCTION
  1258. SUBHEADER_GD_AUCTION_CREATE,
  1259. SUBHEADER_GD_AUCTION_ADD_OFFER,
  1260. };
  1261. typedef struct {
  1262. DWORD dwOwnerID, dwItemID, dwGuestID;
  1263. } TSubPacketGDBuyItem;
  1264. typedef struct {
  1265. DWORD dwOwnerID, dwItemID, dwGuestID;
  1266. } TSubPacketGDLockBuyItem;
  1267. typedef struct SSubPacketGDCannotBuyLockItem //topatch
  1268. {
  1269. DWORD dwOwnerID, dwItemID;
  1270. } TSubPacketGDCannotBuyLockItem;
  1271. typedef struct {
  1272. DWORD dwOwnerID, dwItemID;
  1273. TPriceInfo priceInfo;
  1274. } TSubPacketGDEditItem;
  1275. typedef struct {
  1276. DWORD dwOwnerID;
  1277. DWORD dwItemID;
  1278. } TSubPacketGDRemoveItem;
  1279. typedef struct {
  1280. DWORD dwOwnerID;
  1281. TItemInfo itemInfo;
  1282. } TSubPacketGDAddItem;
  1283. typedef struct {
  1284. DWORD dwOwnerID;
  1285. } TSubPacketGDShopForceClose;
  1286. typedef struct {
  1287. TShopInfo shop;
  1288. #ifdef ENABLE_OFFLINESHOP_REWORK
  1289. TShopPosition pos;
  1290. #endif
  1291. } TSubPacketGDShopCreateNew;
  1292. typedef struct {
  1293. DWORD dwOwnerID;
  1294. char szName[65];
  1295. } TSubPacketGDShopChangeName;
  1296. typedef struct {
  1297. DWORD dwOwnerID, dwItemID;
  1298. TOfferInfo offer;
  1299. } TSubPacketGDOfferCreate;
  1300. typedef struct {
  1301. DWORD dwOfferID;
  1302. DWORD dwOwnerID;
  1303. }TSubPacketGDOfferCancel;
  1304. typedef struct {
  1305. DWORD dwOwnerID, dwOfferID;
  1306. } TSubPacketGDOfferNotified;
  1307. typedef struct {
  1308. DWORD dwOwnerID, dwOfferID;
  1309. } TSubPacketGDOfferAccept;
  1310. typedef struct {
  1311. DWORD dwOwnerID;
  1312. DWORD dwItemID;
  1313. } TSubPacketGDSafeboxGetItem;
  1314. typedef struct {
  1315. DWORD dwOwnerID;
  1316. TItemInfoEx item;
  1317. } TSubPacketGDSafeboxAddItem;
  1318. typedef struct {
  1319. DWORD dwOwnerID;
  1320. TValutesInfo valute;
  1321. } TSubPacketGDSafeboxGetValutes;
  1322. //AUCTION
  1323. typedef struct
  1324. {
  1325. TAuctionInfo auction;
  1326. }TSubPacketGDAuctionCreate;
  1327. typedef struct
  1328. {
  1329. TAuctionOfferInfo offer;
  1330. }TSubPacketGDAuctionAddOffer;
  1331. // ### DB TO GAME
  1332. enum eSubHeaderDGNewOfflineshop
  1333. {
  1334. SUBHEADER_DG_BUY_ITEM,
  1335. SUBHEADER_DG_LOCKED_BUY_ITEM,
  1336. SUBHEADER_DG_EDIT_ITEM,
  1337. SUBHEADER_DG_REMOVE_ITEM,
  1338. SUBHEADER_DG_ADD_ITEM,
  1339. SUBHEADER_DG_SHOP_FORCE_CLOSE,
  1340. SUBHEADER_DG_SHOP_CREATE_NEW,
  1341. SUBHEADER_DG_SHOP_CHANGE_NAME,
  1342. SUBHEADER_DG_SHOP_EXPIRED,
  1343. SUBHEADER_DG_OFFER_CREATE,
  1344. SUBHEADER_DG_OFFER_NOTIFIED,
  1345. SUBHEADER_DG_OFFER_ACCEPT,
  1346. SUBHEADER_DG_OFFER_CANCEL,
  1347. SUBHEADER_DG_LOAD_TABLES,
  1348. SUBHEADER_DG_SAFEBOX_ADD_ITEM,
  1349. SUBHEADER_DG_SAFEBOX_ADD_VALUTES,
  1350. SUBHEADER_DG_SAFEBOX_LOAD,
  1351. //patch 08-03-2020
  1352. SUBHEADER_DG_SAFEBOX_EXPIRED_ITEM,
  1353. //AUCTION
  1354. SUBHEADER_DG_AUCTION_CREATE,
  1355. SUBHEADER_DG_AUCTION_ADD_OFFER,
  1356. SUBHEADER_DG_AUCTION_EXPIRED,
  1357. };
  1358. typedef struct {
  1359. DWORD dwOwnerID, dwItemID, dwBuyerID;
  1360. } TSubPacketDGBuyItem;
  1361. typedef struct {
  1362. DWORD dwOwnerID, dwItemID, dwBuyerID;
  1363. } TSubPacketDGLockedBuyItem;
  1364. typedef struct {
  1365. DWORD dwOwnerID, dwItemID;
  1366. TPriceInfo price;
  1367. } TSubPacketDGEditItem;
  1368. typedef struct {
  1369. DWORD dwOwnerID, dwItemID;
  1370. } TSubPacketDGRemoveItem;
  1371. typedef struct {
  1372. DWORD dwOwnerID, dwItemID;
  1373. TItemInfo item;
  1374. } TSubPacketDGAddItem;
  1375. typedef struct {
  1376. DWORD dwOwnerID;
  1377. } TSubPacketDGShopForceClose;
  1378. typedef struct {
  1379. TShopInfo shop;
  1380. #ifdef ENABLE_OFFLINESHOP_REWORK
  1381. TShopPosition pos;
  1382. #endif
  1383. } TSubPacketDGShopCreateNew;
  1384. typedef struct {
  1385. DWORD dwOwnerID;
  1386. char szName[65];
  1387. } TSubPacketDGShopChangeName;
  1388. typedef struct {
  1389. DWORD dwOwnerID, dwItemID;
  1390. TOfferInfo offer;
  1391. } TSubPacketDGOfferCreate;
  1392. typedef struct {
  1393. DWORD dwOfferID;
  1394. DWORD dwOwnerID;
  1395. //offlineshop-updated 05/08/19
  1396. bool IsRemovingItem;
  1397. }TSubPacketDGOfferCancel;
  1398. typedef struct {
  1399. DWORD dwOwnerID, dwOfferID;
  1400. } TSubPacketDGOfferNotified;
  1401. typedef struct {
  1402. DWORD dwOwnerID, dwOfferID;
  1403. } TSubPacketDGOfferAccept;
  1404. typedef struct {
  1405. DWORD dwShopCount;
  1406. DWORD dwOfferCount;
  1407. DWORD dwAuctionCount;
  1408. DWORD dwAuctionOfferCount;
  1409. } TSubPacketDGLoadTables;
  1410. typedef struct {
  1411. DWORD dwOwnerID;
  1412. } TSubPacketDGShopExpired;
  1413. typedef struct {
  1414. DWORD dwOwnerID, dwItemID;
  1415. TItemInfoEx item;
  1416. } TSubPacketDGSafeboxAddItem;
  1417. typedef struct {
  1418. DWORD dwOwnerID;
  1419. TValutesInfo valute;
  1420. } TSubPacketDGSafeboxAddValutes;
  1421. typedef struct {
  1422. DWORD dwOwnerID;
  1423. TValutesInfo valute;
  1424. DWORD dwItemCount;
  1425. } TSubPacketDGSafeboxLoad;
  1426. //patch 08-03-2020
  1427. typedef struct {
  1428. DWORD dwOwnerID;
  1429. DWORD dwItemID;
  1430. } TSubPacketDGSafeboxExpiredItem;
  1431. //AUCTION
  1432. typedef struct
  1433. {
  1434. TAuctionInfo auction;
  1435. }TSubPacketDGAuctionCreate;
  1436. typedef struct
  1437. {
  1438. TAuctionOfferInfo offer;
  1439. }TSubPacketDGAuctionAddOffer;
  1440. typedef struct
  1441. {
  1442. DWORD dwOwnerID;
  1443. }TSubPacketDGAuctionExpired;
  1444. }
  1445. #endif
  1446. #pragma pack()
  1447. #endif