warscript 0.0.1-dev.29630c5 → 0.0.1-dev.2a08418

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 (176) 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 +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.d.ts +16 -0
  9. package/core/types/player.lua +60 -15
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +123 -5
  12. package/core/types/sound.d.ts +17 -24
  13. package/core/types/sound.lua +99 -24
  14. package/core/types/tileCell.d.ts +11 -1
  15. package/core/types/tileCell.lua +97 -0
  16. package/core/types/timer.d.ts +9 -8
  17. package/core/types/timer.lua +45 -23
  18. package/core/util.lua +6 -1
  19. package/decl/native.d.ts +846 -790
  20. package/engine/behavior.d.ts +12 -1
  21. package/engine/behavior.lua +172 -70
  22. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  23. package/engine/behaviour/ability/apply-buff.lua +32 -0
  24. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  25. package/engine/behaviour/ability/damage.d.ts +9 -3
  26. package/engine/behaviour/ability/damage.lua +26 -38
  27. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  28. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  29. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  30. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  31. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  32. package/engine/behaviour/ability/restore-mana.lua +6 -6
  33. package/engine/behaviour/ability.d.ts +7 -3
  34. package/engine/behaviour/ability.lua +34 -26
  35. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  36. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  37. package/engine/behaviour/unit.d.ts +40 -2
  38. package/engine/behaviour/unit.lua +259 -6
  39. package/engine/buff.d.ts +63 -44
  40. package/engine/buff.lua +318 -225
  41. package/engine/internal/ability.d.ts +7 -1
  42. package/engine/internal/ability.lua +49 -9
  43. package/engine/internal/item/ability.lua +63 -11
  44. package/engine/internal/item+owner.lua +12 -6
  45. package/engine/internal/item.d.ts +20 -19
  46. package/engine/internal/item.lua +191 -74
  47. package/engine/internal/mechanics/ability-duration.lua +1 -1
  48. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  49. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  50. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  51. package/engine/internal/misc/frame-coordinates.lua +21 -0
  52. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  53. package/engine/internal/misc/get-terrain-z.lua +11 -0
  54. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  55. package/engine/internal/misc/player-local-handle.lua +5 -0
  56. package/engine/internal/unit/ability.d.ts +35 -0
  57. package/engine/internal/unit/ability.lua +98 -9
  58. package/engine/internal/unit/add-item-to-slot.lua +4 -2
  59. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  60. package/engine/internal/unit/allowed-targets.lua +9 -1
  61. package/engine/internal/unit/fly-height.d.ts +7 -0
  62. package/engine/internal/unit/fly-height.lua +20 -0
  63. package/engine/internal/unit/main-selected.lua +12 -27
  64. package/engine/internal/unit/order.d.ts +20 -0
  65. package/engine/internal/unit/order.lua +136 -0
  66. package/engine/internal/unit/scale.d.ts +7 -0
  67. package/engine/internal/unit/scale.lua +20 -0
  68. package/engine/internal/unit+ability.lua +10 -1
  69. package/engine/internal/unit+damage.d.ts +2 -11
  70. package/engine/internal/unit+damage.lua +10 -14
  71. package/engine/internal/unit+spellSteal.lua +1 -2
  72. package/engine/internal/unit-missile-launch.lua +45 -14
  73. package/engine/internal/unit.d.ts +42 -17
  74. package/engine/internal/unit.lua +331 -165
  75. package/engine/lightning.d.ts +4 -3
  76. package/engine/lightning.lua +21 -12
  77. package/engine/local-client.d.ts +2 -0
  78. package/engine/local-client.lua +30 -0
  79. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  80. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  81. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  82. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  83. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  84. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  85. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  86. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  87. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  88. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  89. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  90. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  91. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  92. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  93. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  94. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  95. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  96. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  97. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  98. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  99. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  100. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  101. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  102. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  103. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  104. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  105. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  106. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  107. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  108. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  109. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  110. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  111. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  112. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  113. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  114. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  115. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  116. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  117. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  118. package/engine/object-data/entry/ability-type/web.lua +52 -0
  119. package/engine/object-data/entry/ability-type.d.ts +19 -17
  120. package/engine/object-data/entry/ability-type.lua +85 -24
  121. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  122. package/engine/object-data/entry/buff-type.d.ts +6 -12
  123. package/engine/object-data/entry/buff-type.lua +13 -29
  124. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  125. package/engine/object-data/entry/item-type.d.ts +1 -1
  126. package/engine/object-data/entry/item-type.lua +4 -4
  127. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  128. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  129. package/engine/object-data/entry/sound-preset.lua +140 -0
  130. package/engine/object-data/entry/unit-type.d.ts +21 -5
  131. package/engine/object-data/entry/unit-type.lua +214 -93
  132. package/engine/object-data/entry/upgrade.d.ts +1 -1
  133. package/engine/object-data/entry/upgrade.lua +4 -4
  134. package/engine/object-data/entry.d.ts +16 -14
  135. package/engine/object-data/entry.lua +60 -32
  136. package/engine/object-field/ability.d.ts +4 -4
  137. package/engine/object-field/ability.lua +7 -6
  138. package/engine/object-field/unit.d.ts +69 -3
  139. package/engine/object-field/unit.lua +264 -7
  140. package/engine/object-field.d.ts +23 -6
  141. package/engine/object-field.lua +309 -126
  142. package/engine/random.d.ts +9 -0
  143. package/engine/random.lua +13 -0
  144. package/engine/standard/entries/buff-type.d.ts +3 -0
  145. package/engine/standard/entries/buff-type.lua +3 -0
  146. package/engine/standard/entries/sound-preset.d.ts +10 -0
  147. package/engine/standard/entries/sound-preset.lua +10 -0
  148. package/engine/standard/fields/unit.d.ts +6 -0
  149. package/engine/standard/fields/unit.lua +11 -0
  150. package/engine/synchronization.d.ts +11 -0
  151. package/engine/synchronization.lua +77 -0
  152. package/engine/text-tag.d.ts +36 -2
  153. package/engine/text-tag.lua +250 -10
  154. package/engine/unit.d.ts +3 -0
  155. package/engine/unit.lua +3 -0
  156. package/net/socket.lua +1 -1
  157. package/objutil/buff.lua +2 -3
  158. package/objutil/unit.lua +8 -0
  159. package/package.json +2 -2
  160. package/patch-lualib.lua +1 -1
  161. package/utility/arrays.d.ts +2 -0
  162. package/utility/arrays.lua +11 -0
  163. package/utility/callback-array.d.ts +17 -0
  164. package/utility/callback-array.lua +61 -0
  165. package/utility/functions.d.ts +8 -0
  166. package/utility/functions.lua +13 -0
  167. package/utility/linked-set.d.ts +2 -0
  168. package/utility/linked-set.lua +22 -1
  169. package/utility/lua-maps.d.ts +15 -2
  170. package/utility/lua-maps.lua +53 -2
  171. package/utility/lua-sets.d.ts +2 -0
  172. package/utility/lua-sets.lua +7 -0
  173. package/utility/reflection.lua +11 -7
  174. package/utility/types.d.ts +3 -0
  175. package/core/types/order.d.ts +0 -25
  176. package/core/types/order.lua +0 -55
@@ -25,4 +25,25 @@ function RemoveBuffsSelfAbilityBehavior.prototype.onImpact(self, caster)
25
25
  self:resolveCurrentAbilityDependentValue(self.autoDispel)
26
26
  )
27
27
  end
28
+ ____exports.RemoveBuffsTargetAbilityBehavior = __TS__Class()
29
+ local RemoveBuffsTargetAbilityBehavior = ____exports.RemoveBuffsTargetAbilityBehavior
30
+ RemoveBuffsTargetAbilityBehavior.name = "RemoveBuffsTargetAbilityBehavior"
31
+ __TS__ClassExtends(RemoveBuffsTargetAbilityBehavior, AbilityBehavior)
32
+ function RemoveBuffsTargetAbilityBehavior.prototype.____constructor(self, ability, polarity, resistanceType, includeExpirationTimers, includeAuras, autoDispel)
33
+ AbilityBehavior.prototype.____constructor(self, ability)
34
+ self.polarity = polarity
35
+ self.resistanceType = resistanceType
36
+ self.includeExpirationTimers = includeExpirationTimers
37
+ self.includeAuras = includeAuras
38
+ self.autoDispel = autoDispel
39
+ end
40
+ function RemoveBuffsTargetAbilityBehavior.prototype.onUnitTargetImpact(self, _, target)
41
+ target:removeBuffs(
42
+ self:resolveCurrentAbilityDependentValue(self.polarity),
43
+ self:resolveCurrentAbilityDependentValue(self.resistanceType),
44
+ self:resolveCurrentAbilityDependentValue(self.includeExpirationTimers),
45
+ self:resolveCurrentAbilityDependentValue(self.includeAuras),
46
+ self:resolveCurrentAbilityDependentValue(self.autoDispel)
47
+ )
48
+ end
28
49
  return ____exports
@@ -8,7 +8,7 @@ export declare class RestoreManaSelfAbilityBehavior extends AbilityBehavior {
8
8
  constructor(ability: Ability, mana: AbilityDependentValue<number>);
9
9
  onImpact(caster: Unit): void;
10
10
  }
11
- export declare class RestoreManaAbilityBehavior extends AbilityBehavior {
11
+ export declare class RestoreManaTargetAbilityBehavior extends AbilityBehavior {
12
12
  private readonly mana;
13
13
  constructor(ability: Ability, mana: AbilityDependentValue<number>);
14
14
  onUnitTargetImpact(caster: Unit, target: Unit): void;
@@ -15,15 +15,15 @@ end
15
15
  function RestoreManaSelfAbilityBehavior.prototype.onImpact(self, caster)
16
16
  caster.mana = caster.mana + self:resolveCurrentAbilityDependentValue(self.mana)
17
17
  end
18
- ____exports.RestoreManaAbilityBehavior = __TS__Class()
19
- local RestoreManaAbilityBehavior = ____exports.RestoreManaAbilityBehavior
20
- RestoreManaAbilityBehavior.name = "RestoreManaAbilityBehavior"
21
- __TS__ClassExtends(RestoreManaAbilityBehavior, AbilityBehavior)
22
- function RestoreManaAbilityBehavior.prototype.____constructor(self, ability, mana)
18
+ ____exports.RestoreManaTargetAbilityBehavior = __TS__Class()
19
+ local RestoreManaTargetAbilityBehavior = ____exports.RestoreManaTargetAbilityBehavior
20
+ RestoreManaTargetAbilityBehavior.name = "RestoreManaTargetAbilityBehavior"
21
+ __TS__ClassExtends(RestoreManaTargetAbilityBehavior, AbilityBehavior)
22
+ function RestoreManaTargetAbilityBehavior.prototype.____constructor(self, ability, mana)
23
23
  AbilityBehavior.prototype.____constructor(self, ability)
24
24
  self.mana = mana
25
25
  end
26
- function RestoreManaAbilityBehavior.prototype.onUnitTargetImpact(self, caster, target)
26
+ function RestoreManaTargetAbilityBehavior.prototype.onUnitTargetImpact(self, caster, target)
27
27
  target.mana = target.mana + self:resolveCurrentAbilityDependentValue(self.mana)
28
28
  end
29
29
  return ____exports
@@ -22,13 +22,17 @@ export declare abstract class AbilityBehavior<Parameters extends {
22
22
  protected subscribe<T extends boolean | number | string>(value: SubscribableAbilityDependentValue<T>): void;
23
23
  protected registerCommandEvent(orderTypeStringId?: string): void;
24
24
  get ability(): Ability;
25
+ get unit(): Unit | undefined;
25
26
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
26
27
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
27
- protected flashCasterEffect(widget: Widget): void;
28
- protected flashTargetEffect(widget: Widget): void;
28
+ protected flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
29
+ protected flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
29
30
  protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
30
31
  protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
31
- protected flashSpecialEffect(...args: [...pointOrWidget: [x: number, y: number] | [widget: Widget], duration?: number]): void;
32
+ protected flashSpecialEffect(...args: [
33
+ ...pointOrWidget: [x: number, y: number] | [widget: Widget],
34
+ ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]
35
+ ]): void;
32
36
  private static MissileLaunchConfig;
33
37
  private get missileLaunchConfig();
34
38
  protected onCreate(): void;
@@ -5,7 +5,6 @@ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
5
5
  local __TS__New = ____lualib.__TS__New
6
6
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
7
7
  local ____exports = {}
8
- local createUnitEventListener
9
8
  local ____behavior = require("engine.behavior")
10
9
  local Behavior = ____behavior.Behavior
11
10
  local ____unit = require("engine.unit")
@@ -30,17 +29,9 @@ local ____ability = require("engine.object-field.ability")
30
29
  local AbilityField = ____ability.AbilityField
31
30
  local AbilityLevelField = ____ability.AbilityLevelField
32
31
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
33
- local ____timer = require("core.types.timer")
34
- local Timer = ____timer.Timer
35
32
  local createBehaviorFunctionsByAbilityTypeId = {}
36
33
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
37
- local function createZeroTimerUnitEventListener(key)
38
- local unitEventListener = createUnitEventListener(key)
39
- return function(unit, ability, ...)
40
- Timer:run(unitEventListener, unit, ability, ...)
41
- end
42
- end
43
- createUnitEventListener = function(key)
34
+ local function createUnitEventListener(key)
44
35
  return function(unit, ability, ...)
45
36
  ____exports.AbilityBehavior:forAll(ability, key, unit, ...)
46
37
  end
@@ -114,20 +105,22 @@ end
114
105
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
115
106
  return resolveCurrentAbilityDependentValue(self.ability, value)
116
107
  end
117
- function AbilityBehavior.prototype.flashCasterEffect(self, widget)
108
+ function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
118
109
  local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
119
110
  Effect:flash(
120
111
  CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
121
112
  widget,
122
- attachmentPoint ~= "" and attachmentPoint or "origin"
113
+ attachmentPoint ~= "" and attachmentPoint or "origin",
114
+ ...
123
115
  )
124
116
  end
125
- function AbilityBehavior.prototype.flashTargetEffect(self, widget)
117
+ function AbilityBehavior.prototype.flashTargetEffect(self, widget, ...)
126
118
  local attachmentPoint = TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
127
119
  Effect:flash(
128
120
  TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
129
121
  widget,
130
- attachmentPoint ~= "" and attachmentPoint or "origin"
122
+ attachmentPoint ~= "" and attachmentPoint or "origin",
123
+ ...
131
124
  )
132
125
  end
133
126
  function AbilityBehavior.prototype.flashAreaEffect(self, x, y, ...)
@@ -146,20 +139,23 @@ function AbilityBehavior.prototype.flashEffect(self, x, y, ...)
146
139
  ...
147
140
  )
148
141
  end
149
- function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrDuration, duration)
142
+ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParametersOrDuration, durationOrParameters, parameters)
150
143
  if type(xOrWidget) == "number" then
151
144
  Effect:flash(
152
145
  SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
153
146
  xOrWidget,
154
- yOrDuration,
155
- duration
147
+ yOrParametersOrDuration,
148
+ durationOrParameters,
149
+ parameters
156
150
  )
157
151
  else
152
+ local attachmentPoint = SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
158
153
  Effect:flash(
159
154
  SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
160
155
  xOrWidget,
161
- SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability),
162
- yOrDuration
156
+ attachmentPoint ~= "" and attachmentPoint or "origin",
157
+ yOrParametersOrDuration,
158
+ durationOrParameters
163
159
  )
164
160
  end
165
161
  end
@@ -234,6 +230,18 @@ __TS__SetDescriptor(
234
230
  end},
235
231
  true
236
232
  )
233
+ __TS__SetDescriptor(
234
+ AbilityBehavior.prototype,
235
+ "unit",
236
+ {get = function(self)
237
+ local owner = self.object.owner
238
+ if __TS__InstanceOf(owner, Unit) then
239
+ return owner
240
+ end
241
+ return owner.owner
242
+ end},
243
+ true
244
+ )
237
245
  AbilityBehavior.MissileLaunchConfig = ____class_2
238
246
  __TS__SetDescriptor(
239
247
  AbilityBehavior.prototype,
@@ -257,13 +265,13 @@ __TS__SetDescriptor(
257
265
  Unit.abilityDestructibleTargetChannelingStartEvent:addListener(createUnitEventListener("onDestructibleTargetChannelingStart"))
258
266
  Unit.abilityPointTargetChannelingStartEvent:addListener(createUnitEventListener("onPointTargetChannelingStart"))
259
267
  Unit.abilityNoTargetChannelingStartEvent:addListener(createUnitEventListener("onNoTargetChannelingStart"))
260
- Unit.abilityChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onImpact"))
261
- Unit.abilityWidgetTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onWidgetTargetImpact"))
262
- Unit.abilityUnitTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onUnitTargetImpact"))
263
- Unit.abilityItemTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onItemTargetImpact"))
264
- Unit.abilityDestructibleTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onDestructibleTargetImpact"))
265
- Unit.abilityPointTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onPointTargetImpact"))
266
- Unit.abilityNoTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onNoTargetImpact"))
268
+ Unit.abilityImpactEvent:addListener(createUnitEventListener("onImpact"))
269
+ Unit.abilityWidgetTargetImpactEvent:addListener(createUnitEventListener("onWidgetTargetImpact"))
270
+ Unit.abilityUnitTargetImpactEvent:addListener(createUnitEventListener("onUnitTargetImpact"))
271
+ Unit.abilityItemTargetImpactEvent:addListener(createUnitEventListener("onItemTargetImpact"))
272
+ Unit.abilityDestructibleTargetImpactEvent:addListener(createUnitEventListener("onDestructibleTargetImpact"))
273
+ Unit.abilityPointTargetImpactEvent:addListener(createUnitEventListener("onPointTargetImpact"))
274
+ Unit.abilityNoTargetImpactEvent:addListener(createUnitEventListener("onNoTargetImpact"))
267
275
  Unit.abilityChannelingFinishEvent:addListener(createUnitEventListener("onChannelingFinish"))
268
276
  Unit.abilityStopEvent:addListener(createUnitEventListener("onStop"))
269
277
  end)(AbilityBehavior)
@@ -4,15 +4,21 @@ import { Unit } from "../../unit";
4
4
  import { BuffTypeId } from "../../object-data/entry/buff-type";
5
5
  import { TextTagPreset } from "../../text-tag";
6
6
  import { Destructor } from "../../../destroyable";
7
- export type StunImmunityUnitBehaviourParameters = {
7
+ import { BehaviorPriority } from "../../behavior";
8
+ export type StunImmunityUnitBehaviorParameters = {
9
+ readonly priority?: BehaviorPriority;
8
10
  buffTypeIds?: LuaSet<BuffTypeId>;
9
11
  textTagPreset?: TextTagPreset;
10
12
  textTagText?: string;
13
+ additionalAction?: (this: void, unit: Unit) => void;
11
14
  };
12
15
  export declare class StunImmunityUnitBehavior extends UnitBehavior {
13
- private readonly parameters;
14
- static defaultParameters: StunImmunityUnitBehaviourParameters;
15
- constructor(unit: Unit, parameters?: StunImmunityUnitBehaviourParameters);
16
+ readonly parameters: Readonly<StunImmunityUnitBehaviorParameters>;
17
+ static defaultParameters: StunImmunityUnitBehaviorParameters;
18
+ constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviorParameters>);
16
19
  protected onDestroy(): Destructor;
17
- private onBuffsCheck;
20
+ onDamageReceived(): void;
21
+ onTargetingAbilityChannelingStart(): void;
22
+ onTargetingAbilityImpact(): void;
23
+ protected onEffect(): void;
18
24
  }
@@ -12,31 +12,53 @@ local flatMapToLuaSet = ____arrays.flatMapToLuaSet
12
12
  local map = ____arrays.map
13
13
  local ____text_2Dtag = require("engine.text-tag")
14
14
  local TextTag = ____text_2Dtag.TextTag
15
+ local ____timer = require("core.types.timer")
16
+ local Timer = ____timer.Timer
15
17
  local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
16
18
  return flatMapToLuaSet(
17
19
  AbilityType:getAllByBaseIds(map({
18
- "Aslo",
19
- "AHtc",
20
- "Aens",
21
- "Aprg",
22
- "Apg2",
23
- "AOeq",
24
- "SNeq",
25
- "Aweb",
26
- "Afra",
27
- "Afrb",
28
- "Afrc",
29
- "Afr2",
30
- "Acri",
31
- "Scri",
32
- "AUfn",
33
- "Aspo",
34
- "AEer",
35
- "ACwb"
20
+ "AHtb",
21
+ "AHbh",
22
+ "AOws",
23
+ "AOw2",
24
+ "AUim",
25
+ "Acyc",
26
+ "ANfb",
27
+ "ANsb",
28
+ "ANcs",
29
+ "ANc1",
30
+ "ANc2",
31
+ "ANc3",
32
+ "ACbh",
33
+ "ANbh",
34
+ "SCc1",
35
+ "ACcy",
36
+ "ANb2",
37
+ "Awrs",
38
+ "Awrh",
39
+ "Awrg",
40
+ "ACtb",
41
+ "ACcb"
36
42
  }, fourCC)),
37
43
  function(abilityType) return __TS__ArrayFlat(abilityType.buffTypeIds) end
38
44
  )
39
45
  end)
46
+ local function process(behavior)
47
+ local hasRemovedBuffs = false
48
+ for buffTypeId in pairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
+ hasRemovedBuffs = hasRemovedBuffs or behavior.unit:removeBuff(buffTypeId)
50
+ end
51
+ if hasRemovedBuffs then
52
+ behavior.onEffect(behavior)
53
+ if behavior.parameters.textTagText ~= nil then
54
+ TextTag:flash(TextTag.MISS, behavior.parameters.textTagText, behavior.unit.x, behavior.unit.y)
55
+ end
56
+ local ____opt_0 = behavior.parameters.additionalAction
57
+ if ____opt_0 ~= nil then
58
+ ____opt_0(behavior.unit)
59
+ end
60
+ end
61
+ end
40
62
  ____exports.StunImmunityUnitBehavior = __TS__Class()
41
63
  local StunImmunityUnitBehavior = ____exports.StunImmunityUnitBehavior
42
64
  StunImmunityUnitBehavior.name = "StunImmunityUnitBehavior"
@@ -45,23 +67,26 @@ function StunImmunityUnitBehavior.prototype.____constructor(self, unit, paramete
45
67
  if parameters == nil then
46
68
  parameters = ____exports.StunImmunityUnitBehavior.defaultParameters
47
69
  end
48
- UnitBehavior.prototype.____constructor(self, unit)
70
+ UnitBehavior.prototype.____constructor(self, unit, parameters.priority)
49
71
  self.parameters = parameters
50
72
  unit:decrementStunCounter()
51
- self:onBuffsCheck()
73
+ process(self)
52
74
  end
53
75
  function StunImmunityUnitBehavior.prototype.onDestroy(self)
54
76
  self.unit:incrementStunCounter()
55
77
  return UnitBehavior.prototype.onDestroy(self)
56
78
  end
57
- function StunImmunityUnitBehavior.prototype.onBuffsCheck(self)
58
- local hasRemovedBuffs = false
59
- for buffTypeId in pairs(self.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
60
- hasRemovedBuffs = hasRemovedBuffs or self.unit:removeBuff(buffTypeId)
61
- end
62
- if hasRemovedBuffs and self.parameters.textTagText ~= nil then
63
- TextTag:flash(TextTag.MISS, self.parameters.textTagText, self.unit.x, self.unit.y)
64
- end
79
+ function StunImmunityUnitBehavior.prototype.onDamageReceived(self)
80
+ process(self)
81
+ Timer:run(process, self)
82
+ end
83
+ function StunImmunityUnitBehavior.prototype.onTargetingAbilityChannelingStart(self)
84
+ process(self)
85
+ end
86
+ function StunImmunityUnitBehavior.prototype.onTargetingAbilityImpact(self)
87
+ process(self)
88
+ end
89
+ function StunImmunityUnitBehavior.prototype.onEffect(self)
65
90
  end
66
91
  StunImmunityUnitBehavior.defaultParameters = {buffTypeIds = DEFAULT_BUFF_TYPE_IDS, textTagPreset = TextTag.MISS, textTagText = nil}
67
92
  return ____exports
@@ -1,26 +1,64 @@
1
1
  /** @noSelfInFile */
2
- import { Behavior } from "../behavior";
2
+ import { Behavior, BehaviorPriority } from "../behavior";
3
3
  import { Ability } from "../internal/ability";
4
4
  import { DamageEvent, DamagingEvent, Unit } from "../internal/unit";
5
5
  import "../internal/unit+ability";
6
6
  import "../internal/unit-missile-launch";
7
7
  import { Item } from "../internal/item";
8
+ import { AbilityBehavior } from "./ability";
9
+ import { Event } from "../../event";
10
+ import { Destructor } from "../../destroyable";
11
+ import type { Widget } from "../../core/types/widget";
12
+ import { Destructable } from "../../core/types/destructable";
13
+ import type { Buff } from "../buff";
14
+ import { UnitBonusType } from "../internal/unit/bonus";
15
+ import { Player } from "../../core/types/player";
16
+ import { UnitTypeId } from "../object-data/entry/unit-type";
8
17
  export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
9
18
  export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
10
- constructor(unit: Unit);
19
+ readonly sourceAbilityBehavior?: AbilityBehavior;
20
+ private _bonusIdByBonusType?;
21
+ constructor(unit: Unit, priority?: BehaviorPriority);
22
+ protected onDestroy(): Destructor;
11
23
  get unit(): Unit;
24
+ protected getUnitBonus(bonusType: UnitBonusType): number;
25
+ protected addOrUpdateOrRemoveUnitBonus(bonusType: UnitBonusType, value: number): void;
26
+ protected registerOwningPlayerEvent<T extends string, Args extends any[]>(this: UnitBehavior<PeriodicActionParameters> & Record<T, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, extractPlayer: (...args: Args) => Player | undefined, listener: T): void;
27
+ protected registerInRangeUnitEvent<T extends string, Args extends any[]>(this: UnitBehavior<PeriodicActionParameters> & Record<T, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, extractUnit: (...args: Args) => Unit | undefined, range: number, listener: T): void;
28
+ onImmediateOrder(orderId: number): void;
29
+ onTargetOrder(orderId: number, target: Widget): void;
30
+ onPointOrder(orderId: number, x: number, y: number): void;
12
31
  onAutoAttackStart(target: Unit): void;
13
32
  onAutoAttackFinish(target: Unit): void;
33
+ onTargetingAutoAttackStart(source: Unit): void;
34
+ onTargetingAutoAttackFinish(source: Unit): void;
14
35
  onDamageDealing(target: Unit, event: DamagingEvent): void;
15
36
  onDamageDealt(target: Unit, event: DamageEvent): void;
16
37
  onDamageReceiving(source: Unit | undefined, event: DamagingEvent): void;
17
38
  onDamageReceived(source: Unit | undefined, event: DamageEvent): void;
18
39
  onAbilityGained(ability: Ability): void;
19
40
  onAbilityLost(ability: Ability): void;
41
+ onAbilityChannelingStart(ability: Ability): void;
42
+ onAbilityImpact(ability: Ability): void;
43
+ onAbilityWidgetTargetImpact(ability: Ability, target: Widget): void;
44
+ onAbilityUnitTargetImpact(ability: Ability, target: Unit): void;
45
+ onAbilityItemTargetImpact(ability: Ability, target: Item): void;
46
+ onAbilityDestructibleTargetImpact(ability: Ability, target: Destructable): void;
47
+ onAbilityPointTargetImpact(ability: Ability, x: number, y: number): void;
48
+ onAbilityNoTargetImpact(ability: Ability): void;
49
+ onAbilityChannelingFinish(ability: Ability): void;
50
+ onAbilityStop(ability: Ability): void;
51
+ onTargetingAbilityChannelingStart(ability: Ability, source: Unit): void;
52
+ onTargetingAbilityImpact(ability: Ability, source: Unit): void;
53
+ onBuffGained(buff: Buff): void;
54
+ onBuffLost(buff: Buff): void;
20
55
  onItemDropped(item: Item): void;
21
56
  onItemPickedUp(item: Item): void;
22
57
  onItemUsed(item: Item): void;
23
58
  onItemStacked(item: Item): void;
59
+ onItemChargesChanged(item: Item): void;
24
60
  onKill(target: Unit): void;
25
61
  onDeath(source: Unit | undefined): void;
62
+ onOwnerChange(previousOwner: Player): void;
63
+ static bindUnitType<Args extends any[]>(this: UnitBehaviorConstructor<Args>, unitTypeId: UnitTypeId, ...args: Args): void;
26
64
  }