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.
 
 
 

56 lines
1.7 KiB

  1. module.exports = {
  2. events: {
  3. onGetText: function (selfItem) {
  4. let rolls = selfItem.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls;
  5. return `Reduces the mana reserved by ${rolls.rune} by ${rolls.amount}%`;
  6. },
  7. onBeforeReserveMana: function (selfItem, reserveEvent) {
  8. let rolls = selfItem.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls;
  9. if (rolls.rune.toLowerCase() !== reserveEvent.spell.toLowerCase())
  10. return;
  11. reserveEvent.reservePercent = Math.max(0, (reserveEvent.reservePercent * 100) - rolls.amount) / 100;
  12. },
  13. afterEquipItem: function (selfItem, eqItem) {
  14. let rolls = eqItem.effects?.find(e => (e.type === 'reduceRuneManaReserve'))?.rolls;
  15. if (!rolls)
  16. return;
  17. let spells = this.spellbook.spells.filter(s => s.active && s.name.toLowerCase() === rolls.rune);
  18. if (!spells.length)
  19. return;
  20. spells.forEach(spell => {
  21. let spellReserve = spell.manaReserve.percentage;
  22. this.stats.addStat('manaReservePercent', -Math.min(spellReserve, (rolls.amount / 100)));
  23. });
  24. },
  25. afterUnequipItem: function (selfItem, eqItem) {
  26. let rolls = eqItem.effects?.find(e => (e.type === 'reduceRuneManaReserve'))?.rolls;
  27. if (!rolls)
  28. return;
  29. let spells = this.spellbook.spells.filter(s => s.active && s.name.toLowerCase() === rolls.rune);
  30. if (!spells.length)
  31. return;
  32. spells.forEach(spell => {
  33. let spellReserve = spell.manaReserve.percentage;
  34. let stats = this.stats;
  35. let newReserve = stats.manaReservePercent + (Math.max(0, (spellReserve * 100) - rolls.amount) / 100) - spellReserve;
  36. stats.addStat('manaReservePercent', Math.min(spellReserve, (rolls.amount / 100)));
  37. if (newReserve < 0)
  38. this.spellbook.removeSpellById(spell.id);
  39. });
  40. }
  41. }
  42. };