warscript 0.0.1-dev.87b6c38 → 0.0.1-dev.8895725

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 (102) hide show
  1. package/core/types/frame.lua +47 -1
  2. package/core/types/handle.lua +6 -9
  3. package/core/types/item.d.ts +1 -0
  4. package/core/types/item.lua +1 -0
  5. package/core/types/player.d.ts +1 -1
  6. package/core/types/player.lua +12 -11
  7. package/core/types/sound.lua +1 -1
  8. package/destroyable.d.ts +1 -0
  9. package/destroyable.lua +9 -0
  10. package/engine/behavior.d.ts +4 -2
  11. package/engine/behavior.lua +69 -11
  12. package/engine/behaviour/ability/damage.d.ts +3 -0
  13. package/engine/behaviour/ability/damage.lua +8 -2
  14. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  15. package/engine/behaviour/ability.d.ts +9 -5
  16. package/engine/behaviour/ability.lua +29 -0
  17. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  18. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  19. package/engine/behaviour/unit.lua +13 -3
  20. package/engine/buff.d.ts +56 -19
  21. package/engine/buff.lua +283 -142
  22. package/engine/internal/ability.lua +15 -15
  23. package/engine/internal/item/fields.d.ts +12 -0
  24. package/engine/internal/item/fields.lua +33 -0
  25. package/engine/internal/item.d.ts +4 -5
  26. package/engine/internal/item.lua +37 -40
  27. package/engine/internal/mechanics/cast-ability.lua +6 -3
  28. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  29. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  30. package/engine/internal/object-data/health-bonus.lua +16 -0
  31. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  32. package/engine/internal/object-data/mana-bonus.lua +16 -0
  33. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  34. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  35. package/engine/internal/unit/attributes.d.ts +17 -0
  36. package/engine/internal/unit/attributes.lua +46 -0
  37. package/engine/internal/unit/bonus.d.ts +6 -0
  38. package/engine/internal/unit/bonus.lua +33 -3
  39. package/engine/internal/unit/fly-height.lua +3 -3
  40. package/engine/internal/unit/interrupts.d.ts +12 -0
  41. package/engine/internal/unit/interrupts.lua +28 -0
  42. package/engine/internal/unit/range-event.d.ts +12 -0
  43. package/engine/internal/unit/range-event.lua +90 -0
  44. package/engine/internal/unit/scale.lua +3 -3
  45. package/engine/internal/unit+bonus.lua +3 -3
  46. package/engine/internal/unit-missile-launch.lua +12 -5
  47. package/engine/internal/unit.d.ts +2 -9
  48. package/engine/internal/unit.lua +79 -121
  49. package/engine/local-client.d.ts +6 -1
  50. package/engine/local-client.lua +60 -5
  51. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  52. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  53. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  54. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  55. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  56. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  57. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  58. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  59. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  60. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  61. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  62. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  63. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  64. package/engine/object-data/entry/ability-type.d.ts +2 -0
  65. package/engine/object-data/entry/ability-type.lua +84 -4
  66. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  67. package/engine/object-data/entry/destructible-type.d.ts +12 -0
  68. package/engine/object-data/entry/destructible-type.lua +78 -0
  69. package/engine/object-field/ability.lua +2 -2
  70. package/engine/object-field/item.d.ts +22 -0
  71. package/engine/object-field/item.lua +118 -0
  72. package/engine/object-field/unit.d.ts +7 -4
  73. package/engine/object-field/unit.lua +4 -0
  74. package/engine/object-field.d.ts +3 -1
  75. package/engine/object-field.lua +177 -119
  76. package/engine/random.d.ts +1 -0
  77. package/engine/random.lua +8 -0
  78. package/engine/standard/fields/item.d.ts +4 -0
  79. package/engine/standard/fields/item.lua +6 -0
  80. package/engine/standard/fields/unit.d.ts +11 -5
  81. package/engine/standard/fields/unit.lua +13 -4
  82. package/engine/unit.d.ts +3 -0
  83. package/engine/unit.lua +3 -0
  84. package/lualib_bundle.lua +1 -1
  85. package/math.d.ts +2 -0
  86. package/math.lua +14 -0
  87. package/objutil/buff.lua +9 -7
  88. package/objutil/object.lua +1 -1
  89. package/operation.lua +1 -4
  90. package/package.json +5 -5
  91. package/patch-lua.lua +15 -0
  92. package/utility/linked-map.d.ts +35 -0
  93. package/utility/linked-map.lua +107 -0
  94. package/utility/linked-set.d.ts +3 -1
  95. package/utility/linked-set.lua +27 -0
  96. package/utility/records.lua +20 -1
  97. package/utility/unordered-map.d.ts +27 -0
  98. package/utility/unordered-map.lua +99 -0
  99. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  100. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  101. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  102. /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
@@ -55,6 +56,8 @@ local ____ability = require("engine.standard.fields.ability")
55
56
  local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
56
57
  local ____ability = require("engine.behaviour.ability")
57
58
  local AbilityBehavior = ____ability.AbilityBehavior
59
+ local ____records = require("utility.records")
60
+ local sortedKeysUnnested = ____records.sortedKeysUnnested
58
61
  local getUnitAbility = BlzGetUnitAbility
59
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
60
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -100,9 +103,11 @@ local buffParametersKeys = {
100
103
  damageIncrease = true,
101
104
  damageIncreaseFactor = true,
102
105
  armorIncrease = true,
103
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
104
108
  attackSpeedIncreaseFactor = true,
105
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
106
111
  evasionProbability = true,
107
112
  missProbability = true,
108
113
  damageFactor = true,
@@ -122,6 +127,9 @@ local buffParametersKeys = {
122
127
  maximumAutoAttackCount = true,
123
128
  maximumDamageDealtEventCount = true,
124
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
125
133
  uniqueGroup = true,
126
134
  damageOnExpiration = true,
127
135
  healingOnExpiration = true,
@@ -178,6 +186,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
178
186
  end
179
187
  end
180
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
181
190
  "turnsIntoGhost",
182
191
  "stuns",
183
192
  "ignoresStunImmunity",
@@ -190,8 +199,11 @@ local buffNumberParameters = {
190
199
  "durationIncreaseOnAutoAttack",
191
200
  "attackSpeedIncreaseFactor",
192
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
193
203
  "evasionProbability",
194
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
195
207
  "damageFactor",
196
208
  "receivedDamageFactor",
197
209
  "maximumAutoAttackCount",
@@ -205,6 +217,8 @@ local buffNumberParameters = {
205
217
  "healingOverDuration",
206
218
  "damageOnExpiration",
207
219
  "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
208
222
  "abilityCooldownFactor"
209
223
  }
210
224
  local unsuccessfulApplicationMarker = {}
@@ -383,14 +397,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
383
397
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
384
398
  if missProbability ~= nil then
385
399
  missProbability = resolveNumberValue(ability, level, missProbability)
386
- self[142] = missProbability
400
+ self[146] = missProbability
387
401
  end
388
402
  local buffByTypeId = buffByTypeIdByUnit[_unit]
389
403
  if buffByTypeId == nil then
390
404
  buffByTypeId = {}
391
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
392
406
  end
393
- local ____opt_15 = buffByTypeId[typeId]
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
394
409
  if ____opt_15 ~= nil then
395
410
  ____opt_15:destroy()
396
411
  end
@@ -466,24 +481,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
466
481
  abilityTypeIds = {}
467
482
  self._abilityTypeIds = abilityTypeIds
468
483
  end
469
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
484
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
485
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
470
486
  local addedAbility = _unit:addAbility(abilityTypeId)
471
487
  if addedAbility ~= nil then
472
488
  _unit:makeAbilityPermanent(abilityTypeId, true)
473
489
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
474
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
475
- if abilityParameterKey == "isButtonVisible" then
476
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
477
- _unit:hideAbility(abilityTypeId, true)
478
- end
479
- elseif abilityParameterKey ~= "level" then
480
- abilityParameterKey:setValue(
481
- addedAbility,
482
- resolveNumberValue(ability, level, abilityParameterValue)
483
- )
484
- 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
+ )
485
498
  end
486
- abilityTypeIds[abilityTypeId] = true
499
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
487
500
  end
488
501
  end
489
502
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -495,18 +508,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
495
508
  self._behaviors = behaviors
496
509
  end
497
510
  end
498
- local additionalParameters = {}
499
- for key, value in pairs(parameters) do
500
- if not buffParametersKeys[key] then
501
- if ability then
502
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
503
- else
504
- 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
505
520
  end
506
521
  end
507
- end
508
- if (next(additionalParameters)) ~= nil then
509
- self.parameters = additionalParameters
522
+ if (next(additionalParameters)) ~= nil then
523
+ self.parameters = additionalParameters
524
+ end
510
525
  end
511
526
  end
512
527
  if duration ~= nil and duration > 0 then
@@ -520,7 +535,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
520
535
  end
521
536
  function Buff.prototype.onAbilityGained(self, ability)
522
537
  if __TS__InstanceOf(ability, UnitAbility) then
523
- local abilityCooldownModifier = self[144]
538
+ local abilityCooldownModifier = self[148]
524
539
  if abilityCooldownModifier then
525
540
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
526
541
  end
@@ -528,24 +543,38 @@ function Buff.prototype.onAbilityGained(self, ability)
528
543
  end
529
544
  function Buff.prototype.onAbilityLost(self, ability)
530
545
  if __TS__InstanceOf(ability, UnitAbility) then
531
- local abilityCooldownModifier = self[144]
546
+ local abilityCooldownModifier = self[148]
532
547
  if abilityCooldownModifier then
533
548
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
534
549
  end
535
550
  end
536
551
  end
537
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)
538
571
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
539
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
572
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
540
573
  else
541
574
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
542
575
  local ____Effect_40 = Effect
543
576
  local ____Effect_flash_41 = Effect.flash
544
- local ____array_39 = __TS__SparseArrayNew(
545
- self[105],
546
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
547
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
548
- )
577
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
549
578
  local ____isWidgetProvided_38
550
579
  if isWidgetProvided then
551
580
  ____isWidgetProvided_38 = yOrParametersOrDuration
@@ -559,26 +588,8 @@ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrPa
559
588
  )
560
589
  end
561
590
  end
562
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
563
- local isWidgetProvided = type(widgetOrDuration) == "table"
564
- local ____Effect_44 = Effect
565
- local ____Effect_flash_45 = Effect.flash
566
- local ____array_43 = __TS__SparseArrayNew(
567
- self[106],
568
- isWidgetProvided and widgetOrDuration or self._unit,
569
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
570
- )
571
- local ____isWidgetProvided_42
572
- if isWidgetProvided then
573
- ____isWidgetProvided_42 = duration
574
- else
575
- ____isWidgetProvided_42 = widgetOrDuration
576
- end
577
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
578
- ____Effect_flash_45(
579
- ____Effect_44,
580
- __TS__SparseArraySpread(____array_43)
581
- )
591
+ function Buff.prototype.expire(self)
592
+ expireBuff(self)
582
593
  end
583
594
  function Buff.prototype.onCreate(self)
584
595
  end
@@ -608,29 +619,29 @@ function Buff.prototype.onDestroy(self)
608
619
  behavior:destroy()
609
620
  end
610
621
  end
611
- local previousAbilityCooldownModifier = self[144]
622
+ local previousAbilityCooldownModifier = self[148]
612
623
  if previousAbilityCooldownModifier then
613
624
  for ____, ability in ipairs(self._unit.abilities) do
614
625
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
615
626
  end
616
627
  end
617
- if self[139] then
628
+ if self[143] then
618
629
  unit:decrementInvulnerabilityCounter()
619
630
  end
620
- if self[138] then
631
+ if self[142] then
621
632
  unit:decrementDisableAutoAttackCounter()
622
633
  end
623
- if self[136] then
624
- if self[137] then
634
+ if self[140] then
635
+ if self[141] then
625
636
  unit:decrementForceStunCounter()
626
637
  end
627
638
  unit:decrementStunCounter()
628
639
  end
629
- if self[135] then
640
+ if self[139] then
630
641
  unit:decrementGhostCounter()
631
642
  end
632
643
  if self._abilityTypeIds ~= nil then
633
- for abilityTypeId in pairs(self._abilityTypeIds) do
644
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
634
645
  unit:removeAbility(abilityTypeId)
635
646
  end
636
647
  end
@@ -663,8 +674,8 @@ function Buff.apply(self, ...)
663
674
  end
664
675
  end
665
676
  function Buff.getByTypeId(self, unit, typeId)
666
- local ____opt_46 = buffByTypeIdByUnit[unit]
667
- local buff = ____opt_46 and ____opt_46[typeId]
677
+ local ____opt_42 = buffByTypeIdByUnit[unit]
678
+ local buff = ____opt_42 and ____opt_42[typeId]
668
679
  if __TS__InstanceOf(buff, self) then
669
680
  return buff
670
681
  end
@@ -678,9 +689,9 @@ function Buff.prototype.onExpiration(self)
678
689
  if self[121] ~= nil then
679
690
  (self[102] or unit):healTarget(unit, self[120] or 0)
680
691
  end
681
- if self[141] then
692
+ if self[145] then
682
693
  unit:explode()
683
- elseif self[140] then
694
+ elseif self[144] then
684
695
  unit:kill()
685
696
  end
686
697
  end
@@ -735,6 +746,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
735
746
  end
736
747
  function Buff.prototype.onDamageReceived(self, source, event)
737
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
738
761
  local damageReceivedEventCount = (self[133] or 0) + 1
739
762
  self[133] = damageReceivedEventCount
740
763
  if damageReceivedEventCount == self[134] then
@@ -822,8 +845,8 @@ __TS__SetDescriptor(
822
845
  return
823
846
  end
824
847
  self[112] = damageInterval
825
- local ____opt_48 = self._timer
826
- 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
827
850
  local timer = self[114]
828
851
  if timer == nil then
829
852
  timer = Timer:create()
@@ -902,8 +925,8 @@ __TS__SetDescriptor(
902
925
  return
903
926
  end
904
927
  self[117] = healingInterval
905
- local ____opt_50 = self._timer
906
- 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
907
930
  local timer = self[119]
908
931
  if timer == nil then
909
932
  timer = Timer:create()
@@ -984,24 +1007,50 @@ __TS__SetDescriptor(
984
1007
  },
985
1008
  true
986
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
+ )
987
1036
  __TS__SetDescriptor(
988
1037
  Buff.prototype,
989
1038
  "turnsIntoGhost",
990
1039
  {
991
1040
  get = function(self)
992
- local ____self__135_52 = self[135]
993
- if ____self__135_52 == nil then
994
- ____self__135_52 = false
1041
+ local ____self__139_49 = self[139]
1042
+ if ____self__139_49 == nil then
1043
+ ____self__139_49 = false
995
1044
  end
996
- return ____self__135_52
1045
+ return ____self__139_49
997
1046
  end,
998
1047
  set = function(self, turnsIntoGhost)
999
- if not turnsIntoGhost and self[135] then
1048
+ if not turnsIntoGhost and self[139] then
1000
1049
  self.object:decrementGhostCounter()
1001
- self[135] = nil
1002
- elseif turnsIntoGhost and not self[135] then
1050
+ self[139] = nil
1051
+ elseif turnsIntoGhost and not self[139] then
1003
1052
  self.object:incrementGhostCounter()
1004
- self[135] = true
1053
+ self[139] = true
1005
1054
  end
1006
1055
  end
1007
1056
  },
@@ -1012,25 +1061,25 @@ __TS__SetDescriptor(
1012
1061
  "stuns",
1013
1062
  {
1014
1063
  get = function(self)
1015
- local ____self__136_53 = self[136]
1016
- if ____self__136_53 == nil then
1017
- ____self__136_53 = false
1064
+ local ____self__140_50 = self[140]
1065
+ if ____self__140_50 == nil then
1066
+ ____self__140_50 = false
1018
1067
  end
1019
- return ____self__136_53
1068
+ return ____self__140_50
1020
1069
  end,
1021
1070
  set = function(self, stuns)
1022
- if not stuns and self[136] then
1023
- if self[137] then
1071
+ if not stuns and self[140] then
1072
+ if self[141] then
1024
1073
  self.object:decrementForceStunCounter()
1025
1074
  end
1026
1075
  self.object:decrementStunCounter()
1027
- self[136] = nil
1028
- elseif stuns and not self[136] then
1029
- if self[137] then
1076
+ self[140] = nil
1077
+ elseif stuns and not self[140] then
1078
+ if self[141] then
1030
1079
  self.object:incrementForceStunCounter()
1031
1080
  end
1032
1081
  self.object:incrementStunCounter()
1033
- self[136] = true
1082
+ self[140] = true
1034
1083
  end
1035
1084
  end
1036
1085
  },
@@ -1041,23 +1090,23 @@ __TS__SetDescriptor(
1041
1090
  "ignoresStunImmunity",
1042
1091
  {
1043
1092
  get = function(self)
1044
- local ____self__137_54 = self[137]
1045
- if ____self__137_54 == nil then
1046
- ____self__137_54 = false
1093
+ local ____self__141_51 = self[141]
1094
+ if ____self__141_51 == nil then
1095
+ ____self__141_51 = false
1047
1096
  end
1048
- return ____self__137_54
1097
+ return ____self__141_51
1049
1098
  end,
1050
1099
  set = function(self, ignoresStunImmunity)
1051
- if not ignoresStunImmunity and self[137] then
1052
- if self[136] then
1100
+ if not ignoresStunImmunity and self[141] then
1101
+ if self[140] then
1053
1102
  self.object:decrementForceStunCounter()
1054
1103
  end
1055
- self[137] = nil
1056
- elseif ignoresStunImmunity and not self[137] then
1057
- if self[136] then
1104
+ self[141] = nil
1105
+ elseif ignoresStunImmunity and not self[141] then
1106
+ if self[140] then
1058
1107
  self.object:incrementForceStunCounter()
1059
1108
  end
1060
- self[137] = true
1109
+ self[141] = true
1061
1110
  end
1062
1111
  end
1063
1112
  },
@@ -1068,19 +1117,19 @@ __TS__SetDescriptor(
1068
1117
  "disablesAutoAttack",
1069
1118
  {
1070
1119
  get = function(self)
1071
- local ____self__138_55 = self[138]
1072
- if ____self__138_55 == nil then
1073
- ____self__138_55 = false
1120
+ local ____self__142_52 = self[142]
1121
+ if ____self__142_52 == nil then
1122
+ ____self__142_52 = false
1074
1123
  end
1075
- return ____self__138_55
1124
+ return ____self__142_52
1076
1125
  end,
1077
1126
  set = function(self, disablesAutoAttack)
1078
- if not disablesAutoAttack and self[138] then
1127
+ if not disablesAutoAttack and self[142] then
1079
1128
  self.object:decrementDisableAutoAttackCounter()
1080
- self[138] = nil
1081
- elseif disablesAutoAttack and not self[138] then
1129
+ self[142] = nil
1130
+ elseif disablesAutoAttack and not self[142] then
1082
1131
  self.object:incrementDisableAutoAttackCounter()
1083
- self[138] = true
1132
+ self[142] = true
1084
1133
  end
1085
1134
  end
1086
1135
  },
@@ -1091,19 +1140,19 @@ __TS__SetDescriptor(
1091
1140
  "providesInvulnerability",
1092
1141
  {
1093
1142
  get = function(self)
1094
- local ____self__139_56 = self[139]
1095
- if ____self__139_56 == nil then
1096
- ____self__139_56 = false
1143
+ local ____self__143_53 = self[143]
1144
+ if ____self__143_53 == nil then
1145
+ ____self__143_53 = false
1097
1146
  end
1098
- return ____self__139_56
1147
+ return ____self__143_53
1099
1148
  end,
1100
1149
  set = function(self, providesInvulnerability)
1101
- if not providesInvulnerability and self[139] then
1150
+ if not providesInvulnerability and self[143] then
1102
1151
  self.object:decrementInvulnerabilityCounter()
1103
- self[139] = nil
1104
- elseif providesInvulnerability and not self[139] then
1152
+ self[143] = nil
1153
+ elseif providesInvulnerability and not self[143] then
1105
1154
  self.object:incrementInvulnerabilityCounter()
1106
- self[139] = true
1155
+ self[143] = true
1107
1156
  end
1108
1157
  end
1109
1158
  },
@@ -1114,17 +1163,17 @@ __TS__SetDescriptor(
1114
1163
  "killsOnExpiration",
1115
1164
  {
1116
1165
  get = function(self)
1117
- local ____self__140_57 = self[140]
1118
- if ____self__140_57 == nil then
1119
- ____self__140_57 = false
1166
+ local ____self__144_54 = self[144]
1167
+ if ____self__144_54 == nil then
1168
+ ____self__144_54 = false
1120
1169
  end
1121
- return ____self__140_57
1170
+ return ____self__144_54
1122
1171
  end,
1123
1172
  set = function(self, killsOnExpiration)
1124
- if not killsOnExpiration and self[140] then
1125
- self[140] = nil
1126
- elseif killsOnExpiration and not self[140] then
1127
- 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
1128
1177
  end
1129
1178
  end
1130
1179
  },
@@ -1135,17 +1184,17 @@ __TS__SetDescriptor(
1135
1184
  "explodesOnExpiration",
1136
1185
  {
1137
1186
  get = function(self)
1138
- local ____self__141_58 = self[141]
1139
- if ____self__141_58 == nil then
1140
- ____self__141_58 = false
1187
+ local ____self__145_55 = self[145]
1188
+ if ____self__145_55 == nil then
1189
+ ____self__145_55 = false
1141
1190
  end
1142
- return ____self__141_58
1191
+ return ____self__145_55
1143
1192
  end,
1144
1193
  set = function(self, killsOnExpiration)
1145
- if not killsOnExpiration and self[141] then
1146
- self[141] = nil
1147
- elseif killsOnExpiration and not self[141] then
1148
- 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
1149
1198
  end
1150
1199
  end
1151
1200
  },
@@ -1254,12 +1303,39 @@ __TS__SetDescriptor(
1254
1303
  },
1255
1304
  true
1256
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
+ )
1257
1319
  __TS__SetDescriptor(
1258
1320
  Buff.prototype,
1259
1321
  "duration",
1260
- {get = function(self)
1261
- return self[103]
1262
- 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
+ },
1263
1339
  true
1264
1340
  )
1265
1341
  __TS__SetDescriptor(
@@ -1267,13 +1343,13 @@ __TS__SetDescriptor(
1267
1343
  "remainingDuration",
1268
1344
  {
1269
1345
  get = function(self)
1270
- local ____opt_59 = self._timer
1271
- 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
1272
1348
  end,
1273
1349
  set = function(self, remainingDuration)
1274
- local ____remainingDuration_63 = remainingDuration
1275
- local ____opt_61 = self._timer
1276
- 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)
1277
1353
  if remainingDurationDelta ~= 0 then
1278
1354
  self[103] = self[103] + remainingDurationDelta
1279
1355
  if remainingDuration <= 0 then
@@ -1288,7 +1364,7 @@ __TS__SetDescriptor(
1288
1364
  remainingDuration,
1289
1365
  self._spellStealPriority,
1290
1366
  self._learnLevelMinimum,
1291
- self[142]
1367
+ self[146]
1292
1368
  ) then
1293
1369
  local timer = self._timer
1294
1370
  if timer == nil then
@@ -1303,15 +1379,80 @@ __TS__SetDescriptor(
1303
1379
  },
1304
1380
  true
1305
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
+ )
1306
1447
  __TS__SetDescriptor(
1307
1448
  Buff.prototype,
1308
1449
  "abilityCooldownFactor",
1309
1450
  {
1310
1451
  get = function(self)
1311
- return self[143] or 1
1452
+ return self[147] or 1
1312
1453
  end,
1313
1454
  set = function(self, abilityCooldownFactor)
1314
- local previousAbilityCooldownModifier = self[144]
1455
+ local previousAbilityCooldownModifier = self[148]
1315
1456
  if previousAbilityCooldownModifier then
1316
1457
  for ____, ability in ipairs(self._unit.abilities) do
1317
1458
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
@@ -1323,8 +1464,8 @@ __TS__SetDescriptor(
1323
1464
  for ____, ability in ipairs(self._unit.abilities) do
1324
1465
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1325
1466
  end
1326
- self[144] = modifier
1327
- self[143] = abilityCooldownFactor
1467
+ self[148] = modifier
1468
+ self[147] = abilityCooldownFactor
1328
1469
  end
1329
1470
  },
1330
1471
  true