1. #include "stdafx.h"
  2. #include "char.h"
  3. TJobInitialPoints JobInitialPoints[JOB_MAX_NUM] =
  4. /*
  5. {
  6. int st, ht, dx, iq;
  7. int max_hp, max_sp;
  8. int hp_per_ht, sp_per_iq;
  9. int hp_per_lv_begin, hp_per_lv_end;
  10. int sp_per_lv_begin, sp_per_lv_end;
  11. int max_stamina;
  12. int stamina_per_con;
  13. int stamina_per_lv_begin, stamina_per_lv_end;
  14. }
  15. */
  16. {
  17. // str con dex int 초기HP 초기SP CON/HP INT/SP HP랜덤/lv MP랜덤/lv 초기stam stam/con stam/lv
  18. { 6, 4, 3, 3, 600, 200, 40, 20, 36, 44, 18, 22, 800, 5, 1, 3 }, // JOB_WARRIOR 16
  19. { 4, 3, 6, 3, 650, 200, 40, 20, 36, 44, 18, 22, 800, 5, 1, 3 }, // JOB_ASSASSIN 16
  20. { 5, 3, 3, 5, 650, 200, 40, 20, 36, 44, 18, 22, 800, 5, 1, 3 }, // JOB_SURA 16
  21. { 3, 4, 3, 6, 700, 200, 40, 20, 36, 44, 18, 22, 800, 5, 1, 3 } // JOB_SHAMANa 16
  22. };
  23. const TMobRankStat MobRankStats[MOB_RANK_MAX_NUM] =
  24. /*
  25. {
  26. int iGoldPercent;
  27. }
  28. */
  29. {
  30. { 20, }, // MOB_RANK_PAWN,
  31. { 20, }, // MOB_RANK_S_PAWN,
  32. { 25, }, // MOB_RANK_KNIGHT,
  33. { 30, }, // MOB_RANK_S_KNIGHT,
  34. { 50, }, // MOB_RANK_BOSS,
  35. { 100, } // MOB_RANK_KING,
  36. };
  37. TBattleTypeStat BattleTypeStats[BATTLE_TYPE_MAX_NUM] =
  38. /*
  39. {
  40. int AttGradeBias;
  41. int DefGradeBias;
  42. int MagicAttGradeBias;
  43. int MagicDefGradeBias;
  44. }
  45. */
  46. {
  47. { 0, 0, 0, -10 }, // BATTLE_TYPE_MELEE,
  48. { 10, -20, -10, -15 }, // BATTLE_TYPE_RANGE,
  49. { -5, -5, 10, 10 }, // BATTLE_TYPE_MAGIC,
  50. { 0, 0, 0, 0 }, // BATTLE_TYPE_SPECIAL,
  51. { 10, -10, 0, -15 }, // BATTLE_TYPE_POWER,
  52. { -10, 10, -10, 0 }, // BATTLE_TYPE_TANKER,
  53. { 20, -20, 0, -10 }, // BATTLE_TYPE_SUPER_POWER,
  54. { -20, 20, -10, 0 }, // BATTLE_TYPE_SUPER_TANKER,
  55. };
  56. const DWORD * exp_table = NULL;
  57. const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1] =
  58. {
  59. 0, // 0
  60. 100,
  61. 150,
  62. 260,
  63. 380,
  64. 600,
  65. 1300,
  66. 3300,
  67. 5700,
  68. 8700,
  69. 12800, // 10
  70. 18000,
  71. 25000,
  72. 36000,
  73. 52000,
  74. 73000,
  75. 100000,
  76. 125000,
  77. 160000,
  78. 220000,
  79. 280000, // 20
  80. 370000,
  81. 540000,
  82. 670000,
  83. 880000,
  84. 1000000,
  85. 1237000,
  86. 1418000,
  87. 1624000,
  88. 1857000,
  89. 2122000, // 30
  90. 2421000,
  91. 2761000,
  92. 3145000,
  93. 3580000,
  94. 4073000,
  95. 4632000,
  96. 5194000,
  97. 5717000,
  98. 6264000,
  99. 6837000, // 40
  100. 7600000,
  101. 8274000,
  102. 8990000,
  103. 9753000,
  104. 10560000,
  105. 11410000,
  106. 12320000,
  107. 13270000,
  108. 14280000,
  109. 15340000, // 50
  110. 16870000,
  111. 18960000,
  112. 19980000,
  113. 21420000,
  114. 22930000,
  115. 24530000,
  116. 26200000,
  117. 27960000,
  118. 29800000,
  119. 32780000, // 60
  120. 36060000,
  121. 39670000,
  122. 43640000,
  123. 48000000,
  124. 52800000,
  125. 58080000,
  126. 63890000,
  127. 70280000,
  128. 77310000,
  129. 85040000, // 70
  130. 93540000,
  131. 102900000,
  132. 113200000,
  133. 124500000,
  134. 137000000,
  135. 150700000,
  136. 165700000,
  137. 236990000,
  138. 260650000,
  139. 286780000, // 80
  140. 315380000,
  141. 346970000,
  142. 381680000,
  143. 419770000,
  144. 461760000,
  145. 508040000,
  146. 558740000,
  147. 614640000,
  148. 676130000,
  149. 743730000, // 90
  150. 1041222000,
  151. 1145344200,
  152. 1259878620,
  153. 1385866482,
  154. 1524453130,
  155. 1676898443,
  156. 1844588288,
  157. 2029047116,
  158. 2100000000, // 99 99레벨일 때 필요경험치 (100레벨이 되기 위한)
  159. 2100000000, // 100
  160. 2100000000,
  161. 2100000000,
  162. 2100000000,
  163. 2100000000,
  164. 2100000000, // 105
  165. 2100000000,
  166. 2100000000,
  167. 2100000000,
  168. 2100000000,
  169. 2100000000, // 110
  170. 2100000000,
  171. 2100000000,
  172. 2100000000,
  173. 2100000000,
  174. 2100000000, // 115
  175. 2100000000,
  176. 2100000000,
  177. 2100000000,
  178. 2100000000,
  179. 2100000000, // 120
  180. };
  181. const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1] =
  182. {
  183. 0, // 0
  184. 300,
  185. 800,
  186. 1500,
  187. 2500,
  188. 4300,
  189. 7200,
  190. 11000,
  191. 17000,
  192. 24000,
  193. 33000, // 10
  194. 43000,
  195. 58000,
  196. 76000,
  197. 100000,
  198. 130000,
  199. 169000,
  200. 219000,
  201. 283000,
  202. 365000,
  203. 472000, // 20
  204. 610000,
  205. 705000,
  206. 813000,
  207. 937000,
  208. 1077000,
  209. 1237000,
  210. 1418000,
  211. 1624000,
  212. 1857000,
  213. 2122000, // 30
  214. 2421000,
  215. 2761000,
  216. 3145000,
  217. 3580000,
  218. 4073000,
  219. 4632000,
  220. 5194000,
  221. 5717000,
  222. 6264000,
  223. 6837000, // 40
  224. 7600000,
  225. 8274000,
  226. 8990000,
  227. 9753000,
  228. 10560000,
  229. 11410000,
  230. 12320000,
  231. 13270000,
  232. 14280000,
  233. 15340000, // 50
  234. 16870000,
  235. 18960000,
  236. 19980000,
  237. 21420000,
  238. 22930000,
  239. 24530000,
  240. 26200000,
  241. 27960000,
  242. 29800000,
  243. 32780000, // 60
  244. 36060000,
  245. 39670000,
  246. 43640000,
  247. 48000000,
  248. 52800000,
  249. 58080000,
  250. 63890000,
  251. 70280000,
  252. 77310000,
  253. 85040000, // 70
  254. 93540000,
  255. 102900000,
  256. 113200000,
  257. 124500000,
  258. 137000000,
  259. 150700000,
  260. 165700000,
  261. 236990000,
  262. 260650000,
  263. 286780000, // 80
  264. 315380000,
  265. 346970000,
  266. 381680000,
  267. 419770000,
  268. 461760000,
  269. 508040000,
  270. 558740000,
  271. 614640000,
  272. 676130000,
  273. 743730000, // 90
  274. 1041222000,
  275. 1145344200,
  276. 1259878620,
  277. 1385866482,
  278. 1524453130,
  279. 1676898443,
  280. 1844588288,
  281. 2029047116,
  282. 2050000000, // 99레벨 일 때 필요경험치 (100레벨이 되기 위한)
  283. 2150000000u, // 100
  284. 2210000000u,
  285. 2250000000u,
  286. 2280000000u,
  287. 2310000000u,
  288. 2330000000u, // 105
  289. 2350000000u,
  290. 2370000000u,
  291. 2390000000u,
  292. 2400000000u,
  293. 2410000000u, // 110
  294. 2420000000u,
  295. 2430000000u,
  296. 2440000000u,
  297. 2450000000u,
  298. 2460000000u, // 115
  299. 2470000000u,
  300. 2480000000u,
  301. 2490000000u,
  302. 2490000000u,
  303. 2500000000u, // 120
  304. };
  305. const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ] =
  306. {
  307. 300, // 0
  308. 800, // 1
  309. 1500,
  310. 2500,
  311. 4300,
  312. 7200,
  313. 11400,
  314. 17000,
  315. 24000,
  316. 33000,
  317. 46000, // 10
  318. 62000,
  319. 83000,
  320. 111000,
  321. 149000,
  322. 200000,
  323. 268000,
  324. 360000,
  325. 482000,
  326. 647000,
  327. 868000, // 20
  328. 996000,
  329. 1143000,
  330. 1312000,
  331. 1506000,
  332. 1729000,
  333. 1984000,
  334. 2277000,
  335. 2614000,
  336. 3000000,
  337. 3443000, // 30
  338. 3952000,
  339. 4536000,
  340. 5206000,
  341. 5975000,
  342. 6858000,
  343. 7730000,
  344. 8504000,
  345. 9307000,
  346. 10140000,
  347. 11330000, // 40
  348. 12320000,
  349. 13370000,
  350. 14490000,
  351. 15670000,
  352. 16920000,
  353. 18240000,
  354. 19630000,
  355. 21090000,
  356. 22630000,
  357. 24670000, // 50
  358. 26890000,
  359. 29310000,
  360. 31950000,
  361. 34820000,
  362. 37960000,
  363. 41370000,
  364. 45100000,
  365. 49160000,
  366. 53580000,
  367. 58400000, // 60
  368. 63660000,
  369. 69390000,
  370. 75630000,
  371. 82440000,
  372. 89860000,
  373. 97950000,
  374. 106760000,
  375. 136370000,
  376. 151800000,
  377. 168300000, // 70
  378. 250000000,
  379. 340000000,
  380. 450000000,
  381. 570000000,
  382. 690000000,
  383. 810000000,
  384. 912600000,
  385. 1004000000,
  386. 1094000000,
  387. 1182000000, // 80
  388. 1269000000,
  389. 1354000000,
  390. 1438000000,
  391. 1521000000,
  392. 1603000000,
  393. 1684000000,
  394. 1764000000,
  395. 1844000000,
  396. 1922000000,
  397. 2000000000, // 90
  398. 2000000000,
  399. 2000000000,
  400. 2000000000,
  401. 2000000000,
  402. 2000000000,
  403. 2000000000,
  404. 2000000000,
  405. 2000000000,
  406. 2000000000, // 99 99레벨일 때 필요경험치 (100레벨이 되기 위한).. 현재 CIBN이 어떻게 운영하고 있는 지 모르니 신규 테이블을 쓰지 않고 기존값 계속 연장 유지
  407. 2000000000, // 100
  408. 2000000000,
  409. 2000000000,
  410. 2000000000,
  411. 2000000000,
  412. 2000000000, // 105
  413. 2000000000,
  414. 2000000000,
  415. 2000000000,
  416. 2000000000,
  417. 2000000000, // 110
  418. 2000000000,
  419. 2000000000,
  420. 2000000000,
  421. 2000000000,
  422. 2000000000, // 115
  423. 2000000000,
  424. 2000000000,
  425. 2000000000,
  426. 2000000000,
  427. 2000000000, // 120
  428. };
  429. const int * aiPercentByDeltaLev = NULL;
  430. const int * aiPercentByDeltaLevForBoss = NULL;
  431. // 적과 나와의 레벨차이에 의한 계산에 사용되는 테이블
  432. // MIN(MAX_EXP_DELTA_OF_LEV - 1, (적렙 + 15) - 내렙))
  433. const int aiPercentByDeltaLevForBoss_euckr[MAX_EXP_DELTA_OF_LEV] =
  434. {
  435. 1, // -15 0
  436. 3, // -14 1
  437. 5, // -13 2
  438. 7, // -12 3
  439. 15, // -11 4
  440. 30, // -10 5
  441. 60, // -9 6
  442. 90, // -8 7
  443. 91, // -7 8
  444. 92, // -6 9
  445. 93, // -5 10
  446. 94, // -4 11
  447. 95, // -3 12
  448. 97, // -2 13
  449. 99, // -1 14
  450. 100, // 0 15
  451. 105, // 1 16
  452. 110, // 2 17
  453. 115, // 3 18
  454. 120, // 4 19
  455. 125, // 5 20
  456. 130, // 6 21
  457. 135, // 7 22
  458. 140, // 8 23
  459. 145, // 9 24
  460. 150, // 10 25
  461. 155, // 11 26
  462. 160, // 12 27
  463. 165, // 13 28
  464. 170, // 14 29
  465. 180 // 15 30
  466. };
  467. const int aiPercentByDeltaLev_euckr[MAX_EXP_DELTA_OF_LEV] =
  468. {
  469. 1, // -15 0
  470. 5, // -14 1
  471. 10, // -13 2
  472. 20, // -12 3
  473. 30, // -11 4
  474. 50, // -10 5
  475. 70, // -9 6
  476. 80, // -8 7
  477. 85, // -7 8
  478. 90, // -6 9
  479. 92, // -5 10
  480. 94, // -4 11
  481. 96, // -3 12
  482. 98, // -2 13
  483. 100, // -1 14
  484. 100, // 0 15
  485. 105, // 1 16
  486. 110, // 2 17
  487. 115, // 3 18
  488. 120, // 4 19
  489. 125, // 5 20
  490. 130, // 6 21
  491. 135, // 7 22
  492. 140, // 8 23
  493. 145, // 9 24
  494. 150, // 10 25
  495. 155, // 11 26
  496. 160, // 12 27
  497. 165, // 13 28
  498. 170, // 14 29
  499. 180, // 15 30
  500. };
  501. const DWORD party_exp_distribute_table[PLAYER_MAX_LEVEL_CONST + 1] =
  502. {
  503. 0,
  504. 10, 10, 10, 10, 15, 15, 20, 25, 30, 40, // 1 - 10
  505. 50, 60, 80, 100, 120, 140, 160, 184, 210, 240, // 11 - 20
  506. 270, 300, 330, 360, 390, 420, 450, 480, 510, 550, // 21 - 30
  507. 600, 640, 700, 760, 820, 880, 940, 1000, 1100, 1180, // 31 - 40
  508. 1260, 1320, 1380, 1440, 1500, 1560, 1620, 1680, 1740, 1800, // 41 - 50
  509. 1860, 1920, 2000, 2100, 2200, 2300, 2450, 2600, 2750, 2900, // 51 - 60
  510. 3050, 3200, 3350, 3500, 3650, 3800, 3950, 4100, 4250, 4400, // 61 - 70
  511. 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, // 71 - 80
  512. 6600, 6900, 7100, 7300, 7600, 7800, 8000, 8300, 8500, 8800, // 81 - 90
  513. 9000, 9000, 9000, 9000, 9000, 9000, 9000, 9000, 9000, 9000, // 91 - 100
  514. 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, // 101 - 110
  515. 12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000, // 111 - 120
  516. };
  517. Coord aArroundCoords[ARROUND_COORD_MAX_NUM] =
  518. {
  519. { 0, 0 },
  520. { 0, 50 },
  521. { 35, 35 },
  522. { 50, -0 },
  523. { 35, -35 },
  524. { 0, -50 },
  525. { -35, -35 },
  526. { -50, 0 },
  527. { -35, 35 },
  528. { 0, 100 },
  529. { 71, 71 },
  530. { 100, -0 },
  531. { 71, -71 },
  532. { 0, -100 },
  533. { -71, -71 },
  534. { -100, 0 },
  535. { -71, 71 },
  536. { 0, 150 },
  537. { 106, 106 },
  538. { 150, -0 },
  539. { 106, -106 },
  540. { 0, -150 },
  541. { -106, -106 },
  542. { -150, 0 },
  543. { -106, 106 },
  544. { 0, 200 },
  545. { 141, 141 },
  546. { 200, -0 },
  547. { 141, -141 },
  548. { 0, -200 },
  549. { -141, -141 },
  550. { -200, 0 },
  551. { -141, 141 },
  552. { 0, 250 },
  553. { 177, 177 },
  554. { 250, -0 },
  555. { 177, -177 },
  556. { 0, -250 },
  557. { -177, -177 },
  558. { -250, 0 },
  559. { -177, 177 },
  560. { 0, 300 },
  561. { 212, 212 },
  562. { 300, -0 },
  563. { 212, -212 },
  564. { 0, -300 },
  565. { -212, -212 },
  566. { -300, 0 },
  567. { -212, 212 },
  568. { 0, 350 },
  569. { 247, 247 },
  570. { 350, -0 },
  571. { 247, -247 },
  572. { 0, -350 },
  573. { -247, -247 },
  574. { -350, 0 },
  575. { -247, 247 },
  576. { 0, 400 },
  577. { 283, 283 },
  578. { 400, -0 },
  579. { 283, -283 },
  580. { 0, -400 },
  581. { -283, -283 },
  582. { -400, 0 },
  583. { -283, 283 },
  584. { 0, 450 },
  585. { 318, 318 },
  586. { 450, -0 },
  587. { 318, -318 },
  588. { 0, -450 },
  589. { -318, -318 },
  590. { -450, 0 },
  591. { -318, 318 },
  592. { 0, 500 },
  593. { 354, 354 },
  594. { 500, -0 },
  595. { 354, -354 },
  596. { 0, -500 },
  597. { -354, -354 },
  598. { -500, 0 },
  599. { -354, 354 },
  600. { 0, 550 },
  601. { 389, 389 },
  602. { 550, -0 },
  603. { 389, -389 },
  604. { 0, -550 },
  605. { -389, -389 },
  606. { -550, 0 },
  607. { -389, 389 },
  608. { 0, 600 },
  609. { 424, 424 },
  610. { 600, -0 },
  611. { 424, -424 },
  612. { 0, -600 },
  613. { -424, -424 },
  614. { -600, 0 },
  615. { -424, 424 },
  616. { 0, 650 },
  617. { 460, 460 },
  618. { 650, -0 },
  619. { 460, -460 },
  620. { 0, -650 },
  621. { -460, -460 },
  622. { -650, 0 },
  623. { -460, 460 },
  624. { 0, 700 },
  625. { 495, 495 },
  626. { 700, -0 },
  627. { 495, -495 },
  628. { 0, -700 },
  629. { -495, -495 },
  630. { -700, 0 },
  631. { -495, 495 },
  632. { 0, 750 },
  633. { 530, 530 },
  634. { 750, -0 },
  635. { 530, -530 },
  636. { 0, -750 },
  637. { -530, -530 },
  638. { -750, 0 },
  639. { -530, 530 },
  640. { 0, 800 },
  641. { 566, 566 },
  642. { 800, -0 },
  643. { 566, -566 },
  644. { 0, -800 },
  645. { -566, -566 },
  646. { -800, 0 },
  647. { -566, 566 },
  648. { 0, 850 },
  649. { 601, 601 },
  650. { 850, -0 },
  651. { 601, -601 },
  652. { 0, -850 },
  653. { -601, -601 },
  654. { -850, 0 },
  655. { -601, 601 },
  656. { 0, 900 },
  657. { 636, 636 },
  658. { 900, -0 },
  659. { 636, -636 },
  660. { 0, -900 },
  661. { -636, -636 },
  662. { -900, 0 },
  663. { -636, 636 },
  664. { 0, 950 },
  665. { 672, 672 },
  666. { 950, -0 },
  667. { 672, -672 },
  668. { 0, -950 },
  669. { -672, -672 },
  670. { -950, 0 },
  671. { -672, 672 },
  672. { 0, 1000 },
  673. { 707, 707 },
  674. { 1000, -0 },
  675. { 707, -707 },
  676. { 0, -1000 },
  677. { -707, -707 },
  678. { -1000, 0 },
  679. { -707, 707 },
  680. };
  681. const DWORD guild_exp_table[GUILD_MAX_LEVEL+1] =
  682. {
  683. 0,
  684. 15000UL,
  685. 45000UL,
  686. 90000UL,
  687. 160000UL,
  688. 235000UL,
  689. 325000UL,
  690. 430000UL,
  691. 550000UL,
  692. 685000UL,
  693. 835000UL,
  694. 1000000UL,
  695. 1500000UL,
  696. 2100000UL,
  697. 2800000UL,
  698. 3600000UL,
  699. 4500000UL,
  700. 6500000UL,
  701. 8000000UL,
  702. 10000000UL,
  703. 42000000UL,
  704. 42000000UL,
  705. 42000000UL,
  706. 42000000UL,
  707. 42000000UL,
  708. 42000000UL,
  709. 42000000UL,
  710. 42000000UL,
  711. 42000000UL,
  712. 42000000UL,
  713. 42000000UL
  714. };
  715. // INTERNATIONAL_VERSION 길드경험치
  716. const DWORD guild_exp_table2[GUILD_MAX_LEVEL+1] =
  717. {
  718. 0,
  719. 6000UL,
  720. 18000UL,
  721. 36000UL,
  722. 64000UL,
  723. 94000UL,
  724. 130000UL,
  725. 172000UL,
  726. 220000UL,
  727. 274000UL,
  728. 334000UL,
  729. 400000UL,
  730. 600000UL,
  731. 840000UL,
  732. 1120000UL,
  733. 1440000UL,
  734. 1800000UL,
  735. 2600000UL,
  736. 3200000UL,
  737. 4000000UL,
  738. 16800000UL,
  739. 16800000UL,
  740. 16800000UL,
  741. 16800000UL,
  742. 16800000UL,
  743. 16800000UL,
  744. 16800000UL,
  745. 16800000UL,
  746. 16800000UL,
  747. 16800000UL,
  748. 16800000UL
  749. };
  750. // END_OF_INTERNATIONAL_VERSION 길드경험치
  751. const int aiMobEnchantApplyIdx[MOB_ENCHANTS_MAX_NUM] =
  752. {
  753. APPLY_CURSE_PCT,
  754. APPLY_SLOW_PCT,
  755. APPLY_POISON_PCT,
  756. APPLY_STUN_PCT,
  757. APPLY_CRITICAL_PCT,
  758. APPLY_PENETRATE_PCT,
  759. };
  760. const int aiMobResistsApplyIdx[MOB_RESISTS_MAX_NUM] =
  761. {
  762. APPLY_RESIST_SWORD,
  763. APPLY_RESIST_TWOHAND,
  764. APPLY_RESIST_DAGGER,
  765. APPLY_RESIST_BELL,
  766. APPLY_RESIST_FAN,
  767. APPLY_RESIST_BOW,
  768. APPLY_RESIST_FIRE,
  769. APPLY_RESIST_ELEC,
  770. APPLY_RESIST_MAGIC,
  771. APPLY_RESIST_WIND,
  772. APPLY_POISON_REDUCE,
  773. };
  774. const int aiSocketPercentByQty[5][4] =
  775. {
  776. { 0, 0, 0, 0 },
  777. { 3, 0, 0, 0 },
  778. { 10, 1, 0, 0 },
  779. { 15, 10, 1, 0 },
  780. { 20, 15, 10, 1 }
  781. };
  782. const int aiWeaponSocketQty[WEAPON_NUM_TYPES] =
  783. {
  784. 3, // WEAPON_SWORD,
  785. 3, // WEAPON_DAGGER,
  786. 3, // WEAPON_BOW,
  787. 3, // WEAPON_TWO_HANDED,
  788. 3, // WEAPON_BELL,
  789. 3, // WEAPON_FAN,
  790. 0, // WEAPON_ARROW,
  791. 0, // WEAPON_MOUNT_SPEAR
  792. };
  793. const int aiArmorSocketQty[ARMOR_NUM_TYPES] =
  794. {
  795. 3, // ARMOR_BODY,
  796. 1, // ARMOR_HEAD,
  797. 1, // ARMOR_SHIELD,
  798. 0, // ARMOR_WRIST,
  799. 0, // ARMOR_FOOTS,
  800. 0 // ARMOR_ACCESSORY
  801. };
  802. TItemAttrMap g_map_itemAttr;
  803. TItemAttrMap g_map_itemRare;
  804. const TApplyInfo aApplyInfo[MAX_APPLY_NUM] =
  805. /*
  806. {
  807. DWORD dwPointType;
  808. }
  809. */
  810. {
  811. // Point Type
  812. { POINT_NONE, }, // APPLY_NONE, 0
  813. { POINT_MAX_HP, }, // APPLY_MAX_HP, 1
  814. { POINT_MAX_SP, }, // APPLY_MAX_SP, 2
  815. { POINT_HT, }, // APPLY_CON, 3
  816. { POINT_IQ, }, // APPLY_INT, 4
  817. { POINT_ST, }, // APPLY_STR, 5
  818. { POINT_DX, }, // APPLY_DEX, 6
  819. { POINT_ATT_SPEED, }, // APPLY_ATT_SPEED, 7
  820. { POINT_MOV_SPEED, }, // APPLY_MOV_SPEED, 8
  821. { POINT_CASTING_SPEED, }, // APPLY_CAST_SPEED, 9
  822. { POINT_HP_REGEN, }, // APPLY_HP_REGEN, 10
  823. { POINT_SP_REGEN, }, // APPLY_SP_REGEN, 11
  824. { POINT_POISON_PCT, }, // APPLY_POISON_PCT, 12
  825. { POINT_STUN_PCT, }, // APPLY_STUN_PCT, 13
  826. { POINT_SLOW_PCT, }, // APPLY_SLOW_PCT, 14
  827. { POINT_CRITICAL_PCT, }, // APPLY_CRITICAL_PCT, 15
  828. { POINT_PENETRATE_PCT, }, // APPLY_PENETRATE_PCT, 16
  829. { POINT_ATTBONUS_HUMAN, }, // APPLY_ATTBONUS_HUMAN, 17
  830. { POINT_ATTBONUS_ANIMAL, }, // APPLY_ATTBONUS_ANIMAL, 18
  831. { POINT_ATTBONUS_ORC, }, // APPLY_ATTBONUS_ORC, 19
  832. { POINT_ATTBONUS_MILGYO, }, // APPLY_ATTBONUS_MILGYO, 20
  833. { POINT_ATTBONUS_UNDEAD, }, // APPLY_ATTBONUS_UNDEAD, 21
  834. { POINT_ATTBONUS_DEVIL, }, // APPLY_ATTBONUS_DEVIL, 22
  835. { POINT_STEAL_HP, }, // APPLY_STEAL_HP, 23
  836. { POINT_STEAL_SP, }, // APPLY_STEAL_SP, 24
  837. { POINT_MANA_BURN_PCT, }, // APPLY_MANA_BURN_PCT, 25
  838. { POINT_DAMAGE_SP_RECOVER, }, // APPLY_DAMAGE_SP_RECOVER,26
  839. { POINT_BLOCK, }, // APPLY_BLOCK, 27
  840. { POINT_DODGE, }, // APPLY_DODGE, 28
  841. { POINT_RESIST_SWORD, }, // APPLY_RESIST_SWORD, 29
  842. { POINT_RESIST_TWOHAND, }, // APPLY_RESIST_TWOHAND, 30
  843. { POINT_RESIST_DAGGER, }, // APPLY_RESIST_DAGGER, 31
  844. { POINT_RESIST_BELL, }, // APPLY_RESIST_BELL, 32
  845. { POINT_RESIST_FAN, }, // APPLY_RESIST_FAN, 33
  846. { POINT_RESIST_BOW, }, // APPLY_RESIST_BOW, 34
  847. { POINT_RESIST_FIRE, }, // APPLY_RESIST_FIRE, 35
  848. { POINT_RESIST_ELEC, }, // APPLY_RESIST_ELEC, 36
  849. { POINT_RESIST_MAGIC, }, // APPLY_RESIST_MAGIC, 37
  850. { POINT_RESIST_WIND, }, // APPLY_RESIST_WIND, 38
  851. { POINT_REFLECT_MELEE, }, // APPLY_REFLECT_MELEE, 39
  852. { POINT_REFLECT_CURSE, }, // APPLY_REFLECT_CURSE, 40
  853. { POINT_POISON_REDUCE, }, // APPLY_POISON_REDUCE, 41
  854. { POINT_KILL_SP_RECOVER, }, // APPLY_KILL_SP_RECOVER, 42
  855. { POINT_EXP_DOUBLE_BONUS, }, // APPLY_EXP_DOUBLE_BONUS, 43
  856. { POINT_GOLD_DOUBLE_BONUS, }, // APPLY_GOLD_DOUBLE_BONUS,44
  857. { POINT_ITEM_DROP_BONUS, }, // APPLY_ITEM_DROP_BONUS, 45
  858. { POINT_POTION_BONUS, }, // APPLY_POTION_BONUS, 46
  859. { POINT_KILL_HP_RECOVERY, }, // APPLY_KILL_HP_RECOVER, 47
  860. { POINT_IMMUNE_STUN, }, // APPLY_IMMUNE_STUN, 48
  861. { POINT_IMMUNE_SLOW, }, // APPLY_IMMUNE_SLOW, 49
  862. { POINT_IMMUNE_FALL, }, // APPLY_IMMUNE_FALL, 50
  863. { POINT_NONE, }, // APPLY_SKILL, 51
  864. { POINT_BOW_DISTANCE, }, // APPLY_BOW_DISTANCE, 52
  865. { POINT_ATT_GRADE_BONUS, }, // APPLY_ATT_GRADE, 53
  866. { POINT_DEF_GRADE_BONUS, }, // APPLY_DEF_GRADE, 54
  867. { POINT_MAGIC_ATT_GRADE_BONUS, }, // APPLY_MAGIC_ATT_GRADE, 55
  868. { POINT_MAGIC_DEF_GRADE_BONUS, }, // APPLY_MAGIC_DEF_GRADE, 56
  869. { POINT_CURSE_PCT, }, // APPLY_CURSE_PCT, 57
  870. { POINT_MAX_STAMINA }, // APPLY_MAX_STAMINA 58
  871. { POINT_ATTBONUS_WARRIOR }, // APPLY_ATTBONUS_WARRIOR 59
  872. { POINT_ATTBONUS_ASSASSIN }, // APPLY_ATTBONUS_ASSASSIN 60
  873. { POINT_ATTBONUS_SURA }, // APPLY_ATTBONUS_SURA 61
  874. { POINT_ATTBONUS_SHAMAN }, // APPLY_ATTBONUS_SHAMAN 62
  875. { POINT_ATTBONUS_MONSTER }, // APPLY_ATTBONUS_MONSTER 63
  876. { POINT_ATT_BONUS }, // 64 // APPLY_MALL_ATTBONUS
  877. { POINT_MALL_DEFBONUS }, // 65
  878. { POINT_MALL_EXPBONUS }, // 66 APPLY_MALL_EXPBONUS
  879. { POINT_MALL_ITEMBONUS }, // 67
  880. { POINT_MALL_GOLDBONUS }, // 68
  881. { POINT_MAX_HP_PCT }, // 69
  882. { POINT_MAX_SP_PCT }, // 70
  883. { POINT_SKILL_DAMAGE_BONUS }, // 71
  884. { POINT_NORMAL_HIT_DAMAGE_BONUS }, // 72
  885. // DEFEND_BONUS_ATTRIBUTES
  886. { POINT_SKILL_DEFEND_BONUS }, // 73
  887. { POINT_NORMAL_HIT_DEFEND_BONUS }, // 74
  888. // END_OF_DEFEND_BONUS_ATTRIBUTES
  889. // PC_BANG_ITEM_ADD
  890. { POINT_PC_BANG_EXP_BONUS }, // 75
  891. { POINT_PC_BANG_DROP_BONUS }, // 76
  892. // END_PC_BANG_ITEM_ADD
  893. { POINT_NONE, }, // 77 사용시 HP 소모 APPLY_EXTRACT_HP_PCT
  894. { POINT_RESIST_WARRIOR, }, // 78 무사에게 저항 APPLY_RESIST_WARRIOR
  895. { POINT_RESIST_ASSASSIN, }, // 79 자객에게 저항 APPLY_RESIST_ASSASSIN
  896. { POINT_RESIST_SURA, }, // 80 수라에게 저항 APPLY_RESIST_SURA
  897. { POINT_RESIST_SHAMAN, }, // 81 무당에게 저항 APPLY_RESIST_SHAMAN
  898. { POINT_ENERGY }, // 82 기력
  899. { POINT_DEF_GRADE }, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
  900. { POINT_COSTUME_ATTR_BONUS }, // 84 코스튬에 붙은 속성에 대해서만 보너스를 주는 기력
  901. { POINT_MAGIC_ATT_BONUS_PER }, // 85 마법 공격력 +x%
  902. { POINT_MELEE_MAGIC_ATT_BONUS_PER }, // 86 APPLY_MELEE_MAGIC_ATTBONUS_PER
  903. { POINT_RESIST_ICE, }, // APPLY_RESIST_ICE, 87
  904. { POINT_RESIST_EARTH, }, // APPLY_RESIST_EARTH, 88
  905. { POINT_RESIST_DARK, }, // APPLY_RESIST_DARK, 89
  906. { POINT_RESIST_CRITICAL, }, // APPLY_ANTI_CRITICAL_PCT, 90
  907. { POINT_RESIST_PENETRATE, }, // APPLY_ANTI_PENETRATE_PCT, 91
  908. };
  909. const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL] =
  910. {
  911. //25, 25, 40, 8, 2,
  912. 30, 40, 20, 8, 2
  913. };
  914. const int aiItemMagicAttributePercentLow[ITEM_ATTRIBUTE_MAX_LEVEL] =
  915. {
  916. //45, 25, 20, 10, 0,
  917. 50, 40, 10, 0, 0
  918. };
  919. // ADD_ITEM_ATTRIBUTE
  920. const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM] =
  921. {
  922. 100, 100, 100, 100, 100, 100, 100,
  923. };
  924. // END_OF_ADD_ITEM_ATTRIBUTE
  925. const int aiExpLossPercents[PLAYER_EXP_TABLE_MAX + 1] =
  926. {
  927. 0,
  928. 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, // 1 - 10
  929. 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 11 - 20
  930. 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, // 21 - 30
  931. 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 31 - 40
  932. 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, // 41 - 50
  933. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 51 - 60
  934. 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, // 61 - 70
  935. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 71 - 80
  936. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 81 - 90
  937. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 91 - 100
  938. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 101 - 110
  939. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 111 - 120
  940. };
  941. const int aiSkillBookCountForLevelUp[10] =
  942. {
  943. 3, 3, 3, 3, 3, 4, 4, 5, 5, 6
  944. };
  945. // ADD_GRANDMASTER_SKILL
  946. const int aiGrandMasterSkillBookCountForLevelUp[10] =
  947. {
  948. 3, 3, 5, 5, 7, 7, 10, 10, 10, 20,
  949. };
  950. const int aiGrandMasterSkillBookMinCount[10] =
  951. {
  952. // 1, 1, 3, 5, 10, 15, 20, 30, 40, 50,
  953. // 3, 3, 5, 5, 10, 10, 15, 15, 20, 30
  954. 1, 1, 1, 2, 2, 3, 3, 4, 5, 6
  955. };
  956. const int aiGrandMasterSkillBookMaxCount[10] =
  957. {
  958. // 6, 15, 30, 45, 60, 80, 100, 120, 160, 200,
  959. // 6, 10, 15, 20, 30, 40, 50, 60, 70, 80
  960. 5, 7, 9, 11, 13, 15, 20, 25, 30, 35
  961. };
  962. // END_OF_ADD_GRANDMASTER_SKILL
  963. const int CHN_aiPartyBonusExpPercentByMemberCount[9] =
  964. {
  965. 0, 0, 12, 18, 26, 40, 53, 70, 100
  966. };
  967. // UPGRADE_PARTY_BONUS
  968. const int KOR_aiPartyBonusExpPercentByMemberCount[9] =
  969. {
  970. 0,
  971. 0,
  972. 30, // 66% * 2 - 100
  973. 60, // 53% * 3 - 100
  974. 75, // 44% * 4 - 100
  975. 90, // 38% * 5 - 100
  976. 105, // 34% * 6 - 100
  977. 110, // 30% * 7 - 100
  978. 140, // 30% * 8 - 100
  979. };
  980. const int KOR_aiUniqueItemPartyBonusExpPercentByMemberCount[9] =
  981. {
  982. 0,
  983. 0,
  984. 15*2,
  985. 14*3,
  986. 13*4,
  987. 12*5,
  988. 11*6,
  989. 10*7,
  990. 10*8,
  991. };
  992. // END_OF_UPGRADE_PARTY_BONUS
  993. const int * aiChainLightningCountBySkillLevel = NULL;
  994. const int aiChainLightningCountBySkillLevel_euckr[SKILL_MAX_LEVEL+1] =
  995. {
  996. 0, // 0
  997. 2, // 1
  998. 2, // 2
  999. 2, // 3
  1000. 2, // 4
  1001. 2, // 5
  1002. 2, // 6
  1003. 2, // 7
  1004. 2, // 8
  1005. 3, // 9
  1006. 3, // 10
  1007. 3, // 11
  1008. 3, // 12
  1009. 3, // 13
  1010. 3, // 14
  1011. 3, // 15
  1012. 3, // 16
  1013. 3, // 17
  1014. 3, // 18
  1015. 4, // 19
  1016. 4, // 20
  1017. 4, // 21
  1018. 4, // 22
  1019. 4, // 23
  1020. 5, // 24
  1021. 5, // 25
  1022. 5, // 26
  1023. 5, // 27
  1024. 5, // 28
  1025. 5, // 29
  1026. 5, // 30
  1027. 5, // 31
  1028. 5, // 32
  1029. 5, // 33
  1030. 5, // 34
  1031. 5, // 35
  1032. 5, // 36
  1033. 5, // 37
  1034. 5, // 38
  1035. 5, // 39
  1036. 5, // 40
  1037. };
  1038. const SStoneDropInfo aStoneDrop[STONE_INFO_MAX_NUM] =
  1039. {
  1040. // mob pct {+0 +1 +2 +3 +4}
  1041. {8005, 60, {30, 30, 30, 9, 1} },
  1042. {8006, 60, {28, 29, 31, 11, 1} },
  1043. {8007, 60, {24, 29, 32, 13, 2} },
  1044. {8008, 60, {22, 28, 33, 15, 2} },
  1045. {8009, 60, {21, 27, 33, 17, 2} },
  1046. {8010, 60, {18, 26, 34, 20, 2} },
  1047. {8011, 60, {14, 26, 35, 22, 3} },
  1048. {8012, 60, {10, 26, 37, 24, 3} },
  1049. {8013, 60, {2, 26, 40, 29, 3} },
  1050. {8014, 60, {0, 26, 41, 30, 3} },
  1051. };
  1052. const char * c_apszEmpireNames[EMPIRE_MAX_NUM] =
  1053. {
  1054. "전제국",
  1055. "신수국",
  1056. "천조국",
  1057. "진노국"
  1058. };
  1059. const char * c_apszPrivNames[MAX_PRIV_NUM] =
  1060. {
  1061. "",
  1062. "아이템이 나올 확률",
  1063. "돈이 나올 확률",
  1064. "돈 대박이 나올 확률",
  1065. "경험치 배율",
  1066. };
  1067. const int aiPolymorphPowerByLevel[SKILL_MAX_LEVEL + 1] =
  1068. {
  1069. 10, // 1
  1070. 11, // 2
  1071. 11, // 3
  1072. 12, // 4
  1073. 13, // 5
  1074. 13, // 6
  1075. 14, // 7
  1076. 15, // 8
  1077. 16, // 9
  1078. 17, // 10
  1079. 18, // 11
  1080. 19, // 12
  1081. 20, // 13
  1082. 22, // 14
  1083. 23, // 15
  1084. 24, // 16
  1085. 26, // 17
  1086. 27, // 18
  1087. 29, // 19
  1088. 31, // 20
  1089. 33, // 21
  1090. 35, // 22
  1091. 37, // 23
  1092. 39, // 24
  1093. 41, // 25
  1094. 44, // 26
  1095. 46, // 27
  1096. 49, // 28
  1097. 52, // 29
  1098. 55, // 30
  1099. 59, // 31
  1100. 62, // 32
  1101. 66, // 33
  1102. 70, // 34
  1103. 74, // 35
  1104. 79, // 36
  1105. 84, // 37
  1106. 89, // 38
  1107. 94, // 39
  1108. 100, // 40
  1109. };
  1110. TGuildWarInfo KOR_aGuildWarInfo[GUILD_WAR_TYPE_MAX_NUM] =
  1111. /*
  1112. {
  1113. long lMapIndex;
  1114. int iWarPrice;
  1115. int iWinnerPotionRewardPctToWinner;
  1116. int iLoserPotionRewardPctToWinner;
  1117. int iInitialScore;
  1118. int iEndScore;
  1119. };
  1120. */
  1121. {
  1122. { 0, 0, 0, 0, 0, 0 },
  1123. { 110, 0, 100, 50, 0, 100 },
  1124. { 111, 0, 100, 50, 0, 10 },
  1125. };
  1126. //
  1127. // 악세서리 소켓용 수치들
  1128. //
  1129. // 다이아몬드로 소켓을 추가할 때 확률
  1130. const int aiAccessorySocketAddPct[ITEM_ACCESSORY_SOCKET_MAX_NUM] =
  1131. {
  1132. 50, 50, 50
  1133. };
  1134. // 악세서리 수치 값의 몇%만큼의 성능을 추가하는지
  1135. const int aiAccessorySocketEffectivePct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
  1136. {
  1137. 0, 10, 20, 40
  1138. };
  1139. // 소켓 지속시간 24, 12, 6
  1140. const int aiAccessorySocketDegradeTime[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
  1141. {
  1142. 0, 3600 * 24, 3600 * 12, 3600 * 6
  1143. };
  1144. // 소켓 장착 성공률
  1145. const int aiAccessorySocketPutPct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
  1146. {
  1147. 90, 80, 70, 0
  1148. };
  1149. // END_OF_ACCESSORY_REFINE
  1150. #include "../../common/length.h"
  1151. // from import_item_proto.c
  1152. typedef struct SValueName
  1153. {
  1154. const char * c_pszName;
  1155. long lValue;
  1156. } TValueName;
  1157. TValueName c_aApplyTypeNames[] =
  1158. {
  1159. { "STR", APPLY_STR },
  1160. { "DEX", APPLY_DEX },
  1161. { "CON", APPLY_CON },
  1162. { "INT", APPLY_INT },
  1163. { "MAX_HP", APPLY_MAX_HP },
  1164. { "MAX_SP", APPLY_MAX_SP },
  1165. { "MAX_STAMINA", APPLY_MAX_STAMINA },
  1166. { "POISON_REDUCE", APPLY_POISON_REDUCE },
  1167. { "EXP_DOUBLE_BONUS", APPLY_EXP_DOUBLE_BONUS },
  1168. { "GOLD_DOUBLE_BONUS", APPLY_GOLD_DOUBLE_BONUS },
  1169. { "ITEM_DROP_BONUS", APPLY_ITEM_DROP_BONUS },
  1170. { "HP_REGEN", APPLY_HP_REGEN },
  1171. { "SP_REGEN", APPLY_SP_REGEN },
  1172. { "ATTACK_SPEED", APPLY_ATT_SPEED },
  1173. { "MOVE_SPEED", APPLY_MOV_SPEED },
  1174. { "CAST_SPEED", APPLY_CAST_SPEED },
  1175. { "ATT_BONUS", APPLY_ATT_GRADE_BONUS },
  1176. { "DEF_BONUS", APPLY_DEF_GRADE_BONUS },
  1177. { "MAGIC_ATT_GRADE",APPLY_MAGIC_ATT_GRADE },
  1178. { "MAGIC_DEF_GRADE",APPLY_MAGIC_DEF_GRADE },
  1179. { "SKILL", APPLY_SKILL },
  1180. { "ATTBONUS_ANIMAL",APPLY_ATTBONUS_ANIMAL },
  1181. { "ATTBONUS_UNDEAD",APPLY_ATTBONUS_UNDEAD },
  1182. { "ATTBONUS_DEVIL", APPLY_ATTBONUS_DEVIL },
  1183. { "ATTBONUS_HUMAN", APPLY_ATTBONUS_HUMAN },
  1184. { "ADD_BOW_DISTANCE",APPLY_BOW_DISTANCE },
  1185. { "DODGE", APPLY_DODGE },
  1186. { "BLOCK", APPLY_BLOCK },
  1187. { "RESIST_SWORD", APPLY_RESIST_SWORD },
  1188. { "RESIST_TWOHAND", APPLY_RESIST_TWOHAND },
  1189. { "RESIST_DAGGER", APPLY_RESIST_DAGGER },
  1190. { "RESIST_BELL", APPLY_RESIST_BELL },
  1191. { "RESIST_FAN", APPLY_RESIST_FAN },
  1192. { "RESIST_BOW", APPLY_RESIST_BOW },
  1193. { "RESIST_FIRE", APPLY_RESIST_FIRE },
  1194. { "RESIST_ELEC", APPLY_RESIST_ELEC },
  1195. { "RESIST_MAGIC", APPLY_RESIST_MAGIC },
  1196. { "RESIST_WIND", APPLY_RESIST_WIND },
  1197. { "REFLECT_MELEE", APPLY_REFLECT_MELEE },
  1198. { "REFLECT_CURSE", APPLY_REFLECT_CURSE },
  1199. { "RESIST_ICE", APPLY_RESIST_ICE },
  1200. { "RESIST_EARTH", APPLY_RESIST_EARTH },
  1201. { "RESIST_DARK", APPLY_RESIST_DARK },
  1202. { "RESIST_CRITICAL", APPLY_ANTI_CRITICAL_PCT },
  1203. { "RESIST_PENETRATE", APPLY_ANTI_PENETRATE_PCT },
  1204. { "POISON", APPLY_POISON_PCT },
  1205. { "SLOW", APPLY_SLOW_PCT },
  1206. { "STUN", APPLY_STUN_PCT },
  1207. { "STEAL_HP", APPLY_STEAL_HP },
  1208. { "STEAL_SP", APPLY_STEAL_SP },
  1209. { "MANA_BURN_PCT", APPLY_MANA_BURN_PCT },
  1210. { "CRITICAL", APPLY_CRITICAL_PCT },
  1211. { "PENETRATE", APPLY_PENETRATE_PCT },
  1212. { "KILL_SP_RECOVER",APPLY_KILL_SP_RECOVER },
  1213. { "KILL_HP_RECOVER",APPLY_KILL_HP_RECOVER },
  1214. { "PENETRATE_PCT", APPLY_PENETRATE_PCT },
  1215. { "CRITICAL_PCT", APPLY_CRITICAL_PCT },
  1216. { "POISON_PCT", APPLY_POISON_PCT },
  1217. { "STUN_PCT", APPLY_STUN_PCT },
  1218. { "ATT_BONUS_TO_WARRIOR", APPLY_ATTBONUS_WARRIOR },
  1219. { "ATT_BONUS_TO_ASSASSIN", APPLY_ATTBONUS_ASSASSIN },
  1220. { "ATT_BONUS_TO_SURA", APPLY_ATTBONUS_SURA },
  1221. { "ATT_BONUS_TO_SHAMAN", APPLY_ATTBONUS_SHAMAN },
  1222. { "ATT_BONUS_TO_MONSTER", APPLY_ATTBONUS_MONSTER },
  1223. { "ATT_BONUS_TO_MOB", APPLY_ATTBONUS_MONSTER },
  1224. { "MALL_ATTBONUS", APPLY_MALL_ATTBONUS },
  1225. { "MALL_EXPBONUS", APPLY_MALL_EXPBONUS },
  1226. { "MALL_DEFBONUS", APPLY_MALL_DEFBONUS },
  1227. { "MALL_ITEMBONUS", APPLY_MALL_ITEMBONUS },
  1228. { "MALL_GOLDBONUS", APPLY_MALL_GOLDBONUS },
  1229. { "MAX_HP_PCT", APPLY_MAX_HP_PCT },
  1230. { "MAX_SP_PCT", APPLY_MAX_SP_PCT },
  1231. { "SKILL_DAMAGE_BONUS", APPLY_SKILL_DAMAGE_BONUS },
  1232. { "NORMAL_HIT_DAMAGE_BONUS",APPLY_NORMAL_HIT_DAMAGE_BONUS },
  1233. { "SKILL_DEFEND_BONUS", APPLY_SKILL_DEFEND_BONUS },
  1234. { "NORMAL_HIT_DEFEND_BONUS",APPLY_NORMAL_HIT_DEFEND_BONUS },
  1235. { "PCBANG_EXP_BONUS", APPLY_PC_BANG_EXP_BONUS },
  1236. { "PCBANG_DROP_BONUS", APPLY_PC_BANG_DROP_BONUS },
  1237. { "RESIST_WARRIOR", APPLY_RESIST_WARRIOR},
  1238. { "RESIST_ASSASSIN", APPLY_RESIST_ASSASSIN},
  1239. { "RESIST_SURA", APPLY_RESIST_SURA},
  1240. { "RESIST_SHAMAN", APPLY_RESIST_SHAMAN},
  1241. // by mhh game/affect.h 정의되어있음. INFINITE_AFFECT_DURATION = 0x1FFFFFFF
  1242. { "INFINITE_AFFECT_DURATION", 0x1FFFFFFF },
  1243. { "ENERGY", APPLY_ENERGY }, // 기력
  1244. { "COSTUME_ATTR_BONUS", APPLY_COSTUME_ATTR_BONUS }, // 기력
  1245. { "MAGIC_ATTBONUS_PER", APPLY_MAGIC_ATTBONUS_PER },
  1246. { "MELEE_MAGIC_ATTBONUS_PER", APPLY_MELEE_MAGIC_ATTBONUS_PER },
  1247. { NULL, 0 }
  1248. };
  1249. // from import_item_proto.c
  1250. long FN_get_apply_type(const char *apply_type_string)
  1251. {
  1252. TValueName *value_name;
  1253. for (value_name = c_aApplyTypeNames; value_name->c_pszName; ++value_name)
  1254. {
  1255. if (0==strcasecmp(value_name->c_pszName, apply_type_string))
  1256. return value_name->lValue;
  1257. }
  1258. return 0;
  1259. }