Advertisement
Guest User

Untitled

a guest
Jan 15th, 2023
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.77 KB | None | 0 0
  1. #ifndef __INC_METIN_II_LENGTH_H__
  2. #define __INC_METIN_II_LENGTH_H__
  3.  
  4. #define WORD_MAX 0xffff
  5. enum EMisc
  6. {
  7. MAX_HOST_LENGTH = 15,
  8. IP_ADDRESS_LENGTH = 15,
  9. LOGIN_MAX_LEN = 30,
  10. PASSWD_MAX_LEN = 16,
  11. PLAYER_PER_ACCOUNT = 4,
  12. ACCOUNT_STATUS_MAX_LEN = 8,
  13. CHARACTER_NAME_MAX_LEN = 24,
  14. SHOP_SIGN_MAX_LEN = 32,
  15. INVENTORY_MAX_NUM = 180,
  16. ABILITY_MAX_NUM = 50,
  17. EMPIRE_MAX_NUM = 4,
  18. BANWORD_MAX_LEN = 24,
  19. SMS_MAX_LEN = 80,
  20. MOBILE_MAX_LEN = 32,
  21. SOCIAL_ID_MAX_LEN = 18,
  22.  
  23. GUILD_NAME_MAX_LEN = 12,
  24.  
  25. SHOP_HOST_ITEM_MAX_NUM = 40, /* 호스트의 최대 아이템 개수 */
  26. SHOP_GUEST_ITEM_MAX_NUM = 18, /* 게스트의 최대 아이템 개수 */
  27.  
  28. SHOP_PRICELIST_MAX_NUM = 40, ///< 개인상점 가격정보 리스트에서 유지할 가격정보의 최대 갯수
  29.  
  30. CHAT_MAX_LEN = 512,
  31.  
  32. QUICKSLOT_MAX_NUM = 36,
  33.  
  34. JOURNAL_MAX_NUM = 2,
  35.  
  36. QUERY_MAX_LEN = 8192,
  37.  
  38. FILE_MAX_LEN = 128,
  39.  
  40. PLAYER_EXP_TABLE_MAX = 300,
  41. PLAYER_MAX_LEVEL_CONST = 300,
  42.  
  43. GUILD_MAX_LEVEL = 20,
  44. MOB_MAX_LEVEL = 100,
  45.  
  46. ATTRIBUTE_MAX_VALUE = 20,
  47. CHARACTER_PATH_MAX_NUM = 64,
  48. SKILL_MAX_NUM = 255,
  49. SKILLBOOK_DELAY_MIN = 64800,
  50. SKILLBOOK_DELAY_MAX = 108000,
  51. SKILL_MAX_LEVEL = 40,
  52.  
  53. APPLY_NAME_MAX_LEN = 32,
  54. EVENT_FLAG_NAME_MAX_LEN = 32,
  55.  
  56. MOB_SKILL_MAX_NUM = 5,
  57.  
  58. POINT_MAX_NUM = 255,
  59. DRAGON_SOUL_BOX_SIZE = 32,
  60. DRAGON_SOUL_BOX_COLUMN_NUM = 8,
  61. DRAGON_SOUL_BOX_ROW_NUM = DRAGON_SOUL_BOX_SIZE / DRAGON_SOUL_BOX_COLUMN_NUM,
  62. DRAGON_SOUL_REFINE_GRID_SIZE = 15,
  63. MAX_AMOUNT_OF_MALL_BONUS = 20,
  64.  
  65. WEAR_MAX_NUM = 32,
  66.  
  67. //LIMIT_GOLD
  68. GOLD_MAX = 2000000000,
  69.  
  70. MAX_PASSPOD = 8 ,
  71.  
  72.  
  73. //END_LIMIT_GOLD
  74.  
  75. OPENID_AUTHKEY_LEN = 32,
  76.  
  77. SHOP_TAB_NAME_MAX = 32,
  78. SHOP_TAB_COUNT_MAX = 3,
  79.  
  80. #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
  81. SKILL_BOOK_INVENTORY_MAX_NUM = 135,
  82. UPGRADE_ITEMS_INVENTORY_MAX_NUM = 135,
  83. STONE_INVENTORY_MAX_NUM = 135,
  84. BOX_INVENTORY_MAX_NUM = 135,
  85. EFSUN_INVENTORY_MAX_NUM = 135,
  86. CICEK_INVENTORY_MAX_NUM = 135,
  87. #endif
  88.  
  89. BELT_INVENTORY_SLOT_WIDTH = 4,
  90. BELT_INVENTORY_SLOT_HEIGHT= 4,
  91.  
  92. BELT_INVENTORY_SLOT_COUNT = BELT_INVENTORY_SLOT_WIDTH * BELT_INVENTORY_SLOT_HEIGHT,
  93.  
  94.  
  95. /**
  96. **** 현재까지 할당 된 아이템 영역 정리 (DB상 Item Position) ****
  97. +------------------------------------------------------+ 0
  98. | 캐릭터 기본 인벤토리 (45칸 * 2페이지) 90칸 |
  99. +------------------------------------------------------+ 90 = INVENTORY_MAX_NUM(90)
  100. | 캐릭터 장비 창 (착용중인 아이템) 32칸 |
  101. +------------------------------------------------------+ 122 = INVENTORY_MAX_NUM(90) + WEAR_MAX_NUM(32)
  102. | 용혼석 장비 창 (착용중인 용혼석) 12칸 |
  103. +------------------------------------------------------+ 134 = 122 + DS_SLOT_MAX(6) * DRAGON_SOUL_DECK_MAX_NUM(2)
  104. | 용혼석 장비 창 예약 (아직 미사용) 18칸 |
  105. +------------------------------------------------------+ 152 = 134 + DS_SLOT_MAX(6) * DRAGON_SOUL_DECK_RESERVED_MAX_NUM(3)
  106. | 벨트 인벤토리 (벨트 착용시에만 벨트 레벨에 따라 활성)|
  107. +------------------------------------------------------+ 168 = 152 + BELT_INVENTORY_SLOT_COUNT(16) = INVENTORY_AND_EQUIP_CELL_MAX
  108. | 미사용 |
  109. +------------------------------------------------------+ ??
  110. */
  111. };
  112.  
  113. enum EMatrixCard
  114. {
  115. MATRIX_CODE_MAX_LEN = 192,
  116. MATRIX_ANSWER_MAX_LEN = 8,
  117. };
  118.  
  119. enum EWearPositions
  120. {
  121. WEAR_BODY, // 0
  122. WEAR_HEAD, // 1
  123. WEAR_FOOTS, // 2
  124. WEAR_WRIST, // 3
  125. WEAR_WEAPON, // 4
  126. WEAR_NECK, // 5
  127. WEAR_EAR, // 6
  128. WEAR_UNIQUE1, // 7
  129. WEAR_UNIQUE2, // 8
  130. WEAR_ARROW, // 9
  131. WEAR_SHIELD, // 10
  132. WEAR_ABILITY1, // 11
  133. WEAR_ABILITY2, // 12
  134. WEAR_ABILITY3, // 13
  135. WEAR_ABILITY4, // 14
  136. WEAR_ABILITY5, // 15
  137. WEAR_ABILITY6, // 16
  138. WEAR_ABILITY7, // 17
  139. WEAR_ABILITY8, // 18
  140. WEAR_COSTUME_BODY, // 19
  141. WEAR_COSTUME_HAIR, // 20
  142.  
  143. WEAR_RING1, // 21 : 신규 반지슬롯1 (왼쪽)
  144. WEAR_RING2, // 22 : 신규 반지슬롯2 (오른쪽)
  145.  
  146. WEAR_BELT, // 23 : 신규 벨트슬롯
  147.  
  148. WEAR_MAX = 32 //
  149. };
  150.  
  151. enum EDragonSoulDeckType
  152. {
  153. DRAGON_SOUL_DECK_0,
  154. DRAGON_SOUL_DECK_1,
  155. DRAGON_SOUL_DECK_MAX_NUM = 2,
  156.  
  157. DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3, // NOTE: 중요! 아직 사용중이진 않지만, 3페이지 분량을 예약 해 둠. DS DECK을 늘릴 경우 반드시 그 수만큼 RESERVED에서 차감해야 함!
  158. };
  159.  
  160. enum ESex
  161. {
  162. SEX_MALE,
  163. SEX_FEMALE
  164. };
  165.  
  166. enum EDirection
  167. {
  168. DIR_NORTH,
  169. DIR_NORTHEAST,
  170. DIR_EAST,
  171. DIR_SOUTHEAST,
  172. DIR_SOUTH,
  173. DIR_SOUTHWEST,
  174. DIR_WEST,
  175. DIR_NORTHWEST,
  176. DIR_MAX_NUM
  177. };
  178.  
  179. #define ABILITY_MAX_LEVEL 10 /* 기술 최대 레벨 */
  180.  
  181. enum EAbilityDifficulty
  182. {
  183. DIFFICULTY_EASY,
  184. DIFFICULTY_NORMAL,
  185. DIFFICULTY_HARD,
  186. DIFFICULTY_VERY_HARD,
  187. DIFFICULTY_NUM_TYPES
  188. };
  189.  
  190. enum EAbilityCategory
  191. {
  192. CATEGORY_PHYSICAL, /* 신체적 어빌리티 */
  193. CATEGORY_MENTAL, /* 정신적 어빌리티 */
  194. CATEGORY_ATTRIBUTE, /* 능력 어빌리티 */
  195. CATEGORY_NUM_TYPES
  196. };
  197.  
  198. enum EJobs
  199. {
  200. JOB_WARRIOR,
  201. JOB_ASSASSIN,
  202. JOB_SURA,
  203. JOB_SHAMAN,
  204. JOB_MAX_NUM
  205. };
  206.  
  207. enum ESkillGroups
  208. {
  209. SKILL_GROUP_MAX_NUM = 2,
  210. };
  211.  
  212. enum ERaceFlags
  213. {
  214. RACE_FLAG_ANIMAL = (1 << 0),
  215. RACE_FLAG_UNDEAD = (1 << 1),
  216. RACE_FLAG_DEVIL = (1 << 2),
  217. RACE_FLAG_HUMAN = (1 << 3),
  218. RACE_FLAG_ORC = (1 << 4),
  219. RACE_FLAG_MILGYO = (1 << 5),
  220. RACE_FLAG_INSECT = (1 << 6),
  221. RACE_FLAG_FIRE = (1 << 7),
  222. RACE_FLAG_ICE = (1 << 8),
  223. RACE_FLAG_DESERT = (1 << 9),
  224. RACE_FLAG_TREE = (1 << 10),
  225. RACE_FLAG_ATT_ELEC = (1 << 11),
  226. RACE_FLAG_ATT_FIRE = (1 << 12),
  227. RACE_FLAG_ATT_ICE = (1 << 13),
  228. RACE_FLAG_ATT_WIND = (1 << 14),
  229. RACE_FLAG_ATT_EARTH = (1 << 15),
  230. RACE_FLAG_ATT_DARK = (1 << 16),
  231. };
  232.  
  233. enum ELoads
  234. {
  235. LOAD_NONE,
  236. LOAD_LIGHT,
  237. LOAD_NORMAL,
  238. LOAD_HEAVY,
  239. LOAD_MASSIVE
  240. };
  241.  
  242. enum
  243. {
  244. QUICKSLOT_TYPE_NONE,
  245. QUICKSLOT_TYPE_ITEM,
  246. QUICKSLOT_TYPE_SKILL,
  247. QUICKSLOT_TYPE_COMMAND,
  248. QUICKSLOT_TYPE_MAX_NUM,
  249. };
  250.  
  251. enum EParts
  252. {
  253. PART_MAIN,
  254. PART_WEAPON,
  255. PART_HEAD,
  256. PART_HAIR,
  257.  
  258. PART_MAX_NUM,
  259. PART_WEAPON_SUB,
  260. };
  261.  
  262. enum EChatType
  263. {
  264. CHAT_TYPE_TALKING, /* 그냥 채팅 */
  265. CHAT_TYPE_INFO, /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */
  266. CHAT_TYPE_NOTICE, /* 공지사항 */
  267. CHAT_TYPE_PARTY, /* 파티말 */
  268. CHAT_TYPE_GUILD, /* 길드말 */
  269. CHAT_TYPE_COMMAND, /* 일반 명령 */
  270. CHAT_TYPE_SHOUT, /* 외치기 */
  271. CHAT_TYPE_WHISPER,
  272. CHAT_TYPE_BIG_NOTICE,
  273. CHAT_TYPE_MONARCH_NOTICE,
  274. CHAT_TYPE_MAX_NUM
  275. };
  276.  
  277. enum EWhisperType
  278. {
  279. WHISPER_TYPE_NORMAL = 0,
  280. WHISPER_TYPE_NOT_EXIST = 1,
  281. WHISPER_TYPE_TARGET_BLOCKED = 2,
  282. WHISPER_TYPE_SENDER_BLOCKED = 3,
  283. WHISPER_TYPE_ERROR = 4,
  284. WHISPER_TYPE_GM = 5,
  285. WHISPER_TYPE_SYSTEM = 0xFF
  286. };
  287.  
  288. enum ECharacterPosition
  289. {
  290. POSITION_GENERAL,
  291. POSITION_BATTLE,
  292. POSITION_DYING,
  293. POSITION_SITTING_CHAIR,
  294. POSITION_SITTING_GROUND,
  295. POSITION_INTRO,
  296. POSITION_MAX_NUM
  297. };
  298.  
  299. enum EGMLevels
  300. {
  301. GM_PLAYER,
  302. GM_LOW_WIZARD,
  303. GM_WIZARD,
  304. GM_HIGH_WIZARD,
  305. GM_GOD,
  306. GM_IMPLEMENTOR
  307. };
  308.  
  309. enum EMobRank
  310. {
  311. MOB_RANK_PAWN,
  312. MOB_RANK_S_PAWN,
  313. MOB_RANK_KNIGHT,
  314. MOB_RANK_S_KNIGHT,
  315. MOB_RANK_BOSS,
  316. MOB_RANK_KING,
  317. MOB_RANK_MAX_NUM
  318. };
  319.  
  320. enum ECharType
  321. {
  322. CHAR_TYPE_MONSTER,
  323. CHAR_TYPE_NPC,
  324. CHAR_TYPE_STONE,
  325. CHAR_TYPE_WARP,
  326. CHAR_TYPE_DOOR,
  327. CHAR_TYPE_BUILDING,
  328. CHAR_TYPE_PC,
  329. CHAR_TYPE_POLYMORPH_PC,
  330. CHAR_TYPE_HORSE,
  331. CHAR_TYPE_GOTO
  332. };
  333.  
  334. enum EBattleType
  335. {
  336. BATTLE_TYPE_MELEE,
  337. BATTLE_TYPE_RANGE,
  338. BATTLE_TYPE_MAGIC,
  339. BATTLE_TYPE_SPECIAL,
  340. BATTLE_TYPE_POWER,
  341. BATTLE_TYPE_TANKER,
  342. BATTLE_TYPE_SUPER_POWER,
  343. BATTLE_TYPE_SUPER_TANKER,
  344. BATTLE_TYPE_MAX_NUM
  345. };
  346.  
  347. enum EApplyTypes
  348. {
  349. APPLY_NONE, // 0
  350. APPLY_MAX_HP, // 1
  351. APPLY_MAX_SP, // 2
  352. APPLY_CON, // 3
  353. APPLY_INT, // 4
  354. APPLY_STR, // 5
  355. APPLY_DEX, // 6
  356. APPLY_ATT_SPEED, // 7
  357. APPLY_MOV_SPEED, // 8
  358. APPLY_CAST_SPEED, // 9
  359. APPLY_HP_REGEN, // 10
  360. APPLY_SP_REGEN, // 11
  361. APPLY_POISON_PCT, // 12
  362. APPLY_STUN_PCT, // 13
  363. APPLY_SLOW_PCT, // 14
  364. APPLY_CRITICAL_PCT, // 15
  365. APPLY_PENETRATE_PCT, // 16
  366. APPLY_ATTBONUS_HUMAN, // 17
  367. APPLY_ATTBONUS_ANIMAL, // 18
  368. APPLY_ATTBONUS_ORC, // 19
  369. APPLY_ATTBONUS_MILGYO, // 20
  370. APPLY_ATTBONUS_UNDEAD, // 21
  371. APPLY_ATTBONUS_DEVIL, // 22
  372. APPLY_STEAL_HP, // 23
  373. APPLY_STEAL_SP, // 24
  374. APPLY_MANA_BURN_PCT, // 25
  375. APPLY_DAMAGE_SP_RECOVER, // 26
  376. APPLY_BLOCK, // 27
  377. APPLY_DODGE, // 28
  378. APPLY_RESIST_SWORD, // 29
  379. APPLY_RESIST_TWOHAND, // 30
  380. APPLY_RESIST_DAGGER, // 31
  381. APPLY_RESIST_BELL, // 32
  382. APPLY_RESIST_FAN, // 33
  383. APPLY_RESIST_BOW, // 34
  384. APPLY_RESIST_FIRE, // 35
  385. APPLY_RESIST_ELEC, // 36
  386. APPLY_RESIST_MAGIC, // 37
  387. APPLY_RESIST_WIND, // 38
  388. APPLY_REFLECT_MELEE, // 39
  389. APPLY_REFLECT_CURSE, // 40
  390. APPLY_POISON_REDUCE, // 41
  391. APPLY_KILL_SP_RECOVER, // 42
  392. APPLY_EXP_DOUBLE_BONUS, // 43
  393. APPLY_GOLD_DOUBLE_BONUS, // 44
  394. APPLY_ITEM_DROP_BONUS, // 45
  395. APPLY_POTION_BONUS, // 46
  396. APPLY_KILL_HP_RECOVER, // 47
  397. APPLY_IMMUNE_STUN, // 48
  398. APPLY_IMMUNE_SLOW, // 49
  399. APPLY_IMMUNE_FALL, // 50
  400. APPLY_SKILL, // 51
  401. APPLY_BOW_DISTANCE, // 52
  402. APPLY_ATT_GRADE_BONUS, // 53
  403. APPLY_DEF_GRADE_BONUS, // 54
  404. APPLY_MAGIC_ATT_GRADE, // 55
  405. APPLY_MAGIC_DEF_GRADE, // 56
  406. APPLY_CURSE_PCT, // 57
  407. APPLY_MAX_STAMINA, // 58
  408. APPLY_ATTBONUS_WARRIOR, // 59
  409. APPLY_ATTBONUS_ASSASSIN, // 60
  410. APPLY_ATTBONUS_SURA, // 61
  411. APPLY_ATTBONUS_SHAMAN, // 62
  412. APPLY_ATTBONUS_MONSTER, // 63
  413. APPLY_MALL_ATTBONUS, // 64 공격력 +x%
  414. APPLY_MALL_DEFBONUS, // 65 방어력 +x%
  415. APPLY_MALL_EXPBONUS, // 66 경험치 +x%
  416. APPLY_MALL_ITEMBONUS, // 67 아이템 드롭율 x/10배
  417. APPLY_MALL_GOLDBONUS, // 68 돈 드롭율 x/10배
  418. APPLY_MAX_HP_PCT, // 69 최대 생명력 +x%
  419. APPLY_MAX_SP_PCT, // 70 최대 정신력 +x%
  420. APPLY_SKILL_DAMAGE_BONUS, // 71 스킬 데미지 * (100+x)%
  421. APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 평타 데미지 * (100+x)%
  422. APPLY_SKILL_DEFEND_BONUS, // 73 스킬 데미지 방어 * (100-x)%
  423. APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 평타 데미지 방어 * (100-x)%
  424. APPLY_PC_BANG_EXP_BONUS, // 75 PC방 아이템 EXP 보너스
  425. APPLY_PC_BANG_DROP_BONUS, // 76 PC방 아이템 드롭율 보너스
  426.  
  427. APPLY_EXTRACT_HP_PCT, // 77 사용시 HP 소모
  428.  
  429. APPLY_RESIST_WARRIOR, // 78 무사에게 저항
  430. APPLY_RESIST_ASSASSIN, // 79 자객에게 저항
  431. APPLY_RESIST_SURA, // 80 수라에게 저항
  432. APPLY_RESIST_SHAMAN, // 81 무당에게 저항
  433. APPLY_ENERGY, // 82 기력
  434. APPLY_DEF_GRADE, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
  435. APPLY_COSTUME_ATTR_BONUS, // 84 코스튬 아이템에 붙은 속성치 보너스
  436. APPLY_MAGIC_ATTBONUS_PER, // 85 마법 공격력 +x%
  437. APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 마법 + 밀리 공격력 +x%
  438.  
  439. APPLY_RESIST_ICE, // 87 냉기 저항
  440. APPLY_RESIST_EARTH, // 88 대지 저항
  441. APPLY_RESIST_DARK, // 89 어둠 저항
  442.  
  443. APPLY_ANTI_CRITICAL_PCT, //90 크리티컬 저항
  444. APPLY_ANTI_PENETRATE_PCT, //91 관통타격 저항
  445.  
  446.  
  447. MAX_APPLY_NUM, //
  448. };
  449.  
  450. enum EOnClickEvents
  451. {
  452. ON_CLICK_NONE,
  453. ON_CLICK_SHOP,
  454. ON_CLICK_TALK,
  455. ON_CLICK_MAX_NUM
  456. };
  457.  
  458. enum EOnIdleEvents
  459. {
  460. ON_IDLE_NONE,
  461. ON_IDLE_GENERAL,
  462. ON_IDLE_MAX_NUM
  463. };
  464.  
  465. enum EWindows
  466. {
  467. RESERVED_WINDOW,
  468. INVENTORY,
  469. EQUIPMENT,
  470. SAFEBOX,
  471. MALL,
  472. DRAGON_SOUL_INVENTORY,
  473. BELT_INVENTORY,
  474. #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
  475. SKILL_BOOK_INVENTORY,
  476. UPGRADE_ITEMS_INVENTORY,
  477. STONE_INVENTORY,
  478. BOX_INVENTORY,
  479. EFSUN_INVENTORY,
  480. CICEK_INVENTORY,
  481. #endif
  482. #ifdef __AUCTION__
  483. AUCTION,
  484. #endif
  485. GROUND
  486. };
  487.  
  488. enum EMobSizes
  489. {
  490. MOBSIZE_RESERVED,
  491. MOBSIZE_SMALL,
  492. MOBSIZE_MEDIUM,
  493. MOBSIZE_BIG
  494. };
  495.  
  496. enum EAIFlags
  497. {
  498. AIFLAG_AGGRESSIVE = (1 << 0),
  499. AIFLAG_NOMOVE = (1 << 1),
  500. AIFLAG_COWARD = (1 << 2),
  501. AIFLAG_NOATTACKSHINSU = (1 << 3),
  502. AIFLAG_NOATTACKJINNO = (1 << 4),
  503. AIFLAG_NOATTACKCHUNJO = (1 << 5),
  504. AIFLAG_ATTACKMOB = (1 << 6 ),
  505. AIFLAG_BERSERK = (1 << 7),
  506. AIFLAG_STONESKIN = (1 << 8),
  507. AIFLAG_GODSPEED = (1 << 9),
  508. AIFLAG_DEATHBLOW = (1 << 10),
  509. AIFLAG_REVIVE = (1 << 11),
  510. };
  511.  
  512. enum EMobStatType
  513. {
  514. MOB_STATTYPE_POWER,
  515. MOB_STATTYPE_TANKER,
  516. MOB_STATTYPE_SUPER_POWER,
  517. MOB_STATTYPE_SUPER_TANKER,
  518. MOB_STATTYPE_RANGE,
  519. MOB_STATTYPE_MAGIC,
  520. MOB_STATTYPE_MAX_NUM
  521. };
  522.  
  523. enum EImmuneFlags
  524. {
  525. IMMUNE_STUN = (1 << 0),
  526. IMMUNE_SLOW = (1 << 1),
  527. IMMUNE_FALL = (1 << 2),
  528. IMMUNE_CURSE = (1 << 3),
  529. IMMUNE_POISON = (1 << 4),
  530. IMMUNE_TERROR = (1 << 5),
  531. IMMUNE_REFLECT = (1 << 6),
  532. };
  533.  
  534. enum EMobEnchants
  535. {
  536. MOB_ENCHANT_CURSE,
  537. MOB_ENCHANT_SLOW,
  538. MOB_ENCHANT_POISON,
  539. MOB_ENCHANT_STUN,
  540. MOB_ENCHANT_CRITICAL,
  541. MOB_ENCHANT_PENETRATE,
  542. MOB_ENCHANTS_MAX_NUM
  543. };
  544.  
  545. enum EMobResists
  546. {
  547. MOB_RESIST_SWORD,
  548. MOB_RESIST_TWOHAND,
  549. MOB_RESIST_DAGGER,
  550. MOB_RESIST_BELL,
  551. MOB_RESIST_FAN,
  552. MOB_RESIST_BOW,
  553. MOB_RESIST_FIRE,
  554. MOB_RESIST_ELECT,
  555. MOB_RESIST_MAGIC,
  556. MOB_RESIST_WIND,
  557. MOB_RESIST_POISON,
  558. MOB_RESISTS_MAX_NUM
  559. };
  560.  
  561. enum
  562. {
  563. SKILL_ATTR_TYPE_NORMAL = 1,
  564. SKILL_ATTR_TYPE_MELEE,
  565. SKILL_ATTR_TYPE_RANGE,
  566. SKILL_ATTR_TYPE_MAGIC
  567. /*
  568. SKILL_ATTR_TYPE_FIRE,
  569. SKILL_ATTR_TYPE_ICE,
  570. SKILL_ATTR_TYPE_ELEC,
  571. SKILL_ATTR_TYPE_DARK,
  572. */
  573. };
  574.  
  575. enum
  576. {
  577. SKILL_NORMAL,
  578. SKILL_MASTER,
  579. SKILL_GRAND_MASTER,
  580. SKILL_PERFECT_MASTER,
  581. };
  582.  
  583. enum EGuildWarType
  584. {
  585. GUILD_WAR_TYPE_FIELD,
  586. GUILD_WAR_TYPE_BATTLE,
  587. GUILD_WAR_TYPE_FLAG,
  588. GUILD_WAR_TYPE_MAX_NUM
  589. };
  590.  
  591. enum EGuildWarState
  592. {
  593. GUILD_WAR_NONE,
  594. GUILD_WAR_SEND_DECLARE,
  595. GUILD_WAR_REFUSE,
  596. GUILD_WAR_RECV_DECLARE,
  597. GUILD_WAR_WAIT_START,
  598. GUILD_WAR_CANCEL,
  599. GUILD_WAR_ON_WAR,
  600. GUILD_WAR_END,
  601. GUILD_WAR_OVER,
  602. GUILD_WAR_RESERVE,
  603.  
  604. GUILD_WAR_DURATION = 30*60, // 1시간
  605. GUILD_WAR_WIN_POINT = 1000,
  606. GUILD_WAR_LADDER_HALF_PENALTY_TIME = 12*60*60,
  607. };
  608.  
  609. enum EAttributeSet
  610. {
  611. ATTRIBUTE_SET_WEAPON,
  612. ATTRIBUTE_SET_BODY,
  613. ATTRIBUTE_SET_WRIST,
  614. ATTRIBUTE_SET_FOOTS,
  615. ATTRIBUTE_SET_NECK,
  616. ATTRIBUTE_SET_HEAD,
  617. ATTRIBUTE_SET_SHIELD,
  618. ATTRIBUTE_SET_EAR,
  619. ATTRIBUTE_SET_MAX_NUM
  620. };
  621.  
  622. enum EPrivType
  623. {
  624. PRIV_NONE,
  625. PRIV_ITEM_DROP,
  626. PRIV_GOLD_DROP,
  627. PRIV_GOLD10_DROP,
  628. PRIV_EXP_PCT,
  629. MAX_PRIV_NUM,
  630. };
  631.  
  632. enum EMoneyLogType
  633. {
  634. MONEY_LOG_RESERVED,
  635. MONEY_LOG_MONSTER,
  636. MONEY_LOG_SHOP,
  637. MONEY_LOG_REFINE,
  638. MONEY_LOG_QUEST,
  639. MONEY_LOG_GUILD,
  640. MONEY_LOG_MISC,
  641. MONEY_LOG_MONSTER_KILL,
  642. MONEY_LOG_DROP,
  643. MONEY_LOG_TYPE_MAX_NUM,
  644. };
  645.  
  646. enum EPremiumTypes
  647. {
  648. PREMIUM_EXP, // 경험치가 1.2배
  649. PREMIUM_ITEM, // 아이템 드롭율이 2배
  650. PREMIUM_SAFEBOX, // 창고가 1칸에서 3칸
  651. PREMIUM_AUTOLOOT, // 돈 자동 줍기
  652. PREMIUM_FISH_MIND, // 고급 물고기 낚일 확률 상승
  653. PREMIUM_MARRIAGE_FAST, // 금실 증가 양을 빠르게합니다.
  654. PREMIUM_GOLD, // 돈 드롭율이 1.5배
  655. PREMIUM_MAX_NUM = 9
  656. };
  657.  
  658. enum SPECIAL_EFFECT
  659. {
  660. SE_NONE,
  661.  
  662. SE_HPUP_RED,
  663. SE_SPUP_BLUE,
  664. SE_SPEEDUP_GREEN,
  665. SE_DXUP_PURPLE,
  666. SE_CRITICAL,
  667. SE_PENETRATE,
  668. SE_BLOCK,
  669. SE_DODGE,
  670. SE_CHINA_FIREWORK,
  671. SE_SPIN_TOP,
  672. SE_SUCCESS,
  673. SE_FAIL,
  674. SE_FR_SUCCESS,
  675. SE_LEVELUP_ON_14_FOR_GERMANY,
  676. SE_LEVELUP_UNDER_15_FOR_GERMANY,
  677. SE_PERCENT_DAMAGE1,
  678. SE_PERCENT_DAMAGE2,
  679. SE_PERCENT_DAMAGE3,
  680.  
  681. SE_AUTO_HPUP,
  682. SE_AUTO_SPUP,
  683.  
  684. SE_EQUIP_RAMADAN_RING, // 라마단 초승달의 반지(71135) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
  685. SE_EQUIP_HALLOWEEN_CANDY, // 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트
  686. SE_EQUIP_HAPPINESS_RING, // 크리스마스 행복의 반지(71143) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
  687. SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
  688. } ;
  689.  
  690. enum ETeenFlags
  691. {
  692. TEENFLAG_NONE = 0,
  693. TEENFLAG_1HOUR,
  694. TEENFLAG_2HOUR,
  695. TEENFLAG_3HOUR,
  696. TEENFLAG_4HOUR,
  697. TEENFLAG_5HOUR,
  698. };
  699.  
  700. #include "item_length.h"
  701.  
  702. // inventory의 position을 나타내는 구조체
  703. // int와의 암시적 형변환이 있는 이유는,
  704. // 인벤 관련된 모든 함수가 window_type은 받지 않고, cell 하나만 받았기 때문에,(기존에는 인벤이 하나 뿐이어서 inventory type이란게 필요없었기 때문에,)
  705. // 인벤 관련 모든 함수 호출부분을 수정하는 것이 난감하기 ‹š문이다.
  706.  
  707. enum EDragonSoulRefineWindowSize
  708. {
  709. DRAGON_SOUL_REFINE_GRID_MAX = 15,
  710. };
  711.  
  712. enum EMisc2
  713. {
  714. DRAGON_SOUL_EQUIP_SLOT_START = INVENTORY_MAX_NUM + WEAR_MAX_NUM,
  715. DRAGON_SOUL_EQUIP_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_START + (DS_SLOT_MAX * DRAGON_SOUL_DECK_MAX_NUM),
  716. DRAGON_SOUL_EQUIP_RESERVED_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_END + (DS_SLOT_MAX * DRAGON_SOUL_DECK_RESERVED_MAX_NUM),
  717.  
  718. BELT_INVENTORY_SLOT_START = DRAGON_SOUL_EQUIP_RESERVED_SLOT_END,
  719. BELT_INVENTORY_SLOT_END = BELT_INVENTORY_SLOT_START + BELT_INVENTORY_SLOT_COUNT,
  720. #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
  721. SKILL_BOOK_INVENTORY_SLOT_START = BELT_INVENTORY_SLOT_END,
  722. SKILL_BOOK_INVENTORY_SLOT_END = SKILL_BOOK_INVENTORY_SLOT_START + SKILL_BOOK_INVENTORY_MAX_NUM,
  723.  
  724. UPGRADE_ITEMS_INVENTORY_SLOT_START = SKILL_BOOK_INVENTORY_SLOT_END,
  725. UPGRADE_ITEMS_INVENTORY_SLOT_END = UPGRADE_ITEMS_INVENTORY_SLOT_START + UPGRADE_ITEMS_INVENTORY_MAX_NUM,
  726.  
  727. STONE_INVENTORY_SLOT_START = UPGRADE_ITEMS_INVENTORY_SLOT_END,
  728. STONE_INVENTORY_SLOT_END = STONE_INVENTORY_SLOT_START + STONE_INVENTORY_MAX_NUM,
  729.  
  730. BOX_INVENTORY_SLOT_START = STONE_INVENTORY_SLOT_END,
  731. BOX_INVENTORY_SLOT_END = BOX_INVENTORY_SLOT_START + BOX_INVENTORY_MAX_NUM,
  732.  
  733. EFSUN_INVENTORY_SLOT_START = BOX_INVENTORY_SLOT_END,
  734. EFSUN_INVENTORY_SLOT_END = EFSUN_INVENTORY_SLOT_START + EFSUN_INVENTORY_MAX_NUM,
  735.  
  736. CICEK_INVENTORY_SLOT_START = EFSUN_INVENTORY_SLOT_END,
  737. CICEK_INVENTORY_SLOT_END = CICEK_INVENTORY_SLOT_START + CICEK_INVENTORY_MAX_NUM,
  738. #endif
  739.  
  740. #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
  741. INVENTORY_AND_EQUIP_SLOT_MAX = CICEK_INVENTORY_SLOT_END,
  742. #else
  743. INVENTORY_AND_EQUIP_SLOT_MAX = BELT_INVENTORY_SLOT_END,
  744. #endif
  745. };
  746.  
  747. #pragma pack(push, 1)
  748.  
  749. typedef struct SItemPos
  750. {
  751. BYTE window_type;
  752. WORD cell;
  753. SItemPos ()
  754. {
  755. window_type = INVENTORY;
  756. cell = WORD_MAX;
  757. }
  758.  
  759. SItemPos (BYTE _window_type, WORD _cell)
  760. {
  761. window_type = _window_type;
  762. cell = _cell;
  763. }
  764.  
  765. bool IsValidItemPosition() const
  766. {
  767. switch (window_type)
  768. {
  769. case RESERVED_WINDOW:
  770. return false;
  771. case INVENTORY:
  772. case EQUIPMENT:
  773. case BELT_INVENTORY:
  774. #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
  775. case SKILL_BOOK_INVENTORY:
  776. case UPGRADE_ITEMS_INVENTORY:
  777. case STONE_INVENTORY:
  778. case BOX_INVENTORY:
  779. case EFSUN_INVENTORY:
  780. case CICEK_INVENTORY:
  781. #endif
  782. return cell < INVENTORY_AND_EQUIP_SLOT_MAX;
  783. case DRAGON_SOUL_INVENTORY:
  784. return cell < (DRAGON_SOUL_INVENTORY_MAX_NUM);
  785. // 동적으로 크기가 정해지는 window는 valid 체크를 할 수가 없다.
  786. case SAFEBOX:
  787. case MALL:
  788. return false;
  789. default:
  790. return false;
  791. }
  792. return false;
  793. }
  794.  
  795. bool IsEquipPosition() const
  796. {
  797. return ((INVENTORY == window_type || EQUIPMENT == window_type) && cell >= INVENTORY_MAX_NUM && cell < INVENTORY_MAX_NUM + WEAR_MAX_NUM)
  798. || IsDragonSoulEquipPosition();
  799. }
  800.  
  801. bool IsDragonSoulEquipPosition() const
  802. {
  803. return (DRAGON_SOUL_EQUIP_SLOT_START <= cell) && (DRAGON_SOUL_EQUIP_SLOT_END > cell);
  804. }
  805.  
  806. bool IsBeltInventoryPosition() const
  807. {
  808. return (BELT_INVENTORY_SLOT_START <= cell) && (BELT_INVENTORY_SLOT_END > cell);
  809. }
  810.  
  811. bool IsDefaultInventoryPosition() const
  812. {
  813. return INVENTORY == window_type && cell < INVENTORY_MAX_NUM;
  814. #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
  815. bool IsSkillBookInventoryPosition() const
  816. {
  817. return ((INVENTORY == window_type) && cell >= SKILL_BOOK_INVENTORY_SLOT_START && cell < SKILL_BOOK_INVENTORY_SLOT_END);
  818. }
  819. bool IsUpgradeItemsInventoryPosition() const
  820. {
  821. return ((INVENTORY == window_type) && cell >= UPGRADE_ITEMS_INVENTORY_SLOT_START && cell < UPGRADE_ITEMS_INVENTORY_SLOT_END);
  822. }
  823. bool IsStoneInventoryPosition() const
  824. {
  825. return ((INVENTORY == window_type) && cell >= STONE_INVENTORY_SLOT_START && cell < STONE_INVENTORY_SLOT_END);
  826. }
  827. bool IsBoxInventoryPosition() const
  828. {
  829. return ((INVENTORY == window_type) && cell >= BOX_INVENTORY_SLOT_START && cell < BOX_INVENTORY_SLOT_END);
  830. }
  831. bool IsEfsunInventoryPosition() const
  832. {
  833. return ((INVENTORY == window_type) && cell >= EFSUN_INVENTORY_SLOT_START && cell < EFSUN_INVENTORY_SLOT_END);
  834. }
  835. bool IsCicekInventoryPosition() const
  836. {
  837. return ((INVENTORY == window_type) && cell >= CICEK_INVENTORY_SLOT_START && cell < CICEK_INVENTORY_SLOT_END);
  838. }
  839. #endif
  840. }
  841.  
  842. bool operator==(const struct SItemPos& rhs) const
  843. {
  844. return (window_type == rhs.window_type) && (cell == rhs.cell);
  845. }
  846. bool operator<(const struct SItemPos& rhs) const
  847. {
  848. return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
  849. }
  850. } TItemPos;
  851.  
  852. const TItemPos NPOS (RESERVED_WINDOW, WORD_MAX);
  853.  
  854. typedef enum
  855. {
  856. SHOP_COIN_TYPE_GOLD, // DEFAULT VALUE
  857. SHOP_COIN_TYPE_SECONDARY_COIN,
  858. } EShopCoinType;
  859.  
  860. #pragma pack(pop)
  861.  
  862. #endif
  863.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement