warscript 0.0.1-dev.85b1c63 → 0.0.1-dev.870376f

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 (95) 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/player.d.ts +16 -0
  5. package/core/types/player.lua +57 -14
  6. package/core/types/playerCamera.lua +44 -0
  7. package/core/types/tileCell.d.ts +11 -1
  8. package/core/types/tileCell.lua +97 -0
  9. package/core/types/timer.d.ts +3 -2
  10. package/core/types/timer.lua +8 -2
  11. package/decl/native.d.ts +2 -2
  12. package/destroyable.d.ts +1 -0
  13. package/destroyable.lua +9 -0
  14. package/engine/behavior.d.ts +11 -2
  15. package/engine/behavior.lua +174 -71
  16. package/engine/behaviour/ability/apply-buff.lua +4 -4
  17. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  18. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  19. package/engine/behaviour/ability.d.ts +6 -1
  20. package/engine/behaviour/ability.lua +31 -1
  21. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  22. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  23. package/engine/behaviour/unit.d.ts +9 -3
  24. package/engine/behaviour/unit.lua +108 -26
  25. package/engine/buff.d.ts +19 -4
  26. package/engine/buff.lua +122 -41
  27. package/engine/internal/ability.lua +6 -5
  28. package/engine/internal/item.d.ts +13 -15
  29. package/engine/internal/item.lua +59 -48
  30. package/engine/internal/mechanics/cast-ability.lua +6 -3
  31. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  32. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  33. package/engine/internal/unit/ability.d.ts +14 -14
  34. package/engine/internal/unit/ability.lua +72 -45
  35. package/engine/internal/unit/attributes.d.ts +17 -0
  36. package/engine/internal/unit/attributes.lua +46 -0
  37. package/engine/internal/unit/bonus.d.ts +2 -0
  38. package/engine/internal/unit/bonus.lua +10 -0
  39. package/engine/internal/unit/fly-height.d.ts +7 -0
  40. package/engine/internal/unit/fly-height.lua +20 -0
  41. package/engine/internal/unit/interrupts.d.ts +12 -0
  42. package/engine/internal/unit/interrupts.lua +28 -0
  43. package/engine/internal/unit/main-selected.lua +12 -27
  44. package/engine/internal/unit/range-event.d.ts +12 -0
  45. package/engine/internal/unit/range-event.lua +90 -0
  46. package/engine/internal/unit/scale.d.ts +7 -0
  47. package/engine/internal/unit/scale.lua +20 -0
  48. package/engine/internal/unit-missile-launch.lua +51 -20
  49. package/engine/internal/unit.d.ts +17 -21
  50. package/engine/internal/unit.lua +166 -188
  51. package/engine/local-client.d.ts +2 -0
  52. package/engine/local-client.lua +30 -0
  53. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  54. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  55. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  56. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  57. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  58. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  59. package/engine/object-data/entry/ability-type.lua +4 -1
  60. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  61. package/engine/object-data/entry/destructible-type.lua +155 -0
  62. package/engine/object-data/entry/unit-type.d.ts +4 -0
  63. package/engine/object-data/entry/unit-type.lua +76 -32
  64. package/engine/object-field/unit.d.ts +20 -5
  65. package/engine/object-field/unit.lua +61 -0
  66. package/engine/object-field.d.ts +9 -1
  67. package/engine/object-field.lua +265 -122
  68. package/engine/random.d.ts +10 -0
  69. package/engine/random.lua +21 -0
  70. package/engine/standard/fields/ability.d.ts +2 -2
  71. package/engine/standard/fields/ability.lua +2 -2
  72. package/engine/standard/fields/unit.d.ts +11 -3
  73. package/engine/standard/fields/unit.lua +15 -2
  74. package/engine/synchronization.d.ts +11 -0
  75. package/engine/synchronization.lua +77 -0
  76. package/engine/text-tag.lua +3 -2
  77. package/engine/unit.d.ts +5 -0
  78. package/engine/unit.lua +5 -0
  79. package/net/socket.lua +1 -1
  80. package/objutil/buff.lua +10 -8
  81. package/package.json +2 -2
  82. package/patch-lua.lua +15 -0
  83. package/patch-lualib.lua +1 -1
  84. package/utility/arrays.d.ts +1 -0
  85. package/utility/arrays.lua +8 -0
  86. package/utility/callback-array.d.ts +5 -1
  87. package/utility/callback-array.lua +16 -1
  88. package/utility/linked-map.d.ts +34 -0
  89. package/utility/linked-map.lua +101 -0
  90. package/utility/linked-set.d.ts +3 -1
  91. package/utility/linked-set.lua +40 -1
  92. package/utility/lua-maps.d.ts +11 -2
  93. package/utility/lua-maps.lua +33 -2
  94. package/utility/records.lua +20 -1
  95. 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,21 +95,77 @@ function Behavior.prototype.onDestroy(self)
80
95
  if ____opt_0 ~= nil then
81
96
  ____opt_0:destroy()
82
97
  end
98
+ local globalEvents = globalEventsByBehavior[self]
99
+ if globalEvents ~= nil then
100
+ for event in pairs(globalEvents) do
101
+ local ____opt_2 = behaviorsByGlobalEvent[event]
102
+ if ____opt_2 ~= nil then
103
+ ____opt_2:remove(self)
104
+ end
105
+ local ____opt_4 = listenerByBehaviorByGlobalEvent[event]
106
+ if ____opt_4 ~= nil then
107
+ ____opt_4[self] = nil
108
+ end
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
124
+ eventsByBehavior[self] = nil
125
+ end
83
126
  local previousBehavior = self[0]
84
127
  local nextBehavior = self[1]
85
128
  if previousBehavior ~= nil then
86
129
  previousBehavior[1] = nextBehavior
87
130
  else
88
- firstBehaviorByObject[self.object] = nextBehavior
131
+ firstBehaviorByObjectByPriority[self.priority][self.object] = nextBehavior
89
132
  end
90
133
  if nextBehavior ~= nil then
91
134
  nextBehavior[0] = previousBehavior
92
135
  else
93
- lastBehaviorByObject[self.object] = previousBehavior
136
+ lastBehaviorByObjectByPriority[self.priority][self.object] = previousBehavior
94
137
  end
95
138
  return AbstractDestroyable.prototype.onDestroy(self)
96
139
  end
97
- 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)
98
169
  local listenerByBehavior = getOrPut(listenerByBehaviorByEvent, event, mutableLuaMap)
99
170
  listenerByBehavior[self] = listener
100
171
  getOrPut(eventsByBehavior, self, mutableLuaSet)[event] = true
@@ -103,16 +174,32 @@ function Behavior.prototype.registerEvent(self, event, listener)
103
174
  event:addListener(function(...)
104
175
  local behaviors = behaviorsByEvent[event]
105
176
  if behaviors ~= nil then
106
- for behavior in pairs(behaviors) do
107
- local ____self_2 = behavior
108
- ____self_2[listenerByBehavior[behavior]](____self_2, ...)
177
+ local object = extractObject(...)
178
+ if object ~= nil then
179
+ ____exports.Behavior:forAll(
180
+ object,
181
+ safeCallBehaviorListener,
182
+ behaviors,
183
+ listenerByBehavior,
184
+ ...
185
+ )
109
186
  end
110
187
  end
111
188
  end)
112
- behaviors = __TS__New(LinkedSet)
189
+ behaviors = {}
113
190
  behaviorsByEvent[event] = behaviors
114
191
  end
115
- behaviors:add(self)
192
+ behaviors[self] = true
193
+ end
194
+ function Behavior.prototype.deregisterEvent(self, event)
195
+ local behaviors = behaviorsByEvent[event]
196
+ if behaviors ~= nil and behaviors[self] ~= nil then
197
+ behaviors[self] = nil
198
+ eventsByBehavior[self][event] = nil
199
+ listenerByBehaviorByEvent[event][self] = nil
200
+ return true
201
+ end
202
+ return false
116
203
  end
117
204
  function Behavior.prototype.onPeriod(self, ...)
118
205
  end
@@ -139,78 +226,94 @@ function Behavior.prototype.stopPeriodicAction(self)
139
226
  end
140
227
  function Behavior.count(self, object, limit)
141
228
  local behaviorsCount = 0
142
- local behavior = firstBehaviorByObject[object]
143
- while behavior ~= nil and (limit == nil or behaviorsCount < limit) do
144
- if __TS__InstanceOf(behavior, self) then
145
- 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]
146
236
  end
147
- behavior = behavior[1]
148
237
  end
149
238
  return behaviorsCount
150
239
  end
151
240
  function Behavior.getFirst(self, object, countOrPredicate, ...)
152
- local behavior = firstBehaviorByObject[object]
153
241
  if type(countOrPredicate) ~= "number" then
154
- while behavior ~= nil do
155
- if __TS__InstanceOf(behavior, self) and (countOrPredicate == nil or countOrPredicate(behavior, ...)) then
156
- 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]
157
249
  end
158
- behavior = behavior[1]
159
250
  end
160
251
  return nil
161
252
  end
162
253
  local behaviors = {}
163
254
  local behaviorsCount = 0
164
- while behavior ~= nil and behaviorsCount < countOrPredicate do
165
- if __TS__InstanceOf(behavior, self) then
166
- behaviorsCount = behaviorsCount + 1
167
- 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]
168
263
  end
169
- behavior = behavior[1]
170
264
  end
171
265
  return behaviors
172
266
  end
173
267
  function Behavior.getLast(self, object)
174
- local behavior = lastBehaviorByObject[object]
175
- while behavior ~= nil do
176
- if __TS__InstanceOf(behavior, self) then
177
- 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]
178
275
  end
179
- behavior = behavior[0]
180
276
  end
181
277
  return nil
182
278
  end
183
279
  function Behavior.getAll(self, object, predicate, ...)
184
280
  local behaviors = {}
185
281
  local behaviorsCount = 0
186
- local behavior = firstBehaviorByObject[object]
187
- while behavior ~= nil do
188
- if __TS__InstanceOf(behavior, self) and (predicate == nil or predicate(behavior, ...)) then
189
- behaviorsCount = behaviorsCount + 1
190
- 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]
191
290
  end
192
- behavior = behavior[1]
193
291
  end
194
292
  return behaviors
195
293
  end
196
294
  function Behavior.forFirst(self, object, count, consumerOrKey, ...)
197
295
  local behaviorsCount = 0
198
- local behavior = firstBehaviorByObject[object]
199
296
  if type(consumerOrKey) == "function" then
200
- while behavior ~= nil and behaviorsCount < count do
201
- if __TS__InstanceOf(behavior, self) then
202
- safeCall(consumerOrKey, behavior, ...)
203
- 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]
204
305
  end
205
- behavior = behavior[1]
206
306
  end
207
307
  else
208
- while behavior ~= nil and behaviorsCount < count do
209
- if __TS__InstanceOf(behavior, self) then
210
- safeCall(behavior[consumerOrKey], behavior, ...)
211
- 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]
212
316
  end
213
- behavior = behavior[1]
214
317
  end
215
318
  end
216
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";
@@ -35,6 +36,10 @@ export declare abstract class AbilityBehavior<Parameters extends {
35
36
  ]): void;
36
37
  private static MissileLaunchConfig;
37
38
  private get missileLaunchConfig();
39
+ protected launchMissile(source: Unit, ...args: [
40
+ ...pointOrWidget: [x: number, y: number] | [widget: Unit /** TODO: support Widget */],
41
+ ...parameters: NonNullable<Parameters["missileParameters"]>
42
+ ]): void;
38
43
  protected onCreate(): void;
39
44
  onValueChange(_value: ReadonlySubscribableAbilityDependentValue<string | number | boolean>): void;
40
45
  onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
@@ -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")
@@ -29,7 +30,14 @@ local ____ability = require("engine.object-field.ability")
29
30
  local AbilityField = ____ability.AbilityField
30
31
  local AbilityLevelField = ____ability.AbilityLevelField
31
32
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
33
+ local ____missile = require("core.types.missile")
34
+ local Missile = ____missile.Missile
32
35
  local createBehaviorFunctionsByAbilityTypeId = {}
36
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
37
+ if success then
38
+ abilityBehavior:onMissileArrival(...)
39
+ end
40
+ end
33
41
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
34
42
  local function createUnitEventListener(key)
35
43
  return function(unit, ability, ...)
@@ -159,6 +167,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
159
167
  )
160
168
  end
161
169
  end
170
+ function AbilityBehavior.prototype.launchMissile(self, source, xOrWidget, yOrParameter, ...)
171
+ if type(xOrWidget) ~= "number" then
172
+ Missile:launch(
173
+ self.missileLaunchConfig,
174
+ source,
175
+ xOrWidget,
176
+ invokeOnMissileArrival,
177
+ self,
178
+ yOrParameter,
179
+ ...
180
+ )
181
+ else
182
+ Missile:launch(
183
+ self.missileLaunchConfig,
184
+ source,
185
+ vec2(xOrWidget, yOrParameter),
186
+ invokeOnMissileArrival,
187
+ self,
188
+ ...
189
+ )
190
+ end
191
+ end
162
192
  function AbilityBehavior.prototype.onCreate(self)
163
193
  end
164
194
  function AbilityBehavior.prototype.onValueChange(self, _value)
@@ -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
  }