Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

124 řádky
2.2 KiB

  1. module.exports = {
  2. type: 'aura',
  3. cdMax: 0,
  4. manaCost: 0,
  5. duration: 10,
  6. aura: true,
  7. active: false,
  8. effects: {},
  9. cast: function (action) {
  10. this.active = !this.active;
  11. return true;
  12. },
  13. update: function () {
  14. let active = this.active;
  15. if (active)
  16. this.updateActive();
  17. else
  18. this.updateInactive();
  19. },
  20. unlearn: function () {
  21. this.updateInactive();
  22. },
  23. onAfterSimplify: function (values) {
  24. delete values.effects;
  25. },
  26. die: function () {
  27. if (this.active)
  28. this.cast();
  29. },
  30. updateActive: function () {
  31. let o = this.obj;
  32. let amount = 0;
  33. if (this.name === 'Innervation')
  34. amount = ~~((o.stats.values.hpMax / 100) * this.values.regenPercentage);
  35. else
  36. amount = this.values.regenPercentage || this.values.chance;
  37. let party = (o.social || {}).party || [];
  38. let members = [o.serverId, ...party];
  39. let effects = this.effects;
  40. let objects = o.instance.objects.objects;
  41. let range = this.auraRange;
  42. members.forEach(m => {
  43. let effect = effects[m];
  44. let obj = objects.find(f => (f.serverId === m));
  45. if (!obj) {
  46. if (effect)
  47. delete effects[m];
  48. return;
  49. }
  50. let distance = Math.max(Math.abs(o.x - obj.x), Math.abs(o.y - obj.y));
  51. if (distance > range) {
  52. if (effect) {
  53. delete effects[m];
  54. obj.effects.removeEffect(effect.id);
  55. }
  56. return;
  57. }
  58. if (effect)
  59. return;
  60. if (!obj.effects)
  61. return;
  62. effects[obj.serverId] = obj.effects.addEffect({
  63. type: this.effect,
  64. amount: amount,
  65. caster: this.obj,
  66. ttl: -1
  67. });
  68. });
  69. //Remove effects from players who are no longer in the party
  70. Object.entries(effects).forEach(([serverId, effect]) => {
  71. if (!members.find(m => ~~m === ~~serverId)) {
  72. delete effects[serverId];
  73. const obj = objects.find(f => ~~f.serverId === ~~serverId);
  74. if (obj)
  75. obj.effects.removeEffect(effect.id);
  76. }
  77. });
  78. },
  79. updateInactive: function () {
  80. let o = this.obj;
  81. let effects = this.effects;
  82. let objects = o.instance.objects.objects;
  83. Object.keys(effects).forEach(function (m) {
  84. let effect = effects[m];
  85. if (!effect)
  86. return;
  87. let obj = objects.find(f => (f.serverId === ~~m));
  88. if (!obj) {
  89. delete effects[m];
  90. return;
  91. }
  92. obj.effects.removeEffect(effect.id);
  93. delete effects[m];
  94. }, this);
  95. }
  96. };