warscript 0.0.1-dev.2a08418 → 0.0.1-dev.2ad49fd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/core/types/frame.lua +47 -1
  2. package/core/types/sound.lua +1 -1
  3. package/destroyable.d.ts +1 -0
  4. package/destroyable.lua +9 -0
  5. package/engine/behavior.d.ts +4 -2
  6. package/engine/behavior.lua +69 -11
  7. package/engine/behaviour/ability/apply-buff.lua +4 -4
  8. package/engine/behaviour/ability/damage.d.ts +3 -0
  9. package/engine/behaviour/ability/damage.lua +8 -2
  10. package/engine/behaviour/ability.d.ts +11 -6
  11. package/engine/behaviour/ability.lua +31 -1
  12. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  13. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  14. package/engine/behaviour/unit.lua +13 -3
  15. package/engine/buff.d.ts +58 -20
  16. package/engine/buff.lua +300 -152
  17. package/engine/internal/mechanics/cast-ability.lua +6 -3
  18. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  19. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  20. package/engine/internal/object-data/health-bonus.lua +16 -0
  21. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  22. package/engine/internal/object-data/mana-bonus.lua +16 -0
  23. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  24. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  25. package/engine/internal/unit/attributes.d.ts +17 -0
  26. package/engine/internal/unit/attributes.lua +46 -0
  27. package/engine/internal/unit/bonus.d.ts +6 -0
  28. package/engine/internal/unit/bonus.lua +33 -3
  29. package/engine/internal/unit/fly-height.lua +3 -3
  30. package/engine/internal/unit/interrupts.d.ts +12 -0
  31. package/engine/internal/unit/interrupts.lua +28 -0
  32. package/engine/internal/unit/range-event.d.ts +12 -0
  33. package/engine/internal/unit/range-event.lua +90 -0
  34. package/engine/internal/unit/scale.lua +3 -3
  35. package/engine/internal/unit+bonus.lua +3 -3
  36. package/engine/internal/unit-missile-launch.lua +12 -5
  37. package/engine/internal/unit.d.ts +2 -9
  38. package/engine/internal/unit.lua +79 -121
  39. package/engine/local-client.d.ts +1 -1
  40. package/engine/local-client.lua +4 -4
  41. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  42. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  43. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  44. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  45. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  46. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  47. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  48. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  49. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  50. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  51. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  52. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  53. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  54. package/engine/object-data/entry/ability-type.d.ts +2 -0
  55. package/engine/object-data/entry/ability-type.lua +84 -4
  56. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  57. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  58. package/engine/object-data/entry/destructible-type.lua +155 -0
  59. package/engine/object-data/entry/unit-type.d.ts +4 -0
  60. package/engine/object-data/entry/unit-type.lua +76 -32
  61. package/engine/object-field/ability.lua +2 -2
  62. package/engine/object-field/unit.d.ts +7 -4
  63. package/engine/object-field/unit.lua +4 -0
  64. package/engine/object-field.d.ts +3 -1
  65. package/engine/object-field.lua +177 -119
  66. package/engine/random.d.ts +1 -0
  67. package/engine/random.lua +8 -0
  68. package/engine/standard/fields/ability.d.ts +2 -2
  69. package/engine/standard/fields/ability.lua +2 -2
  70. package/engine/standard/fields/unit.d.ts +11 -5
  71. package/engine/standard/fields/unit.lua +13 -4
  72. package/engine/unit.d.ts +3 -0
  73. package/engine/unit.lua +3 -0
  74. package/lualib_bundle.lua +1 -1
  75. package/objutil/buff.lua +9 -7
  76. package/objutil/object.lua +1 -1
  77. package/operation.lua +1 -4
  78. package/package.json +5 -5
  79. package/patch-lua.lua +15 -0
  80. package/utility/linked-map.d.ts +34 -0
  81. package/utility/linked-map.lua +101 -0
  82. package/utility/linked-set.d.ts +2 -1
  83. package/utility/linked-set.lua +21 -0
  84. package/utility/records.lua +20 -1
  85. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  86. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  87. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  88. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/buff.lua CHANGED
@@ -42,6 +42,7 @@ local BuffType = ____buff_2Dtype.BuffType
42
42
  local ____unit = require("engine.behaviour.unit")
43
43
  local UnitBehavior = ____unit.UnitBehavior
44
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
45
46
  local forEach = ____arrays.forEach
46
47
  local ____event = require("event")
47
48
  local Event = ____event.Event
@@ -53,6 +54,10 @@ local ____destructable = require("core.types.destructable")
53
54
  local Destructable = ____destructable.Destructable
54
55
  local ____ability = require("engine.standard.fields.ability")
55
56
  local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
57
+ local ____ability = require("engine.behaviour.ability")
58
+ local AbilityBehavior = ____ability.AbilityBehavior
59
+ local ____records = require("utility.records")
60
+ local sortedKeysUnnested = ____records.sortedKeysUnnested
56
61
  local getUnitAbility = BlzGetUnitAbility
57
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
58
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -98,9 +103,11 @@ local buffParametersKeys = {
98
103
  damageIncrease = true,
99
104
  damageIncreaseFactor = true,
100
105
  armorIncrease = true,
101
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
102
108
  attackSpeedIncreaseFactor = true,
103
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
104
111
  evasionProbability = true,
105
112
  missProbability = true,
106
113
  damageFactor = true,
@@ -120,6 +127,9 @@ local buffParametersKeys = {
120
127
  maximumAutoAttackCount = true,
121
128
  maximumDamageDealtEventCount = true,
122
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
123
133
  uniqueGroup = true,
124
134
  damageOnExpiration = true,
125
135
  healingOnExpiration = true,
@@ -176,6 +186,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
176
186
  end
177
187
  end
178
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
179
190
  "turnsIntoGhost",
180
191
  "stuns",
181
192
  "ignoresStunImmunity",
@@ -188,8 +199,11 @@ local buffNumberParameters = {
188
199
  "durationIncreaseOnAutoAttack",
189
200
  "attackSpeedIncreaseFactor",
190
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
191
203
  "evasionProbability",
192
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
193
207
  "damageFactor",
194
208
  "receivedDamageFactor",
195
209
  "maximumAutoAttackCount",
@@ -203,6 +217,8 @@ local buffNumberParameters = {
203
217
  "healingOverDuration",
204
218
  "damageOnExpiration",
205
219
  "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
206
222
  "abilityCooldownFactor"
207
223
  }
208
224
  local unsuccessfulApplicationMarker = {}
@@ -322,33 +338,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
322
338
  local polarity
323
339
  local resistanceType
324
340
  local ability
341
+ local abilityBehavior
325
342
  if type(typeIdOrTypeIds) ~= "number" then
326
343
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
327
344
  polarity = resistanceTypeOrPolarity
328
345
  resistanceType = abilityOrParametersOrResistanceType
329
- if __TS__InstanceOf(parametersOrAbility, Ability) or parametersOrAbility == nil then
346
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
347
+ abilityBehavior = parametersOrAbility
348
+ ability = abilityBehavior.ability
349
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
330
350
  ability = parametersOrAbility
331
- else
332
- ability = nil
351
+ elseif parametersOrAbility ~= nil then
333
352
  parameters = parametersOrAbility
334
353
  end
335
354
  else
336
355
  typeId = typeIdOrTypeIds
337
356
  polarity = polarityOrTypeIdSelectionPolicy
338
357
  resistanceType = resistanceTypeOrPolarity
339
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) or abilityOrParametersOrResistanceType == nil then
358
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, AbilityBehavior) then
359
+ abilityBehavior = abilityOrParametersOrResistanceType
360
+ ability = abilityBehavior.ability
361
+ parameters = parametersOrAbility
362
+ elseif __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
340
363
  ability = abilityOrParametersOrResistanceType
341
364
  parameters = parametersOrAbility
342
- else
343
- ability = nil
365
+ elseif abilityOrParametersOrResistanceType ~= nil then
344
366
  parameters = abilityOrParametersOrResistanceType
367
+ else
368
+ parameters = parametersOrAbility
345
369
  end
346
370
  end
371
+ self.sourceAbilityBehavior = abilityBehavior
347
372
  self.typeId = typeId
348
- if not (__TS__InstanceOf(ability, Ability) or ability == nil) then
349
- parameters = ability
350
- ability = nil
351
- end
352
373
  local defaultParameters = self.constructor.defaultParameters
353
374
  local level = parameters and parameters.level or defaultParameters.level
354
375
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -376,14 +397,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
376
397
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
377
398
  if missProbability ~= nil then
378
399
  missProbability = resolveNumberValue(ability, level, missProbability)
379
- self[142] = missProbability
400
+ self[146] = missProbability
380
401
  end
381
402
  local buffByTypeId = buffByTypeIdByUnit[_unit]
382
403
  if buffByTypeId == nil then
383
404
  buffByTypeId = {}
384
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
385
406
  end
386
- local ____opt_15 = buffByTypeId[typeId]
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
387
409
  if ____opt_15 ~= nil then
388
410
  ____opt_15:destroy()
389
411
  end
@@ -459,24 +481,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
459
481
  abilityTypeIds = {}
460
482
  self._abilityTypeIds = abilityTypeIds
461
483
  end
462
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
484
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
485
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
463
486
  local addedAbility = _unit:addAbility(abilityTypeId)
464
487
  if addedAbility ~= nil then
465
488
  _unit:makeAbilityPermanent(abilityTypeId, true)
466
489
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
467
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
468
- if abilityParameterKey == "isButtonVisible" then
469
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
470
- _unit:hideAbility(abilityTypeId, true)
471
- end
472
- elseif abilityParameterKey ~= "level" then
473
- abilityParameterKey:setValue(
474
- addedAbility,
475
- resolveNumberValue(ability, level, abilityParameterValue)
476
- )
477
- end
490
+ if abilityParameters.isButtonVisible == false then
491
+ _unit:hideAbility(abilityTypeId, true)
492
+ end
493
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
494
+ field[1]:setValue(
495
+ addedAbility,
496
+ resolveNumberValue(ability, level, field[2])
497
+ )
478
498
  end
479
- abilityTypeIds[abilityTypeId] = true
499
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
480
500
  end
481
501
  end
482
502
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -488,18 +508,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
488
508
  self._behaviors = behaviors
489
509
  end
490
510
  end
491
- local additionalParameters = {}
492
- for key, value in pairs(parameters) do
493
- if not buffParametersKeys[key] then
494
- if ability then
495
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
496
- else
497
- additionalParameters[key] = value
511
+ if parameters ~= nil then
512
+ local additionalParameters = {}
513
+ for ____, key in ipairs(sortedKeysUnnested(parameters)) do
514
+ if not buffParametersKeys[key] then
515
+ if ability then
516
+ additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, parameters[key])
517
+ else
518
+ additionalParameters[key] = parameters[key]
519
+ end
498
520
  end
499
521
  end
500
- end
501
- if (next(additionalParameters)) ~= nil then
502
- self.parameters = additionalParameters
522
+ if (next(additionalParameters)) ~= nil then
523
+ self.parameters = additionalParameters
524
+ end
503
525
  end
504
526
  end
505
527
  if duration ~= nil and duration > 0 then
@@ -513,7 +535,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
513
535
  end
514
536
  function Buff.prototype.onAbilityGained(self, ability)
515
537
  if __TS__InstanceOf(ability, UnitAbility) then
516
- local abilityCooldownModifier = self[144]
538
+ local abilityCooldownModifier = self[148]
517
539
  if abilityCooldownModifier then
518
540
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
519
541
  end
@@ -521,24 +543,38 @@ function Buff.prototype.onAbilityGained(self, ability)
521
543
  end
522
544
  function Buff.prototype.onAbilityLost(self, ability)
523
545
  if __TS__InstanceOf(ability, UnitAbility) then
524
- local abilityCooldownModifier = self[144]
546
+ local abilityCooldownModifier = self[148]
525
547
  if abilityCooldownModifier then
526
548
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
527
549
  end
528
550
  end
529
551
  end
530
552
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
553
+ self:flash(
554
+ self[105],
555
+ stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin",
556
+ widgetOrXOrParametersOrDuration,
557
+ yOrParametersOrDuration,
558
+ parametersOrDuration
559
+ )
560
+ end
561
+ function Buff.prototype.flashSpecialEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
562
+ self:flash(
563
+ self[106],
564
+ stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin",
565
+ widgetOrXOrParametersOrDuration,
566
+ yOrParametersOrDuration,
567
+ parametersOrDuration
568
+ )
569
+ end
570
+ function Buff.prototype.flash(self, modelPath, attachmentPoint, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
531
571
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
532
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
572
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
533
573
  else
534
574
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
535
575
  local ____Effect_40 = Effect
536
576
  local ____Effect_flash_41 = Effect.flash
537
- local ____array_39 = __TS__SparseArrayNew(
538
- self[105],
539
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
540
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
541
- )
577
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
542
578
  local ____isWidgetProvided_38
543
579
  if isWidgetProvided then
544
580
  ____isWidgetProvided_38 = yOrParametersOrDuration
@@ -552,26 +588,8 @@ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrPa
552
588
  )
553
589
  end
554
590
  end
555
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
556
- local isWidgetProvided = type(widgetOrDuration) == "table"
557
- local ____Effect_44 = Effect
558
- local ____Effect_flash_45 = Effect.flash
559
- local ____array_43 = __TS__SparseArrayNew(
560
- self[106],
561
- isWidgetProvided and widgetOrDuration or self._unit,
562
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
563
- )
564
- local ____isWidgetProvided_42
565
- if isWidgetProvided then
566
- ____isWidgetProvided_42 = duration
567
- else
568
- ____isWidgetProvided_42 = widgetOrDuration
569
- end
570
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
571
- ____Effect_flash_45(
572
- ____Effect_44,
573
- __TS__SparseArraySpread(____array_43)
574
- )
591
+ function Buff.prototype.expire(self)
592
+ expireBuff(self)
575
593
  end
576
594
  function Buff.prototype.onCreate(self)
577
595
  end
@@ -601,29 +619,29 @@ function Buff.prototype.onDestroy(self)
601
619
  behavior:destroy()
602
620
  end
603
621
  end
604
- local previousAbilityCooldownModifier = self[144]
622
+ local previousAbilityCooldownModifier = self[148]
605
623
  if previousAbilityCooldownModifier then
606
624
  for ____, ability in ipairs(self._unit.abilities) do
607
625
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
608
626
  end
609
627
  end
610
- if self[139] then
628
+ if self[143] then
611
629
  unit:decrementInvulnerabilityCounter()
612
630
  end
613
- if self[138] then
631
+ if self[142] then
614
632
  unit:decrementDisableAutoAttackCounter()
615
633
  end
616
- if self[136] then
617
- if self[137] then
634
+ if self[140] then
635
+ if self[141] then
618
636
  unit:decrementForceStunCounter()
619
637
  end
620
638
  unit:decrementStunCounter()
621
639
  end
622
- if self[135] then
640
+ if self[139] then
623
641
  unit:decrementGhostCounter()
624
642
  end
625
643
  if self._abilityTypeIds ~= nil then
626
- for abilityTypeId in pairs(self._abilityTypeIds) do
644
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
627
645
  unit:removeAbility(abilityTypeId)
628
646
  end
629
647
  end
@@ -656,8 +674,8 @@ function Buff.apply(self, ...)
656
674
  end
657
675
  end
658
676
  function Buff.getByTypeId(self, unit, typeId)
659
- local ____opt_46 = buffByTypeIdByUnit[unit]
660
- local buff = ____opt_46 and ____opt_46[typeId]
677
+ local ____opt_42 = buffByTypeIdByUnit[unit]
678
+ local buff = ____opt_42 and ____opt_42[typeId]
661
679
  if __TS__InstanceOf(buff, self) then
662
680
  return buff
663
681
  end
@@ -671,9 +689,9 @@ function Buff.prototype.onExpiration(self)
671
689
  if self[121] ~= nil then
672
690
  (self[102] or unit):healTarget(unit, self[120] or 0)
673
691
  end
674
- if self[141] then
692
+ if self[145] then
675
693
  unit:explode()
676
- elseif self[140] then
694
+ elseif self[144] then
677
695
  unit:kill()
678
696
  end
679
697
  end
@@ -728,6 +746,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
728
746
  end
729
747
  function Buff.prototype.onDamageReceived(self, source, event)
730
748
  if event.originalAmount ~= 0 then
749
+ local absorbedDamage = min(event.amount * (self[135] or 1), (self[136] or 0) - (self[137] or 0))
750
+ if absorbedDamage > 0 then
751
+ event.amount = event.amount - absorbedDamage
752
+ self[137] = (self[137] or 0) + absorbedDamage
753
+ local ____self__138_44 = self[138]
754
+ if ____self__138_44 == nil then
755
+ ____self__138_44 = true
756
+ end
757
+ if ____self__138_44 and self[137] >= (self[136] or 0) then
758
+ self:destroy()
759
+ end
760
+ end
731
761
  local damageReceivedEventCount = (self[133] or 0) + 1
732
762
  self[133] = damageReceivedEventCount
733
763
  if damageReceivedEventCount == self[134] then
@@ -815,8 +845,8 @@ __TS__SetDescriptor(
815
845
  return
816
846
  end
817
847
  self[112] = damageInterval
818
- local ____opt_48 = self._timer
819
- local elapsed = ____opt_48 and ____opt_48.elapsed or 0
848
+ local ____opt_45 = self._timer
849
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
820
850
  local timer = self[114]
821
851
  if timer == nil then
822
852
  timer = Timer:create()
@@ -895,8 +925,8 @@ __TS__SetDescriptor(
895
925
  return
896
926
  end
897
927
  self[117] = healingInterval
898
- local ____opt_50 = self._timer
899
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
928
+ local ____opt_47 = self._timer
929
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
900
930
  local timer = self[119]
901
931
  if timer == nil then
902
932
  timer = Timer:create()
@@ -977,24 +1007,50 @@ __TS__SetDescriptor(
977
1007
  },
978
1008
  true
979
1009
  )
1010
+ __TS__SetDescriptor(
1011
+ Buff.prototype,
1012
+ "maxHealthIncrease",
1013
+ {
1014
+ get = function(self)
1015
+ return self:getUnitBonus(UnitBonusType.HEALTH)
1016
+ end,
1017
+ set = function(self, maxHealthIncrease)
1018
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.HEALTH, maxHealthIncrease)
1019
+ end
1020
+ },
1021
+ true
1022
+ )
1023
+ __TS__SetDescriptor(
1024
+ Buff.prototype,
1025
+ "maxManaIncrease",
1026
+ {
1027
+ get = function(self)
1028
+ return self:getUnitBonus(UnitBonusType.MANA)
1029
+ end,
1030
+ set = function(self, maxManaIncrease)
1031
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA, maxManaIncrease)
1032
+ end
1033
+ },
1034
+ true
1035
+ )
980
1036
  __TS__SetDescriptor(
981
1037
  Buff.prototype,
982
1038
  "turnsIntoGhost",
983
1039
  {
984
1040
  get = function(self)
985
- local ____self__135_52 = self[135]
986
- if ____self__135_52 == nil then
987
- ____self__135_52 = false
1041
+ local ____self__139_49 = self[139]
1042
+ if ____self__139_49 == nil then
1043
+ ____self__139_49 = false
988
1044
  end
989
- return ____self__135_52
1045
+ return ____self__139_49
990
1046
  end,
991
1047
  set = function(self, turnsIntoGhost)
992
- if not turnsIntoGhost and self[135] then
1048
+ if not turnsIntoGhost and self[139] then
993
1049
  self.object:decrementGhostCounter()
994
- self[135] = nil
995
- elseif turnsIntoGhost and not self[135] then
1050
+ self[139] = nil
1051
+ elseif turnsIntoGhost and not self[139] then
996
1052
  self.object:incrementGhostCounter()
997
- self[135] = true
1053
+ self[139] = true
998
1054
  end
999
1055
  end
1000
1056
  },
@@ -1005,25 +1061,25 @@ __TS__SetDescriptor(
1005
1061
  "stuns",
1006
1062
  {
1007
1063
  get = function(self)
1008
- local ____self__136_53 = self[136]
1009
- if ____self__136_53 == nil then
1010
- ____self__136_53 = false
1064
+ local ____self__140_50 = self[140]
1065
+ if ____self__140_50 == nil then
1066
+ ____self__140_50 = false
1011
1067
  end
1012
- return ____self__136_53
1068
+ return ____self__140_50
1013
1069
  end,
1014
1070
  set = function(self, stuns)
1015
- if not stuns and self[136] then
1016
- if self[137] then
1071
+ if not stuns and self[140] then
1072
+ if self[141] then
1017
1073
  self.object:decrementForceStunCounter()
1018
1074
  end
1019
1075
  self.object:decrementStunCounter()
1020
- self[136] = nil
1021
- elseif stuns and not self[136] then
1022
- if self[137] then
1076
+ self[140] = nil
1077
+ elseif stuns and not self[140] then
1078
+ if self[141] then
1023
1079
  self.object:incrementForceStunCounter()
1024
1080
  end
1025
1081
  self.object:incrementStunCounter()
1026
- self[136] = true
1082
+ self[140] = true
1027
1083
  end
1028
1084
  end
1029
1085
  },
@@ -1034,23 +1090,23 @@ __TS__SetDescriptor(
1034
1090
  "ignoresStunImmunity",
1035
1091
  {
1036
1092
  get = function(self)
1037
- local ____self__137_54 = self[137]
1038
- if ____self__137_54 == nil then
1039
- ____self__137_54 = false
1093
+ local ____self__141_51 = self[141]
1094
+ if ____self__141_51 == nil then
1095
+ ____self__141_51 = false
1040
1096
  end
1041
- return ____self__137_54
1097
+ return ____self__141_51
1042
1098
  end,
1043
1099
  set = function(self, ignoresStunImmunity)
1044
- if not ignoresStunImmunity and self[137] then
1045
- if self[136] then
1100
+ if not ignoresStunImmunity and self[141] then
1101
+ if self[140] then
1046
1102
  self.object:decrementForceStunCounter()
1047
1103
  end
1048
- self[137] = nil
1049
- elseif ignoresStunImmunity and not self[137] then
1050
- if self[136] then
1104
+ self[141] = nil
1105
+ elseif ignoresStunImmunity and not self[141] then
1106
+ if self[140] then
1051
1107
  self.object:incrementForceStunCounter()
1052
1108
  end
1053
- self[137] = true
1109
+ self[141] = true
1054
1110
  end
1055
1111
  end
1056
1112
  },
@@ -1061,19 +1117,19 @@ __TS__SetDescriptor(
1061
1117
  "disablesAutoAttack",
1062
1118
  {
1063
1119
  get = function(self)
1064
- local ____self__138_55 = self[138]
1065
- if ____self__138_55 == nil then
1066
- ____self__138_55 = false
1120
+ local ____self__142_52 = self[142]
1121
+ if ____self__142_52 == nil then
1122
+ ____self__142_52 = false
1067
1123
  end
1068
- return ____self__138_55
1124
+ return ____self__142_52
1069
1125
  end,
1070
1126
  set = function(self, disablesAutoAttack)
1071
- if not disablesAutoAttack and self[138] then
1127
+ if not disablesAutoAttack and self[142] then
1072
1128
  self.object:decrementDisableAutoAttackCounter()
1073
- self[138] = nil
1074
- elseif disablesAutoAttack and not self[138] then
1129
+ self[142] = nil
1130
+ elseif disablesAutoAttack and not self[142] then
1075
1131
  self.object:incrementDisableAutoAttackCounter()
1076
- self[138] = true
1132
+ self[142] = true
1077
1133
  end
1078
1134
  end
1079
1135
  },
@@ -1084,19 +1140,19 @@ __TS__SetDescriptor(
1084
1140
  "providesInvulnerability",
1085
1141
  {
1086
1142
  get = function(self)
1087
- local ____self__139_56 = self[139]
1088
- if ____self__139_56 == nil then
1089
- ____self__139_56 = false
1143
+ local ____self__143_53 = self[143]
1144
+ if ____self__143_53 == nil then
1145
+ ____self__143_53 = false
1090
1146
  end
1091
- return ____self__139_56
1147
+ return ____self__143_53
1092
1148
  end,
1093
1149
  set = function(self, providesInvulnerability)
1094
- if not providesInvulnerability and self[139] then
1150
+ if not providesInvulnerability and self[143] then
1095
1151
  self.object:decrementInvulnerabilityCounter()
1096
- self[139] = nil
1097
- elseif providesInvulnerability and not self[139] then
1152
+ self[143] = nil
1153
+ elseif providesInvulnerability and not self[143] then
1098
1154
  self.object:incrementInvulnerabilityCounter()
1099
- self[139] = true
1155
+ self[143] = true
1100
1156
  end
1101
1157
  end
1102
1158
  },
@@ -1107,17 +1163,17 @@ __TS__SetDescriptor(
1107
1163
  "killsOnExpiration",
1108
1164
  {
1109
1165
  get = function(self)
1110
- local ____self__140_57 = self[140]
1111
- if ____self__140_57 == nil then
1112
- ____self__140_57 = false
1166
+ local ____self__144_54 = self[144]
1167
+ if ____self__144_54 == nil then
1168
+ ____self__144_54 = false
1113
1169
  end
1114
- return ____self__140_57
1170
+ return ____self__144_54
1115
1171
  end,
1116
1172
  set = function(self, killsOnExpiration)
1117
- if not killsOnExpiration and self[140] then
1118
- self[140] = nil
1119
- elseif killsOnExpiration and not self[140] then
1120
- self[140] = true
1173
+ if not killsOnExpiration and self[144] then
1174
+ self[144] = nil
1175
+ elseif killsOnExpiration and not self[144] then
1176
+ self[144] = true
1121
1177
  end
1122
1178
  end
1123
1179
  },
@@ -1128,17 +1184,17 @@ __TS__SetDescriptor(
1128
1184
  "explodesOnExpiration",
1129
1185
  {
1130
1186
  get = function(self)
1131
- local ____self__141_58 = self[141]
1132
- if ____self__141_58 == nil then
1133
- ____self__141_58 = false
1187
+ local ____self__145_55 = self[145]
1188
+ if ____self__145_55 == nil then
1189
+ ____self__145_55 = false
1134
1190
  end
1135
- return ____self__141_58
1191
+ return ____self__145_55
1136
1192
  end,
1137
1193
  set = function(self, killsOnExpiration)
1138
- if not killsOnExpiration and self[141] then
1139
- self[141] = nil
1140
- elseif killsOnExpiration and not self[141] then
1141
- self[141] = true
1194
+ if not killsOnExpiration and self[145] then
1195
+ self[145] = nil
1196
+ elseif killsOnExpiration and not self[145] then
1197
+ self[145] = true
1142
1198
  end
1143
1199
  end
1144
1200
  },
@@ -1247,12 +1303,39 @@ __TS__SetDescriptor(
1247
1303
  },
1248
1304
  true
1249
1305
  )
1306
+ __TS__SetDescriptor(
1307
+ Buff.prototype,
1308
+ "manaRegenerationRateIncreaseFactor",
1309
+ {
1310
+ get = function(self)
1311
+ return self:getUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR)
1312
+ end,
1313
+ set = function(self, manaRegenerationRateIncreaseFactor)
1314
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR, manaRegenerationRateIncreaseFactor)
1315
+ end
1316
+ },
1317
+ true
1318
+ )
1250
1319
  __TS__SetDescriptor(
1251
1320
  Buff.prototype,
1252
1321
  "duration",
1253
- {get = function(self)
1254
- return self[103]
1255
- end},
1322
+ {
1323
+ get = function(self)
1324
+ return self[103]
1325
+ end,
1326
+ set = function(self, duration)
1327
+ if duration <= 0 then
1328
+ local timer = self._timer
1329
+ if timer ~= nil then
1330
+ timer:destroy()
1331
+ self._timer = nil
1332
+ end
1333
+ self[103] = 0
1334
+ else
1335
+ self.remainingDuration = self.remainingDuration + (duration - self[103])
1336
+ end
1337
+ end
1338
+ },
1256
1339
  true
1257
1340
  )
1258
1341
  __TS__SetDescriptor(
@@ -1260,13 +1343,13 @@ __TS__SetDescriptor(
1260
1343
  "remainingDuration",
1261
1344
  {
1262
1345
  get = function(self)
1263
- local ____opt_59 = self._timer
1264
- return ____opt_59 and ____opt_59.remaining or 0
1346
+ local ____opt_56 = self._timer
1347
+ return ____opt_56 and ____opt_56.remaining or 0
1265
1348
  end,
1266
1349
  set = function(self, remainingDuration)
1267
- local ____remainingDuration_63 = remainingDuration
1268
- local ____opt_61 = self._timer
1269
- local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1350
+ local ____remainingDuration_60 = remainingDuration
1351
+ local ____opt_58 = self._timer
1352
+ local remainingDurationDelta = ____remainingDuration_60 - (____opt_58 and ____opt_58.remaining or 0)
1270
1353
  if remainingDurationDelta ~= 0 then
1271
1354
  self[103] = self[103] + remainingDurationDelta
1272
1355
  if remainingDuration <= 0 then
@@ -1281,7 +1364,7 @@ __TS__SetDescriptor(
1281
1364
  remainingDuration,
1282
1365
  self._spellStealPriority,
1283
1366
  self._learnLevelMinimum,
1284
- self[142]
1367
+ self[146]
1285
1368
  ) then
1286
1369
  local timer = self._timer
1287
1370
  if timer == nil then
@@ -1296,15 +1379,80 @@ __TS__SetDescriptor(
1296
1379
  },
1297
1380
  true
1298
1381
  )
1382
+ __TS__SetDescriptor(
1383
+ Buff.prototype,
1384
+ "absorbedDamageFactor",
1385
+ {
1386
+ get = function(self)
1387
+ return self[135] or 1
1388
+ end,
1389
+ set = function(self, absorbedDamageFactor)
1390
+ if absorbedDamageFactor == 1 then
1391
+ self[135] = nil
1392
+ else
1393
+ self[135] = absorbedDamageFactor
1394
+ end
1395
+ end
1396
+ },
1397
+ true
1398
+ )
1399
+ __TS__SetDescriptor(
1400
+ Buff.prototype,
1401
+ "maximumDamageAbsorbed",
1402
+ {
1403
+ get = function(self)
1404
+ return self[136] or 0
1405
+ end,
1406
+ set = function(self, maximumDamageAbsorbed)
1407
+ if maximumDamageAbsorbed == 0 then
1408
+ self[136] = nil
1409
+ else
1410
+ self[136] = maximumDamageAbsorbed
1411
+ end
1412
+ end
1413
+ },
1414
+ true
1415
+ )
1416
+ __TS__SetDescriptor(
1417
+ Buff.prototype,
1418
+ "damageAbsorbed",
1419
+ {get = function(self)
1420
+ return self[137] or 0
1421
+ end},
1422
+ true
1423
+ )
1424
+ __TS__SetDescriptor(
1425
+ Buff.prototype,
1426
+ "destroysOnMaximumDamageAbsorbed",
1427
+ {
1428
+ get = function(self)
1429
+ local ____self__138_61 = self[138]
1430
+ if ____self__138_61 == nil then
1431
+ ____self__138_61 = true
1432
+ end
1433
+ return ____self__138_61
1434
+ end,
1435
+ set = function(self, destroysOnMaximumDamageAbsorbed)
1436
+ local ____destroysOnMaximumDamageAbsorbed_62
1437
+ if destroysOnMaximumDamageAbsorbed then
1438
+ ____destroysOnMaximumDamageAbsorbed_62 = nil
1439
+ else
1440
+ ____destroysOnMaximumDamageAbsorbed_62 = false
1441
+ end
1442
+ self[138] = ____destroysOnMaximumDamageAbsorbed_62
1443
+ end
1444
+ },
1445
+ true
1446
+ )
1299
1447
  __TS__SetDescriptor(
1300
1448
  Buff.prototype,
1301
1449
  "abilityCooldownFactor",
1302
1450
  {
1303
1451
  get = function(self)
1304
- return self[143] or 1
1452
+ return self[147] or 1
1305
1453
  end,
1306
1454
  set = function(self, abilityCooldownFactor)
1307
- local previousAbilityCooldownModifier = self[144]
1455
+ local previousAbilityCooldownModifier = self[148]
1308
1456
  if previousAbilityCooldownModifier then
1309
1457
  for ____, ability in ipairs(self._unit.abilities) do
1310
1458
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
@@ -1316,8 +1464,8 @@ __TS__SetDescriptor(
1316
1464
  for ____, ability in ipairs(self._unit.abilities) do
1317
1465
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1318
1466
  end
1319
- self[144] = modifier
1320
- self[143] = abilityCooldownFactor
1467
+ self[148] = modifier
1468
+ self[147] = abilityCooldownFactor
1321
1469
  end
1322
1470
  },
1323
1471
  true