You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

184 lines
3.2 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 = false;
  10. var maxTarget = false;
  11. spells['harvest life'] = {
  12. statType: ['str', 'int'],
  13. statMult: 0.76,
  14. auto: true,
  15. cdMax: 6,
  16. manaCost: 0,
  17. range: 1,
  18. random: {
  19. damage: [1.5, 5.7],
  20. healPercent: [5, 15]
  21. }
  22. };
  23. var bloodBarrierMult = 1.25;
  24. spells['skeleton melee'] = {
  25. statType: ['str', 'int'],
  26. statMult: 0.27 * bloodBarrierMult,
  27. auto: true,
  28. cdMax: 5,
  29. manaCost: 0,
  30. range: 1,
  31. random: {
  32. damage: [1, 3.8]
  33. }
  34. };
  35. var level = 20;
  36. var hp = [
  37. 32.70,
  38. 65.40,
  39. 98.10,
  40. 130.80,
  41. 163.50,
  42. 196.20,
  43. 228.90,
  44. 261.60,
  45. 294.30,
  46. 327.00,
  47. 359.70,
  48. 392.40,
  49. 425.10,
  50. 457.80,
  51. 490.50,
  52. 523.20,
  53. 555.90,
  54. 588.60,
  55. 621.30,
  56. 654.00
  57. ];
  58. var hpMax = [
  59. 160.48,
  60. 324.53,
  61. 489.90,
  62. 660.79,
  63. 841.44,
  64. 1036.21,
  65. 1249.50,
  66. 1485.85,
  67. 1749.87,
  68. 2046.32,
  69. 2380.05,
  70. 2756.08,
  71. 3179.54,
  72. 3655.72,
  73. 4190.09,
  74. 4788.27,
  75. 5456.08,
  76. 6199.50,
  77. 7024.73,
  78. 7938.17
  79. ];
  80. return {
  81. init: function () {
  82. var res = [];
  83. for (var s in spells) {
  84. var c = spells[s];
  85. var d = c.random.damage || c.random.healing;
  86. if (!d)
  87. continue;
  88. var damage = d[0];
  89. if (max)
  90. damage = d[1];
  91. var config = {
  92. statType: c.statType,
  93. statMult: c.statMult,
  94. element: c.element,
  95. cd: c.cdMax,
  96. damage: damage,
  97. noCrit: true,
  98. noMitigate: !!c.random.healing,
  99. source: {
  100. stats: {
  101. values: {
  102. level: level,
  103. dmgPercent: max ? 20 : 0,
  104. elementArcanePercent: 0,
  105. elementFrostPercent: 0,
  106. elementPoisonPercent: 0,
  107. elementHolyPercent: 0,
  108. elementFirePercent: 0
  109. }
  110. },
  111. },
  112. target: {
  113. stats: {
  114. values: {
  115. armor: maxTarget ? (level * 50) : (level * 20),
  116. elementAllResist: maxTarget ? 100 : 0,
  117. elementArcaneResist: 0,
  118. elementFrostResist: 0,
  119. elementPoisonResist: 0,
  120. elementHolyResist: 0,
  121. elementFireResist: 0
  122. }
  123. }
  124. }
  125. };
  126. var stat = c.statType;
  127. if (!stat.push)
  128. stat = [stat];
  129. var minStat = level;
  130. var maxStat = level * 5;
  131. var mult = (stat.length == 1) ? 1 : 1;
  132. stat.forEach(s => config.source.stats.values[s] = (max ? maxStat : minStat) * mult);
  133. var amount = combat.getDamage(config).amount;
  134. var duration = c.random.i_duration;
  135. if (duration)
  136. amount *= max ? duration[1] : duration[0];
  137. amount /= c.cdMax;
  138. var critChance = max ? 0.5 : 0.05;
  139. var critMult = max ? 3 : 1.5;
  140. amount = (amount * (1 - critChance)) + (amount * critChance * critMult);
  141. res.push({
  142. name: s,
  143. dpt: (~~(amount * 10) / 10),
  144. cd: c.cdMax,
  145. mana: c.manaCost || '',
  146. tpk: ~~((maxTarget ? hpMax : hp)[level - 1] / amount),
  147. amount: amount
  148. });
  149. }
  150. res = res.sort((a, b) => (b.dpt - a.dpt));
  151. console.log();
  152. console.log('ability dpt');
  153. console.log();
  154. res.forEach(function (r) {
  155. var gap = new Array(20 - r.name.length);
  156. console.log(r.name + ': ' + gap.join(' ') + r.dpt + ' ' + r.tpk + ' ticks ' + (~~((r.tpk / 2.85) * 10) / 10) + ' seconds');
  157. });
  158. console.log();
  159. }
  160. };
  161. });