warscript 0.0.1-dev.a73c979 → 0.0.1-dev.a856ae3

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 (153) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +71 -22
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  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.lua +1 -1
  11. package/core/types/tileCell.d.ts +11 -1
  12. package/core/types/tileCell.lua +97 -0
  13. package/core/types/timer.d.ts +3 -1
  14. package/core/types/timer.lua +27 -2
  15. package/decl/native.d.ts +6 -4
  16. package/destroyable.d.ts +1 -0
  17. package/destroyable.lua +9 -0
  18. package/engine/behavior.d.ts +12 -1
  19. package/engine/behavior.lua +199 -65
  20. package/engine/behaviour/ability/apply-buff.lua +4 -4
  21. package/engine/behaviour/ability/damage.d.ts +3 -0
  22. package/engine/behaviour/ability/damage.lua +8 -2
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +11 -6
  28. package/engine/behaviour/ability.lua +31 -1
  29. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  31. package/engine/behaviour/unit.d.ts +15 -5
  32. package/engine/behaviour/unit.lua +126 -22
  33. package/engine/buff.d.ts +65 -21
  34. package/engine/buff.lua +362 -179
  35. package/engine/internal/ability.d.ts +3 -1
  36. package/engine/internal/ability.lua +26 -9
  37. package/engine/internal/item/fields.d.ts +12 -0
  38. package/engine/internal/item/fields.lua +33 -0
  39. package/engine/internal/item+owner.lua +12 -6
  40. package/engine/internal/item.d.ts +9 -15
  41. package/engine/internal/item.lua +46 -69
  42. package/engine/internal/mechanics/cast-ability.lua +6 -3
  43. package/engine/internal/misc/frame-coordinates.lua +21 -0
  44. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  45. package/engine/internal/misc/get-terrain-z.lua +11 -0
  46. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  47. package/engine/internal/misc/player-local-handle.lua +5 -0
  48. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  49. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  50. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  51. package/engine/internal/object-data/health-bonus.lua +16 -0
  52. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  53. package/engine/internal/object-data/mana-bonus.lua +16 -0
  54. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  55. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  56. package/engine/internal/unit/ability.d.ts +14 -14
  57. package/engine/internal/unit/ability.lua +72 -45
  58. package/engine/internal/unit/attributes.d.ts +17 -0
  59. package/engine/internal/unit/attributes.lua +46 -0
  60. package/engine/internal/unit/bonus.d.ts +6 -0
  61. package/engine/internal/unit/bonus.lua +33 -3
  62. package/engine/internal/unit/fly-height.d.ts +7 -0
  63. package/engine/internal/unit/fly-height.lua +20 -0
  64. package/engine/internal/unit/interrupts.d.ts +12 -0
  65. package/engine/internal/unit/interrupts.lua +28 -0
  66. package/engine/internal/unit/main-selected.lua +12 -27
  67. package/engine/internal/unit/range-event.d.ts +12 -0
  68. package/engine/internal/unit/range-event.lua +90 -0
  69. package/engine/internal/unit/scale.d.ts +7 -0
  70. package/engine/internal/unit/scale.lua +20 -0
  71. package/engine/internal/unit+ability.lua +10 -1
  72. package/engine/internal/unit+bonus.lua +3 -3
  73. package/engine/internal/unit-missile-launch.lua +52 -14
  74. package/engine/internal/unit.d.ts +19 -24
  75. package/engine/internal/unit.lua +179 -200
  76. package/engine/local-client.d.ts +7 -0
  77. package/engine/local-client.lua +86 -1
  78. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  79. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  81. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  82. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  83. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  84. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  85. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  86. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  87. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  89. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  91. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  92. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  93. package/engine/object-data/entry/ability-type.d.ts +2 -0
  94. package/engine/object-data/entry/ability-type.lua +89 -8
  95. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  96. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  97. package/engine/object-data/entry/destructible-type.lua +155 -0
  98. package/engine/object-data/entry/unit-type.d.ts +15 -2
  99. package/engine/object-data/entry/unit-type.lua +135 -33
  100. package/engine/object-field/ability.d.ts +3 -3
  101. package/engine/object-field/ability.lua +9 -8
  102. package/engine/object-field/item.d.ts +22 -0
  103. package/engine/object-field/item.lua +118 -0
  104. package/engine/object-field/unit.d.ts +20 -5
  105. package/engine/object-field/unit.lua +61 -0
  106. package/engine/object-field.d.ts +12 -4
  107. package/engine/object-field.lua +273 -126
  108. package/engine/random.d.ts +10 -0
  109. package/engine/random.lua +21 -0
  110. package/engine/standard/fields/ability.d.ts +2 -2
  111. package/engine/standard/fields/ability.lua +2 -2
  112. package/engine/standard/fields/item.d.ts +4 -0
  113. package/engine/standard/fields/item.lua +6 -0
  114. package/engine/standard/fields/unit.d.ts +11 -3
  115. package/engine/standard/fields/unit.lua +15 -2
  116. package/engine/synchronization.d.ts +11 -0
  117. package/engine/synchronization.lua +77 -0
  118. package/engine/text-tag.d.ts +1 -1
  119. package/engine/text-tag.lua +92 -17
  120. package/engine/unit.d.ts +5 -0
  121. package/engine/unit.lua +5 -0
  122. package/lualib_bundle.lua +1 -1
  123. package/math.d.ts +2 -0
  124. package/math.lua +14 -0
  125. package/net/socket.lua +1 -1
  126. package/objutil/buff.lua +10 -8
  127. package/objutil/object.lua +1 -1
  128. package/operation.lua +1 -4
  129. package/package.json +5 -5
  130. package/patch-lua.lua +15 -0
  131. package/patch-lualib.lua +1 -1
  132. package/utility/arrays.d.ts +1 -0
  133. package/utility/arrays.lua +8 -0
  134. package/utility/callback-array.d.ts +17 -0
  135. package/utility/callback-array.lua +61 -0
  136. package/utility/functions.d.ts +2 -0
  137. package/utility/functions.lua +7 -0
  138. package/utility/linked-map.d.ts +35 -0
  139. package/utility/linked-map.lua +107 -0
  140. package/utility/linked-set.d.ts +4 -1
  141. package/utility/linked-set.lua +46 -1
  142. package/utility/lua-maps.d.ts +11 -2
  143. package/utility/lua-maps.lua +33 -2
  144. package/utility/lua-sets.d.ts +1 -0
  145. package/utility/lua-sets.lua +4 -0
  146. package/utility/records.lua +20 -1
  147. package/utility/types.d.ts +3 -0
  148. package/utility/unordered-map.d.ts +27 -0
  149. package/utility/unordered-map.lua +99 -0
  150. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  151. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  152. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  153. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
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 = {}
@@ -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,11 +127,15 @@ 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,
126
136
  killsOnExpiration = true,
127
- explodesOnExpiration = true
137
+ explodesOnExpiration = true,
138
+ abilityCooldownFactor = true
128
139
  }
129
140
  local function resolveEnumValue(ability, level, value)
130
141
  if value == nil or type(value) == "number" then
@@ -175,6 +186,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
175
186
  end
176
187
  end
177
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
178
190
  "turnsIntoGhost",
179
191
  "stuns",
180
192
  "ignoresStunImmunity",
@@ -187,8 +199,11 @@ local buffNumberParameters = {
187
199
  "durationIncreaseOnAutoAttack",
188
200
  "attackSpeedIncreaseFactor",
189
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
190
203
  "evasionProbability",
191
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
192
207
  "damageFactor",
193
208
  "receivedDamageFactor",
194
209
  "maximumAutoAttackCount",
@@ -201,7 +216,10 @@ local buffNumberParameters = {
201
216
  "healingPerInterval",
202
217
  "healingOverDuration",
203
218
  "damageOnExpiration",
204
- "healingOnExpiration"
219
+ "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
222
+ "abilityCooldownFactor"
205
223
  }
206
224
  local unsuccessfulApplicationMarker = {}
207
225
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -320,33 +338,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
320
338
  local polarity
321
339
  local resistanceType
322
340
  local ability
341
+ local abilityBehavior
323
342
  if type(typeIdOrTypeIds) ~= "number" then
324
343
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
325
344
  polarity = resistanceTypeOrPolarity
326
345
  resistanceType = abilityOrParametersOrResistanceType
327
- 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
328
350
  ability = parametersOrAbility
329
- else
330
- ability = nil
351
+ elseif parametersOrAbility ~= nil then
331
352
  parameters = parametersOrAbility
332
353
  end
333
354
  else
334
355
  typeId = typeIdOrTypeIds
335
356
  polarity = polarityOrTypeIdSelectionPolicy
336
357
  resistanceType = resistanceTypeOrPolarity
337
- 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
338
363
  ability = abilityOrParametersOrResistanceType
339
364
  parameters = parametersOrAbility
340
- else
341
- ability = nil
365
+ elseif abilityOrParametersOrResistanceType ~= nil then
342
366
  parameters = abilityOrParametersOrResistanceType
367
+ else
368
+ parameters = parametersOrAbility
343
369
  end
344
370
  end
371
+ self.sourceAbilityBehavior = abilityBehavior
345
372
  self.typeId = typeId
346
- if not (__TS__InstanceOf(ability, Ability) or ability == nil) then
347
- parameters = ability
348
- ability = nil
349
- end
350
373
  local defaultParameters = self.constructor.defaultParameters
351
374
  local level = parameters and parameters.level or defaultParameters.level
352
375
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -374,14 +397,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
374
397
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
375
398
  if missProbability ~= nil then
376
399
  missProbability = resolveNumberValue(ability, level, missProbability)
377
- self[142] = missProbability
400
+ self[146] = missProbability
378
401
  end
379
402
  local buffByTypeId = buffByTypeIdByUnit[_unit]
380
403
  if buffByTypeId == nil then
381
404
  buffByTypeId = {}
382
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
383
406
  end
384
- local ____opt_15 = buffByTypeId[typeId]
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
385
409
  if ____opt_15 ~= nil then
386
410
  ____opt_15:destroy()
387
411
  end
@@ -457,24 +481,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
457
481
  abilityTypeIds = {}
458
482
  self._abilityTypeIds = abilityTypeIds
459
483
  end
460
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
484
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
485
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
461
486
  local addedAbility = _unit:addAbility(abilityTypeId)
462
487
  if addedAbility ~= nil then
463
488
  _unit:makeAbilityPermanent(abilityTypeId, true)
464
489
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
465
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
466
- if abilityParameterKey == "isButtonVisible" then
467
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
468
- _unit:hideAbility(abilityTypeId, true)
469
- end
470
- elseif abilityParameterKey ~= "level" then
471
- abilityParameterKey:setValue(
472
- addedAbility,
473
- resolveNumberValue(ability, level, abilityParameterValue)
474
- )
475
- end
490
+ if abilityParameters.isButtonVisible == false then
491
+ _unit:hideAbility(abilityTypeId, true)
476
492
  end
477
- abilityTypeIds[abilityTypeId] = true
493
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
494
+ field[1]:setValue(
495
+ addedAbility,
496
+ resolveNumberValue(ability, level, field[2])
497
+ )
498
+ end
499
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
478
500
  end
479
501
  end
480
502
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -486,18 +508,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
486
508
  self._behaviors = behaviors
487
509
  end
488
510
  end
489
- local additionalParameters = {}
490
- for key, value in pairs(parameters) do
491
- if not buffParametersKeys[key] then
492
- if ability then
493
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
494
- else
495
- 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
496
520
  end
497
521
  end
498
- end
499
- if (next(additionalParameters)) ~= nil then
500
- self.parameters = additionalParameters
522
+ if (next(additionalParameters)) ~= nil then
523
+ self.parameters = additionalParameters
524
+ end
501
525
  end
502
526
  end
503
527
  if duration ~= nil and duration > 0 then
@@ -509,64 +533,63 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
509
533
  self[100] = 1
510
534
  Event.invoke(buffCreatedEvent, self)
511
535
  end
512
- function Buff.prototype.getUnitBonus(self, bonusType)
513
- local ____opt_38 = self._bonusIdByBonusType
514
- local bonusId = ____opt_38 and ____opt_38[bonusType]
515
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
536
+ function Buff.prototype.onAbilityGained(self, ability)
537
+ if __TS__InstanceOf(ability, UnitAbility) then
538
+ local abilityCooldownModifier = self[148]
539
+ if abilityCooldownModifier then
540
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
541
+ end
542
+ end
516
543
  end
517
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
518
- local bonusIdByBonusType = self._bonusIdByBonusType
519
- if bonusIdByBonusType == nil then
520
- bonusIdByBonusType = {}
521
- self._bonusIdByBonusType = bonusIdByBonusType
544
+ function Buff.prototype.onAbilityLost(self, ability)
545
+ if __TS__InstanceOf(ability, UnitAbility) then
546
+ local abilityCooldownModifier = self[148]
547
+ if abilityCooldownModifier then
548
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
549
+ end
522
550
  end
523
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
524
551
  end
525
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)
526
571
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
527
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
572
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
528
573
  else
529
574
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
530
- local ____Effect_42 = Effect
531
- local ____Effect_flash_43 = Effect.flash
532
- local ____array_41 = __TS__SparseArrayNew(
533
- self[105],
534
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
535
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
536
- )
537
- local ____isWidgetProvided_40
575
+ local ____Effect_40 = Effect
576
+ local ____Effect_flash_41 = Effect.flash
577
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
578
+ local ____isWidgetProvided_38
538
579
  if isWidgetProvided then
539
- ____isWidgetProvided_40 = yOrParametersOrDuration
580
+ ____isWidgetProvided_38 = yOrParametersOrDuration
540
581
  else
541
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
582
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
542
583
  end
543
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
544
- ____Effect_flash_43(
545
- ____Effect_42,
546
- __TS__SparseArraySpread(____array_41)
584
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
585
+ ____Effect_flash_41(
586
+ ____Effect_40,
587
+ __TS__SparseArraySpread(____array_39)
547
588
  )
548
589
  end
549
590
  end
550
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
551
- local isWidgetProvided = type(widgetOrDuration) == "table"
552
- local ____Effect_46 = Effect
553
- local ____Effect_flash_47 = Effect.flash
554
- local ____array_45 = __TS__SparseArrayNew(
555
- self[106],
556
- isWidgetProvided and widgetOrDuration or self._unit,
557
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
558
- )
559
- local ____isWidgetProvided_44
560
- if isWidgetProvided then
561
- ____isWidgetProvided_44 = duration
562
- else
563
- ____isWidgetProvided_44 = widgetOrDuration
564
- end
565
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
566
- ____Effect_flash_47(
567
- ____Effect_46,
568
- __TS__SparseArraySpread(____array_45)
569
- )
591
+ function Buff.prototype.expire(self)
592
+ expireBuff(self)
570
593
  end
571
594
  function Buff.prototype.onCreate(self)
572
595
  end
@@ -596,31 +619,32 @@ function Buff.prototype.onDestroy(self)
596
619
  behavior:destroy()
597
620
  end
598
621
  end
599
- if self[139] then
622
+ local previousAbilityCooldownModifier = self[148]
623
+ if previousAbilityCooldownModifier then
624
+ for ____, ability in ipairs(self._unit.abilities) do
625
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
626
+ end
627
+ end
628
+ if self[143] then
600
629
  unit:decrementInvulnerabilityCounter()
601
630
  end
602
- if self[138] then
631
+ if self[142] then
603
632
  unit:decrementDisableAutoAttackCounter()
604
633
  end
605
- if self[136] then
606
- if self[137] then
607
- unit:decrementStunCounter()
634
+ if self[140] then
635
+ if self[141] then
636
+ unit:decrementForceStunCounter()
608
637
  end
609
638
  unit:decrementStunCounter()
610
639
  end
611
- if self[135] then
640
+ if self[139] then
612
641
  unit:decrementGhostCounter()
613
642
  end
614
643
  if self._abilityTypeIds ~= nil then
615
- for abilityTypeId in pairs(self._abilityTypeIds) do
644
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
616
645
  unit:removeAbility(abilityTypeId)
617
646
  end
618
647
  end
619
- if self._bonusIdByBonusType ~= nil then
620
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
621
- removeUnitBonus(unit, bonusType, bonusId)
622
- end
623
- end
624
648
  Event.invoke(buffBeingDestroyedEvent, self)
625
649
  self[100] = 3
626
650
  return UnitBehavior.prototype.onDestroy(self)
@@ -650,8 +674,8 @@ function Buff.apply(self, ...)
650
674
  end
651
675
  end
652
676
  function Buff.getByTypeId(self, unit, typeId)
653
- local ____opt_48 = buffByTypeIdByUnit[unit]
654
- local buff = ____opt_48 and ____opt_48[typeId]
677
+ local ____opt_42 = buffByTypeIdByUnit[unit]
678
+ local buff = ____opt_42 and ____opt_42[typeId]
655
679
  if __TS__InstanceOf(buff, self) then
656
680
  return buff
657
681
  end
@@ -665,9 +689,9 @@ function Buff.prototype.onExpiration(self)
665
689
  if self[121] ~= nil then
666
690
  (self[102] or unit):healTarget(unit, self[120] or 0)
667
691
  end
668
- if self[141] then
692
+ if self[145] then
669
693
  unit:explode()
670
- elseif self[140] then
694
+ elseif self[144] then
671
695
  unit:kill()
672
696
  end
673
697
  end
@@ -722,6 +746,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
722
746
  end
723
747
  function Buff.prototype.onDamageReceived(self, source, event)
724
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
725
761
  local damageReceivedEventCount = (self[133] or 0) + 1
726
762
  self[133] = damageReceivedEventCount
727
763
  if damageReceivedEventCount == self[134] then
@@ -809,8 +845,8 @@ __TS__SetDescriptor(
809
845
  return
810
846
  end
811
847
  self[112] = damageInterval
812
- local ____opt_50 = self._timer
813
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
848
+ local ____opt_45 = self._timer
849
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
814
850
  local timer = self[114]
815
851
  if timer == nil then
816
852
  timer = Timer:create()
@@ -889,8 +925,8 @@ __TS__SetDescriptor(
889
925
  return
890
926
  end
891
927
  self[117] = healingInterval
892
- local ____opt_52 = self._timer
893
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
928
+ local ____opt_47 = self._timer
929
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
894
930
  local timer = self[119]
895
931
  if timer == nil then
896
932
  timer = Timer:create()
@@ -971,24 +1007,50 @@ __TS__SetDescriptor(
971
1007
  },
972
1008
  true
973
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
+ )
974
1036
  __TS__SetDescriptor(
975
1037
  Buff.prototype,
976
1038
  "turnsIntoGhost",
977
1039
  {
978
1040
  get = function(self)
979
- local ____self__135_54 = self[135]
980
- if ____self__135_54 == nil then
981
- ____self__135_54 = false
1041
+ local ____self__139_49 = self[139]
1042
+ if ____self__139_49 == nil then
1043
+ ____self__139_49 = false
982
1044
  end
983
- return ____self__135_54
1045
+ return ____self__139_49
984
1046
  end,
985
1047
  set = function(self, turnsIntoGhost)
986
- if not turnsIntoGhost and self[135] then
1048
+ if not turnsIntoGhost and self[139] then
987
1049
  self.object:decrementGhostCounter()
988
- self[135] = nil
989
- elseif turnsIntoGhost and not self[135] then
1050
+ self[139] = nil
1051
+ elseif turnsIntoGhost and not self[139] then
990
1052
  self.object:incrementGhostCounter()
991
- self[135] = true
1053
+ self[139] = true
992
1054
  end
993
1055
  end
994
1056
  },
@@ -999,25 +1061,25 @@ __TS__SetDescriptor(
999
1061
  "stuns",
1000
1062
  {
1001
1063
  get = function(self)
1002
- local ____self__136_55 = self[136]
1003
- if ____self__136_55 == nil then
1004
- ____self__136_55 = false
1064
+ local ____self__140_50 = self[140]
1065
+ if ____self__140_50 == nil then
1066
+ ____self__140_50 = false
1005
1067
  end
1006
- return ____self__136_55
1068
+ return ____self__140_50
1007
1069
  end,
1008
1070
  set = function(self, stuns)
1009
- if not stuns and self[136] then
1010
- if self[137] then
1011
- self.object:decrementStunCounter()
1071
+ if not stuns and self[140] then
1072
+ if self[141] then
1073
+ self.object:decrementForceStunCounter()
1012
1074
  end
1013
1075
  self.object:decrementStunCounter()
1014
- self[136] = nil
1015
- elseif stuns and not self[136] then
1016
- if self[137] then
1017
- self.object:incrementStunCounter()
1076
+ self[140] = nil
1077
+ elseif stuns and not self[140] then
1078
+ if self[141] then
1079
+ self.object:incrementForceStunCounter()
1018
1080
  end
1019
1081
  self.object:incrementStunCounter()
1020
- self[136] = true
1082
+ self[140] = true
1021
1083
  end
1022
1084
  end
1023
1085
  },
@@ -1028,23 +1090,23 @@ __TS__SetDescriptor(
1028
1090
  "ignoresStunImmunity",
1029
1091
  {
1030
1092
  get = function(self)
1031
- local ____self__137_56 = self[137]
1032
- if ____self__137_56 == nil then
1033
- ____self__137_56 = false
1093
+ local ____self__141_51 = self[141]
1094
+ if ____self__141_51 == nil then
1095
+ ____self__141_51 = false
1034
1096
  end
1035
- return ____self__137_56
1097
+ return ____self__141_51
1036
1098
  end,
1037
1099
  set = function(self, ignoresStunImmunity)
1038
- if not ignoresStunImmunity and self[137] then
1039
- if self[136] then
1040
- self.object:decrementStunCounter()
1100
+ if not ignoresStunImmunity and self[141] then
1101
+ if self[140] then
1102
+ self.object:decrementForceStunCounter()
1041
1103
  end
1042
- self[137] = nil
1043
- elseif ignoresStunImmunity and not self[137] then
1044
- if self[136] then
1045
- self.object:incrementStunCounter()
1104
+ self[141] = nil
1105
+ elseif ignoresStunImmunity and not self[141] then
1106
+ if self[140] then
1107
+ self.object:incrementForceStunCounter()
1046
1108
  end
1047
- self[137] = true
1109
+ self[141] = true
1048
1110
  end
1049
1111
  end
1050
1112
  },
@@ -1055,19 +1117,19 @@ __TS__SetDescriptor(
1055
1117
  "disablesAutoAttack",
1056
1118
  {
1057
1119
  get = function(self)
1058
- local ____self__138_57 = self[138]
1059
- if ____self__138_57 == nil then
1060
- ____self__138_57 = false
1120
+ local ____self__142_52 = self[142]
1121
+ if ____self__142_52 == nil then
1122
+ ____self__142_52 = false
1061
1123
  end
1062
- return ____self__138_57
1124
+ return ____self__142_52
1063
1125
  end,
1064
1126
  set = function(self, disablesAutoAttack)
1065
- if not disablesAutoAttack and self[138] then
1127
+ if not disablesAutoAttack and self[142] then
1066
1128
  self.object:decrementDisableAutoAttackCounter()
1067
- self[138] = nil
1068
- elseif disablesAutoAttack and not self[138] then
1129
+ self[142] = nil
1130
+ elseif disablesAutoAttack and not self[142] then
1069
1131
  self.object:incrementDisableAutoAttackCounter()
1070
- self[138] = true
1132
+ self[142] = true
1071
1133
  end
1072
1134
  end
1073
1135
  },
@@ -1078,19 +1140,19 @@ __TS__SetDescriptor(
1078
1140
  "providesInvulnerability",
1079
1141
  {
1080
1142
  get = function(self)
1081
- local ____self__139_58 = self[139]
1082
- if ____self__139_58 == nil then
1083
- ____self__139_58 = false
1143
+ local ____self__143_53 = self[143]
1144
+ if ____self__143_53 == nil then
1145
+ ____self__143_53 = false
1084
1146
  end
1085
- return ____self__139_58
1147
+ return ____self__143_53
1086
1148
  end,
1087
1149
  set = function(self, providesInvulnerability)
1088
- if not providesInvulnerability and self[139] then
1150
+ if not providesInvulnerability and self[143] then
1089
1151
  self.object:decrementInvulnerabilityCounter()
1090
- self[139] = nil
1091
- elseif providesInvulnerability and not self[139] then
1152
+ self[143] = nil
1153
+ elseif providesInvulnerability and not self[143] then
1092
1154
  self.object:incrementInvulnerabilityCounter()
1093
- self[139] = true
1155
+ self[143] = true
1094
1156
  end
1095
1157
  end
1096
1158
  },
@@ -1101,17 +1163,17 @@ __TS__SetDescriptor(
1101
1163
  "killsOnExpiration",
1102
1164
  {
1103
1165
  get = function(self)
1104
- local ____self__140_59 = self[140]
1105
- if ____self__140_59 == nil then
1106
- ____self__140_59 = false
1166
+ local ____self__144_54 = self[144]
1167
+ if ____self__144_54 == nil then
1168
+ ____self__144_54 = false
1107
1169
  end
1108
- return ____self__140_59
1170
+ return ____self__144_54
1109
1171
  end,
1110
1172
  set = function(self, killsOnExpiration)
1111
- if not killsOnExpiration and self[140] then
1112
- self[140] = nil
1113
- elseif killsOnExpiration and not self[140] then
1114
- 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
1115
1177
  end
1116
1178
  end
1117
1179
  },
@@ -1122,17 +1184,17 @@ __TS__SetDescriptor(
1122
1184
  "explodesOnExpiration",
1123
1185
  {
1124
1186
  get = function(self)
1125
- local ____self__141_60 = self[141]
1126
- if ____self__141_60 == nil then
1127
- ____self__141_60 = false
1187
+ local ____self__145_55 = self[145]
1188
+ if ____self__145_55 == nil then
1189
+ ____self__145_55 = false
1128
1190
  end
1129
- return ____self__141_60
1191
+ return ____self__145_55
1130
1192
  end,
1131
1193
  set = function(self, killsOnExpiration)
1132
- if not killsOnExpiration and self[141] then
1133
- self[141] = nil
1134
- elseif killsOnExpiration and not self[141] then
1135
- 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
1136
1198
  end
1137
1199
  end
1138
1200
  },
@@ -1241,12 +1303,39 @@ __TS__SetDescriptor(
1241
1303
  },
1242
1304
  true
1243
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
+ )
1244
1319
  __TS__SetDescriptor(
1245
1320
  Buff.prototype,
1246
1321
  "duration",
1247
- {get = function(self)
1248
- return self[103]
1249
- 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
+ },
1250
1339
  true
1251
1340
  )
1252
1341
  __TS__SetDescriptor(
@@ -1254,13 +1343,13 @@ __TS__SetDescriptor(
1254
1343
  "remainingDuration",
1255
1344
  {
1256
1345
  get = function(self)
1257
- local ____opt_61 = self._timer
1258
- return ____opt_61 and ____opt_61.remaining or 0
1346
+ local ____opt_56 = self._timer
1347
+ return ____opt_56 and ____opt_56.remaining or 0
1259
1348
  end,
1260
1349
  set = function(self, remainingDuration)
1261
- local ____remainingDuration_65 = remainingDuration
1262
- local ____opt_63 = self._timer
1263
- local remainingDurationDelta = ____remainingDuration_65 - (____opt_63 and ____opt_63.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)
1264
1353
  if remainingDurationDelta ~= 0 then
1265
1354
  self[103] = self[103] + remainingDurationDelta
1266
1355
  if remainingDuration <= 0 then
@@ -1275,7 +1364,7 @@ __TS__SetDescriptor(
1275
1364
  remainingDuration,
1276
1365
  self._spellStealPriority,
1277
1366
  self._learnLevelMinimum,
1278
- self[142]
1367
+ self[146]
1279
1368
  ) then
1280
1369
  local timer = self._timer
1281
1370
  if timer == nil then
@@ -1290,6 +1379,97 @@ __TS__SetDescriptor(
1290
1379
  },
1291
1380
  true
1292
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
+ )
1447
+ __TS__SetDescriptor(
1448
+ Buff.prototype,
1449
+ "abilityCooldownFactor",
1450
+ {
1451
+ get = function(self)
1452
+ return self[147] or 1
1453
+ end,
1454
+ set = function(self, abilityCooldownFactor)
1455
+ local previousAbilityCooldownModifier = self[148]
1456
+ if previousAbilityCooldownModifier then
1457
+ for ____, ability in ipairs(self._unit.abilities) do
1458
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1459
+ end
1460
+ end
1461
+ local function modifier(ability, level, cooldown)
1462
+ return cooldown * abilityCooldownFactor
1463
+ end
1464
+ for ____, ability in ipairs(self._unit.abilities) do
1465
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1466
+ end
1467
+ self[148] = modifier
1468
+ self[147] = abilityCooldownFactor
1469
+ end
1470
+ },
1471
+ true
1472
+ )
1293
1473
  Buff.createdEvent = buffCreatedEvent
1294
1474
  Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1295
1475
  (function(self)
@@ -1348,5 +1528,8 @@ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1348
1528
  buffCreatedEvent:addListener(function(buff)
1349
1529
  UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1350
1530
  end)
1531
+ buffBeingDestroyedEvent:addListener(function(buff)
1532
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1533
+ end)
1351
1534
  end)(Buff)
1352
1535
  return ____exports