25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

189 lines
3.4 KiB

  1. define([
  2. '../../src/server/config/spellsConfig',
  3. '../../src/server/combat/combat'
  4. ], function (
  5. config,
  6. combat
  7. ) {
  8. var spells = config.spells;
  9. var max = true;
  10. var maxTarget = true;
  11. spells['harvest life'] = {
  12. statType: ['str', 'int'],
  13. statMult: 1.34,
  14. element: 'physical',
  15. auto: true,
  16. cdMax: 6,
  17. manaCost: 0,
  18. range: 1,
  19. random: {
  20. damage: [1.5, 5.7],
  21. healPercent: [5, 15]
  22. }
  23. };
  24. var bloodBarrierMult = 1.25;
  25. spells['skeleton melee'] = {
  26. statType: ['str', 'int'],
  27. statMult: 0.46 * bloodBarrierMult,
  28. element: 'physical',
  29. auto: true,
  30. cdMax: 5,
  31. manaCost: 0,
  32. range: 1,
  33. random: {
  34. damage: [1, 3.8]
  35. }
  36. };
  37. var level = 20;
  38. var hp = [
  39. 30.07,
  40. 30.58,
  41. 31.94,
  42. 34.61,
  43. 39,
  44. 45.55,
  45. 54.70,
  46. 66.86,
  47. 82.49,
  48. 102,
  49. 125.83,
  50. 154.42,
  51. 188.18,
  52. 227.57,
  53. 273,
  54. 324.91,
  55. 383.74,
  56. 449.90,
  57. 523.85,
  58. 606
  59. ];
  60. var hpMax = [
  61. 91.25,
  62. 96.50,
  63. 110.75,
  64. 138.50,
  65. 184.25,
  66. 252.50,
  67. 347.75,
  68. 474.50,
  69. 637.25,
  70. 840.50,
  71. 1088.75,
  72. 1386.50,
  73. 1738.25,
  74. 2148.50,
  75. 2621.75,
  76. 3162.50,
  77. 3775.25,
  78. 4464.50,
  79. 5234.75,
  80. 6090.50
  81. ];
  82. return {
  83. init: function () {
  84. var res = [];
  85. for (var s in spells) {
  86. var c = spells[s];
  87. var d = c.random.damage || c.random.healing;
  88. if (!d)
  89. continue;
  90. var damage = d[0];
  91. if (max)
  92. damage = d[1];
  93. var config = {
  94. statType: c.statType,
  95. statMult: c.statMult,
  96. element: c.element,
  97. cd: c.cdMax,
  98. damage: damage,
  99. noCrit: true,
  100. noMitigate: !!c.random.healing,
  101. source: {
  102. stats: {
  103. values: {
  104. level: level,
  105. dmgPercent: max ? 20 : 0,
  106. elementArcanePercent: 0,
  107. elementFrostPercent: 0,
  108. elementPoisonPercent: 0,
  109. elementPhysicalPercent: 0,
  110. elementHolyPercent: 0,
  111. elementFirePercent: 0
  112. }
  113. },
  114. },
  115. target: {
  116. stats: {
  117. values: {
  118. armor: maxTarget ? (level * 50) : (level * 20),
  119. elementAllResist: maxTarget ? 100 : 0,
  120. elementArcaneResist: 0,
  121. elementFrostResist: 0,
  122. elementPoisonResist: 0,
  123. elementPhysicalResist: 0,
  124. elementHolyResist: 0,
  125. elementFireResist: 0
  126. }
  127. }
  128. }
  129. };
  130. var stat = c.statType;
  131. if (!stat.push)
  132. stat = [stat];
  133. var minStat = 1 + (0.00477 * Math.pow(level, 2.8));
  134. var maxStat = 3 + (0.3825 * Math.pow(level, 1.83));
  135. var mult = (stat.length == 1) ? 1 : 0.5;
  136. stat.forEach(s => config.source.stats.values[s] = (max ? maxStat : minStat) * mult);
  137. var amount = combat.getDamage(config).amount;
  138. var duration = c.random.i_duration;
  139. if (duration) {
  140. amount *= max ? duration[1] : duration[0];
  141. }
  142. amount /= c.cdMax;
  143. var critChance = max ? 0.5 : 0.05;
  144. var critMult = max ? 3 : 1.5;
  145. amount = (amount * (1 - critChance)) + (amount * critChance * critMult);
  146. res.push({
  147. name: s,
  148. dpt: (~~(amount * 10) / 10),
  149. cd: c.cdMax,
  150. mana: c.manaCost || '',
  151. tpk: ~~((maxTarget ? hpMax : hp)[level - 1] / amount),
  152. amount: amount
  153. });
  154. }
  155. res = res.sort((a, b) => (b.dpt - a.dpt));
  156. console.log();
  157. console.log('ability dpt');
  158. console.log();
  159. res.forEach(function (r) {
  160. var gap = new Array(20 - r.name.length);
  161. console.log(r.name + ': ' + gap.join(' ') + r.dpt + ' ' + r.tpk + ' ticks ' + (~~((r.tpk / 2.85) * 10) / 10) + ' seconds');
  162. });
  163. console.log();
  164. }
  165. };
  166. });