warscript 0.0.1-dev.c60b168 → 0.0.1-dev.c677d41

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 (92) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +14 -9
  4. package/core/types/handle.lua +1 -1
  5. package/core/types/player.d.ts +16 -0
  6. package/core/types/player.lua +57 -14
  7. package/core/types/playerCamera.lua +44 -0
  8. package/core/types/tileCell.d.ts +11 -1
  9. package/core/types/tileCell.lua +97 -0
  10. package/core/types/timer.d.ts +3 -2
  11. package/core/types/timer.lua +8 -2
  12. package/decl/native.d.ts +2 -2
  13. package/destroyable.d.ts +1 -0
  14. package/destroyable.lua +9 -0
  15. package/engine/behavior.d.ts +10 -2
  16. package/engine/behavior.lua +157 -76
  17. package/engine/behaviour/ability/apply-buff.lua +4 -4
  18. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  19. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  20. package/engine/behaviour/ability.d.ts +2 -1
  21. package/engine/behaviour/ability.lua +2 -1
  22. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  23. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  24. package/engine/behaviour/unit.d.ts +9 -3
  25. package/engine/behaviour/unit.lua +106 -24
  26. package/engine/buff.d.ts +19 -4
  27. package/engine/buff.lua +122 -41
  28. package/engine/internal/ability.lua +6 -5
  29. package/engine/internal/item.d.ts +13 -15
  30. package/engine/internal/item.lua +59 -48
  31. package/engine/internal/mechanics/cast-ability.lua +6 -3
  32. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  33. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  34. package/engine/internal/unit/ability.d.ts +14 -14
  35. package/engine/internal/unit/ability.lua +72 -45
  36. package/engine/internal/unit/attributes.d.ts +17 -0
  37. package/engine/internal/unit/attributes.lua +46 -0
  38. package/engine/internal/unit/bonus.d.ts +2 -0
  39. package/engine/internal/unit/bonus.lua +10 -0
  40. package/engine/internal/unit/fly-height.d.ts +7 -0
  41. package/engine/internal/unit/fly-height.lua +20 -0
  42. package/engine/internal/unit/interrupts.d.ts +12 -0
  43. package/engine/internal/unit/interrupts.lua +28 -0
  44. package/engine/internal/unit/main-selected.lua +12 -27
  45. package/engine/internal/unit/scale.d.ts +7 -0
  46. package/engine/internal/unit/scale.lua +20 -0
  47. package/engine/internal/unit-missile-launch.lua +51 -20
  48. package/engine/internal/unit.d.ts +16 -20
  49. package/engine/internal/unit.lua +159 -160
  50. package/engine/local-client.d.ts +2 -0
  51. package/engine/local-client.lua +30 -0
  52. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  53. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  54. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  55. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  56. package/engine/object-data/entry/ability-type.lua +4 -1
  57. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  58. package/engine/object-data/entry/destructible-type.lua +155 -0
  59. package/engine/object-data/entry/unit-type.d.ts +4 -0
  60. package/engine/object-data/entry/unit-type.lua +76 -32
  61. package/engine/object-field/unit.d.ts +20 -5
  62. package/engine/object-field/unit.lua +61 -0
  63. package/engine/object-field.d.ts +9 -1
  64. package/engine/object-field.lua +265 -122
  65. package/engine/random.d.ts +9 -0
  66. package/engine/random.lua +13 -0
  67. package/engine/standard/fields/ability.d.ts +2 -2
  68. package/engine/standard/fields/ability.lua +2 -2
  69. package/engine/standard/fields/unit.d.ts +11 -3
  70. package/engine/standard/fields/unit.lua +15 -2
  71. package/engine/synchronization.d.ts +11 -0
  72. package/engine/synchronization.lua +77 -0
  73. package/engine/text-tag.lua +3 -2
  74. package/engine/unit.d.ts +4 -0
  75. package/engine/unit.lua +4 -0
  76. package/net/socket.lua +1 -1
  77. package/objutil/buff.lua +10 -8
  78. package/package.json +2 -2
  79. package/patch-lua.lua +15 -0
  80. package/patch-lualib.lua +1 -1
  81. package/utility/arrays.d.ts +1 -0
  82. package/utility/arrays.lua +8 -0
  83. package/utility/callback-array.d.ts +5 -1
  84. package/utility/callback-array.lua +16 -1
  85. package/utility/linked-map.d.ts +26 -0
  86. package/utility/linked-map.lua +66 -0
  87. package/utility/linked-set.d.ts +1 -0
  88. package/utility/linked-set.lua +23 -1
  89. package/utility/lua-maps.d.ts +11 -2
  90. package/utility/lua-maps.lua +33 -2
  91. package/utility/records.lua +20 -1
  92. package/utility/types.d.ts +3 -0
@@ -18,56 +18,71 @@ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
18
18
  local ____lua_2Dsets = require("utility.lua-sets")
19
19
  local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
20
20
  local safeCall = warpack.safeCall
21
- local firstBehaviorByObject = {}
22
- local lastBehaviorByObject = {}
21
+ local firstBehaviorByObjectByPriority = {[0] = {}, [2] = {}, [1] = {}}
22
+ local lastBehaviorByObjectByPriority = {[0] = {}, [2] = {}, [1] = {}}
23
23
  local function invokeBehaviorOnPeriod(behavior, ...)
24
24
  behavior.onPeriod(behavior, ...)
25
25
  end
26
26
  local function reduceBehaviors(behaviorConstructor, object, operation, initial, consumerOrKey, ...)
27
27
  local accumulator = initial
28
- local behavior = firstBehaviorByObject[object]
29
- if behavior ~= nil then
30
- if type(consumerOrKey) == "function" then
31
- repeat
32
- do
33
- if __TS__InstanceOf(behavior, behaviorConstructor) then
34
- local isSuccessful, result = safeCall(consumerOrKey, behavior, ...)
35
- if isSuccessful then
36
- accumulator = operation(accumulator, result)
28
+ for priority = 0, 2 do
29
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
30
+ if behavior ~= nil then
31
+ if type(consumerOrKey) == "function" then
32
+ repeat
33
+ do
34
+ if __TS__InstanceOf(behavior, behaviorConstructor) then
35
+ local isSuccessful, result = safeCall(consumerOrKey, behavior, ...)
36
+ if isSuccessful then
37
+ accumulator = operation(accumulator, result)
38
+ end
37
39
  end
40
+ behavior = behavior[1]
38
41
  end
39
- behavior = behavior[1]
40
- end
41
- until not (behavior ~= nil)
42
- else
43
- repeat
44
- do
45
- if __TS__InstanceOf(behavior, behaviorConstructor) then
46
- local isSuccessful, result = safeCall(behavior[consumerOrKey], behavior, ...)
47
- if isSuccessful then
48
- accumulator = operation(accumulator, result)
42
+ until not (behavior ~= nil)
43
+ else
44
+ repeat
45
+ do
46
+ if __TS__InstanceOf(behavior, behaviorConstructor) then
47
+ local isSuccessful, result = safeCall(behavior[consumerOrKey], behavior, ...)
48
+ if isSuccessful then
49
+ accumulator = operation(accumulator, result)
50
+ end
49
51
  end
52
+ behavior = behavior[1]
50
53
  end
51
- behavior = behavior[1]
52
- end
53
- until not (behavior ~= nil)
54
+ until not (behavior ~= nil)
55
+ end
54
56
  end
55
57
  end
56
58
  return accumulator
57
59
  end
60
+ local behaviorsByGlobalEvent = {}
61
+ local listenerByBehaviorByGlobalEvent = {}
62
+ local globalEventsByBehavior = {}
58
63
  local behaviorsByEvent = {}
59
64
  local listenerByBehaviorByEvent = {}
60
65
  local eventsByBehavior = {}
66
+ local function safeCallBehaviorListener(behavior, behaviors, listenerByBehavior, ...)
67
+ if behaviors[behavior] ~= nil then
68
+ safeCall(behavior[listenerByBehavior[behavior]], behavior, ...)
69
+ end
70
+ end
61
71
  ____exports.Behavior = __TS__Class()
62
72
  local Behavior = ____exports.Behavior
63
73
  Behavior.name = "Behavior"
64
74
  __TS__ClassExtends(Behavior, AbstractDestroyable)
65
- function Behavior.prototype.____constructor(self, object)
75
+ function Behavior.prototype.____constructor(self, object, priority)
76
+ if priority == nil then
77
+ priority = 1
78
+ end
66
79
  AbstractDestroyable.prototype.____constructor(self)
67
80
  self.object = object
81
+ self.priority = priority
82
+ local lastBehaviorByObject = lastBehaviorByObjectByPriority[priority]
68
83
  local lastBehavior = lastBehaviorByObject[object]
69
84
  if lastBehavior == nil then
70
- firstBehaviorByObject[object] = self
85
+ firstBehaviorByObjectByPriority[priority][object] = self
71
86
  lastBehaviorByObject[object] = self
72
87
  else
73
88
  self[0] = lastBehavior
@@ -80,18 +95,32 @@ function Behavior.prototype.onDestroy(self)
80
95
  if ____opt_0 ~= nil then
81
96
  ____opt_0:destroy()
82
97
  end
83
- local events = eventsByBehavior[self]
84
- if events ~= nil then
85
- for event in pairs(events) do
86
- local ____opt_2 = behaviorsByEvent[event]
98
+ local globalEvents = globalEventsByBehavior[self]
99
+ if globalEvents ~= nil then
100
+ for event in pairs(globalEvents) do
101
+ local ____opt_2 = behaviorsByGlobalEvent[event]
87
102
  if ____opt_2 ~= nil then
88
103
  ____opt_2:remove(self)
89
104
  end
90
- local ____opt_4 = listenerByBehaviorByEvent[event]
105
+ local ____opt_4 = listenerByBehaviorByGlobalEvent[event]
91
106
  if ____opt_4 ~= nil then
92
107
  ____opt_4[self] = nil
93
108
  end
94
109
  end
110
+ globalEventsByBehavior[self] = nil
111
+ end
112
+ local events = eventsByBehavior[self]
113
+ if events ~= nil then
114
+ for event in pairs(events) do
115
+ local ____opt_6 = behaviorsByEvent[event]
116
+ if ____opt_6 ~= nil then
117
+ ____opt_6[self] = nil
118
+ end
119
+ local ____opt_8 = listenerByBehaviorByEvent[event]
120
+ if ____opt_8 ~= nil then
121
+ ____opt_8[self] = nil
122
+ end
123
+ end
95
124
  eventsByBehavior[self] = nil
96
125
  end
97
126
  local previousBehavior = self[0]
@@ -99,16 +128,44 @@ function Behavior.prototype.onDestroy(self)
99
128
  if previousBehavior ~= nil then
100
129
  previousBehavior[1] = nextBehavior
101
130
  else
102
- firstBehaviorByObject[self.object] = nextBehavior
131
+ firstBehaviorByObjectByPriority[self.priority][self.object] = nextBehavior
103
132
  end
104
133
  if nextBehavior ~= nil then
105
134
  nextBehavior[0] = previousBehavior
106
135
  else
107
- lastBehaviorByObject[self.object] = previousBehavior
136
+ lastBehaviorByObjectByPriority[self.priority][self.object] = previousBehavior
108
137
  end
109
138
  return AbstractDestroyable.prototype.onDestroy(self)
110
139
  end
111
- function Behavior.prototype.registerEvent(self, event, listener)
140
+ function Behavior.prototype.registerGlobalEvent(self, event, listener)
141
+ local listenerByBehavior = getOrPut(listenerByBehaviorByGlobalEvent, event, mutableLuaMap)
142
+ listenerByBehavior[self] = listener
143
+ getOrPut(globalEventsByBehavior, self, mutableLuaSet)[event] = true
144
+ local behaviors = behaviorsByGlobalEvent[event]
145
+ if behaviors == nil then
146
+ event:addListener(function(...)
147
+ local behaviors = behaviorsByGlobalEvent[event]
148
+ if behaviors ~= nil then
149
+ for behavior in pairs(behaviors) do
150
+ safeCall(behavior[listenerByBehavior[behavior]], behavior, ...)
151
+ end
152
+ end
153
+ end)
154
+ behaviors = __TS__New(LinkedSet)
155
+ behaviorsByGlobalEvent[event] = behaviors
156
+ end
157
+ behaviors:add(self)
158
+ end
159
+ function Behavior.prototype.deregisterGlobalEvent(self, event)
160
+ local behaviors = behaviorsByGlobalEvent[event]
161
+ if behaviors ~= nil and behaviors:remove(self) then
162
+ globalEventsByBehavior[self][event] = nil
163
+ listenerByBehaviorByGlobalEvent[event][self] = nil
164
+ return true
165
+ end
166
+ return false
167
+ end
168
+ function Behavior.prototype.registerEvent(self, event, extractObject, listener)
112
169
  local listenerByBehavior = getOrPut(listenerByBehaviorByEvent, event, mutableLuaMap)
113
170
  listenerByBehavior[self] = listener
114
171
  getOrPut(eventsByBehavior, self, mutableLuaSet)[event] = true
@@ -117,19 +174,27 @@ function Behavior.prototype.registerEvent(self, event, listener)
117
174
  event:addListener(function(...)
118
175
  local behaviors = behaviorsByEvent[event]
119
176
  if behaviors ~= nil then
120
- for behavior in pairs(behaviors) do
121
- safeCall(behavior[listenerByBehavior[behavior]], behavior, ...)
177
+ local object = extractObject(...)
178
+ if object ~= nil then
179
+ ____exports.Behavior:forAll(
180
+ object,
181
+ safeCallBehaviorListener,
182
+ behaviors,
183
+ listenerByBehavior,
184
+ ...
185
+ )
122
186
  end
123
187
  end
124
188
  end)
125
- behaviors = __TS__New(LinkedSet)
189
+ behaviors = {}
126
190
  behaviorsByEvent[event] = behaviors
127
191
  end
128
- behaviors:add(self)
192
+ behaviors[self] = true
129
193
  end
130
194
  function Behavior.prototype.deregisterEvent(self, event)
131
195
  local behaviors = behaviorsByEvent[event]
132
- if behaviors ~= nil and behaviors:remove(self) then
196
+ if behaviors ~= nil and behaviors[self] ~= nil then
197
+ behaviors[self] = nil
133
198
  eventsByBehavior[self][event] = nil
134
199
  listenerByBehaviorByEvent[event][self] = nil
135
200
  return true
@@ -161,78 +226,94 @@ function Behavior.prototype.stopPeriodicAction(self)
161
226
  end
162
227
  function Behavior.count(self, object, limit)
163
228
  local behaviorsCount = 0
164
- local behavior = firstBehaviorByObject[object]
165
- while behavior ~= nil and (limit == nil or behaviorsCount < limit) do
166
- if __TS__InstanceOf(behavior, self) then
167
- behaviorsCount = behaviorsCount + 1
229
+ for priority = 0, 2 do
230
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
231
+ while behavior ~= nil and (limit == nil or behaviorsCount < limit) do
232
+ if __TS__InstanceOf(behavior, self) then
233
+ behaviorsCount = behaviorsCount + 1
234
+ end
235
+ behavior = behavior[1]
168
236
  end
169
- behavior = behavior[1]
170
237
  end
171
238
  return behaviorsCount
172
239
  end
173
240
  function Behavior.getFirst(self, object, countOrPredicate, ...)
174
- local behavior = firstBehaviorByObject[object]
175
241
  if type(countOrPredicate) ~= "number" then
176
- while behavior ~= nil do
177
- if __TS__InstanceOf(behavior, self) and (countOrPredicate == nil or countOrPredicate(behavior, ...)) then
178
- return behavior
242
+ for priority = 0, 2 do
243
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
244
+ while behavior ~= nil do
245
+ if __TS__InstanceOf(behavior, self) and (countOrPredicate == nil or countOrPredicate(behavior, ...)) then
246
+ return behavior
247
+ end
248
+ behavior = behavior[1]
179
249
  end
180
- behavior = behavior[1]
181
250
  end
182
251
  return nil
183
252
  end
184
253
  local behaviors = {}
185
254
  local behaviorsCount = 0
186
- while behavior ~= nil and behaviorsCount < countOrPredicate do
187
- if __TS__InstanceOf(behavior, self) then
188
- behaviorsCount = behaviorsCount + 1
189
- behaviors[behaviorsCount] = behavior
255
+ for priority = 0, 2 do
256
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
257
+ while behavior ~= nil and behaviorsCount < countOrPredicate do
258
+ if __TS__InstanceOf(behavior, self) then
259
+ behaviorsCount = behaviorsCount + 1
260
+ behaviors[behaviorsCount] = behavior
261
+ end
262
+ behavior = behavior[1]
190
263
  end
191
- behavior = behavior[1]
192
264
  end
193
265
  return behaviors
194
266
  end
195
267
  function Behavior.getLast(self, object)
196
- local behavior = lastBehaviorByObject[object]
197
- while behavior ~= nil do
198
- if __TS__InstanceOf(behavior, self) then
199
- return behavior
268
+ for priority = 2, 0, -1 do
269
+ local behavior = lastBehaviorByObjectByPriority[priority][object]
270
+ while behavior ~= nil do
271
+ if __TS__InstanceOf(behavior, self) then
272
+ return behavior
273
+ end
274
+ behavior = behavior[0]
200
275
  end
201
- behavior = behavior[0]
202
276
  end
203
277
  return nil
204
278
  end
205
279
  function Behavior.getAll(self, object, predicate, ...)
206
280
  local behaviors = {}
207
281
  local behaviorsCount = 0
208
- local behavior = firstBehaviorByObject[object]
209
- while behavior ~= nil do
210
- if __TS__InstanceOf(behavior, self) and (predicate == nil or predicate(behavior, ...)) then
211
- behaviorsCount = behaviorsCount + 1
212
- behaviors[behaviorsCount] = behavior
282
+ for priority = 0, 2 do
283
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
284
+ while behavior ~= nil do
285
+ if __TS__InstanceOf(behavior, self) and (predicate == nil or predicate(behavior, ...)) then
286
+ behaviorsCount = behaviorsCount + 1
287
+ behaviors[behaviorsCount] = behavior
288
+ end
289
+ behavior = behavior[1]
213
290
  end
214
- behavior = behavior[1]
215
291
  end
216
292
  return behaviors
217
293
  end
218
294
  function Behavior.forFirst(self, object, count, consumerOrKey, ...)
219
295
  local behaviorsCount = 0
220
- local behavior = firstBehaviorByObject[object]
221
296
  if type(consumerOrKey) == "function" then
222
- while behavior ~= nil and behaviorsCount < count do
223
- if __TS__InstanceOf(behavior, self) then
224
- safeCall(consumerOrKey, behavior, ...)
225
- behaviorsCount = behaviorsCount + 1
297
+ for priority = 0, 2 do
298
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
299
+ while behavior ~= nil and behaviorsCount < count do
300
+ if __TS__InstanceOf(behavior, self) then
301
+ safeCall(consumerOrKey, behavior, ...)
302
+ behaviorsCount = behaviorsCount + 1
303
+ end
304
+ behavior = behavior[1]
226
305
  end
227
- behavior = behavior[1]
228
306
  end
229
307
  else
230
- while behavior ~= nil and behaviorsCount < count do
231
- if __TS__InstanceOf(behavior, self) then
232
- safeCall(behavior[consumerOrKey], behavior, ...)
233
- behaviorsCount = behaviorsCount + 1
308
+ for priority = 0, 2 do
309
+ local behavior = firstBehaviorByObjectByPriority[priority][object]
310
+ while behavior ~= nil and behaviorsCount < count do
311
+ if __TS__InstanceOf(behavior, self) then
312
+ safeCall(behavior[consumerOrKey], behavior, ...)
313
+ behaviorsCount = behaviorsCount + 1
314
+ end
315
+ behavior = behavior[1]
234
316
  end
235
- behavior = behavior[1]
236
317
  end
237
318
  end
238
319
  return behaviorsCount
@@ -27,7 +27,7 @@ function ApplyBuffAbilityBehavior.prototype.____constructor(self, ability, const
27
27
  constructorOrTypeIdOrTypeIds,
28
28
  typeIdOrTypeIdsOrPolarityOrTypeIdSelectionPolicy,
29
29
  polarityOrTypeIdSelectionPolicyOrResistanceType,
30
- ability,
30
+ self,
31
31
  resistanceTypeOrPolarityOrParameters
32
32
  )
33
33
  end
@@ -39,7 +39,7 @@ function ApplyBuffAbilityBehavior.prototype.____constructor(self, ability, const
39
39
  typeIdOrTypeIdsOrPolarityOrTypeIdSelectionPolicy,
40
40
  polarityOrTypeIdSelectionPolicyOrResistanceType,
41
41
  resistanceTypeOrPolarityOrParameters,
42
- ability,
42
+ self,
43
43
  parametersOrResistanceType
44
44
  )
45
45
  end
@@ -50,7 +50,7 @@ function ApplyBuffAbilityBehavior.prototype.____constructor(self, ability, const
50
50
  typeIdOrTypeIdsOrPolarityOrTypeIdSelectionPolicy,
51
51
  polarityOrTypeIdSelectionPolicyOrResistanceType,
52
52
  resistanceTypeOrPolarityOrParameters,
53
- ability,
53
+ self,
54
54
  parametersOrResistanceType
55
55
  )
56
56
  end
@@ -62,7 +62,7 @@ function ApplyBuffAbilityBehavior.prototype.____constructor(self, ability, const
62
62
  polarityOrTypeIdSelectionPolicyOrResistanceType,
63
63
  resistanceTypeOrPolarityOrParameters,
64
64
  parametersOrResistanceType,
65
- ability,
65
+ self,
66
66
  parameters
67
67
  )
68
68
  end
@@ -14,3 +14,12 @@ export declare class RemoveBuffsSelfAbilityBehavior extends AbilityBehavior {
14
14
  constructor(ability: Ability, polarity?: AbilityDependentValue<BuffPolarity> | undefined, resistanceType?: AbilityDependentValue<BuffResistanceType> | undefined, includeExpirationTimers?: AbilityDependentValue<boolean> | undefined, includeAuras?: AbilityDependentValue<boolean> | undefined, autoDispel?: AbilityDependentValue<boolean> | undefined);
15
15
  onImpact(caster: Unit): void;
16
16
  }
17
+ export declare class RemoveBuffsTargetAbilityBehavior extends AbilityBehavior {
18
+ private readonly polarity?;
19
+ private readonly resistanceType?;
20
+ private readonly includeExpirationTimers?;
21
+ private readonly includeAuras?;
22
+ private readonly autoDispel?;
23
+ constructor(ability: Ability, polarity?: AbilityDependentValue<BuffPolarity> | undefined, resistanceType?: AbilityDependentValue<BuffResistanceType> | undefined, includeExpirationTimers?: AbilityDependentValue<boolean> | undefined, includeAuras?: AbilityDependentValue<boolean> | undefined, autoDispel?: AbilityDependentValue<boolean> | undefined);
24
+ onUnitTargetImpact(_: Unit, target: Unit): void;
25
+ }
@@ -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
@@ -1,6 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Behavior } from "../behavior";
3
- import { Unit } from "../unit";
3
+ import { Unit } from "../internal/unit";
4
+ import "../internal/unit/ability";
4
5
  import { Ability } from "../internal/ability";
5
6
  import { AbilityTypeId } from "../object-data/entry/ability-type";
6
7
  import { Widget } from "../../core/types/widget";
@@ -7,8 +7,9 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
7
7
  local ____exports = {}
8
8
  local ____behavior = require("engine.behavior")
9
9
  local Behavior = ____behavior.Behavior
10
- local ____unit = require("engine.unit")
10
+ local ____unit = require("engine.internal.unit")
11
11
  local Unit = ____unit.Unit
12
+ require("engine.internal.unit.ability")
12
13
  local ____ability = require("engine.internal.ability")
13
14
  local Ability = ____ability.Ability
14
15
  local ____effect = require("core.types.effect")
@@ -4,17 +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 = {
8
- buffTypeIds?: LuaSet<BuffTypeId>;
7
+ import { BehaviorPriority } from "../../behavior";
8
+ export type StunImmunityUnitBehaviorParameters = {
9
+ readonly priority?: BehaviorPriority;
10
+ buffTypeIds?: readonly 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
- readonly parameters: Readonly<StunImmunityUnitBehaviourParameters>;
14
- static defaultParameters: StunImmunityUnitBehaviourParameters;
15
- constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviourParameters>);
16
+ readonly parameters: Readonly<StunImmunityUnitBehaviorParameters>;
17
+ static defaultParameters: StunImmunityUnitBehaviorParameters;
18
+ constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviorParameters>);
16
19
  protected onDestroy(): Destructor;
17
20
  onDamageReceived(): void;
18
21
  onTargetingAbilityChannelingStart(): void;
19
22
  onTargetingAbilityImpact(): void;
23
+ protected onEffect(): void;
20
24
  }
@@ -8,14 +8,15 @@ local UnitBehavior = ____unit.UnitBehavior
8
8
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
9
9
  local AbilityType = ____ability_2Dtype.AbilityType
10
10
  local ____arrays = require("utility.arrays")
11
- local flatMapToLuaSet = ____arrays.flatMapToLuaSet
11
+ local distinct = ____arrays.distinct
12
+ local flatMap = ____arrays.flatMap
12
13
  local map = ____arrays.map
13
14
  local ____text_2Dtag = require("engine.text-tag")
14
15
  local TextTag = ____text_2Dtag.TextTag
15
16
  local ____timer = require("core.types.timer")
16
17
  local Timer = ____timer.Timer
17
18
  local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
18
- return flatMapToLuaSet(
19
+ return distinct(flatMap(
19
20
  AbilityType:getAllByBaseIds(map({
20
21
  "AHtb",
21
22
  "AHbh",
@@ -41,15 +42,22 @@ local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
41
42
  "ACcb"
42
43
  }, fourCC)),
43
44
  function(abilityType) return __TS__ArrayFlat(abilityType.buffTypeIds) end
44
- )
45
+ ))
45
46
  end)
46
47
  local function process(behavior)
47
48
  local hasRemovedBuffs = false
48
- for buffTypeId in pairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
+ for ____, buffTypeId in ipairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
50
  hasRemovedBuffs = hasRemovedBuffs or behavior.unit:removeBuff(buffTypeId)
50
51
  end
51
- if hasRemovedBuffs and behavior.parameters.textTagText ~= nil then
52
- TextTag:flash(TextTag.MISS, behavior.parameters.textTagText, behavior.unit.x, behavior.unit.y)
52
+ if hasRemovedBuffs then
53
+ behavior.onEffect(behavior)
54
+ if behavior.parameters.textTagText ~= nil then
55
+ TextTag:flash(TextTag.MISS, behavior.parameters.textTagText, behavior.unit.x, behavior.unit.y)
56
+ end
57
+ local ____opt_0 = behavior.parameters.additionalAction
58
+ if ____opt_0 ~= nil then
59
+ ____opt_0(behavior.unit)
60
+ end
53
61
  end
54
62
  end
55
63
  ____exports.StunImmunityUnitBehavior = __TS__Class()
@@ -60,7 +68,7 @@ function StunImmunityUnitBehavior.prototype.____constructor(self, unit, paramete
60
68
  if parameters == nil then
61
69
  parameters = ____exports.StunImmunityUnitBehavior.defaultParameters
62
70
  end
63
- UnitBehavior.prototype.____constructor(self, unit)
71
+ UnitBehavior.prototype.____constructor(self, unit, parameters.priority)
64
72
  self.parameters = parameters
65
73
  unit:decrementStunCounter()
66
74
  process(self)
@@ -79,5 +87,7 @@ end
79
87
  function StunImmunityUnitBehavior.prototype.onTargetingAbilityImpact(self)
80
88
  process(self)
81
89
  end
90
+ function StunImmunityUnitBehavior.prototype.onEffect(self)
91
+ end
82
92
  StunImmunityUnitBehavior.defaultParameters = {buffTypeIds = DEFAULT_BUFF_TYPE_IDS, textTagPreset = TextTag.MISS, textTagText = nil}
83
93
  return ____exports
@@ -1,26 +1,29 @@
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 type { AbilityBehavior } from "./ability";
8
+ import { AbilityBehavior } from "./ability";
9
9
  import { Event } from "../../event";
10
10
  import { Destructor } from "../../destroyable";
11
11
  import type { Widget } from "../../core/types/widget";
12
12
  import { Destructable } from "../../core/types/destructable";
13
13
  import type { Buff } from "../buff";
14
14
  import { UnitBonusType } from "../internal/unit/bonus";
15
+ import { Player } from "../../core/types/player";
16
+ import { UnitTypeId } from "../object-data/entry/unit-type";
15
17
  export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
16
18
  export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
17
19
  readonly sourceAbilityBehavior?: AbilityBehavior;
18
20
  private _bonusIdByBonusType?;
19
- constructor(unit: Unit);
21
+ constructor(unit: Unit, priority?: BehaviorPriority);
20
22
  protected onDestroy(): Destructor;
21
23
  get unit(): Unit;
22
24
  protected getUnitBonus(bonusType: UnitBonusType): number;
23
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;
24
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;
25
28
  onImmediateOrder(orderId: number): void;
26
29
  onTargetOrder(orderId: number, target: Widget): void;
@@ -48,6 +51,7 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
48
51
  onTargetingAbilityChannelingStart(ability: Ability, source: Unit): void;
49
52
  onTargetingAbilityImpact(ability: Ability, source: Unit): void;
50
53
  onBuffGained(buff: Buff): void;
54
+ onBuffLost(buff: Buff): void;
51
55
  onItemDropped(item: Item): void;
52
56
  onItemPickedUp(item: Item): void;
53
57
  onItemUsed(item: Item): void;
@@ -55,4 +59,6 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
55
59
  onItemChargesChanged(item: Item): void;
56
60
  onKill(target: Unit): void;
57
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;
58
64
  }