warscript 0.0.1-dev.987b772 → 0.0.1-dev.9b0216a

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 (50) hide show
  1. package/core/types/effect.d.ts +13 -3
  2. package/core/types/effect.lua +116 -17
  3. package/core/types/frame.d.ts +3 -0
  4. package/core/types/frame.lua +59 -0
  5. package/core/util.d.ts +1 -1
  6. package/core/util.lua +6 -0
  7. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  8. package/engine/behaviour/ability/always-enabled.lua +31 -0
  9. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  10. package/engine/behaviour/ability/emulate-impact.lua +29 -0
  11. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  12. package/engine/behaviour/ability/instant-impact.lua +4 -19
  13. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  14. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  15. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  16. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  17. package/engine/behaviour/ability.d.ts +9 -2
  18. package/engine/behaviour/ability.lua +47 -33
  19. package/engine/buff.d.ts +6 -1
  20. package/engine/buff.lua +29 -18
  21. package/engine/internal/ability.d.ts +15 -2
  22. package/engine/internal/ability.lua +83 -4
  23. package/engine/internal/item/ability.lua +81 -0
  24. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  25. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  26. package/engine/internal/unit/ability.d.ts +10 -1
  27. package/engine/internal/unit/ability.lua +36 -14
  28. package/engine/internal/unit/item.d.ts +1 -0
  29. package/engine/internal/unit/item.lua +5 -0
  30. package/engine/internal/unit/main-selected.d.ts +13 -0
  31. package/engine/internal/unit/main-selected.lua +51 -0
  32. package/engine/internal/unit.d.ts +19 -6
  33. package/engine/internal/unit.lua +107 -64
  34. package/engine/internal/utility.lua +12 -0
  35. package/engine/local-client.lua +9 -8
  36. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  37. package/engine/object-data/entry/ability-type.lua +8 -12
  38. package/engine/object-data/entry/item-type.d.ts +2 -0
  39. package/engine/object-data/entry/item-type.lua +13 -0
  40. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  41. package/engine/object-field/ability.d.ts +4 -1
  42. package/engine/standard/fields/ability.d.ts +2 -0
  43. package/engine/standard/fields/ability.lua +2 -0
  44. package/engine/unit.d.ts +1 -0
  45. package/engine/unit.lua +1 -0
  46. package/package.json +1 -1
  47. package/utility/arrays.d.ts +8 -1
  48. package/utility/arrays.lua +34 -3
  49. package/utility/lazy.d.ts +2 -0
  50. package/utility/lazy.lua +14 -0
@@ -4,6 +4,7 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local __TS__New = ____lualib.__TS__New
5
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
6
6
  local ____exports = {}
7
+ local createUnitEventListener
7
8
  local ____behavior = require("engine.behavior")
8
9
  local Behavior = ____behavior.Behavior
9
10
  local ____unit = require("engine.unit")
@@ -14,6 +15,8 @@ local ____effect = require("core.types.effect")
14
15
  local Effect = ____effect.Effect
15
16
  local ____ability = require("engine.standard.fields.ability")
16
17
  local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
18
+ local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
19
+ local CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
17
20
  local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
18
21
  local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
19
22
  local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
@@ -24,21 +27,27 @@ local ____ability = require("engine.object-field.ability")
24
27
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
25
28
  local ____timer = require("core.types.timer")
26
29
  local Timer = ____timer.Timer
27
- local ____missile = require("core.types.missile")
28
- local Missile = ____missile.Missile
29
30
  local createBehaviorFunctionsByAbilityTypeId = {}
30
- local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
31
- if success then
32
- abilityBehavior:onMissileArrival(...)
31
+ local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
32
+ local function createZeroTimerUnitEventListener(key)
33
+ local unitEventListener = createUnitEventListener(key)
34
+ return function(unit, ability, ...)
35
+ Timer:run(unitEventListener, unit, ability, ...)
33
36
  end
34
37
  end
35
- local ____class_0 = __TS__Class()
36
- ____class_0.name = ""
37
- function ____class_0.prototype.____constructor(self, abilityBehavior)
38
+ createUnitEventListener = function(key)
39
+ return function(unit, ability, ...)
40
+ ____exports.AbilityBehavior:forAll(ability, key, unit, ...)
41
+ end
42
+ end
43
+ local registeredCommandEventIds = {}
44
+ local ____class_2 = __TS__Class()
45
+ ____class_2.name = ""
46
+ function ____class_2.prototype.____constructor(self, abilityBehavior)
38
47
  self.abilityBehavior = abilityBehavior
39
48
  end
40
49
  __TS__SetDescriptor(
41
- ____class_0.prototype,
50
+ ____class_2.prototype,
42
51
  "art",
43
52
  {get = function(self)
44
53
  return MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.abilityBehavior.ability, 0)
@@ -46,7 +55,7 @@ __TS__SetDescriptor(
46
55
  true
47
56
  )
48
57
  __TS__SetDescriptor(
49
- ____class_0.prototype,
58
+ ____class_2.prototype,
50
59
  "arc",
51
60
  {get = function(self)
52
61
  return MISSILE_ARC_ABILITY_FLOAT_FIELD:getValue(self.abilityBehavior.ability)
@@ -54,7 +63,7 @@ __TS__SetDescriptor(
54
63
  true
55
64
  )
56
65
  __TS__SetDescriptor(
57
- ____class_0.prototype,
66
+ ____class_2.prototype,
58
67
  "speed",
59
68
  {get = function(self)
60
69
  return MISSILE_SPEED_ABILITY_INTEGER_FIELD:getValue(self.abilityBehavior.ability)
@@ -65,12 +74,34 @@ ____exports.AbilityBehavior = __TS__Class()
65
74
  local AbilityBehavior = ____exports.AbilityBehavior
66
75
  AbilityBehavior.name = "AbilityBehavior"
67
76
  __TS__ClassExtends(AbilityBehavior, Behavior)
68
- function AbilityBehavior.prototype.____constructor(self, ability)
77
+ function AbilityBehavior.prototype.____constructor(self, ability, parameters)
69
78
  Behavior.prototype.____constructor(self, ability)
79
+ if parameters and parameters.isExclusiveOnImpactHandler then
80
+ exclusiveOnImpactHandlerAbilityBehaviorByAbility[ability] = self
81
+ end
82
+ self:onCreate()
83
+ end
84
+ function AbilityBehavior.prototype.registerCommandEvent(self, orderTypeStringId)
85
+ if orderTypeStringId == nil then
86
+ orderTypeStringId = self.ability.orderTypeStringId
87
+ end
88
+ local commandEventId = (tostring(self.ability.typeId) .. "#") .. orderTypeStringId
89
+ if not (registeredCommandEventIds[commandEventId] ~= nil) then
90
+ registeredCommandEventIds[commandEventId] = true
91
+ Unit.abilityCommandEvent[self.ability.typeId][orderTypeStringId]:addListener(createUnitEventListener("onCommand"))
92
+ end
70
93
  end
71
94
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
72
95
  return resolveCurrentAbilityDependentValue(self.ability, value)
73
96
  end
97
+ function AbilityBehavior.prototype.flashCasterEffect(self, widget)
98
+ local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
99
+ Effect:flash(
100
+ CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
101
+ widget,
102
+ attachmentPoint ~= "" and attachmentPoint or "origin"
103
+ )
104
+ end
74
105
  function AbilityBehavior.prototype.flashAreaEffect(self, x, y, ...)
75
106
  Effect:flash(
76
107
  AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
@@ -104,15 +135,7 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrDurati
104
135
  )
105
136
  end
106
137
  end
107
- function AbilityBehavior.prototype.launchMissile(self, source, target, ...)
108
- Missile:launch(
109
- self.missileLaunchConfig,
110
- source,
111
- target,
112
- invokeOnMissileArrival,
113
- self,
114
- ...
115
- )
138
+ function AbilityBehavior.prototype.onCreate(self)
116
139
  end
117
140
  function AbilityBehavior.prototype.onMissileArrival(self, ...)
118
141
  end
@@ -120,6 +143,8 @@ function AbilityBehavior.prototype.onUnitGainAbility(self, _unit)
120
143
  end
121
144
  function AbilityBehavior.prototype.onUnitLoseAbility(self, _unit)
122
145
  end
146
+ function AbilityBehavior.prototype.onCommand(self, caster, orderTypeStringId)
147
+ end
123
148
  function AbilityBehavior.prototype.onCastingStart(self, caster)
124
149
  end
125
150
  function AbilityBehavior.prototype.onCastingFinish(self, caster)
@@ -179,7 +204,7 @@ __TS__SetDescriptor(
179
204
  end},
180
205
  true
181
206
  )
182
- AbilityBehavior.MissileLaunchConfig = ____class_0
207
+ AbilityBehavior.MissileLaunchConfig = ____class_2
183
208
  __TS__SetDescriptor(
184
209
  AbilityBehavior.prototype,
185
210
  "missileLaunchConfig",
@@ -191,17 +216,6 @@ __TS__SetDescriptor(
191
216
  true
192
217
  );
193
218
  (function(self)
194
- local function createUnitEventListener(key)
195
- return function(unit, ability, ...)
196
- ____exports.AbilityBehavior:forAll(ability, key, unit, ...)
197
- end
198
- end
199
- local function createZeroTimerUnitEventListener(key)
200
- local unitEventListener = createUnitEventListener(key)
201
- return function(unit, ability, ...)
202
- Timer:run(unitEventListener, unit, ability, ...)
203
- end
204
- end
205
219
  Unit.abilityGainedEvent:addListener(createUnitEventListener("onUnitGainAbility"))
206
220
  Unit.abilityLostEvent:addListener(createUnitEventListener("onUnitLoseAbility"))
207
221
  Unit.abilityCastingStartEvent:addListener(createUnitEventListener("onCastingStart"))
package/engine/buff.d.ts CHANGED
@@ -8,6 +8,7 @@ import { BuffResistanceType } from "./object-data/auxiliary/buff-resistance-type
8
8
  import { AbilityBooleanField, AbilityBooleanLevelField, AbilityCombatClassificationsLevelField, AbilityDependentValue, AbilityEnumLevelField, AbilityIntegerField, AbilityIntegerLevelField, AbilityNumberField, AbilityNumberLevelField } from "./object-field/ability";
9
9
  import { CombatClassifications } from "./object-data/auxiliary/combat-classification";
10
10
  import { IsExactlyAny, Prohibit, ReadonlyNonEmptyArray } from "../utility/types";
11
+ import { EffectParameters } from "../core/types/effect";
11
12
  import { UnitBehavior } from "./behaviour/unit";
12
13
  import type { Widget } from "../core/types/widget";
13
14
  import { Destructor } from "../destroyable";
@@ -250,8 +251,12 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
250
251
  get duration(): number;
251
252
  get remainingDuration(): number;
252
253
  set remainingDuration(remainingDuration: number);
253
- flashEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
254
+ flashEffect(...parameters: [
255
+ ...widgetOrXY: [] | [Widget] | [x: number, x: number],
256
+ ...parametersOrDuration: [] | [EffectParameters] | [number]
257
+ ]): void;
254
258
  flashSpecialEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
259
+ protected onCreate(): void;
255
260
  protected onDestroy(): Destructor;
256
261
  static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;
257
262
  static getByTypeId<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, unit: Unit, typeId: ApplicableBuffTypeId): T | undefined;
package/engine/buff.lua CHANGED
@@ -46,6 +46,10 @@ local ____arrays = require("utility.arrays")
46
46
  local forEach = ____arrays.forEach
47
47
  local ____ability_2Dduration = require("engine.internal.mechanics.ability-duration")
48
48
  local getAbilityDuration = ____ability_2Dduration.getAbilityDuration
49
+ local ____item = require("engine.internal.item")
50
+ local Item = ____item.Item
51
+ local ____destructable = require("core.types.destructable")
52
+ local Destructable = ____destructable.Destructable
49
53
  local getUnitAbility = BlzGetUnitAbility
50
54
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
51
55
  local stringValueByBuffTypeIdByFieldId = {}
@@ -482,6 +486,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
482
486
  timer:start(duration, false, expireBuff, self)
483
487
  self._timer = timer
484
488
  end
489
+ self:onCreate()
485
490
  end
486
491
  function Buff.prototype.getUnitBonus(self, bonusType)
487
492
  local ____opt_36 = self._bonusIdByBonusType
@@ -496,26 +501,30 @@ function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
496
501
  end
497
502
  bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
498
503
  end
499
- function Buff.prototype.flashEffect(self, widgetOrDuration, duration)
500
- local isWidgetProvided = type(widgetOrDuration) == "table"
501
- local ____Effect_40 = Effect
502
- local ____Effect_flash_41 = Effect.flash
503
- local ____array_39 = __TS__SparseArrayNew(
504
- self[104],
505
- isWidgetProvided and widgetOrDuration or self._unit,
506
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
507
- )
508
- local ____isWidgetProvided_38
509
- if isWidgetProvided then
510
- ____isWidgetProvided_38 = duration
504
+ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
505
+ if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
506
+ Effect:flash(self[104], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
511
507
  else
512
- ____isWidgetProvided_38 = widgetOrDuration
508
+ local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
509
+ local ____Effect_40 = Effect
510
+ local ____Effect_flash_41 = Effect.flash
511
+ local ____array_39 = __TS__SparseArrayNew(
512
+ self[104],
513
+ isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
514
+ stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
515
+ )
516
+ local ____isWidgetProvided_38
517
+ if isWidgetProvided then
518
+ ____isWidgetProvided_38 = yOrParametersOrDuration
519
+ else
520
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
521
+ end
522
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
523
+ ____Effect_flash_41(
524
+ ____Effect_40,
525
+ __TS__SparseArraySpread(____array_39)
526
+ )
513
527
  end
514
- __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
515
- ____Effect_flash_41(
516
- ____Effect_40,
517
- __TS__SparseArraySpread(____array_39)
518
- )
519
528
  end
520
529
  function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
521
530
  local isWidgetProvided = type(widgetOrDuration) == "table"
@@ -538,6 +547,8 @@ function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
538
547
  __TS__SparseArraySpread(____array_43)
539
548
  )
540
549
  end
550
+ function Buff.prototype.onCreate(self)
551
+ end
541
552
  function Buff.prototype.onDestroy(self)
542
553
  local unit = self._unit
543
554
  if getUnitAbility(unit.handle, self.typeId) == self.handle then
@@ -12,7 +12,8 @@ export declare abstract class Ability extends Handle<jability> {
12
12
  protected constructor(handle: jability, typeId: number);
13
13
  toString(): string;
14
14
  get parentTypeId(): number;
15
- get orderId(): number;
15
+ get orderTypeStringId(): string;
16
+ get orderTypeId(): number;
16
17
  abstract readonly owner: Unit | Item;
17
18
  getSnapshot(): AbilitySnapshot;
18
19
  hasField(field: jabilityfield | number): boolean;
@@ -34,6 +35,9 @@ export declare abstract class Ability extends Handle<jability> {
34
35
  setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
35
36
  get levelCount(): number;
36
37
  abstract get level(): number;
38
+ abstract get cooldownRemaining(): number;
39
+ abstract set cooldownRemaining(cooldownRemaining: number);
40
+ abstract interruptCast(): void;
37
41
  static get onCreate(): Event<[Ability]>;
38
42
  static get destroyEvent(): Event<[Ability]>;
39
43
  }
@@ -44,15 +48,21 @@ export declare class UnrecognizedAbility extends Ability {
44
48
  readonly owner: Unit;
45
49
  constructor(typeId: number, owner: Unit);
46
50
  get level(): number;
51
+ get cooldownRemaining(): number;
52
+ set cooldownRemaining(_: number);
53
+ interruptCast(): void;
47
54
  }
48
55
  export declare class UnitAbility extends Ability {
49
56
  readonly owner: Unit;
50
57
  private readonly u;
51
58
  constructor(handle: jability, typeId: number, owner: Unit);
59
+ incrementHideCounter(): void;
60
+ decrementHideCounter(): void;
52
61
  get level(): number;
53
62
  set level(v: number);
54
63
  get cooldownRemaining(): number;
55
- set cooldownRemaining(v: number);
64
+ set cooldownRemaining(cooldownRemaining: number);
65
+ interruptCast(): void;
56
66
  static get onCreate(): Event<[UnitAbility]>;
57
67
  static get onDestroy(): Event<[UnitAbility]>;
58
68
  }
@@ -76,6 +86,9 @@ export declare class ItemAbility extends Ability {
76
86
  setField(field: jabilitybooleanlevelfield, level: number, value: boolean): boolean;
77
87
  setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
78
88
  get level(): number;
89
+ get cooldownRemaining(): number;
90
+ set cooldownRemaining(cooldownRemaining: number);
91
+ interruptCast(): void;
79
92
  static get onCreate(): Event<[ItemAbility]>;
80
93
  static get onDestroy(): Event<[ItemAbility]>;
81
94
  }
@@ -10,7 +10,10 @@ local ____exports = {}
10
10
  local ____handle = require("core.types.handle")
11
11
  local Handle = ____handle.Handle
12
12
  local ____ability = require("engine.internal.item.ability")
13
+ local abilityActionDummy = ____ability.abilityActionDummy
13
14
  local doAbilityAction = ____ability.doAbilityAction
15
+ local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
16
+ local startItemCooldown = ____ability.startItemCooldown
14
17
  local getUnitAbilityLevel = GetUnitAbilityLevel
15
18
  local setUnitAbilityLevel = SetUnitAbilityLevel
16
19
  local setAbilityIntegerField = BlzSetAbilityIntegerField
@@ -32,6 +35,7 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
32
35
  local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
33
36
  local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
34
37
  local getHandleId = GetHandleId
38
+ local unitHideAbility = BlzUnitHideAbility
35
39
  local match = string.match
36
40
  local ____type = _G.type
37
41
  local ____tostring = _G.tostring
@@ -295,10 +299,18 @@ __TS__SetDescriptor(
295
299
  )
296
300
  __TS__SetDescriptor(
297
301
  Ability.prototype,
298
- "orderId",
302
+ "orderTypeStringId",
299
303
  {get = function(self)
300
304
  local field = orderIdFieldByParentTypeId[self.parentTypeId]
301
- return order2orderId(field ~= nil and getAbilityStringLevelField(self.handle, ABILITY_SLF_BASE_ORDER_ID_NCL6, self.level) or (orders[self.parentTypeId] or ""))
305
+ return field ~= nil and getAbilityStringLevelField(self.handle, field, self.level) or (orders[self.parentTypeId] or "")
306
+ end},
307
+ true
308
+ )
309
+ __TS__SetDescriptor(
310
+ Ability.prototype,
311
+ "orderTypeId",
312
+ {get = function(self)
313
+ return order2orderId(self.orderTypeStringId)
302
314
  end},
303
315
  true
304
316
  )
@@ -317,6 +329,17 @@ __TS__SetDescriptor(
317
329
  end},
318
330
  true
319
331
  )
332
+ __TS__SetDescriptor(
333
+ Ability.prototype,
334
+ "cooldownRemaining",
335
+ {
336
+ get = function(self)
337
+ end,
338
+ set = function(self, cooldownRemaining)
339
+ end
340
+ },
341
+ true
342
+ )
320
343
  __TS__ObjectDefineProperty(
321
344
  Ability,
322
345
  "onCreate",
@@ -340,6 +363,8 @@ function UnrecognizedAbility.prototype.____constructor(self, typeId, owner)
340
363
  UnrecognizedAbility.____super.prototype.____constructor(self, nil, typeId)
341
364
  self.owner = owner
342
365
  end
366
+ function UnrecognizedAbility.prototype.interruptCast(self)
367
+ end
343
368
  __TS__SetDescriptor(
344
369
  UnrecognizedAbility.prototype,
345
370
  "level",
@@ -348,6 +373,18 @@ __TS__SetDescriptor(
348
373
  end},
349
374
  true
350
375
  )
376
+ __TS__SetDescriptor(
377
+ UnrecognizedAbility.prototype,
378
+ "cooldownRemaining",
379
+ {
380
+ get = function(self)
381
+ return 0
382
+ end,
383
+ set = function(self, _)
384
+ end
385
+ },
386
+ true
387
+ )
351
388
  ____exports.UnitAbility = __TS__Class()
352
389
  local UnitAbility = ____exports.UnitAbility
353
390
  UnitAbility.name = "UnitAbility"
@@ -357,6 +394,15 @@ function UnitAbility.prototype.____constructor(self, handle, typeId, owner)
357
394
  self.owner = owner
358
395
  self.u = owner.handle
359
396
  end
397
+ function UnitAbility.prototype.incrementHideCounter(self)
398
+ unitHideAbility(self.u, self.typeId, true)
399
+ end
400
+ function UnitAbility.prototype.decrementHideCounter(self)
401
+ unitHideAbility(self.u, self.typeId, false)
402
+ end
403
+ function UnitAbility.prototype.interruptCast(self)
404
+ self.owner:interruptCast(self.typeId)
405
+ end
360
406
  __TS__SetDescriptor(
361
407
  UnitAbility.prototype,
362
408
  "level",
@@ -377,8 +423,8 @@ __TS__SetDescriptor(
377
423
  get = function(self)
378
424
  return getUnitAbilityCooldownRemaining(self.u, self.typeId)
379
425
  end,
380
- set = function(self, v)
381
- startUnitAbilityCooldown(self.u, self.typeId, v)
426
+ set = function(self, cooldownRemaining)
427
+ startUnitAbilityCooldown(self.u, self.typeId, cooldownRemaining)
382
428
  end
383
429
  },
384
430
  true
@@ -403,6 +449,11 @@ end
403
449
  local function setAbilityField(_, ability, field, levelOrValue, value)
404
450
  return ____exports.Ability.prototype.setField(ability, field, levelOrValue, value)
405
451
  end
452
+ local function getAbilityCooldown(_, abilityTypeId)
453
+ return getUnitAbilityCooldownRemaining(abilityActionDummy, abilityTypeId)
454
+ end
455
+ local function doNothing()
456
+ end
406
457
  ____exports.ItemAbility = __TS__Class()
407
458
  local ItemAbility = ____exports.ItemAbility
408
459
  ItemAbility.name = "ItemAbility"
@@ -430,6 +481,13 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
430
481
  value
431
482
  )
432
483
  end
484
+ function ItemAbility.prototype.interruptCast(self)
485
+ local item = self.owner
486
+ local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
487
+ local ____item_handle_3 = item.handle
488
+ local ____opt_1 = item.owner
489
+ ____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, doNothing)
490
+ end
433
491
  __TS__SetDescriptor(
434
492
  ItemAbility.prototype,
435
493
  "level",
@@ -438,6 +496,27 @@ __TS__SetDescriptor(
438
496
  end},
439
497
  true
440
498
  )
499
+ __TS__SetDescriptor(
500
+ ItemAbility.prototype,
501
+ "cooldownRemaining",
502
+ {
503
+ get = function(self)
504
+ local item = self.owner
505
+ local ____doAbilityActionForceDummy_8 = doAbilityActionForceDummy
506
+ local ____item_handle_7 = item.handle
507
+ local ____opt_5 = item.owner
508
+ return ____doAbilityActionForceDummy_8(____item_handle_7, ____opt_5 and ____opt_5.handle, getAbilityCooldown, self.typeId)
509
+ end,
510
+ set = function(self, cooldownRemaining)
511
+ local item = self.owner
512
+ local ____startItemCooldown_12 = startItemCooldown
513
+ local ____item_handle_11 = item.handle
514
+ local ____opt_9 = item.owner
515
+ ____startItemCooldown_12(____item_handle_11, ____opt_9 and ____opt_9.handle, cooldownRemaining)
516
+ end
517
+ },
518
+ true
519
+ )
441
520
  __TS__ObjectDefineProperty(
442
521
  ItemAbility,
443
522
  "onCreate",
@@ -3,14 +3,51 @@ local ____player = require("core.types.player")
3
3
  local Player = ____player.Player
4
4
  local ____dummy = require("objutil.dummy")
5
5
  local dummyUnitId = ____dummy.dummyUnitId
6
+ local ____utility = require("engine.internal.utility")
7
+ local findUnitItemSlot = ____utility.findUnitItemSlot
8
+ local ____blank = require("engine.object-data.entry.item-type.blank")
9
+ local BlankItemType = ____blank.BlankItemType
10
+ local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
11
+ local abilityTypeIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.abilityTypeIdGenerator
12
+ local ____math = require("math")
13
+ local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
6
14
  local isItemOwned = IsItemOwned
7
15
  local isItemPowerup = IsItemPowerup
8
16
  local getItemX = GetItemX
9
17
  local getItemY = GetItemY
18
+ local setAbilityRealLevelField = BlzSetAbilityRealLevelField
19
+ local setItemIntegerField = BlzSetItemIntegerField
20
+ local getItemIntegerField = BlzGetItemIntegerField
10
21
  local setItemBooleanField = BlzSetItemBooleanField
11
22
  local setItemPosition = SetItemPosition
12
23
  local unitAddItem = UnitAddItem
24
+ local unitDropItemSlot = UnitDropItemSlot
13
25
  local unitRemoveItem = UnitRemoveItem
26
+ local unitUseItem = UnitUseItem
27
+ local unitResetCooldown = UnitResetCooldown
28
+ local COOLDOWN_STARTER_ABILITY_TYPE_ID = compiletime(function()
29
+ if not currentMap then
30
+ return 0
31
+ end
32
+ local abilityType = currentMap.objects.ability:newObject(
33
+ util.id2s(abilityTypeIdGenerator:next()),
34
+ "Absk"
35
+ )
36
+ abilityType["bsk1+0"] = 0
37
+ abilityType["bsk2+0"] = 0
38
+ abilityType["bsk3+0"] = 0
39
+ abilityType["amcs+0"] = 0
40
+ abilityType["adur+0"] = MINIMUM_POSITIVE_NORMALIZED_FLOAT
41
+ abilityType["ahdu+0"] = MINIMUM_POSITIVE_NORMALIZED_FLOAT
42
+ return util.s2id(abilityType.id)
43
+ end)
44
+ local COOLDOWN_STARTER_ITEM_TYPE_ID = compiletime(function()
45
+ local itemType = BlankItemType:create()
46
+ itemType.abilityTypeIds = {COOLDOWN_STARTER_ABILITY_TYPE_ID}
47
+ itemType.cooldownGroupId = COOLDOWN_STARTER_ABILITY_TYPE_ID
48
+ itemType.activelyUsed = true
49
+ return itemType.id
50
+ end)
14
51
  local dummy = assert(CreateUnit(
15
52
  Player.neutralVictim.handle,
16
53
  dummyUnitId,
@@ -18,7 +55,25 @@ local dummy = assert(CreateUnit(
18
55
  0,
19
56
  270
20
57
  ))
58
+ local cooldownStarterItem = UnitAddItemById(dummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
59
+ local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
21
60
  ShowUnit(dummy, false)
61
+ local function startItemCooldownInternal(handle, cooldown)
62
+ local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
63
+ setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, COOLDOWN_STARTER_ABILITY_TYPE_ID)
64
+ setAbilityRealLevelField(cooldownStarterAbility, ABILITY_RLF_COOLDOWN, 0, cooldown)
65
+ unitResetCooldown(dummy)
66
+ unitUseItem(dummy, cooldownStarterItem)
67
+ setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, cooldownGroup)
68
+ end
69
+ ---
70
+ -- @internal For use by internal systems only.
71
+ ____exports.startItemCooldown = function(handle, owner, cooldown)
72
+ ____exports.doAbilityActionForceDummy(handle, owner, startItemCooldownInternal, cooldown)
73
+ end
74
+ ---
75
+ -- @internal For use by internal systems only.
76
+ ____exports.abilityActionDummy = dummy
22
77
  ---
23
78
  -- @internal For use by internal systems only.
24
79
  ____exports.doAbilityAction = function(handle, action, ...)
@@ -45,4 +100,30 @@ ____exports.doAbilityAction = function(handle, action, ...)
45
100
  end
46
101
  return result
47
102
  end
103
+ ---
104
+ -- @internal For use by internal systems only.
105
+ ____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
106
+ if owner == nil then
107
+ return ____exports.doAbilityAction(handle, action, ...)
108
+ end
109
+ local slot = findUnitItemSlot(owner, handle)
110
+ if slot == nil then
111
+ return ____exports.doAbilityAction(handle, action, ...)
112
+ end
113
+ local isPowerup
114
+ if isItemPowerup(handle) then
115
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
116
+ isPowerup = true
117
+ end
118
+ unitRemoveItem(owner, handle)
119
+ unitAddItem(dummy, handle)
120
+ local result = action(handle, ...)
121
+ unitRemoveItem(dummy, handle)
122
+ unitAddItem(owner, handle)
123
+ unitDropItemSlot(owner, handle, slot)
124
+ if isPowerup then
125
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
126
+ end
127
+ return result
128
+ end
48
129
  return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,13 @@
1
+ local ____exports = {}
2
+ local disableAbility = BlzUnitDisableAbility
3
+ ---
4
+ -- @internal For use by internal systems only.
5
+ ____exports.increaseAbilityDisableCounter = function(unit, abilityTypeId, times)
6
+ for _ = 1, times do
7
+ disableAbility(unit, abilityTypeId, true, false)
8
+ end
9
+ for _ = times, -1 do
10
+ disableAbility(unit, abilityTypeId, false, false)
11
+ end
12
+ end
13
+ return ____exports
@@ -3,7 +3,7 @@ import { Ability } from "../ability";
3
3
  import { Destructable } from "../../../core/types/destructable";
4
4
  import { Item } from "../item";
5
5
  import { Widget } from "../../../core/types/widget";
6
- import { DispatchingEvent } from "../../../event";
6
+ import { DispatchingEvent, Event } from "../../../event";
7
7
  declare module "../unit" {
8
8
  namespace Unit {
9
9
  const abilityCastingStartEvent: DispatchingEvent<[Unit, Ability]>;
@@ -141,3 +141,12 @@ declare module "../unit" {
141
141
  const abilityStopEvent: DispatchingEvent<[Unit, Ability]>;
142
142
  }
143
143
  }
144
+ declare module "../unit" {
145
+ namespace Unit {
146
+ const abilityCommandEvent: {
147
+ readonly [abilityTypeId: number]: {
148
+ readonly [orderTypeStringId: string]: Event<[Unit, Ability, string]>;
149
+ };
150
+ };
151
+ }
152
+ }