warscript 0.0.1-dev.3e67cca → 0.0.1-dev.3e757ee

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 (39) hide show
  1. package/core/types/effect.d.ts +12 -3
  2. package/core/types/effect.lua +56 -7
  3. package/core/types/frame.d.ts +4 -0
  4. package/core/types/frame.lua +71 -0
  5. package/engine/behavior.d.ts +2 -2
  6. package/engine/behavior.lua +6 -6
  7. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  8. package/engine/behaviour/ability/emulate-impact.lua +29 -0
  9. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  10. package/engine/behaviour/ability/instant-impact.lua +4 -19
  11. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  12. package/engine/behaviour/ability/on-command-impact.lua +18 -0
  13. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  14. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  15. package/engine/behaviour/ability.d.ts +7 -2
  16. package/engine/behaviour/ability.lua +35 -34
  17. package/engine/buff.d.ts +6 -1
  18. package/engine/buff.lua +29 -18
  19. package/engine/internal/ability.d.ts +4 -1
  20. package/engine/internal/ability.lua +17 -2
  21. package/engine/internal/unit/ability.d.ts +10 -1
  22. package/engine/internal/unit/ability.lua +36 -14
  23. package/engine/internal/unit/item.d.ts +1 -0
  24. package/engine/internal/unit/item.lua +10 -0
  25. package/engine/internal/unit/main-selected.d.ts +13 -0
  26. package/engine/internal/unit/main-selected.lua +51 -0
  27. package/engine/internal/unit.d.ts +19 -7
  28. package/engine/internal/unit.lua +91 -66
  29. package/engine/local-client.d.ts +7 -2
  30. package/engine/local-client.lua +82 -0
  31. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  32. package/engine/object-field/ability.d.ts +4 -1
  33. package/engine/unit.d.ts +1 -0
  34. package/engine/unit.lua +1 -0
  35. package/package.json +1 -1
  36. package/utility/arrays.d.ts +8 -1
  37. package/utility/arrays.lua +34 -3
  38. package/utility/lazy.d.ts +2 -0
  39. package/utility/lazy.lua +14 -0
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;
@@ -49,6 +50,8 @@ export declare class UnitAbility extends Ability {
49
50
  readonly owner: Unit;
50
51
  private readonly u;
51
52
  constructor(handle: jability, typeId: number, owner: Unit);
53
+ incrementHideCounter(): void;
54
+ decrementHideCounter(): void;
52
55
  get level(): number;
53
56
  set level(v: number);
54
57
  get cooldownRemaining(): number;
@@ -32,6 +32,7 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
32
32
  local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
33
33
  local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
34
34
  local getHandleId = GetHandleId
35
+ local unitHideAbility = BlzUnitHideAbility
35
36
  local match = string.match
36
37
  local ____type = _G.type
37
38
  local ____tostring = _G.tostring
@@ -295,10 +296,18 @@ __TS__SetDescriptor(
295
296
  )
296
297
  __TS__SetDescriptor(
297
298
  Ability.prototype,
298
- "orderId",
299
+ "orderTypeStringId",
299
300
  {get = function(self)
300
301
  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 ""))
302
+ return field ~= nil and getAbilityStringLevelField(self.handle, field, self.level) or (orders[self.parentTypeId] or "")
303
+ end},
304
+ true
305
+ )
306
+ __TS__SetDescriptor(
307
+ Ability.prototype,
308
+ "orderTypeId",
309
+ {get = function(self)
310
+ return order2orderId(self.orderTypeStringId)
302
311
  end},
303
312
  true
304
313
  )
@@ -357,6 +366,12 @@ function UnitAbility.prototype.____constructor(self, handle, typeId, owner)
357
366
  self.owner = owner
358
367
  self.u = owner.handle
359
368
  end
369
+ function UnitAbility.prototype.incrementHideCounter(self)
370
+ unitHideAbility(self.u, self.typeId, true)
371
+ end
372
+ function UnitAbility.prototype.decrementHideCounter(self)
373
+ unitHideAbility(self.u, self.typeId, false)
374
+ end
360
375
  __TS__SetDescriptor(
361
376
  UnitAbility.prototype,
362
377
  "level",
@@ -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
+ }
@@ -15,8 +15,15 @@ local UnitTriggerEvent = ____unit.UnitTriggerEvent
15
15
  local ____event = require("event")
16
16
  local createDispatchingEvent = ____event.createDispatchingEvent
17
17
  local DependentInitializingEvent = ____event.DependentInitializingEvent
18
+ local Event = ____event.Event
19
+ local InitializingEvent = ____event.InitializingEvent
18
20
  local ____preconditions = require("utility.preconditions")
19
21
  local checkNotNull = ____preconditions.checkNotNull
22
+ local ____lazy = require("utility.lazy")
23
+ local lazyRecord = ____lazy.lazyRecord
24
+ local eventInvoke = Event.invoke
25
+ local condition = Condition
26
+ local createTrigger = CreateTrigger
20
27
  local getItemAbility = BlzGetItemAbility
21
28
  local getSpellAbility = GetSpellAbility
22
29
  local getSpellAbilityId = GetSpellAbilityId
@@ -26,11 +33,10 @@ local getSpellTargetUnit = GetSpellTargetUnit
26
33
  local getSpellTargetX = GetSpellTargetX
27
34
  local getSpellTargetY = GetSpellTargetY
28
35
  local getTriggerUnit = GetTriggerUnit
29
- local getUnitAbility = BlzGetUnitAbility
30
- local unitAddAbility = UnitAddAbility
36
+ local triggerAddCondition = TriggerAddCondition
37
+ local triggerRegisterCommandEvent = TriggerRegisterCommandEvent
31
38
  local unitInventorySize = UnitInventorySize
32
39
  local unitItemInSlot = UnitItemInSlot
33
- local unitRemoveAbility = UnitRemoveAbility
34
40
  local function retrieveAbility(unit, ability, abilityId)
35
41
  if ability == nil then
36
42
  return __TS__New(
@@ -39,17 +45,6 @@ local function retrieveAbility(unit, ability, abilityId)
39
45
  Unit:of(unit)
40
46
  )
41
47
  end
42
- if not unitAddAbility(unit, abilityId) then
43
- if getUnitAbility(unit, abilityId) == ability then
44
- return UnitAbility:of(
45
- ability,
46
- abilityId,
47
- Unit:of(unit)
48
- )
49
- end
50
- else
51
- unitRemoveAbility(unit, abilityId)
52
- end
53
48
  for i = 0, unitInventorySize(unit) - 1 do
54
49
  local item = unitItemInSlot(unit, i)
55
50
  if getItemAbility(item, abilityId) == ability then
@@ -366,4 +361,31 @@ rawset(
366
361
  extractAbilityTypeId
367
362
  )
368
363
  )
364
+ rawset(
365
+ Unit,
366
+ "abilityCommandEvent",
367
+ lazyRecord(function(abilityTypeId)
368
+ return lazyRecord(function(orderTypeStringId)
369
+ return __TS__New(
370
+ InitializingEvent,
371
+ function(event)
372
+ local trigger = createTrigger()
373
+ triggerRegisterCommandEvent(trigger, abilityTypeId, orderTypeStringId)
374
+ triggerAddCondition(
375
+ trigger,
376
+ condition(function()
377
+ local unit = Unit:of(getTriggerUnit())
378
+ if unit ~= nil then
379
+ local ability = unit:getAbilityById(abilityTypeId)
380
+ if ability ~= nil then
381
+ eventInvoke(event, unit, ability, orderTypeStringId)
382
+ end
383
+ end
384
+ end)
385
+ )
386
+ end
387
+ )
388
+ end)
389
+ end)
390
+ )
369
391
  return ____exports
@@ -11,6 +11,7 @@ export interface UnitItems extends ReadonlyArray<Item | undefined> {
11
11
  }
12
12
  export declare class UnitItems {
13
13
  constructor(handle: junit);
14
+ findSlot(item: Item): 0 | 1 | 2 | 3 | 4 | 5 | undefined;
14
15
  protected __newindex(slot: number, item: Item | undefined): void;
15
16
  protected __index(key: string | number): unknown;
16
17
  protected __len(): number;
@@ -30,6 +30,16 @@ UnitItems.name = "UnitItems"
30
30
  function UnitItems.prototype.____constructor(self, handle)
31
31
  handleByUnitItems[self] = handle
32
32
  end
33
+ function UnitItems.prototype.findSlot(self, item)
34
+ local handle = handleByUnitItems[self]
35
+ local itemHandle = item.handle
36
+ for slot = 0, unitInventorySize(handle) - 1 do
37
+ if itemHandle == unitItemInSlot(handle, slot) then
38
+ return slot
39
+ end
40
+ end
41
+ return nil
42
+ end
33
43
  function UnitItems.prototype.__newindex(self, slot, item)
34
44
  local handle = handleByUnitItems[self]
35
45
  if slot < 1 or slot > unitInventorySize(handle) then
@@ -0,0 +1,13 @@
1
+ /** @noSelfInFile */
2
+ import { Player } from "../../../core/types/player";
3
+ import { Event } from "../../../event";
4
+ declare module "../unit" {
5
+ namespace Unit {
6
+ const mainSelectedUnitChangeEvent: Event<[Player]>;
7
+ }
8
+ }
9
+ declare module "../unit" {
10
+ namespace Unit {
11
+ const getMainSelectedOf: (player: Player) => Unit | undefined;
12
+ }
13
+ }
@@ -0,0 +1,51 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
3
+ local ____exports = {}
4
+ local ____player = require("core.types.player")
5
+ local Player = ____player.Player
6
+ local ____math = require("math")
7
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
8
+ local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
9
+ local ____local_2Dclient = require("engine.local-client")
10
+ local LocalClient = ____local_2Dclient.LocalClient
11
+ local ____unit = require("engine.internal.unit")
12
+ local Unit = ____unit.Unit
13
+ local ____event = require("event")
14
+ local Event = ____event.Event
15
+ local mainSelectedUnitChangeEvent = __TS__New(Event)
16
+ rawset(Unit, "mainSelectedUnitChangeEvent", mainSelectedUnitChangeEvent)
17
+ local mainSelectedUnitByPlayer = {}
18
+ local syncSlider = BlzCreateFrameByType(
19
+ "SLIDER",
20
+ "UnitSyncId",
21
+ BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
22
+ "",
23
+ 0
24
+ )
25
+ BlzFrameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
26
+ LocalClient.mainSelectedUnitChangeEvent:addListener(function()
27
+ local ____opt_0 = LocalClient.mainSelectedUnit
28
+ local syncId = ____opt_0 and ____opt_0.syncId
29
+ BlzFrameSetValue(syncSlider, syncId or 0)
30
+ end)
31
+ local trg = CreateTrigger()
32
+ BlzTriggerRegisterFrameEvent(trg, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
33
+ TriggerAddAction(
34
+ trg,
35
+ function()
36
+ local player = Player:of(GetTriggerPlayer())
37
+ local mainSelectedUnit = Unit:getBySyncId(BlzGetTriggerFrameValue())
38
+ if mainSelectedUnit ~= mainSelectedUnitByPlayer[player] then
39
+ mainSelectedUnitByPlayer[player] = mainSelectedUnit
40
+ Event.invoke(mainSelectedUnitChangeEvent, player)
41
+ end
42
+ end
43
+ )
44
+ rawset(
45
+ Unit,
46
+ "getMainSelectedOf",
47
+ function(player)
48
+ return mainSelectedUnitByPlayer[player]
49
+ end
50
+ )
51
+ return ____exports
@@ -94,14 +94,19 @@ export declare class UnitWeapon {
94
94
  set missileSpeed(missileSpeed: number);
95
95
  }
96
96
  declare const enum UnitPropertyKey {
97
- IS_PAUSED = 100,
98
- STUN_COUNTER = 101,
99
- DELAY_HEALTH_CHECKS_COUNTER = 102,
100
- DELAY_HEALTH_CHECKS_HEALTH_BONUS = 103,
101
- PREVENT_DEATH_HEALTH_BONUS = 104,
102
- IS_TEAM_GLOW_HIDDEN = 105
97
+ SYNC_ID = 100,
98
+ IS_PAUSED = 101,
99
+ STUN_COUNTER = 102,
100
+ DELAY_HEALTH_CHECKS_COUNTER = 103,
101
+ DELAY_HEALTH_CHECKS_HEALTH_BONUS = 104,
102
+ PREVENT_DEATH_HEALTH_BONUS = 105,
103
+ IS_TEAM_GLOW_HIDDEN = 106
103
104
  }
105
+ export type UnitSyncId = number & {
106
+ readonly __unitSyncId: unique symbol;
107
+ };
104
108
  export declare class Unit extends Handle<junit> {
109
+ readonly syncId: UnitSyncId;
105
110
  private [UnitPropertyKey.IS_PAUSED]?;
106
111
  private [UnitPropertyKey.STUN_COUNTER]?;
107
112
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
@@ -288,7 +293,7 @@ export declare class Unit extends Handle<junit> {
288
293
  static getInRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
289
294
  static getInCollisionRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
290
295
  static getInSector(pos: Vec2, range: number, offsetAngle: number, centralAngle: number): Unit[];
291
- static getSelectionOf(player: Player): Unit[];
296
+ static getSelectionOf(player: Player, target?: Unit[]): Unit[];
292
297
  static readonly deathEvent: UnitTriggerEvent<[Unit]>;
293
298
  static readonly onDecay: UnitTriggerEvent<[]>;
294
299
  static readonly onResurrect: InitializingEvent<[Unit], void>;
@@ -327,6 +332,12 @@ export declare class Unit extends Handle<junit> {
327
332
  static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
328
333
  static itemUsedEvent: UnitTriggerEvent<[Item]>;
329
334
  static itemStackedEvent: UnitTriggerEvent<[Item]>;
335
+ static get itemMovedEvent(): Event<[
336
+ unit: Unit,
337
+ item: Item,
338
+ slotFrom: 0 | 1 | 2 | 3 | 4 | 5,
339
+ slotTo: 0 | 1 | 2 | 3 | 4 | 5
340
+ ]>;
330
341
  static get onCreate(): EventDispatcher<[Unit], [Unit]>;
331
342
  static get destroyEvent(): EventDispatcher<[Unit], [Unit]>;
332
343
  getField(field: junitintegerfield | junitrealfield): number;
@@ -337,5 +348,6 @@ export declare class Unit extends Handle<junit> {
337
348
  setField(field: junitbooleanfield, value: boolean): boolean;
338
349
  setField(field: junitstringfield, value: string): boolean;
339
350
  toString(): string;
351
+ static getBySyncId(syncId: UnitSyncId): Unit | undefined;
340
352
  }
341
353
  export {};