warscript 0.0.1-dev.671d3cf → 0.0.1-dev.685e1bc

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 (266) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +4 -0
  8. package/core/types/frame.lua +142 -22
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/player.d.ts +17 -1
  12. package/core/types/player.lua +70 -24
  13. package/core/types/playerCamera.d.ts +2 -0
  14. package/core/types/playerCamera.lua +123 -5
  15. package/core/types/sound.d.ts +17 -24
  16. package/core/types/sound.lua +100 -25
  17. package/core/types/tileCell.d.ts +11 -1
  18. package/core/types/tileCell.lua +97 -0
  19. package/core/types/timer.d.ts +9 -8
  20. package/core/types/timer.lua +45 -23
  21. package/core/util.d.ts +1 -1
  22. package/core/util.lua +18 -1
  23. package/decl/native.d.ts +846 -790
  24. package/destroyable.d.ts +1 -0
  25. package/destroyable.lua +9 -0
  26. package/engine/behavior.d.ts +16 -3
  27. package/engine/behavior.lua +233 -73
  28. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  29. package/engine/behaviour/ability/always-enabled.lua +31 -0
  30. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  31. package/engine/behaviour/ability/apply-buff.lua +36 -4
  32. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  33. package/engine/behaviour/ability/damage.d.ts +12 -3
  34. package/engine/behaviour/ability/damage.lua +33 -39
  35. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  36. package/engine/behaviour/ability/emulate-impact.lua +44 -0
  37. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  38. package/engine/behaviour/ability/instant-impact.lua +4 -19
  39. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  40. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  41. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  42. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  43. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  44. package/engine/behaviour/ability/restore-mana.lua +6 -6
  45. package/engine/behaviour/ability.d.ts +28 -7
  46. package/engine/behaviour/ability.lua +137 -43
  47. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  48. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  49. package/engine/behaviour/unit.d.ts +45 -2
  50. package/engine/behaviour/unit.lua +289 -6
  51. package/engine/buff.d.ts +141 -55
  52. package/engine/buff.lua +638 -290
  53. package/engine/internal/ability.d.ts +23 -14
  54. package/engine/internal/ability.lua +129 -85
  55. package/engine/internal/item/ability.lua +162 -4
  56. package/engine/internal/item/fields.d.ts +12 -0
  57. package/engine/internal/item/fields.lua +33 -0
  58. package/engine/internal/item+owner.lua +12 -6
  59. package/engine/internal/item.d.ts +18 -18
  60. package/engine/internal/item.lua +208 -94
  61. package/engine/internal/mechanics/ability-duration.lua +1 -1
  62. package/engine/internal/mechanics/cast-ability.lua +6 -3
  63. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  64. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  65. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  66. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  67. package/engine/internal/misc/frame-coordinates.lua +21 -0
  68. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  69. package/engine/internal/misc/get-terrain-z.lua +11 -0
  70. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  71. package/engine/internal/misc/player-local-handle.lua +5 -0
  72. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  73. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  74. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  75. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  76. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  77. package/engine/internal/object-data/evasion-probability.lua +16 -0
  78. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  79. package/engine/internal/object-data/health-bonus.lua +16 -0
  80. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  81. package/engine/internal/object-data/mana-bonus.lua +16 -0
  82. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  83. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  84. package/engine/internal/unit/ability.d.ts +45 -1
  85. package/engine/internal/unit/ability.lua +128 -17
  86. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  87. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  88. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  89. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  90. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  91. package/engine/internal/unit/allowed-targets.lua +9 -1
  92. package/engine/internal/unit/attributes.d.ts +17 -0
  93. package/engine/internal/unit/attributes.lua +46 -0
  94. package/engine/internal/unit/bonus.d.ts +12 -2
  95. package/engine/internal/unit/bonus.lua +56 -4
  96. package/engine/internal/unit/fly-height.d.ts +7 -0
  97. package/engine/internal/unit/fly-height.lua +20 -0
  98. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  99. package/engine/internal/unit/ignore-events-items.lua +5 -0
  100. package/engine/internal/unit/interrupts.d.ts +12 -0
  101. package/engine/internal/unit/interrupts.lua +28 -0
  102. package/engine/internal/unit/item.d.ts +24 -0
  103. package/engine/internal/unit/item.lua +78 -0
  104. package/engine/internal/unit/main-selected.d.ts +13 -0
  105. package/engine/internal/unit/main-selected.lua +36 -0
  106. package/engine/internal/unit/order.d.ts +20 -0
  107. package/engine/internal/unit/order.lua +136 -0
  108. package/engine/internal/unit/range-event.d.ts +12 -0
  109. package/engine/internal/unit/range-event.lua +90 -0
  110. package/engine/internal/unit/scale.d.ts +7 -0
  111. package/engine/internal/unit/scale.lua +20 -0
  112. package/engine/internal/unit+ability.lua +12 -3
  113. package/engine/internal/unit+bonus.lua +3 -3
  114. package/engine/internal/unit+damage.d.ts +2 -11
  115. package/engine/internal/unit+damage.lua +10 -14
  116. package/engine/internal/unit+spellSteal.lua +1 -2
  117. package/engine/internal/unit-missile-launch.lua +70 -13
  118. package/engine/internal/unit.d.ts +64 -30
  119. package/engine/internal/unit.lua +490 -285
  120. package/engine/internal/utility.lua +12 -0
  121. package/engine/lightning.d.ts +12 -5
  122. package/engine/lightning.lua +48 -14
  123. package/engine/local-client.d.ts +14 -2
  124. package/engine/local-client.lua +168 -1
  125. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  126. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  127. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  128. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  129. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  130. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  131. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  132. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  133. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  134. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  135. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  136. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  137. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  138. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  139. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  140. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  141. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  142. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  143. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  144. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  145. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  146. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  147. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  148. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  149. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  150. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  151. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  152. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  153. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  154. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  155. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  156. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  157. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  158. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  159. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  160. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  161. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  162. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  163. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  164. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  165. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  166. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  167. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  168. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  169. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  170. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  171. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  172. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  173. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  174. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  175. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  176. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  177. package/engine/object-data/entry/ability-type/web.lua +52 -0
  178. package/engine/object-data/entry/ability-type.d.ts +21 -17
  179. package/engine/object-data/entry/ability-type.lua +177 -40
  180. package/engine/object-data/entry/buff-type/applicable.lua +122 -137
  181. package/engine/object-data/entry/buff-type.d.ts +6 -12
  182. package/engine/object-data/entry/buff-type.lua +13 -29
  183. package/engine/object-data/entry/destructible-type.d.ts +28 -2
  184. package/engine/object-data/entry/destructible-type.lua +155 -0
  185. package/engine/object-data/entry/item-type.d.ts +15 -1
  186. package/engine/object-data/entry/item-type.lua +93 -2
  187. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  188. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  189. package/engine/object-data/entry/sound-preset.lua +140 -0
  190. package/engine/object-data/entry/unit-type.d.ts +25 -5
  191. package/engine/object-data/entry/unit-type.lua +258 -93
  192. package/engine/object-data/entry/upgrade.d.ts +1 -1
  193. package/engine/object-data/entry/upgrade.lua +4 -4
  194. package/engine/object-data/entry.d.ts +16 -14
  195. package/engine/object-data/entry.lua +60 -32
  196. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  197. package/engine/object-field/ability.d.ts +28 -5
  198. package/engine/object-field/ability.lua +61 -7
  199. package/engine/object-field/item.d.ts +22 -0
  200. package/engine/object-field/item.lua +118 -0
  201. package/engine/object-field/unit.d.ts +72 -3
  202. package/engine/object-field/unit.lua +268 -7
  203. package/engine/object-field.d.ts +26 -7
  204. package/engine/object-field.lua +362 -117
  205. package/engine/random.d.ts +10 -0
  206. package/engine/random.lua +21 -0
  207. package/engine/standard/entries/buff-type.d.ts +3 -0
  208. package/engine/standard/entries/buff-type.lua +3 -0
  209. package/engine/standard/entries/sound-preset.d.ts +10 -0
  210. package/engine/standard/entries/sound-preset.lua +10 -0
  211. package/engine/standard/fields/ability.d.ts +4 -2
  212. package/engine/standard/fields/ability.lua +4 -2
  213. package/engine/standard/fields/item.d.ts +4 -0
  214. package/engine/standard/fields/item.lua +6 -0
  215. package/engine/standard/fields/unit.d.ts +12 -0
  216. package/engine/standard/fields/unit.lua +20 -0
  217. package/engine/synchronization.d.ts +11 -0
  218. package/engine/synchronization.lua +77 -0
  219. package/engine/text-tag.d.ts +36 -2
  220. package/engine/text-tag.lua +250 -10
  221. package/engine/unit.d.ts +9 -0
  222. package/engine/unit.lua +9 -0
  223. package/index.d.ts +1 -0
  224. package/index.lua +1 -0
  225. package/lualib_bundle.lua +1 -1
  226. package/math.d.ts +2 -0
  227. package/math.lua +14 -0
  228. package/net/socket.d.ts +7 -1
  229. package/net/socket.lua +45 -4
  230. package/network.d.ts +1 -0
  231. package/network.lua +3 -2
  232. package/objutil/buff.lua +12 -11
  233. package/objutil/object.lua +1 -1
  234. package/objutil/unit.lua +8 -0
  235. package/operation.lua +1 -4
  236. package/package.json +5 -5
  237. package/patch-lua.d.ts +0 -0
  238. package/patch-lua.lua +25 -0
  239. package/patch-lualib.lua +1 -1
  240. package/utility/arrays.d.ts +10 -1
  241. package/utility/arrays.lua +45 -3
  242. package/utility/callback-array.d.ts +17 -0
  243. package/utility/callback-array.lua +61 -0
  244. package/utility/functions.d.ts +8 -0
  245. package/utility/functions.lua +13 -0
  246. package/utility/lazy.d.ts +2 -0
  247. package/utility/lazy.lua +14 -0
  248. package/utility/linked-map.d.ts +35 -0
  249. package/utility/linked-map.lua +107 -0
  250. package/utility/linked-set.d.ts +16 -3
  251. package/utility/linked-set.lua +54 -3
  252. package/utility/lua-maps.d.ts +15 -2
  253. package/utility/lua-maps.lua +53 -2
  254. package/utility/lua-sets.d.ts +2 -0
  255. package/utility/lua-sets.lua +7 -0
  256. package/utility/records.lua +20 -1
  257. package/utility/reflection.lua +11 -7
  258. package/utility/types.d.ts +4 -0
  259. package/utility/unordered-map.d.ts +27 -0
  260. package/utility/unordered-map.lua +99 -0
  261. package/core/types/order.d.ts +0 -25
  262. package/core/types/order.lua +0 -55
  263. /package/engine/internal/{object-data/armor-increase.d.ts → misc/ability-disable-counter.d.ts} +0 -0
  264. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  265. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  266. /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,13 +29,11 @@ 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
37
35
  local ____preconditions = require("utility.preconditions")
36
+ local check = ____preconditions.check
38
37
  local checkNotNull = ____preconditions.checkNotNull
39
38
  local ____effect = require("core.types.effect")
40
39
  local Effect = ____effect.Effect
@@ -43,9 +42,22 @@ local BuffType = ____buff_2Dtype.BuffType
43
42
  local ____unit = require("engine.behaviour.unit")
44
43
  local UnitBehavior = ____unit.UnitBehavior
45
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
46
46
  local forEach = ____arrays.forEach
47
+ local ____event = require("event")
48
+ local Event = ____event.Event
47
49
  local ____ability_2Dduration = require("engine.internal.mechanics.ability-duration")
48
50
  local getAbilityDuration = ____ability_2Dduration.getAbilityDuration
51
+ local ____item = require("engine.internal.item")
52
+ local Item = ____item.Item
53
+ local ____destructable = require("core.types.destructable")
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
49
61
  local getUnitAbility = BlzGetUnitAbility
50
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
51
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -91,14 +103,20 @@ local buffParametersKeys = {
91
103
  damageIncrease = true,
92
104
  damageIncreaseFactor = true,
93
105
  armorIncrease = true,
94
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
95
108
  attackSpeedIncreaseFactor = true,
96
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
111
+ evasionProbability = true,
112
+ missProbability = true,
113
+ damageFactor = true,
97
114
  receivedDamageFactor = true,
98
115
  receivedMagicDamageFactor = true,
99
116
  durationIncreaseOnAutoAttack = true,
100
117
  maximumDuration = true,
101
118
  maximumRemainingDuration = true,
119
+ turnsIntoGhost = true,
102
120
  stuns = true,
103
121
  ignoresStunImmunity = true,
104
122
  providesStunImmunity = true,
@@ -107,12 +125,30 @@ local buffParametersKeys = {
107
125
  disablesAutoAttack = true,
108
126
  destroysOnDamage = true,
109
127
  maximumAutoAttackCount = true,
128
+ maximumDamageDealtEventCount = true,
129
+ maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
110
133
  uniqueGroup = true,
111
134
  damageOnExpiration = true,
112
135
  healingOnExpiration = true,
113
136
  killsOnExpiration = true,
114
- explodesOnExpiration = true
137
+ explodesOnExpiration = true,
138
+ abilityCooldownFactor = true
115
139
  }
140
+ local function resolveEnumValue(ability, level, value)
141
+ if value == nil or type(value) == "number" then
142
+ return value
143
+ end
144
+ if ability == nil then
145
+ error(
146
+ __TS__New(IllegalArgumentException),
147
+ 0
148
+ )
149
+ end
150
+ return value:getValue(ability, level or ability.level)
151
+ end
116
152
  local function resolveNumberValue(ability, level, value)
117
153
  if value == nil or type(value) == "number" then
118
154
  return value
@@ -150,6 +186,8 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
150
186
  end
151
187
  end
152
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
190
+ "turnsIntoGhost",
153
191
  "stuns",
154
192
  "ignoresStunImmunity",
155
193
  "disablesAutoAttack",
@@ -161,9 +199,16 @@ local buffNumberParameters = {
161
199
  "durationIncreaseOnAutoAttack",
162
200
  "attackSpeedIncreaseFactor",
163
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
203
+ "evasionProbability",
164
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
207
+ "damageFactor",
165
208
  "receivedDamageFactor",
166
209
  "maximumAutoAttackCount",
210
+ "maximumDamageDealtEventCount",
211
+ "maximumDamageReceivedEventCount",
167
212
  "damageInterval",
168
213
  "damagePerInterval",
169
214
  "damageOverDuration",
@@ -171,7 +216,10 @@ local buffNumberParameters = {
171
216
  "healingPerInterval",
172
217
  "healingOverDuration",
173
218
  "damageOnExpiration",
174
- "healingOnExpiration"
219
+ "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
222
+ "abilityCooldownFactor"
175
223
  }
176
224
  local unsuccessfulApplicationMarker = {}
177
225
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -198,7 +246,7 @@ local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
198
246
  return checkNotNull(firstNativeBuffTypeId)
199
247
  end
200
248
  local function destroyBuffIfItHasSameUniqueGroup(buff, uniqueGroup)
201
- if buff[103] == uniqueGroup then
249
+ if buff[104] == uniqueGroup then
202
250
  buff:destroy()
203
251
  end
204
252
  end
@@ -206,17 +254,17 @@ local function destroyBuff(buff)
206
254
  buff:destroy()
207
255
  end
208
256
  local function expireBuff(buff)
209
- local remainingDamageOverDuration = buff[112] or 0
210
- local remainingHealingOverDuration = buff[112] or 0
257
+ local remainingDamageOverDuration = buff[113] or 0
258
+ local remainingHealingOverDuration = buff[113] or 0
211
259
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
212
260
  buff:flashSpecialEffect()
213
261
  if remainingDamageOverDuration ~= 0 then
214
- (buff[101] or buff[100]):damageTarget(buff[100], remainingDamageOverDuration)
215
- buff[112] = nil
262
+ (buff[102] or buff[101]):damageTarget(buff[101], remainingDamageOverDuration)
263
+ buff[113] = nil
216
264
  end
217
265
  if remainingHealingOverDuration ~= 0 then
218
- (buff[101] or buff[100]):healTarget(buff[100], remainingHealingOverDuration)
219
- buff[117] = nil
266
+ (buff[102] or buff[101]):healTarget(buff[101], remainingHealingOverDuration)
267
+ buff[118] = nil
220
268
  end
221
269
  end
222
270
  Timer:run(destroyBuff, buff)
@@ -224,56 +272,58 @@ local function expireBuff(buff)
224
272
  end
225
273
  local function buffDamageIntervalInitialTimerCallback(buff)
226
274
  buffDamageIntervalTimerCallback(buff)
227
- local timer = buff[113]
228
- local damageInterval = buff[111]
275
+ local timer = buff[114]
276
+ local damageInterval = buff[112]
229
277
  if timer ~= nil and damageInterval ~= nil and damageInterval > 0 then
230
278
  timer:start(damageInterval, true, buffDamageIntervalTimerCallback, buff)
231
279
  end
232
280
  end
233
281
  buffDamageIntervalTimerCallback = function(buff)
234
282
  buff:flashSpecialEffect()
235
- local source = buff[101] or buff[100]
236
- local remainingDamageOverDuration = buff[112] or 0
283
+ local source = buff[102] or buff[101]
284
+ local remainingDamageOverDuration = buff[113] or 0
237
285
  if remainingDamageOverDuration ~= 0 then
238
- local damageInterval = buff[111] or 0
286
+ local damageInterval = buff[112] or 0
239
287
  if damageInterval ~= 0 then
240
288
  local damage = remainingDamageOverDuration / (1 + buff.remainingDuration / damageInterval)
241
- source:damageTarget(buff[100], damage)
242
- buff[112] = remainingDamageOverDuration - damage
289
+ source:damageTarget(buff[101], damage)
290
+ buff[113] = remainingDamageOverDuration - damage
243
291
  end
244
292
  end
245
- local damagePerInterval = buff[110] or 0
293
+ local damagePerInterval = buff[111] or 0
246
294
  if remainingDamageOverDuration == 0 or damagePerInterval ~= 0 then
247
- source:damageTarget(buff[100], damagePerInterval)
295
+ source:damageTarget(buff[101], damagePerInterval)
248
296
  end
249
297
  end
250
298
  local function buffHealingIntervalInitialTimerCallback(buff)
251
299
  buffHealingIntervalTimerCallback(buff)
252
- local timer = buff[118]
253
- local healingInterval = buff[116]
300
+ local timer = buff[119]
301
+ local healingInterval = buff[117]
254
302
  if timer ~= nil and healingInterval ~= nil and healingInterval > 0 then
255
303
  timer:start(healingInterval, true, buffHealingIntervalTimerCallback, buff)
256
304
  end
257
305
  end
258
306
  buffHealingIntervalTimerCallback = function(buff)
259
- if buff[116] ~= buff[111] then
307
+ if buff[117] ~= buff[112] then
260
308
  buff:flashSpecialEffect()
261
309
  end
262
- local source = buff[101] or buff[100]
263
- local remainingHealingOverDuration = buff[117] or 0
310
+ local source = buff[102] or buff[101]
311
+ local remainingHealingOverDuration = buff[118] or 0
264
312
  if remainingHealingOverDuration ~= 0 then
265
- local healingInterval = buff[116] or 0
313
+ local healingInterval = buff[117] or 0
266
314
  if healingInterval ~= 0 then
267
315
  local healing = remainingHealingOverDuration / (1 + buff.remainingDuration / healingInterval)
268
- source:healTarget(buff[100], healing)
269
- buff[117] = remainingHealingOverDuration - healing
316
+ source:healTarget(buff[101], healing)
317
+ buff[118] = remainingHealingOverDuration - healing
270
318
  end
271
319
  end
272
- local healingPerInterval = buff[115] or 0
320
+ local healingPerInterval = buff[116] or 0
273
321
  if remainingHealingOverDuration == 0 or healingPerInterval ~= 0 then
274
- source:healTarget(buff[100], healingPerInterval)
322
+ source:healTarget(buff[101], healingPerInterval)
275
323
  end
276
324
  end
325
+ local buffCreatedEvent = __TS__New(Event)
326
+ local buffBeingDestroyedEvent = __TS__New(Event)
277
327
  ____exports.Buff = __TS__Class()
278
328
  local Buff = ____exports.Buff
279
329
  Buff.name = "Buff"
@@ -282,40 +332,44 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
282
332
  UnitBehavior.prototype.____constructor(self, _unit)
283
333
  self._unit = _unit
284
334
  self.parameters = nil
285
- self[100] = _unit
335
+ self[100] = 0
336
+ self[101] = _unit
286
337
  local typeId
287
338
  local polarity
288
339
  local resistanceType
289
340
  local ability
341
+ local abilityBehavior
290
342
  if type(typeIdOrTypeIds) ~= "number" then
291
343
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
292
344
  polarity = resistanceTypeOrPolarity
293
345
  resistanceType = abilityOrParametersOrResistanceType
294
- if __TS__InstanceOf(parametersOrAbility, Ability) then
346
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
347
+ abilityBehavior = parametersOrAbility
348
+ ability = abilityBehavior.ability
349
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
295
350
  ability = parametersOrAbility
296
- else
297
- ability = nil
351
+ elseif parametersOrAbility ~= nil then
298
352
  parameters = parametersOrAbility
299
353
  end
300
354
  else
301
355
  typeId = typeIdOrTypeIds
302
356
  polarity = polarityOrTypeIdSelectionPolicy
303
357
  resistanceType = resistanceTypeOrPolarity
304
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) 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
305
363
  ability = abilityOrParametersOrResistanceType
306
364
  parameters = parametersOrAbility
307
- else
308
- ability = nil
365
+ elseif abilityOrParametersOrResistanceType ~= nil then
309
366
  parameters = abilityOrParametersOrResistanceType
367
+ else
368
+ parameters = parametersOrAbility
310
369
  end
311
370
  end
371
+ self.sourceAbilityBehavior = abilityBehavior
312
372
  self.typeId = typeId
313
- self.polarity = polarity
314
- self.resistanceType = resistanceType
315
- if not __TS__InstanceOf(ability, Ability) then
316
- parameters = ability
317
- ability = nil
318
- end
319
373
  local defaultParameters = self.constructor.defaultParameters
320
374
  local level = parameters and parameters.level or defaultParameters.level
321
375
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -338,14 +392,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
338
392
  learnLevelMinimum = learnLevelMinimum or ability:getField(ABILITY_IF_REQUIRED_LEVEL)
339
393
  duration = duration or getAbilityDuration(ability, _unit)
340
394
  end
395
+ self.polarity = resolveEnumValue(ability, level, polarity)
396
+ self.resistanceType = resolveEnumValue(ability, level, resistanceType)
397
+ local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
398
+ if missProbability ~= nil then
399
+ missProbability = resolveNumberValue(ability, level, missProbability)
400
+ self[146] = missProbability
401
+ end
341
402
  local buffByTypeId = buffByTypeIdByUnit[_unit]
342
403
  if buffByTypeId == nil then
343
404
  buffByTypeId = {}
344
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
345
406
  end
346
- local ____opt_13 = buffByTypeId[typeId]
347
- if ____opt_13 ~= nil then
348
- ____opt_13:destroy()
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
409
+ if ____opt_15 ~= nil then
410
+ ____opt_15:destroy()
349
411
  end
350
412
  local uniqueGroup = parameters and parameters.uniqueGroup or defaultParameters and defaultParameters.uniqueGroup
351
413
  if uniqueGroup ~= nil then
@@ -354,18 +416,21 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
354
416
  if not internalApplyBuff(
355
417
  _unit,
356
418
  typeId,
357
- polarity,
358
- resistanceType,
419
+ self.polarity,
420
+ self.resistanceType,
359
421
  level,
360
422
  duration,
361
423
  spellStealPriority,
362
- learnLevelMinimum
424
+ learnLevelMinimum,
425
+ missProbability
363
426
  ) then
427
+ self[100] = 1
364
428
  UnitBehavior.prototype.destroy(self)
365
429
  error(unsuccessfulApplicationMarker, 0)
366
430
  end
367
431
  local handle = BlzGetUnitAbility(_unit.handle, typeId)
368
432
  if handle == nil then
433
+ self[100] = 1
369
434
  UnitBehavior.prototype.destroy(self)
370
435
  error(unsuccessfulApplicationMarker, 0)
371
436
  end
@@ -374,20 +439,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
374
439
  self._level = level
375
440
  self._spellStealPriority = spellStealPriority
376
441
  self._learnLevelMinimum = learnLevelMinimum
377
- self[101] = source
378
- self[102] = duration or 0
379
- self[103] = uniqueGroup
380
- self[104] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
381
- self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
442
+ self[102] = source
443
+ self[103] = duration or 0
444
+ self[104] = uniqueGroup
445
+ self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
446
+ self[106] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
382
447
  if parameters ~= nil or (next(defaultParameters)) ~= nil then
383
448
  for ____, buffBooleanParameter in ipairs(buffBooleanParameters) do
384
- local ____ability_22 = ability
385
- local ____level_23 = level
386
- local ____temp_21 = parameters and parameters[buffBooleanParameter]
387
- if ____temp_21 == nil then
388
- ____temp_21 = defaultParameters[buffBooleanParameter]
449
+ local ____ability_24 = ability
450
+ local ____level_25 = level
451
+ local ____temp_23 = parameters and parameters[buffBooleanParameter]
452
+ if ____temp_23 == nil then
453
+ ____temp_23 = defaultParameters[buffBooleanParameter]
389
454
  end
390
- if resolveBooleanValue(____ability_22, ____level_23, ____temp_21) then
455
+ if resolveBooleanValue(____ability_24, ____level_25, ____temp_23) then
391
456
  self[buffBooleanParameter] = true
392
457
  end
393
458
  end
@@ -403,11 +468,11 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
403
468
  end
404
469
  local maximumDuration = parameters and parameters.maximumDuration or defaultParameters.maximumDuration
405
470
  if maximumDuration ~= nil then
406
- self[107] = resolveNumberValue(ability, level, maximumDuration)
471
+ self[108] = resolveNumberValue(ability, level, maximumDuration)
407
472
  end
408
473
  local maximumRemainingDuration = parameters and parameters.maximumRemainingDuration or defaultParameters.maximumRemainingDuration
409
474
  if maximumRemainingDuration ~= nil then
410
- self[108] = resolveNumberValue(ability, level, maximumRemainingDuration)
475
+ self[109] = resolveNumberValue(ability, level, maximumRemainingDuration)
411
476
  end
412
477
  local parametersAbilityTypeIds = parameters and parameters.abilityTypeIds or defaultParameters.abilityTypeIds
413
478
  if parametersAbilityTypeIds ~= nil then
@@ -416,24 +481,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
416
481
  abilityTypeIds = {}
417
482
  self._abilityTypeIds = abilityTypeIds
418
483
  end
419
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
484
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
485
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
420
486
  local addedAbility = _unit:addAbility(abilityTypeId)
421
487
  if addedAbility ~= nil then
422
488
  _unit:makeAbilityPermanent(abilityTypeId, true)
423
489
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
424
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
425
- if abilityParameterKey == "isButtonVisible" then
426
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
427
- _unit:hideAbility(abilityTypeId, true)
428
- end
429
- elseif abilityParameterKey ~= "level" then
430
- abilityParameterKey:setValue(
431
- addedAbility,
432
- resolveNumberValue(ability, level, abilityParameterValue)
433
- )
434
- end
490
+ if abilityParameters.isButtonVisible == false then
491
+ _unit:hideAbility(abilityTypeId, true)
435
492
  end
436
- 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
437
500
  end
438
501
  end
439
502
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -445,18 +508,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
445
508
  self._behaviors = behaviors
446
509
  end
447
510
  end
448
- local additionalParameters = {}
449
- for key, value in pairs(parameters) do
450
- if not buffParametersKeys[key] then
451
- if ability then
452
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
453
- else
454
- 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
455
520
  end
456
521
  end
457
- end
458
- if (next(additionalParameters)) ~= nil then
459
- self.parameters = additionalParameters
522
+ if (next(additionalParameters)) ~= nil then
523
+ self.parameters = additionalParameters
524
+ end
460
525
  end
461
526
  end
462
527
  if duration ~= nil and duration > 0 then
@@ -464,77 +529,87 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
464
529
  timer:start(duration, false, expireBuff, self)
465
530
  self._timer = timer
466
531
  end
532
+ self:onCreate()
533
+ self[100] = 1
534
+ Event.invoke(buffCreatedEvent, self)
467
535
  end
468
- function Buff.prototype.getUnitBonus(self, bonusType)
469
- local ____opt_36 = self._bonusIdByBonusType
470
- local bonusId = ____opt_36 and ____opt_36[bonusType]
471
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
472
- end
473
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
474
- local bonusIdByBonusType = self._bonusIdByBonusType
475
- if bonusIdByBonusType == nil then
476
- bonusIdByBonusType = {}
477
- self._bonusIdByBonusType = bonusIdByBonusType
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
478
542
  end
479
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
480
543
  end
481
- function Buff.prototype.flashEffect(self, widgetOrDuration, duration)
482
- local isWidgetProvided = type(widgetOrDuration) == "table"
483
- local ____Effect_40 = Effect
484
- local ____Effect_flash_41 = Effect.flash
485
- local ____array_39 = __TS__SparseArrayNew(
486
- self[104],
487
- isWidgetProvided and widgetOrDuration or self._unit,
488
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
489
- )
490
- local ____isWidgetProvided_38
491
- if isWidgetProvided then
492
- ____isWidgetProvided_38 = duration
493
- else
494
- ____isWidgetProvided_38 = widgetOrDuration
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
495
550
  end
496
- __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
497
- ____Effect_flash_41(
498
- ____Effect_40,
499
- __TS__SparseArraySpread(____array_39)
500
- )
501
551
  end
502
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
503
- local isWidgetProvided = type(widgetOrDuration) == "table"
504
- local ____Effect_44 = Effect
505
- local ____Effect_flash_45 = Effect.flash
506
- local ____array_43 = __TS__SparseArrayNew(
552
+ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
553
+ self:flash(
507
554
  self[105],
508
- isWidgetProvided and widgetOrDuration or self._unit,
509
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
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
510
568
  )
511
- local ____isWidgetProvided_42
512
- if isWidgetProvided then
513
- ____isWidgetProvided_42 = duration
569
+ end
570
+ function Buff.prototype.flash(self, modelPath, attachmentPoint, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
571
+ if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
572
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
514
573
  else
515
- ____isWidgetProvided_42 = widgetOrDuration
574
+ local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
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
579
+ if isWidgetProvided then
580
+ ____isWidgetProvided_38 = yOrParametersOrDuration
581
+ else
582
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
583
+ end
584
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
585
+ ____Effect_flash_41(
586
+ ____Effect_40,
587
+ __TS__SparseArraySpread(____array_39)
588
+ )
516
589
  end
517
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
518
- ____Effect_flash_45(
519
- ____Effect_44,
520
- __TS__SparseArraySpread(____array_43)
521
- )
590
+ end
591
+ function Buff.prototype.expire(self)
592
+ expireBuff(self)
593
+ end
594
+ function Buff.prototype.onCreate(self)
522
595
  end
523
596
  function Buff.prototype.onDestroy(self)
597
+ check(self[100] ~= 0, "Cannot destroy a buff that has not finished creating yet.")
598
+ self[100] = 2
524
599
  local unit = self._unit
525
600
  if getUnitAbility(unit.handle, self.typeId) == self.handle then
526
601
  removeBuff(unit.handle, self.typeId)
527
602
  end
528
603
  buffByTypeIdByUnit[unit][self.typeId] = nil
529
- local healingIntervalTimer = self[118]
604
+ local healingIntervalTimer = self[119]
530
605
  if healingIntervalTimer ~= nil then
531
606
  healingIntervalTimer:destroy()
532
- self[118] = nil
607
+ self[119] = nil
533
608
  end
534
- local damageIntervalTimer = self[113]
609
+ local damageIntervalTimer = self[114]
535
610
  if damageIntervalTimer ~= nil then
536
611
  damageIntervalTimer:destroy()
537
- self[113] = nil
612
+ self[114] = nil
538
613
  end
539
614
  if self._timer ~= nil then
540
615
  self._timer:destroy()
@@ -544,25 +619,34 @@ function Buff.prototype.onDestroy(self)
544
619
  behavior:destroy()
545
620
  end
546
621
  end
547
- if self[132] 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
629
+ unit:decrementInvulnerabilityCounter()
630
+ end
631
+ if self[142] then
548
632
  unit:decrementDisableAutoAttackCounter()
549
633
  end
550
- if self[130] then
551
- if self[131] then
552
- unit:decrementStunCounter()
634
+ if self[140] then
635
+ if self[141] then
636
+ unit:decrementForceStunCounter()
553
637
  end
554
638
  unit:decrementStunCounter()
555
639
  end
640
+ if self[139] then
641
+ unit:decrementGhostCounter()
642
+ end
556
643
  if self._abilityTypeIds ~= nil then
557
- for abilityTypeId in pairs(self._abilityTypeIds) do
644
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
558
645
  unit:removeAbility(abilityTypeId)
559
646
  end
560
647
  end
561
- if self._bonusIdByBonusType ~= nil then
562
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
563
- removeUnitBonus(unit, bonusType, bonusId)
564
- end
565
- end
648
+ Event.invoke(buffBeingDestroyedEvent, self)
649
+ self[100] = 3
566
650
  return UnitBehavior.prototype.onDestroy(self)
567
651
  end
568
652
  function Buff.apply(self, ...)
@@ -590,8 +674,8 @@ function Buff.apply(self, ...)
590
674
  end
591
675
  end
592
676
  function Buff.getByTypeId(self, unit, typeId)
593
- local ____opt_46 = buffByTypeIdByUnit[unit]
594
- local buff = ____opt_46 and ____opt_46[typeId]
677
+ local ____opt_42 = buffByTypeIdByUnit[unit]
678
+ local buff = ____opt_42 and ____opt_42[typeId]
595
679
  if __TS__InstanceOf(buff, self) then
596
680
  return buff
597
681
  end
@@ -599,56 +683,84 @@ function Buff.getByTypeId(self, unit, typeId)
599
683
  end
600
684
  function Buff.prototype.onExpiration(self)
601
685
  local unit = self.unit
602
- if self[119] ~= nil then
603
- (self[101] or unit):damageTarget(unit, self[119] or 0)
604
- end
605
686
  if self[120] ~= nil then
606
- (self[101] or unit):healTarget(unit, self[119] or 0)
687
+ (self[102] or unit):damageTarget(unit, self[120] or 0)
688
+ end
689
+ if self[121] ~= nil then
690
+ (self[102] or unit):healTarget(unit, self[120] or 0)
607
691
  end
608
- if self[135] then
692
+ if self[145] then
609
693
  unit:explode()
610
- elseif self[134] then
694
+ elseif self[144] then
611
695
  unit:kill()
612
696
  end
613
697
  end
614
698
  function Buff.prototype.onDeath(self, source)
615
699
  local unit = self.unit
616
- if self[121] ~= nil then
700
+ if self[122] ~= nil then
617
701
  damageArea(
618
- self[101] or unit,
619
- self[121],
702
+ self[102] or unit,
703
+ self[122],
620
704
  unit.x,
621
705
  unit.y,
706
+ self[124] or 0,
622
707
  self[123] or 0,
623
- self[122] or 0,
708
+ self[126] or 0,
624
709
  self[125] or 0,
625
- self[124] or 0,
626
- self[127] or 0,
627
- self[126] or 0
710
+ self[128] or 0,
711
+ self[127] or 0
628
712
  )
629
713
  end
630
714
  end
631
715
  function Buff.prototype.onDamageDealt(self, target, event)
632
716
  if event.isAttack then
633
- if self[106] ~= nil then
634
- local durationIncrease = self[106]
635
- local maximumDuration = self[107] or 0
717
+ if self[107] ~= nil then
718
+ local durationIncrease = self[107]
719
+ local maximumDuration = self[108] or 0
636
720
  if maximumDuration > 0 then
637
721
  durationIncrease = min(
638
722
  durationIncrease,
639
- max(0, maximumDuration - self[102])
723
+ max(0, maximumDuration - self[103])
640
724
  )
641
725
  end
642
726
  local remainingDuration = self.remainingDuration + durationIncrease
643
- local maximumRemainingDuration = self[108] or 0
727
+ local maximumRemainingDuration = self[109] or 0
644
728
  if maximumRemainingDuration > 0 then
645
729
  remainingDuration = min(remainingDuration, maximumRemainingDuration)
646
730
  end
647
731
  self.remainingDuration = remainingDuration
648
732
  end
649
- local autoAttackCount = (self[128] or 0) + 1
650
- self[128] = autoAttackCount
651
- if autoAttackCount == self[129] then
733
+ local autoAttackCount = (self[129] or 0) + 1
734
+ self[129] = autoAttackCount
735
+ if autoAttackCount == self[130] then
736
+ self:destroy()
737
+ end
738
+ end
739
+ if event.originalAmount ~= 0 then
740
+ local damageDealtEventCount = (self[131] or 0) + 1
741
+ self[131] = damageDealtEventCount
742
+ if damageDealtEventCount == self[132] then
743
+ self:destroy()
744
+ end
745
+ end
746
+ end
747
+ function Buff.prototype.onDamageReceived(self, source, event)
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
761
+ local damageReceivedEventCount = (self[133] or 0) + 1
762
+ self[133] = damageReceivedEventCount
763
+ if damageReceivedEventCount == self[134] then
652
764
  self:destroy()
653
765
  end
654
766
  end
@@ -658,7 +770,7 @@ __TS__SetDescriptor(
658
770
  Buff.prototype,
659
771
  "source",
660
772
  {get = function(self)
661
- return self[101] or self._unit
773
+ return self[102] or self._unit
662
774
  end},
663
775
  true
664
776
  )
@@ -675,13 +787,13 @@ __TS__SetDescriptor(
675
787
  "remainingDamageOverDuration",
676
788
  {
677
789
  get = function(self)
678
- return self[112] or 0
790
+ return self[113] or 0
679
791
  end,
680
792
  set = function(self, remainingDamageOverDuration)
681
- local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[112] or 0)
682
- self[112] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
683
- local damageOverDuration = (self[109] or 0) + remainingDamageOverDurationDelta
684
- self[109] = damageOverDuration ~= 0 and damageOverDuration or nil
793
+ local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[113] or 0)
794
+ self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
795
+ local damageOverDuration = (self[110] or 0) + remainingDamageOverDurationDelta
796
+ self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
685
797
  end
686
798
  },
687
799
  true
@@ -691,13 +803,13 @@ __TS__SetDescriptor(
691
803
  "damageOverDuration",
692
804
  {
693
805
  get = function(self)
694
- return self[109] or 0
806
+ return self[110] or 0
695
807
  end,
696
808
  set = function(self, damageOverDuration)
697
- local damageOverDurationDelta = damageOverDuration - (self[109] or 0)
698
- self[109] = damageOverDuration ~= 0 and damageOverDuration or nil
699
- local remainingDamageOverDuration = (self[112] or 0) + damageOverDurationDelta
700
- self[112] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
809
+ local damageOverDurationDelta = damageOverDuration - (self[110] or 0)
810
+ self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
811
+ local remainingDamageOverDuration = (self[113] or 0) + damageOverDurationDelta
812
+ self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
701
813
  end
702
814
  },
703
815
  true
@@ -707,10 +819,10 @@ __TS__SetDescriptor(
707
819
  "damagePerInterval",
708
820
  {
709
821
  get = function(self)
710
- return self[110] or 0
822
+ return self[111] or 0
711
823
  end,
712
824
  set = function(self, damagePerInterval)
713
- self[110] = damagePerInterval ~= 0 and damagePerInterval or nil
825
+ self[111] = damagePerInterval ~= 0 and damagePerInterval or nil
714
826
  end
715
827
  },
716
828
  true
@@ -720,25 +832,25 @@ __TS__SetDescriptor(
720
832
  "damageInterval",
721
833
  {
722
834
  get = function(self)
723
- return self[111] or 0
835
+ return self[112] or 0
724
836
  end,
725
837
  set = function(self, damageInterval)
726
838
  if damageInterval <= 0 then
727
- self[111] = damageInterval ~= 0 and damageInterval or nil
728
- local timer = self[113]
839
+ self[112] = damageInterval ~= 0 and damageInterval or nil
840
+ local timer = self[114]
729
841
  if timer ~= nil then
730
842
  timer:destroy()
731
- self[113] = nil
843
+ self[114] = nil
732
844
  end
733
845
  return
734
846
  end
735
- self[111] = damageInterval
736
- local ____opt_48 = self._timer
737
- local elapsed = ____opt_48 and ____opt_48.elapsed or 0
738
- local timer = self[113]
847
+ self[112] = damageInterval
848
+ local ____opt_45 = self._timer
849
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
850
+ local timer = self[114]
739
851
  if timer == nil then
740
852
  timer = Timer:create()
741
- self[113] = timer
853
+ self[114] = timer
742
854
  end
743
855
  local initialDelay = damageInterval - (elapsed >= damageInterval and math.fmod(elapsed, damageInterval) or elapsed)
744
856
  if initialDelay == damageInterval then
@@ -755,13 +867,13 @@ __TS__SetDescriptor(
755
867
  "remainingHealingOverDuration",
756
868
  {
757
869
  get = function(self)
758
- return self[117] or 0
870
+ return self[118] or 0
759
871
  end,
760
872
  set = function(self, remainingHealingOverDuration)
761
- local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[117] or 0)
762
- self[112] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
763
- local healingOverDuration = (self[114] or 0) + remainingHealingOverDurationDelta
764
- self[114] = healingOverDuration ~= 0 and healingOverDuration or nil
873
+ local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[118] or 0)
874
+ self[113] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
875
+ local healingOverDuration = (self[115] or 0) + remainingHealingOverDurationDelta
876
+ self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
765
877
  end
766
878
  },
767
879
  true
@@ -771,13 +883,13 @@ __TS__SetDescriptor(
771
883
  "healingOverDuration",
772
884
  {
773
885
  get = function(self)
774
- return self[114] or 0
886
+ return self[115] or 0
775
887
  end,
776
888
  set = function(self, healingOverDuration)
777
- local healingOverDurationDelta = healingOverDuration - (self[114] or 0)
778
- self[114] = healingOverDuration ~= 0 and healingOverDuration or nil
779
- local remainingHealingOverDuration = (self[117] or 0) + healingOverDurationDelta
780
- self[117] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
889
+ local healingOverDurationDelta = healingOverDuration - (self[115] or 0)
890
+ self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
891
+ local remainingHealingOverDuration = (self[118] or 0) + healingOverDurationDelta
892
+ self[118] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
781
893
  end
782
894
  },
783
895
  true
@@ -787,10 +899,10 @@ __TS__SetDescriptor(
787
899
  "healingPerInterval",
788
900
  {
789
901
  get = function(self)
790
- return self[115] or 0
902
+ return self[116] or 0
791
903
  end,
792
904
  set = function(self, healingPerInterval)
793
- self[115] = healingPerInterval ~= 0 and healingPerInterval or nil
905
+ self[116] = healingPerInterval ~= 0 and healingPerInterval or nil
794
906
  end
795
907
  },
796
908
  true
@@ -800,25 +912,25 @@ __TS__SetDescriptor(
800
912
  "healingInterval",
801
913
  {
802
914
  get = function(self)
803
- return self[116] or 0
915
+ return self[117] or 0
804
916
  end,
805
917
  set = function(self, healingInterval)
806
918
  if healingInterval <= 0 then
807
- self[116] = healingInterval ~= 0 and healingInterval or nil
808
- local timer = self[118]
919
+ self[117] = healingInterval ~= 0 and healingInterval or nil
920
+ local timer = self[119]
809
921
  if timer ~= nil then
810
922
  timer:destroy()
811
- self[118] = nil
923
+ self[119] = nil
812
924
  end
813
925
  return
814
926
  end
815
- self[116] = healingInterval
816
- local ____opt_50 = self._timer
817
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
818
- local timer = self[118]
927
+ self[117] = healingInterval
928
+ local ____opt_47 = self._timer
929
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
930
+ local timer = self[119]
819
931
  if timer == nil then
820
932
  timer = Timer:create()
821
- self[118] = timer
933
+ self[119] = timer
822
934
  end
823
935
  local initialDelay = healingInterval - (elapsed >= healingInterval and math.fmod(elapsed, healingInterval) or elapsed)
824
936
  if initialDelay == healingInterval then
@@ -835,10 +947,10 @@ __TS__SetDescriptor(
835
947
  "damageOnExpiration",
836
948
  {
837
949
  get = function(self)
838
- return self[119] or 0
950
+ return self[120] or 0
839
951
  end,
840
952
  set = function(self, damageOnExpiration)
841
- self[119] = damageOnExpiration ~= 0 and damageOnExpiration or nil
953
+ self[120] = damageOnExpiration ~= 0 and damageOnExpiration or nil
842
954
  end
843
955
  },
844
956
  true
@@ -848,10 +960,23 @@ __TS__SetDescriptor(
848
960
  "healingOnExpiration",
849
961
  {
850
962
  get = function(self)
851
- return self[120] or 0
963
+ return self[121] or 0
852
964
  end,
853
965
  set = function(self, healingOnExpiration)
854
- self[120] = healingOnExpiration ~= 0 and healingOnExpiration or nil
966
+ self[121] = healingOnExpiration ~= 0 and healingOnExpiration or nil
967
+ end
968
+ },
969
+ true
970
+ )
971
+ __TS__SetDescriptor(
972
+ Buff.prototype,
973
+ "damageFactor",
974
+ {
975
+ get = function(self)
976
+ return self:getUnitBonus(UnitBonusType.DAMAGE_FACTOR)
977
+ end,
978
+ set = function(self, damageFactor)
979
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.DAMAGE_FACTOR, damageFactor)
855
980
  end
856
981
  },
857
982
  true
@@ -882,30 +1007,79 @@ __TS__SetDescriptor(
882
1007
  },
883
1008
  true
884
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
+ )
1036
+ __TS__SetDescriptor(
1037
+ Buff.prototype,
1038
+ "turnsIntoGhost",
1039
+ {
1040
+ get = function(self)
1041
+ local ____self__139_49 = self[139]
1042
+ if ____self__139_49 == nil then
1043
+ ____self__139_49 = false
1044
+ end
1045
+ return ____self__139_49
1046
+ end,
1047
+ set = function(self, turnsIntoGhost)
1048
+ if not turnsIntoGhost and self[139] then
1049
+ self.object:decrementGhostCounter()
1050
+ self[139] = nil
1051
+ elseif turnsIntoGhost and not self[139] then
1052
+ self.object:incrementGhostCounter()
1053
+ self[139] = true
1054
+ end
1055
+ end
1056
+ },
1057
+ true
1058
+ )
885
1059
  __TS__SetDescriptor(
886
1060
  Buff.prototype,
887
1061
  "stuns",
888
1062
  {
889
1063
  get = function(self)
890
- local ____self__130_52 = self[130]
891
- if ____self__130_52 == nil then
892
- ____self__130_52 = false
1064
+ local ____self__140_50 = self[140]
1065
+ if ____self__140_50 == nil then
1066
+ ____self__140_50 = false
893
1067
  end
894
- return ____self__130_52
1068
+ return ____self__140_50
895
1069
  end,
896
1070
  set = function(self, stuns)
897
- if not stuns and self[130] then
898
- if self[131] then
899
- self.object:decrementStunCounter()
1071
+ if not stuns and self[140] then
1072
+ if self[141] then
1073
+ self.object:decrementForceStunCounter()
900
1074
  end
901
1075
  self.object:decrementStunCounter()
902
- self[130] = nil
903
- elseif stuns and not self[130] then
904
- if self[131] then
905
- self.object:incrementStunCounter()
1076
+ self[140] = nil
1077
+ elseif stuns and not self[140] then
1078
+ if self[141] then
1079
+ self.object:incrementForceStunCounter()
906
1080
  end
907
1081
  self.object:incrementStunCounter()
908
- self[130] = true
1082
+ self[140] = true
909
1083
  end
910
1084
  end
911
1085
  },
@@ -916,23 +1090,23 @@ __TS__SetDescriptor(
916
1090
  "ignoresStunImmunity",
917
1091
  {
918
1092
  get = function(self)
919
- local ____self__131_53 = self[131]
920
- if ____self__131_53 == nil then
921
- ____self__131_53 = false
1093
+ local ____self__141_51 = self[141]
1094
+ if ____self__141_51 == nil then
1095
+ ____self__141_51 = false
922
1096
  end
923
- return ____self__131_53
1097
+ return ____self__141_51
924
1098
  end,
925
1099
  set = function(self, ignoresStunImmunity)
926
- if not ignoresStunImmunity and self[131] then
927
- if self[130] then
928
- self.object:decrementStunCounter()
1100
+ if not ignoresStunImmunity and self[141] then
1101
+ if self[140] then
1102
+ self.object:decrementForceStunCounter()
929
1103
  end
930
- self[131] = nil
931
- elseif ignoresStunImmunity and not self[131] then
932
- if self[130] then
933
- self.object:incrementStunCounter()
1104
+ self[141] = nil
1105
+ elseif ignoresStunImmunity and not self[141] then
1106
+ if self[140] then
1107
+ self.object:incrementForceStunCounter()
934
1108
  end
935
- self[131] = true
1109
+ self[141] = true
936
1110
  end
937
1111
  end
938
1112
  },
@@ -943,19 +1117,19 @@ __TS__SetDescriptor(
943
1117
  "disablesAutoAttack",
944
1118
  {
945
1119
  get = function(self)
946
- local ____self__132_54 = self[132]
947
- if ____self__132_54 == nil then
948
- ____self__132_54 = false
1120
+ local ____self__142_52 = self[142]
1121
+ if ____self__142_52 == nil then
1122
+ ____self__142_52 = false
949
1123
  end
950
- return ____self__132_54
1124
+ return ____self__142_52
951
1125
  end,
952
1126
  set = function(self, disablesAutoAttack)
953
- if not disablesAutoAttack and self[132] then
1127
+ if not disablesAutoAttack and self[142] then
954
1128
  self.object:decrementDisableAutoAttackCounter()
955
- self[132] = nil
956
- elseif disablesAutoAttack and not self[132] then
1129
+ self[142] = nil
1130
+ elseif disablesAutoAttack and not self[142] then
957
1131
  self.object:incrementDisableAutoAttackCounter()
958
- self[132] = true
1132
+ self[142] = true
959
1133
  end
960
1134
  end
961
1135
  },
@@ -966,19 +1140,19 @@ __TS__SetDescriptor(
966
1140
  "providesInvulnerability",
967
1141
  {
968
1142
  get = function(self)
969
- local ____self__133_55 = self[133]
970
- if ____self__133_55 == nil then
971
- ____self__133_55 = false
1143
+ local ____self__143_53 = self[143]
1144
+ if ____self__143_53 == nil then
1145
+ ____self__143_53 = false
972
1146
  end
973
- return ____self__133_55
1147
+ return ____self__143_53
974
1148
  end,
975
1149
  set = function(self, providesInvulnerability)
976
- if not providesInvulnerability and self[133] then
1150
+ if not providesInvulnerability and self[143] then
977
1151
  self.object:decrementInvulnerabilityCounter()
978
- self[133] = nil
979
- elseif providesInvulnerability and not self[133] then
1152
+ self[143] = nil
1153
+ elseif providesInvulnerability and not self[143] then
980
1154
  self.object:incrementInvulnerabilityCounter()
981
- self[133] = true
1155
+ self[143] = true
982
1156
  end
983
1157
  end
984
1158
  },
@@ -989,17 +1163,17 @@ __TS__SetDescriptor(
989
1163
  "killsOnExpiration",
990
1164
  {
991
1165
  get = function(self)
992
- local ____self__134_56 = self[134]
993
- if ____self__134_56 == nil then
994
- ____self__134_56 = false
1166
+ local ____self__144_54 = self[144]
1167
+ if ____self__144_54 == nil then
1168
+ ____self__144_54 = false
995
1169
  end
996
- return ____self__134_56
1170
+ return ____self__144_54
997
1171
  end,
998
1172
  set = function(self, killsOnExpiration)
999
- if not killsOnExpiration and self[134] then
1000
- self[134] = nil
1001
- elseif killsOnExpiration and not self[134] then
1002
- self[134] = 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
1003
1177
  end
1004
1178
  end
1005
1179
  },
@@ -1010,17 +1184,51 @@ __TS__SetDescriptor(
1010
1184
  "explodesOnExpiration",
1011
1185
  {
1012
1186
  get = function(self)
1013
- local ____self__135_57 = self[135]
1014
- if ____self__135_57 == nil then
1015
- ____self__135_57 = false
1187
+ local ____self__145_55 = self[145]
1188
+ if ____self__145_55 == nil then
1189
+ ____self__145_55 = false
1016
1190
  end
1017
- return ____self__135_57
1191
+ return ____self__145_55
1018
1192
  end,
1019
1193
  set = function(self, killsOnExpiration)
1020
- if not killsOnExpiration and self[135] then
1021
- self[135] = nil
1022
- elseif killsOnExpiration and not self[135] then
1023
- self[135] = 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
1198
+ end
1199
+ end
1200
+ },
1201
+ true
1202
+ )
1203
+ __TS__SetDescriptor(
1204
+ Buff.prototype,
1205
+ "maximumDamageDealtEventCount",
1206
+ {
1207
+ get = function(self)
1208
+ return self[132] or 0
1209
+ end,
1210
+ set = function(self, maximumDamageDealtEventCount)
1211
+ if maximumDamageDealtEventCount == 0 then
1212
+ self[132] = nil
1213
+ else
1214
+ self[132] = maximumDamageDealtEventCount
1215
+ end
1216
+ end
1217
+ },
1218
+ true
1219
+ )
1220
+ __TS__SetDescriptor(
1221
+ Buff.prototype,
1222
+ "maximumDamageReceivedEventCount",
1223
+ {
1224
+ get = function(self)
1225
+ return self[134] or 0
1226
+ end,
1227
+ set = function(self, maximumDamageReceivedEventCount)
1228
+ if maximumDamageReceivedEventCount == 0 then
1229
+ self[134] = nil
1230
+ else
1231
+ self[134] = maximumDamageReceivedEventCount
1024
1232
  end
1025
1233
  end
1026
1234
  },
@@ -1031,13 +1239,13 @@ __TS__SetDescriptor(
1031
1239
  "maximumAutoAttackCount",
1032
1240
  {
1033
1241
  get = function(self)
1034
- return self[129] or 0
1242
+ return self[130] or 0
1035
1243
  end,
1036
1244
  set = function(self, maximumAutoAttackCount)
1037
1245
  if maximumAutoAttackCount == 0 then
1038
- self[129] = nil
1246
+ self[130] = nil
1039
1247
  else
1040
- self[129] = maximumAutoAttackCount
1248
+ self[130] = maximumAutoAttackCount
1041
1249
  end
1042
1250
  end
1043
1251
  },
@@ -1048,10 +1256,10 @@ __TS__SetDescriptor(
1048
1256
  "durationIncreaseOnAutoAttack",
1049
1257
  {
1050
1258
  get = function(self)
1051
- return self[106] or 0
1259
+ return self[107] or 0
1052
1260
  end,
1053
1261
  set = function(self, durationIncreaseOnAutoAttack)
1054
- self[106] = durationIncreaseOnAutoAttack
1262
+ self[107] = durationIncreaseOnAutoAttack
1055
1263
  end
1056
1264
  },
1057
1265
  true
@@ -1082,12 +1290,52 @@ __TS__SetDescriptor(
1082
1290
  },
1083
1291
  true
1084
1292
  )
1293
+ __TS__SetDescriptor(
1294
+ Buff.prototype,
1295
+ "evasionProbability",
1296
+ {
1297
+ get = function(self)
1298
+ return self:getUnitBonus(UnitBonusType.EVASION_PROBABILITY)
1299
+ end,
1300
+ set = function(self, evasionProbability)
1301
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.EVASION_PROBABILITY, evasionProbability)
1302
+ end
1303
+ },
1304
+ true
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
+ )
1085
1319
  __TS__SetDescriptor(
1086
1320
  Buff.prototype,
1087
1321
  "duration",
1088
- {get = function(self)
1089
- return self[102]
1090
- 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
+ },
1091
1339
  true
1092
1340
  )
1093
1341
  __TS__SetDescriptor(
@@ -1095,15 +1343,15 @@ __TS__SetDescriptor(
1095
1343
  "remainingDuration",
1096
1344
  {
1097
1345
  get = function(self)
1098
- local ____opt_58 = self._timer
1099
- return ____opt_58 and ____opt_58.remaining or 0
1346
+ local ____opt_56 = self._timer
1347
+ return ____opt_56 and ____opt_56.remaining or 0
1100
1348
  end,
1101
1349
  set = function(self, remainingDuration)
1102
- local ____remainingDuration_62 = remainingDuration
1103
- local ____opt_60 = self._timer
1104
- local remainingDurationDelta = ____remainingDuration_62 - (____opt_60 and ____opt_60.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)
1105
1353
  if remainingDurationDelta ~= 0 then
1106
- self[102] = self[102] + remainingDurationDelta
1354
+ self[103] = self[103] + remainingDurationDelta
1107
1355
  if remainingDuration <= 0 then
1108
1356
  Timer:run(destroyBuff, self)
1109
1357
  else
@@ -1115,7 +1363,8 @@ __TS__SetDescriptor(
1115
1363
  self._level,
1116
1364
  remainingDuration,
1117
1365
  self._spellStealPriority,
1118
- self._learnLevelMinimum
1366
+ self._learnLevelMinimum,
1367
+ self[146]
1119
1368
  ) then
1120
1369
  local timer = self._timer
1121
1370
  if timer == nil then
@@ -1129,10 +1378,103 @@ __TS__SetDescriptor(
1129
1378
  end
1130
1379
  },
1131
1380
  true
1132
- );
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
+ )
1473
+ Buff.createdEvent = buffCreatedEvent
1474
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1133
1475
  (function(self)
1134
1476
  local function destroyBuffIfNeeded(buff)
1135
- if getUnitAbility(buff[100].handle, buff.typeId) ~= buff.handle then
1477
+ if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
1136
1478
  buff:destroy()
1137
1479
  end
1138
1480
  end
@@ -1183,5 +1525,11 @@ __TS__SetDescriptor(
1183
1525
  ____exports.checkBuffs(target)
1184
1526
  end
1185
1527
  )
1528
+ buffCreatedEvent:addListener(function(buff)
1529
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1530
+ end)
1531
+ buffBeingDestroyedEvent:addListener(function(buff)
1532
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1533
+ end)
1186
1534
  end)(Buff)
1187
1535
  return ____exports