warscript 0.0.1-dev.ff5dbcd → 0.0.1-dev.fff719b

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 (170) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/effect.d.ts +1 -3
  4. package/core/types/effect.lua +26 -29
  5. package/core/types/frame.lua +24 -21
  6. package/core/types/player.d.ts +16 -0
  7. package/core/types/player.lua +60 -15
  8. package/core/types/playerCamera.d.ts +2 -0
  9. package/core/types/playerCamera.lua +123 -5
  10. package/core/types/sound.d.ts +17 -25
  11. package/core/types/sound.lua +85 -44
  12. package/core/types/tileCell.d.ts +11 -1
  13. package/core/types/tileCell.lua +97 -0
  14. package/core/types/timer.d.ts +9 -8
  15. package/core/types/timer.lua +45 -23
  16. package/decl/native.d.ts +846 -790
  17. package/destroyable.d.ts +1 -0
  18. package/destroyable.lua +9 -0
  19. package/engine/behavior.d.ts +14 -1
  20. package/engine/behavior.lua +230 -70
  21. package/engine/behaviour/ability/apply-buff.lua +5 -5
  22. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  23. package/engine/behaviour/ability/damage.d.ts +9 -3
  24. package/engine/behaviour/ability/damage.lua +26 -38
  25. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  26. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  27. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  28. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  29. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  30. package/engine/behaviour/ability/restore-mana.lua +6 -6
  31. package/engine/behaviour/ability.d.ts +7 -2
  32. package/engine/behaviour/ability.lua +28 -22
  33. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  34. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  35. package/engine/behaviour/unit.d.ts +40 -2
  36. package/engine/behaviour/unit.lua +269 -6
  37. package/engine/buff.d.ts +32 -14
  38. package/engine/buff.lua +249 -152
  39. package/engine/internal/ability.d.ts +7 -1
  40. package/engine/internal/ability.lua +49 -9
  41. package/engine/internal/item/ability.lua +63 -11
  42. package/engine/internal/item+owner.lua +12 -6
  43. package/engine/internal/item.d.ts +18 -17
  44. package/engine/internal/item.lua +135 -49
  45. package/engine/internal/mechanics/ability-duration.lua +1 -1
  46. package/engine/internal/mechanics/cast-ability.lua +6 -3
  47. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  48. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  49. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  50. package/engine/internal/misc/frame-coordinates.lua +21 -0
  51. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  52. package/engine/internal/misc/get-terrain-z.lua +11 -0
  53. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  54. package/engine/internal/misc/player-local-handle.lua +5 -0
  55. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  56. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  57. package/engine/internal/unit/ability.d.ts +35 -0
  58. package/engine/internal/unit/ability.lua +98 -9
  59. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  60. package/engine/internal/unit/allowed-targets.lua +9 -1
  61. package/engine/internal/unit/attributes.d.ts +17 -0
  62. package/engine/internal/unit/attributes.lua +46 -0
  63. package/engine/internal/unit/bonus.d.ts +2 -0
  64. package/engine/internal/unit/bonus.lua +10 -0
  65. package/engine/internal/unit/fly-height.d.ts +7 -0
  66. package/engine/internal/unit/fly-height.lua +20 -0
  67. package/engine/internal/unit/interrupts.d.ts +12 -0
  68. package/engine/internal/unit/interrupts.lua +28 -0
  69. package/engine/internal/unit/main-selected.lua +12 -27
  70. package/engine/internal/unit/order.d.ts +20 -0
  71. package/engine/internal/unit/order.lua +136 -0
  72. package/engine/internal/unit/scale.d.ts +7 -0
  73. package/engine/internal/unit/scale.lua +20 -0
  74. package/engine/internal/unit+ability.lua +10 -1
  75. package/engine/internal/unit+damage.d.ts +2 -11
  76. package/engine/internal/unit+damage.lua +10 -14
  77. package/engine/internal/unit+spellSteal.lua +1 -2
  78. package/engine/internal/unit-missile-launch.lua +52 -14
  79. package/engine/internal/unit.d.ts +42 -24
  80. package/engine/internal/unit.lua +377 -232
  81. package/engine/local-client.d.ts +2 -0
  82. package/engine/local-client.lua +30 -0
  83. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  84. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  85. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  86. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  87. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  88. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  89. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  90. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  91. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  92. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  93. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  94. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  95. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  96. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  97. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  98. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  99. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  100. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  101. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  102. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  103. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  104. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  105. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  106. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  107. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  108. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  109. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  110. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  111. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  112. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  113. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  114. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  115. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  116. package/engine/object-data/entry/ability-type/web.lua +52 -0
  117. package/engine/object-data/entry/ability-type.d.ts +11 -11
  118. package/engine/object-data/entry/ability-type.lua +35 -13
  119. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  120. package/engine/object-data/entry/buff-type.d.ts +5 -11
  121. package/engine/object-data/entry/buff-type.lua +11 -27
  122. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  123. package/engine/object-data/entry/destructible-type.lua +155 -0
  124. package/engine/object-data/entry/sound-preset.d.ts +17 -0
  125. package/engine/object-data/entry/sound-preset.lua +104 -0
  126. package/engine/object-data/entry/unit-type.d.ts +17 -4
  127. package/engine/object-data/entry/unit-type.lua +197 -85
  128. package/engine/object-field/ability.d.ts +4 -4
  129. package/engine/object-field/ability.lua +7 -6
  130. package/engine/object-field/unit.d.ts +72 -3
  131. package/engine/object-field/unit.lua +268 -7
  132. package/engine/object-field.d.ts +25 -6
  133. package/engine/object-field.lua +357 -118
  134. package/engine/random.d.ts +9 -0
  135. package/engine/random.lua +13 -0
  136. package/engine/standard/entries/buff-type.d.ts +3 -0
  137. package/engine/standard/entries/buff-type.lua +3 -0
  138. package/engine/standard/fields/ability.d.ts +2 -2
  139. package/engine/standard/fields/ability.lua +2 -2
  140. package/engine/standard/fields/unit.d.ts +12 -0
  141. package/engine/standard/fields/unit.lua +20 -0
  142. package/engine/synchronization.d.ts +11 -0
  143. package/engine/synchronization.lua +77 -0
  144. package/engine/text-tag.d.ts +36 -2
  145. package/engine/text-tag.lua +250 -10
  146. package/engine/unit.d.ts +5 -0
  147. package/engine/unit.lua +5 -0
  148. package/net/socket.lua +1 -1
  149. package/objutil/buff.lua +11 -10
  150. package/package.json +2 -2
  151. package/patch-lua.lua +9 -0
  152. package/patch-lualib.lua +1 -1
  153. package/utility/arrays.d.ts +2 -0
  154. package/utility/arrays.lua +11 -0
  155. package/utility/callback-array.d.ts +17 -0
  156. package/utility/callback-array.lua +61 -0
  157. package/utility/functions.d.ts +8 -0
  158. package/utility/functions.lua +13 -0
  159. package/utility/linked-map.d.ts +26 -0
  160. package/utility/linked-map.lua +66 -0
  161. package/utility/linked-set.d.ts +2 -0
  162. package/utility/linked-set.lua +26 -1
  163. package/utility/lua-maps.d.ts +15 -2
  164. package/utility/lua-maps.lua +53 -2
  165. package/utility/lua-sets.d.ts +2 -0
  166. package/utility/lua-sets.lua +7 -0
  167. package/utility/records.lua +20 -1
  168. package/utility/types.d.ts +3 -0
  169. package/core/types/order.d.ts +0 -25
  170. package/core/types/order.lua +0 -55
package/engine/buff.lua CHANGED
@@ -16,6 +16,7 @@ local internalApplyBuff = ____applicable.internalApplyBuff
16
16
  local removeBuff = ____applicable.removeBuff
17
17
  local ____ability = require("engine.internal.ability")
18
18
  local Ability = ____ability.Ability
19
+ local UnitAbility = ____ability.UnitAbility
19
20
  local ____ability = require("engine.object-field.ability")
20
21
  local AbilityBooleanField = ____ability.AbilityBooleanField
21
22
  local AbilityNumberField = ____ability.AbilityNumberField
@@ -28,9 +29,6 @@ local ____math = require("math")
28
29
  local max = ____math.max
29
30
  local min = ____math.min
30
31
  local ____bonus = require("engine.internal.unit.bonus")
31
- local addOrUpdateOrRemoveUnitBonus = ____bonus.addOrUpdateOrRemoveUnitBonus
32
- local getUnitBonus = ____bonus.getUnitBonus
33
- local removeUnitBonus = ____bonus.removeUnitBonus
34
32
  local UnitBonusType = ____bonus.UnitBonusType
35
33
  local ____area_2Ddamage = require("engine.internal.mechanics.area-damage")
36
34
  local damageArea = ____area_2Ddamage.damageArea
@@ -44,6 +42,7 @@ local BuffType = ____buff_2Dtype.BuffType
44
42
  local ____unit = require("engine.behaviour.unit")
45
43
  local UnitBehavior = ____unit.UnitBehavior
46
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
47
46
  local forEach = ____arrays.forEach
48
47
  local ____event = require("event")
49
48
  local Event = ____event.Event
@@ -53,6 +52,12 @@ local ____item = require("engine.internal.item")
53
52
  local Item = ____item.Item
54
53
  local ____destructable = require("core.types.destructable")
55
54
  local Destructable = ____destructable.Destructable
55
+ local ____ability = require("engine.standard.fields.ability")
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 = {}
@@ -101,6 +106,7 @@ local buffParametersKeys = {
101
106
  armorIncreaseFactor = true,
102
107
  attackSpeedIncreaseFactor = true,
103
108
  movementSpeedIncreaseFactor = true,
109
+ manaRegenerationRateIncreaseFactor = true,
104
110
  evasionProbability = true,
105
111
  missProbability = true,
106
112
  damageFactor = true,
@@ -109,6 +115,7 @@ local buffParametersKeys = {
109
115
  durationIncreaseOnAutoAttack = true,
110
116
  maximumDuration = true,
111
117
  maximumRemainingDuration = true,
118
+ turnsIntoGhost = true,
112
119
  stuns = true,
113
120
  ignoresStunImmunity = true,
114
121
  providesStunImmunity = true,
@@ -123,7 +130,8 @@ local buffParametersKeys = {
123
130
  damageOnExpiration = true,
124
131
  healingOnExpiration = true,
125
132
  killsOnExpiration = true,
126
- explodesOnExpiration = true
133
+ explodesOnExpiration = true,
134
+ abilityCooldownFactor = true
127
135
  }
128
136
  local function resolveEnumValue(ability, level, value)
129
137
  if value == nil or type(value) == "number" then
@@ -174,6 +182,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
174
182
  end
175
183
  end
176
184
  local buffBooleanParameters = {
185
+ "turnsIntoGhost",
177
186
  "stuns",
178
187
  "ignoresStunImmunity",
179
188
  "disablesAutoAttack",
@@ -185,6 +194,7 @@ local buffNumberParameters = {
185
194
  "durationIncreaseOnAutoAttack",
186
195
  "attackSpeedIncreaseFactor",
187
196
  "movementSpeedIncreaseFactor",
197
+ "manaRegenerationRateIncreaseFactor",
188
198
  "evasionProbability",
189
199
  "armorIncrease",
190
200
  "damageFactor",
@@ -199,7 +209,8 @@ local buffNumberParameters = {
199
209
  "healingPerInterval",
200
210
  "healingOverDuration",
201
211
  "damageOnExpiration",
202
- "healingOnExpiration"
212
+ "healingOnExpiration",
213
+ "abilityCooldownFactor"
203
214
  }
204
215
  local unsuccessfulApplicationMarker = {}
205
216
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -302,7 +313,8 @@ buffHealingIntervalTimerCallback = function(buff)
302
313
  source:healTarget(buff[101], healingPerInterval)
303
314
  end
304
315
  end
305
- local buffDestroyEvent = __TS__New(Event)
316
+ local buffCreatedEvent = __TS__New(Event)
317
+ local buffBeingDestroyedEvent = __TS__New(Event)
306
318
  ____exports.Buff = __TS__Class()
307
319
  local Buff = ____exports.Buff
308
320
  Buff.name = "Buff"
@@ -317,33 +329,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
317
329
  local polarity
318
330
  local resistanceType
319
331
  local ability
332
+ local abilityBehavior
320
333
  if type(typeIdOrTypeIds) ~= "number" then
321
334
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
322
335
  polarity = resistanceTypeOrPolarity
323
336
  resistanceType = abilityOrParametersOrResistanceType
324
- if __TS__InstanceOf(parametersOrAbility, Ability) then
337
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
338
+ abilityBehavior = parametersOrAbility
339
+ ability = abilityBehavior.ability
340
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
325
341
  ability = parametersOrAbility
326
- else
327
- ability = nil
342
+ elseif parametersOrAbility ~= nil then
328
343
  parameters = parametersOrAbility
329
344
  end
330
345
  else
331
346
  typeId = typeIdOrTypeIds
332
347
  polarity = polarityOrTypeIdSelectionPolicy
333
348
  resistanceType = resistanceTypeOrPolarity
334
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
349
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, AbilityBehavior) then
350
+ abilityBehavior = abilityOrParametersOrResistanceType
351
+ ability = abilityBehavior.ability
352
+ parameters = parametersOrAbility
353
+ elseif __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
335
354
  ability = abilityOrParametersOrResistanceType
336
355
  parameters = parametersOrAbility
337
- else
338
- ability = nil
356
+ elseif abilityOrParametersOrResistanceType ~= nil then
339
357
  parameters = abilityOrParametersOrResistanceType
358
+ else
359
+ parameters = parametersOrAbility
340
360
  end
341
361
  end
362
+ self.sourceAbilityBehavior = abilityBehavior
342
363
  self.typeId = typeId
343
- if not __TS__InstanceOf(ability, Ability) then
344
- parameters = ability
345
- ability = nil
346
- end
347
364
  local defaultParameters = self.constructor.defaultParameters
348
365
  local level = parameters and parameters.level or defaultParameters.level
349
366
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -371,7 +388,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
371
388
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
372
389
  if missProbability ~= nil then
373
390
  missProbability = resolveNumberValue(ability, level, missProbability)
374
- self[141] = missProbability
391
+ self[142] = missProbability
375
392
  end
376
393
  local buffByTypeId = buffByTypeIdByUnit[_unit]
377
394
  if buffByTypeId == nil then
@@ -454,24 +471,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
454
471
  abilityTypeIds = {}
455
472
  self._abilityTypeIds = abilityTypeIds
456
473
  end
457
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
474
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
475
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
458
476
  local addedAbility = _unit:addAbility(abilityTypeId)
459
477
  if addedAbility ~= nil then
460
478
  _unit:makeAbilityPermanent(abilityTypeId, true)
461
479
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
462
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
463
- if abilityParameterKey == "isButtonVisible" then
464
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
465
- _unit:hideAbility(abilityTypeId, true)
466
- end
467
- elseif abilityParameterKey ~= "level" then
468
- abilityParameterKey:setValue(
469
- addedAbility,
470
- resolveNumberValue(ability, level, abilityParameterValue)
471
- )
472
- end
480
+ if abilityParameters.isButtonVisible == false then
481
+ _unit:hideAbility(abilityTypeId, true)
482
+ end
483
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
484
+ field[1]:setValue(
485
+ addedAbility,
486
+ resolveNumberValue(ability, level, field[2])
487
+ )
473
488
  end
474
- abilityTypeIds[abilityTypeId] = true
489
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
475
490
  end
476
491
  end
477
492
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -483,18 +498,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
483
498
  self._behaviors = behaviors
484
499
  end
485
500
  end
486
- local additionalParameters = {}
487
- for key, value in pairs(parameters) do
488
- if not buffParametersKeys[key] then
489
- if ability then
490
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
491
- else
492
- additionalParameters[key] = value
501
+ if parameters ~= nil then
502
+ local additionalParameters = {}
503
+ for ____, key in ipairs(sortedKeysUnnested(parameters)) do
504
+ if not buffParametersKeys[key] then
505
+ if ability then
506
+ additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, parameters[key])
507
+ else
508
+ additionalParameters[key] = parameters[key]
509
+ end
493
510
  end
494
511
  end
495
- end
496
- if (next(additionalParameters)) ~= nil then
497
- self.parameters = additionalParameters
512
+ if (next(additionalParameters)) ~= nil then
513
+ self.parameters = additionalParameters
514
+ end
498
515
  end
499
516
  end
500
517
  if duration ~= nil and duration > 0 then
@@ -504,64 +521,68 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
504
521
  end
505
522
  self:onCreate()
506
523
  self[100] = 1
524
+ Event.invoke(buffCreatedEvent, self)
507
525
  end
508
- function Buff.prototype.getUnitBonus(self, bonusType)
509
- local ____opt_38 = self._bonusIdByBonusType
510
- local bonusId = ____opt_38 and ____opt_38[bonusType]
511
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
526
+ function Buff.prototype.onAbilityGained(self, ability)
527
+ if __TS__InstanceOf(ability, UnitAbility) then
528
+ local abilityCooldownModifier = self[144]
529
+ if abilityCooldownModifier then
530
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
531
+ end
532
+ end
512
533
  end
513
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
514
- local bonusIdByBonusType = self._bonusIdByBonusType
515
- if bonusIdByBonusType == nil then
516
- bonusIdByBonusType = {}
517
- self._bonusIdByBonusType = bonusIdByBonusType
534
+ function Buff.prototype.onAbilityLost(self, ability)
535
+ if __TS__InstanceOf(ability, UnitAbility) then
536
+ local abilityCooldownModifier = self[144]
537
+ if abilityCooldownModifier then
538
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
539
+ end
518
540
  end
519
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
520
541
  end
521
542
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
522
543
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
523
544
  Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
545
  else
525
546
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
526
- local ____Effect_42 = Effect
527
- local ____Effect_flash_43 = Effect.flash
528
- local ____array_41 = __TS__SparseArrayNew(
547
+ local ____Effect_40 = Effect
548
+ local ____Effect_flash_41 = Effect.flash
549
+ local ____array_39 = __TS__SparseArrayNew(
529
550
  self[105],
530
551
  isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
531
552
  stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
532
553
  )
533
- local ____isWidgetProvided_40
554
+ local ____isWidgetProvided_38
534
555
  if isWidgetProvided then
535
- ____isWidgetProvided_40 = yOrParametersOrDuration
556
+ ____isWidgetProvided_38 = yOrParametersOrDuration
536
557
  else
537
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
558
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
538
559
  end
539
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
540
- ____Effect_flash_43(
541
- ____Effect_42,
542
- __TS__SparseArraySpread(____array_41)
560
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
561
+ ____Effect_flash_41(
562
+ ____Effect_40,
563
+ __TS__SparseArraySpread(____array_39)
543
564
  )
544
565
  end
545
566
  end
546
567
  function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
547
568
  local isWidgetProvided = type(widgetOrDuration) == "table"
548
- local ____Effect_46 = Effect
549
- local ____Effect_flash_47 = Effect.flash
550
- local ____array_45 = __TS__SparseArrayNew(
569
+ local ____Effect_44 = Effect
570
+ local ____Effect_flash_45 = Effect.flash
571
+ local ____array_43 = __TS__SparseArrayNew(
551
572
  self[106],
552
573
  isWidgetProvided and widgetOrDuration or self._unit,
553
574
  stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
554
575
  )
555
- local ____isWidgetProvided_44
576
+ local ____isWidgetProvided_42
556
577
  if isWidgetProvided then
557
- ____isWidgetProvided_44 = duration
578
+ ____isWidgetProvided_42 = duration
558
579
  else
559
- ____isWidgetProvided_44 = widgetOrDuration
580
+ ____isWidgetProvided_42 = widgetOrDuration
560
581
  end
561
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
562
- ____Effect_flash_47(
563
- ____Effect_46,
564
- __TS__SparseArraySpread(____array_45)
582
+ __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
583
+ ____Effect_flash_45(
584
+ ____Effect_44,
585
+ __TS__SparseArraySpread(____array_43)
565
586
  )
566
587
  end
567
588
  function Buff.prototype.onCreate(self)
@@ -592,26 +613,33 @@ function Buff.prototype.onDestroy(self)
592
613
  behavior:destroy()
593
614
  end
594
615
  end
595
- if self[137] then
616
+ local previousAbilityCooldownModifier = self[144]
617
+ if previousAbilityCooldownModifier then
618
+ for ____, ability in ipairs(self._unit.abilities) do
619
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
620
+ end
621
+ end
622
+ if self[139] then
623
+ unit:decrementInvulnerabilityCounter()
624
+ end
625
+ if self[138] then
596
626
  unit:decrementDisableAutoAttackCounter()
597
627
  end
598
- if self[135] then
599
- if self[136] then
600
- unit:decrementStunCounter()
628
+ if self[136] then
629
+ if self[137] then
630
+ unit:decrementForceStunCounter()
601
631
  end
602
632
  unit:decrementStunCounter()
603
633
  end
634
+ if self[135] then
635
+ unit:decrementGhostCounter()
636
+ end
604
637
  if self._abilityTypeIds ~= nil then
605
- for abilityTypeId in pairs(self._abilityTypeIds) do
638
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
606
639
  unit:removeAbility(abilityTypeId)
607
640
  end
608
641
  end
609
- if self._bonusIdByBonusType ~= nil then
610
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
611
- removeUnitBonus(unit, bonusType, bonusId)
612
- end
613
- end
614
- Event.invoke(buffDestroyEvent, self)
642
+ Event.invoke(buffBeingDestroyedEvent, self)
615
643
  self[100] = 3
616
644
  return UnitBehavior.prototype.onDestroy(self)
617
645
  end
@@ -640,8 +668,8 @@ function Buff.apply(self, ...)
640
668
  end
641
669
  end
642
670
  function Buff.getByTypeId(self, unit, typeId)
643
- local ____opt_48 = buffByTypeIdByUnit[unit]
644
- local buff = ____opt_48 and ____opt_48[typeId]
671
+ local ____opt_46 = buffByTypeIdByUnit[unit]
672
+ local buff = ____opt_46 and ____opt_46[typeId]
645
673
  if __TS__InstanceOf(buff, self) then
646
674
  return buff
647
675
  end
@@ -655,9 +683,9 @@ function Buff.prototype.onExpiration(self)
655
683
  if self[121] ~= nil then
656
684
  (self[102] or unit):healTarget(unit, self[120] or 0)
657
685
  end
658
- if self[140] then
686
+ if self[141] then
659
687
  unit:explode()
660
- elseif self[139] then
688
+ elseif self[140] then
661
689
  unit:kill()
662
690
  end
663
691
  end
@@ -799,8 +827,8 @@ __TS__SetDescriptor(
799
827
  return
800
828
  end
801
829
  self[112] = damageInterval
802
- local ____opt_50 = self._timer
803
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
830
+ local ____opt_48 = self._timer
831
+ local elapsed = ____opt_48 and ____opt_48.elapsed or 0
804
832
  local timer = self[114]
805
833
  if timer == nil then
806
834
  timer = Timer:create()
@@ -879,8 +907,8 @@ __TS__SetDescriptor(
879
907
  return
880
908
  end
881
909
  self[117] = healingInterval
882
- local ____opt_52 = self._timer
883
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
910
+ local ____opt_50 = self._timer
911
+ local elapsed = ____opt_50 and ____opt_50.elapsed or 0
884
912
  local timer = self[119]
885
913
  if timer == nil then
886
914
  timer = Timer:create()
@@ -961,30 +989,53 @@ __TS__SetDescriptor(
961
989
  },
962
990
  true
963
991
  )
992
+ __TS__SetDescriptor(
993
+ Buff.prototype,
994
+ "turnsIntoGhost",
995
+ {
996
+ get = function(self)
997
+ local ____self__135_52 = self[135]
998
+ if ____self__135_52 == nil then
999
+ ____self__135_52 = false
1000
+ end
1001
+ return ____self__135_52
1002
+ end,
1003
+ set = function(self, turnsIntoGhost)
1004
+ if not turnsIntoGhost and self[135] then
1005
+ self.object:decrementGhostCounter()
1006
+ self[135] = nil
1007
+ elseif turnsIntoGhost and not self[135] then
1008
+ self.object:incrementGhostCounter()
1009
+ self[135] = true
1010
+ end
1011
+ end
1012
+ },
1013
+ true
1014
+ )
964
1015
  __TS__SetDescriptor(
965
1016
  Buff.prototype,
966
1017
  "stuns",
967
1018
  {
968
1019
  get = function(self)
969
- local ____self__135_54 = self[135]
970
- if ____self__135_54 == nil then
971
- ____self__135_54 = false
1020
+ local ____self__136_53 = self[136]
1021
+ if ____self__136_53 == nil then
1022
+ ____self__136_53 = false
972
1023
  end
973
- return ____self__135_54
1024
+ return ____self__136_53
974
1025
  end,
975
1026
  set = function(self, stuns)
976
- if not stuns and self[135] then
977
- if self[136] then
978
- self.object:decrementStunCounter()
1027
+ if not stuns and self[136] then
1028
+ if self[137] then
1029
+ self.object:decrementForceStunCounter()
979
1030
  end
980
1031
  self.object:decrementStunCounter()
981
- self[135] = nil
982
- elseif stuns and not self[135] then
983
- if self[136] then
984
- self.object:incrementStunCounter()
1032
+ self[136] = nil
1033
+ elseif stuns and not self[136] then
1034
+ if self[137] then
1035
+ self.object:incrementForceStunCounter()
985
1036
  end
986
1037
  self.object:incrementStunCounter()
987
- self[135] = true
1038
+ self[136] = true
988
1039
  end
989
1040
  end
990
1041
  },
@@ -995,23 +1046,23 @@ __TS__SetDescriptor(
995
1046
  "ignoresStunImmunity",
996
1047
  {
997
1048
  get = function(self)
998
- local ____self__136_55 = self[136]
999
- if ____self__136_55 == nil then
1000
- ____self__136_55 = false
1049
+ local ____self__137_54 = self[137]
1050
+ if ____self__137_54 == nil then
1051
+ ____self__137_54 = false
1001
1052
  end
1002
- return ____self__136_55
1053
+ return ____self__137_54
1003
1054
  end,
1004
1055
  set = function(self, ignoresStunImmunity)
1005
- if not ignoresStunImmunity and self[136] then
1006
- if self[135] then
1007
- self.object:decrementStunCounter()
1056
+ if not ignoresStunImmunity and self[137] then
1057
+ if self[136] then
1058
+ self.object:decrementForceStunCounter()
1008
1059
  end
1009
- self[136] = nil
1010
- elseif ignoresStunImmunity and not self[136] then
1011
- if self[135] then
1012
- self.object:incrementStunCounter()
1060
+ self[137] = nil
1061
+ elseif ignoresStunImmunity and not self[137] then
1062
+ if self[136] then
1063
+ self.object:incrementForceStunCounter()
1013
1064
  end
1014
- self[136] = true
1065
+ self[137] = true
1015
1066
  end
1016
1067
  end
1017
1068
  },
@@ -1022,19 +1073,19 @@ __TS__SetDescriptor(
1022
1073
  "disablesAutoAttack",
1023
1074
  {
1024
1075
  get = function(self)
1025
- local ____self__137_56 = self[137]
1026
- if ____self__137_56 == nil then
1027
- ____self__137_56 = false
1076
+ local ____self__138_55 = self[138]
1077
+ if ____self__138_55 == nil then
1078
+ ____self__138_55 = false
1028
1079
  end
1029
- return ____self__137_56
1080
+ return ____self__138_55
1030
1081
  end,
1031
1082
  set = function(self, disablesAutoAttack)
1032
- if not disablesAutoAttack and self[137] then
1083
+ if not disablesAutoAttack and self[138] then
1033
1084
  self.object:decrementDisableAutoAttackCounter()
1034
- self[137] = nil
1035
- elseif disablesAutoAttack and not self[137] then
1085
+ self[138] = nil
1086
+ elseif disablesAutoAttack and not self[138] then
1036
1087
  self.object:incrementDisableAutoAttackCounter()
1037
- self[137] = true
1088
+ self[138] = true
1038
1089
  end
1039
1090
  end
1040
1091
  },
@@ -1045,19 +1096,19 @@ __TS__SetDescriptor(
1045
1096
  "providesInvulnerability",
1046
1097
  {
1047
1098
  get = function(self)
1048
- local ____self__138_57 = self[138]
1049
- if ____self__138_57 == nil then
1050
- ____self__138_57 = false
1099
+ local ____self__139_56 = self[139]
1100
+ if ____self__139_56 == nil then
1101
+ ____self__139_56 = false
1051
1102
  end
1052
- return ____self__138_57
1103
+ return ____self__139_56
1053
1104
  end,
1054
1105
  set = function(self, providesInvulnerability)
1055
- if not providesInvulnerability and self[138] then
1106
+ if not providesInvulnerability and self[139] then
1056
1107
  self.object:decrementInvulnerabilityCounter()
1057
- self[138] = nil
1058
- elseif providesInvulnerability and not self[138] then
1108
+ self[139] = nil
1109
+ elseif providesInvulnerability and not self[139] then
1059
1110
  self.object:incrementInvulnerabilityCounter()
1060
- self[138] = true
1111
+ self[139] = true
1061
1112
  end
1062
1113
  end
1063
1114
  },
@@ -1068,17 +1119,17 @@ __TS__SetDescriptor(
1068
1119
  "killsOnExpiration",
1069
1120
  {
1070
1121
  get = function(self)
1071
- local ____self__139_58 = self[139]
1072
- if ____self__139_58 == nil then
1073
- ____self__139_58 = false
1122
+ local ____self__140_57 = self[140]
1123
+ if ____self__140_57 == nil then
1124
+ ____self__140_57 = false
1074
1125
  end
1075
- return ____self__139_58
1126
+ return ____self__140_57
1076
1127
  end,
1077
1128
  set = function(self, killsOnExpiration)
1078
- if not killsOnExpiration and self[139] then
1079
- self[139] = nil
1080
- elseif killsOnExpiration and not self[139] then
1081
- self[139] = true
1129
+ if not killsOnExpiration and self[140] then
1130
+ self[140] = nil
1131
+ elseif killsOnExpiration and not self[140] then
1132
+ self[140] = true
1082
1133
  end
1083
1134
  end
1084
1135
  },
@@ -1089,17 +1140,17 @@ __TS__SetDescriptor(
1089
1140
  "explodesOnExpiration",
1090
1141
  {
1091
1142
  get = function(self)
1092
- local ____self__140_59 = self[140]
1093
- if ____self__140_59 == nil then
1094
- ____self__140_59 = false
1143
+ local ____self__141_58 = self[141]
1144
+ if ____self__141_58 == nil then
1145
+ ____self__141_58 = false
1095
1146
  end
1096
- return ____self__140_59
1147
+ return ____self__141_58
1097
1148
  end,
1098
1149
  set = function(self, killsOnExpiration)
1099
- if not killsOnExpiration and self[140] then
1100
- self[140] = nil
1101
- elseif killsOnExpiration and not self[140] then
1102
- self[140] = true
1150
+ if not killsOnExpiration and self[141] then
1151
+ self[141] = nil
1152
+ elseif killsOnExpiration and not self[141] then
1153
+ self[141] = true
1103
1154
  end
1104
1155
  end
1105
1156
  },
@@ -1208,6 +1259,19 @@ __TS__SetDescriptor(
1208
1259
  },
1209
1260
  true
1210
1261
  )
1262
+ __TS__SetDescriptor(
1263
+ Buff.prototype,
1264
+ "manaRegenerationRateIncreaseFactor",
1265
+ {
1266
+ get = function(self)
1267
+ return self:getUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR)
1268
+ end,
1269
+ set = function(self, manaRegenerationRateIncreaseFactor)
1270
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR, manaRegenerationRateIncreaseFactor)
1271
+ end
1272
+ },
1273
+ true
1274
+ )
1211
1275
  __TS__SetDescriptor(
1212
1276
  Buff.prototype,
1213
1277
  "duration",
@@ -1221,13 +1285,13 @@ __TS__SetDescriptor(
1221
1285
  "remainingDuration",
1222
1286
  {
1223
1287
  get = function(self)
1224
- local ____opt_60 = self._timer
1225
- return ____opt_60 and ____opt_60.remaining or 0
1288
+ local ____opt_59 = self._timer
1289
+ return ____opt_59 and ____opt_59.remaining or 0
1226
1290
  end,
1227
1291
  set = function(self, remainingDuration)
1228
- local ____remainingDuration_64 = remainingDuration
1229
- local ____opt_62 = self._timer
1230
- local remainingDurationDelta = ____remainingDuration_64 - (____opt_62 and ____opt_62.remaining or 0)
1292
+ local ____remainingDuration_63 = remainingDuration
1293
+ local ____opt_61 = self._timer
1294
+ local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1231
1295
  if remainingDurationDelta ~= 0 then
1232
1296
  self[103] = self[103] + remainingDurationDelta
1233
1297
  if remainingDuration <= 0 then
@@ -1242,7 +1306,7 @@ __TS__SetDescriptor(
1242
1306
  remainingDuration,
1243
1307
  self._spellStealPriority,
1244
1308
  self._learnLevelMinimum,
1245
- self[141]
1309
+ self[142]
1246
1310
  ) then
1247
1311
  local timer = self._timer
1248
1312
  if timer == nil then
@@ -1257,7 +1321,34 @@ __TS__SetDescriptor(
1257
1321
  },
1258
1322
  true
1259
1323
  )
1260
- Buff.destroyEvent = buffDestroyEvent;
1324
+ __TS__SetDescriptor(
1325
+ Buff.prototype,
1326
+ "abilityCooldownFactor",
1327
+ {
1328
+ get = function(self)
1329
+ return self[143] or 1
1330
+ end,
1331
+ set = function(self, abilityCooldownFactor)
1332
+ local previousAbilityCooldownModifier = self[144]
1333
+ if previousAbilityCooldownModifier then
1334
+ for ____, ability in ipairs(self._unit.abilities) do
1335
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1336
+ end
1337
+ end
1338
+ local function modifier(ability, level, cooldown)
1339
+ return cooldown * abilityCooldownFactor
1340
+ end
1341
+ for ____, ability in ipairs(self._unit.abilities) do
1342
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1343
+ end
1344
+ self[144] = modifier
1345
+ self[143] = abilityCooldownFactor
1346
+ end
1347
+ },
1348
+ true
1349
+ )
1350
+ Buff.createdEvent = buffCreatedEvent
1351
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1261
1352
  (function(self)
1262
1353
  local function destroyBuffIfNeeded(buff)
1263
1354
  if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
@@ -1311,5 +1402,11 @@ Buff.destroyEvent = buffDestroyEvent;
1311
1402
  ____exports.checkBuffs(target)
1312
1403
  end
1313
1404
  )
1405
+ buffCreatedEvent:addListener(function(buff)
1406
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1407
+ end)
1408
+ buffBeingDestroyedEvent:addListener(function(buff)
1409
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1410
+ end)
1314
1411
  end)(Buff)
1315
1412
  return ____exports