warscript 0.0.1-dev.effa673 → 0.0.1-dev.f074376

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 (139) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/sound.lua +5 -0
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +9 -8
  12. package/core/types/timer.lua +45 -23
  13. package/decl/native.d.ts +846 -790
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +6 -3
  20. package/engine/behaviour/ability/damage.lua +24 -36
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +2 -1
  28. package/engine/behaviour/ability.lua +10 -18
  29. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  31. package/engine/behaviour/unit.d.ts +39 -3
  32. package/engine/behaviour/unit.lua +259 -6
  33. package/engine/buff.d.ts +17 -6
  34. package/engine/buff.lua +160 -97
  35. package/engine/internal/ability.d.ts +7 -1
  36. package/engine/internal/ability.lua +49 -9
  37. package/engine/internal/item/ability.lua +63 -11
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +18 -17
  40. package/engine/internal/item.lua +135 -49
  41. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  42. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  43. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  44. package/engine/internal/misc/frame-coordinates.lua +21 -0
  45. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  46. package/engine/internal/misc/get-terrain-z.lua +11 -0
  47. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  48. package/engine/internal/misc/player-local-handle.lua +5 -0
  49. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  50. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  51. package/engine/internal/unit/ability.d.ts +35 -0
  52. package/engine/internal/unit/ability.lua +98 -9
  53. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  54. package/engine/internal/unit/allowed-targets.lua +9 -1
  55. package/engine/internal/unit/bonus.d.ts +2 -0
  56. package/engine/internal/unit/bonus.lua +10 -0
  57. package/engine/internal/unit/fly-height.d.ts +7 -0
  58. package/engine/internal/unit/fly-height.lua +20 -0
  59. package/engine/internal/unit/main-selected.lua +12 -27
  60. package/engine/internal/unit/order.d.ts +20 -0
  61. package/engine/internal/unit/order.lua +136 -0
  62. package/engine/internal/unit/scale.d.ts +7 -0
  63. package/engine/internal/unit/scale.lua +20 -0
  64. package/engine/internal/unit+ability.lua +10 -1
  65. package/engine/internal/unit+damage.d.ts +2 -11
  66. package/engine/internal/unit+damage.lua +10 -14
  67. package/engine/internal/unit+spellSteal.lua +1 -2
  68. package/engine/internal/unit-missile-launch.lua +45 -14
  69. package/engine/internal/unit.d.ts +39 -19
  70. package/engine/internal/unit.lua +329 -169
  71. package/engine/local-client.d.ts +2 -0
  72. package/engine/local-client.lua +30 -0
  73. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  74. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  75. package/engine/object-data/auxiliary/attachment-preset.d.ts +1 -1
  76. package/engine/object-data/auxiliary/attachment-preset.lua +3 -2
  77. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  78. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  79. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  81. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  82. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  83. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  84. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  85. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  86. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  87. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  89. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  91. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  92. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  93. package/engine/object-data/entry/ability-type.lua +11 -3
  94. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  95. package/engine/object-data/entry/buff-type.d.ts +5 -11
  96. package/engine/object-data/entry/buff-type.lua +11 -27
  97. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  98. package/engine/object-data/entry/destructible-type.lua +155 -0
  99. package/engine/object-data/entry/unit-type.d.ts +17 -4
  100. package/engine/object-data/entry/unit-type.lua +197 -85
  101. package/engine/object-field/ability.d.ts +4 -4
  102. package/engine/object-field/ability.lua +7 -6
  103. package/engine/object-field/unit.d.ts +72 -3
  104. package/engine/object-field/unit.lua +268 -7
  105. package/engine/object-field.d.ts +23 -6
  106. package/engine/object-field.lua +335 -118
  107. package/engine/random.d.ts +9 -0
  108. package/engine/random.lua +13 -0
  109. package/engine/standard/entries/buff-type.d.ts +3 -0
  110. package/engine/standard/entries/buff-type.lua +3 -0
  111. package/engine/standard/fields/ability.d.ts +2 -2
  112. package/engine/standard/fields/ability.lua +2 -2
  113. package/engine/standard/fields/unit.d.ts +7 -0
  114. package/engine/standard/fields/unit.lua +13 -0
  115. package/engine/synchronization.d.ts +11 -0
  116. package/engine/synchronization.lua +77 -0
  117. package/engine/text-tag.d.ts +36 -2
  118. package/engine/text-tag.lua +250 -10
  119. package/engine/unit.d.ts +3 -0
  120. package/engine/unit.lua +3 -0
  121. package/net/socket.lua +1 -1
  122. package/objutil/buff.lua +2 -3
  123. package/package.json +2 -2
  124. package/patch-lualib.lua +1 -1
  125. package/utility/arrays.d.ts +2 -0
  126. package/utility/arrays.lua +11 -0
  127. package/utility/callback-array.d.ts +17 -0
  128. package/utility/callback-array.lua +61 -0
  129. package/utility/functions.d.ts +8 -0
  130. package/utility/functions.lua +13 -0
  131. package/utility/linked-set.d.ts +2 -0
  132. package/utility/linked-set.lua +22 -1
  133. package/utility/lua-maps.d.ts +15 -2
  134. package/utility/lua-maps.lua +53 -2
  135. package/utility/lua-sets.d.ts +2 -0
  136. package/utility/lua-sets.lua +7 -0
  137. package/utility/types.d.ts +3 -0
  138. package/core/types/order.d.ts +0 -25
  139. package/core/types/order.lua +0 -55
@@ -9,9 +9,18 @@ local ____timer = require("core.types.timer")
9
9
  local Timer = ____timer.Timer
10
10
  local ____lua_2Dsets = require("utility.lua-sets")
11
11
  local luaSetOf = ____lua_2Dsets.luaSetOf
12
+ local ____attributes = require("attributes")
13
+ local attribute = ____attributes.attribute
14
+ local ____linked_2Dset = require("utility.linked-set")
15
+ local LinkedSet = ____linked_2Dset.LinkedSet
16
+ local ____math = require("math")
17
+ local ceil = ____math.ceil
12
18
  local autoAttackFinishEvent = __TS__New(Event)
13
19
  rawset(Unit, "autoAttackFinishEvent", autoAttackFinishEvent)
14
- local eventTimerByUnit = {}
20
+ local units = __TS__New(LinkedSet)
21
+ local targetAttribute = attribute()
22
+ local impactDelayAttribute = attribute()
23
+ local passedTimeAttribute = attribute()
15
24
  local instantOrderIds = luaSetOf(
16
25
  orderId("avatar"),
17
26
  orderId("berserk"),
@@ -28,24 +37,46 @@ local instantOrderIds = luaSetOf(
28
37
  orderId("unimmolation")
29
38
  )
30
39
  local function reset(source, orderId)
31
- if not (instantOrderIds[orderId] ~= nil) then
32
- local eventTimer = eventTimerByUnit[source]
33
- if eventTimer then
34
- eventTimer:destroy()
35
- eventTimerByUnit[source] = nil
36
- end
40
+ if not (instantOrderIds[orderId] ~= nil) and units:remove(source) then
41
+ source[targetAttribute] = nil
42
+ source[impactDelayAttribute] = nil
43
+ source[passedTimeAttribute] = nil
37
44
  end
38
45
  end
39
46
  Unit.onImmediateOrder:addListener(reset)
40
47
  Unit.onPointOrder:addListener(reset)
41
48
  Unit.onTargetOrder:addListener(reset)
42
- local function timerCallback(source, target)
43
- eventTimerByUnit[source] = nil
44
- Event.invoke(autoAttackFinishEvent, source, target)
49
+ local timerPeriod = 1 / 64
50
+ local function invokeEvent(unit)
51
+ units:remove(unit)
52
+ local target = unit[targetAttribute]
53
+ unit[targetAttribute] = nil
54
+ unit[impactDelayAttribute] = nil
55
+ unit[passedTimeAttribute] = nil
56
+ Event.invoke(autoAttackFinishEvent, unit, target)
57
+ end
58
+ local function checkUnit(unit)
59
+ local passedTime = unit[passedTimeAttribute] + timerPeriod
60
+ local impactDelay = unit[impactDelayAttribute]
61
+ if passedTime >= impactDelay and ceil(passedTime / 0.02) >= ceil(impactDelay / 0.02) then
62
+ invokeEvent(unit)
63
+ else
64
+ unit[passedTimeAttribute] = passedTime
65
+ end
45
66
  end
46
- Unit.autoAttackStartEvent:addListener(function(source, target)
47
- local attackPoint = source.weapons[1].impactDelay
48
- local timer = Timer:simple(attackPoint, timerCallback, source, target)
49
- eventTimerByUnit[source] = timer
67
+ Timer.onPeriod[timerPeriod]:addListener(function()
68
+ units:forEach(checkUnit)
50
69
  end)
70
+ Unit.autoAttackStartEvent:addListener(
71
+ 999999,
72
+ function(source, target)
73
+ if source[targetAttribute] ~= nil then
74
+ invokeEvent(source)
75
+ end
76
+ source[targetAttribute] = target
77
+ source[impactDelayAttribute] = (source:chooseWeapon(target) or source.firstWeapon).impactDelay
78
+ source[passedTimeAttribute] = -timerPeriod
79
+ units:add(source)
80
+ end
81
+ )
51
82
  return ____exports
@@ -11,6 +11,10 @@ import { Ability, UnitAbility } from "./ability";
11
11
  import { Widget } from "../../core/types/widget";
12
12
  import type { UnitTypeId } from "../object-data/entry/unit-type";
13
13
  import { CombatClassification, CombatClassifications } from "../object-data/auxiliary/combat-classification";
14
+ import { MovementType } from "../object-data/auxiliary/movement-type";
15
+ import { UnitAttribute } from "../object-data/auxiliary/unit-attribute";
16
+ import { AttackType } from "../object-data/auxiliary/attack-type";
17
+ import { AttributesHolder } from "../../attributes";
14
18
  export type UnitClassification = junittype;
15
19
  export declare namespace UnitClassification {
16
20
  const STRUCTURE: junittype;
@@ -19,6 +23,7 @@ export declare namespace UnitClassification {
19
23
  const GROUND: junittype;
20
24
  const SUMMONED: junittype;
21
25
  const MECHANICAL: junittype;
26
+ const WORKER: junittype;
22
27
  const ANCIENT: junittype;
23
28
  const SUICIDAL: junittype;
24
29
  const TAUREN: junittype;
@@ -36,15 +41,18 @@ type AbilityDispatcherTable<T extends any[] = []> = {
36
41
  readonly [id: number]: Event<[Unit, Ability, ...T]>;
37
42
  };
38
43
  type AbilityEventDispatcher<T extends any[] = []> = Event<[Unit, Ability, ...T]> & AbilityDispatcherTable<T>;
39
- export interface DamagingEvent {
44
+ export interface DamagingEvent extends AttributesHolder {
40
45
  amount: number;
41
- attackType: jattacktype;
46
+ attackType: AttackType;
42
47
  damageType: jdamagetype;
43
48
  weaponType: jweapontype;
49
+ metadata: unknown;
44
50
  readonly isAttack: boolean;
45
51
  readonly originalAmount: number;
52
+ readonly originalMetadata: unknown;
53
+ preventRetaliation(this: DamagingEvent): void;
46
54
  }
47
- export type DamageEvent = DamagingEvent & {
55
+ export type DamageEvent = Omit<DamagingEvent, "preventRetaliation"> & {
48
56
  preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
49
57
  };
50
58
  export type AttackDamageEvent = DamagingEvent & {
@@ -72,10 +80,14 @@ export declare class UnitWeapon {
72
80
  readonly unit: Unit;
73
81
  readonly index: 0 | 1;
74
82
  constructor(unit: Unit, index: 0 | 1);
83
+ get isEnabled(): boolean;
84
+ set isEnabled(isEnabled: boolean);
75
85
  get cooldown(): number;
76
86
  set cooldown(cooldown: number);
77
87
  get damage(): [minimumDamage: number, maximumDamage: number];
78
88
  set damage([minimumDamage, maximumDamage]: [number, number]);
89
+ get allowedTargetCombatClassifications(): CombatClassifications;
90
+ set allowedTargetCombatClassifications(allowedTargetCombatClassifications: CombatClassifications);
79
91
  get damageBase(): number;
80
92
  set damageBase(damageBase: number);
81
93
  get damageDiceCount(): number;
@@ -97,12 +109,13 @@ declare const enum UnitPropertyKey {
97
109
  SYNC_ID = 100,
98
110
  IS_PAUSED = 101,
99
111
  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,
104
- LAST_X = 107,
105
- LAST_Y = 108
112
+ FORCE_STUN_COUNTER = 103,
113
+ DELAY_HEALTH_CHECKS_COUNTER = 104,
114
+ DELAY_HEALTH_CHECKS_HEALTH_BONUS = 105,
115
+ PREVENT_DEATH_HEALTH_BONUS = 106,
116
+ IS_TEAM_GLOW_HIDDEN = 107,
117
+ LAST_X = 108,
118
+ LAST_Y = 109
106
119
  }
107
120
  export type UnitSyncId = number & {
108
121
  readonly __unitSyncId: unique symbol;
@@ -111,6 +124,7 @@ export declare class Unit extends Handle<junit> {
111
124
  readonly syncId: UnitSyncId;
112
125
  private [UnitPropertyKey.IS_PAUSED]?;
113
126
  private [UnitPropertyKey.STUN_COUNTER]?;
127
+ private [UnitPropertyKey.FORCE_STUN_COUNTER]?;
114
128
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
115
129
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
116
130
  private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
@@ -150,17 +164,19 @@ export declare class Unit extends Handle<junit> {
150
164
  isInRangeOf(unit: Unit, range: number): boolean;
151
165
  isAllyOf(unit: Unit): boolean;
152
166
  isEnemyOf(unit: Unit): boolean;
153
- playAnimation(animation: string, rarity?: jraritycontrol): void;
154
- playAnimation(animation: number): void;
167
+ playAnimation(...parameters: [animation: number] | [animation: string, rarity?: jraritycontrol]): void;
155
168
  resetAnimation(): void;
156
169
  queueAnimation(animation: string): void;
157
170
  get weapons(): [UnitWeapon, UnitWeapon];
158
171
  get firstWeapon(): UnitWeapon;
159
172
  get secondWeapon(): UnitWeapon;
173
+ chooseWeapon(target: Unit): UnitWeapon | undefined;
160
174
  get level(): number;
161
175
  set level(v: number);
162
176
  get xp(): number;
163
177
  set xp(v: number);
178
+ get primaryAttribute(): UnitAttribute;
179
+ set primaryAttribute(primaryAttribute: UnitAttribute);
164
180
  get strengthBase(): number;
165
181
  set strengthBase(strengthBase: number);
166
182
  get strengthBonus(): number;
@@ -204,8 +220,6 @@ export declare class Unit extends Handle<junit> {
204
220
  set facing(v: number);
205
221
  get speed(): number;
206
222
  set speed(v: number);
207
- get flyHeight(): number;
208
- set flyHeight(v: number);
209
223
  get x(): number;
210
224
  set x(v: number);
211
225
  get y(): number;
@@ -229,12 +243,12 @@ export declare class Unit extends Handle<junit> {
229
243
  get isInvulnerable(): boolean;
230
244
  get vertexColor(): Color;
231
245
  set vertexColor(v: Color);
232
- get scale(): number;
233
- set scale(v: number);
234
246
  get timeScale(): number;
235
247
  set timeScale(v: number);
236
248
  get collisionSize(): number;
237
249
  get pathingCollisionRange(): number;
250
+ get movementType(): MovementType;
251
+ set movementType(movementType: MovementType);
238
252
  set pathing(v: boolean);
239
253
  isSelected(player: Player): boolean;
240
254
  explode(): void;
@@ -252,17 +266,18 @@ export declare class Unit extends Handle<junit> {
252
266
  dropItemTarget(item: Item, target: Widget): boolean;
253
267
  dropItemSlot(item: Item, slot: number): boolean;
254
268
  itemInSlot(slot: number): Item | null;
255
- addAbility(abilityId: number): UnitAbility | null;
269
+ addAbility(abilityId: number): UnitAbility | undefined;
256
270
  makeAbilityPermanent(abilityId: number, permanent: true): boolean;
257
271
  setAbilityLevel(abilityId: number, level: number): number;
258
272
  getAbilityLevel(abilityId: number): number;
259
273
  hasAbility(abilityId: number): boolean;
260
- getAbilityById(abilityId: number): UnitAbility | undefined;
261
- removeAbility(abilityId: number): boolean;
274
+ getAbility(abilityId: number): UnitAbility | undefined;
275
+ removeAbility(abilityTypeId: number): boolean;
262
276
  hideAbility(abilityId: number, flag: boolean): void;
263
277
  getAbilityRemainingCooldown(abilityId: number): number;
264
278
  startAbilityCooldown(abilityId: number, cooldown: number): void;
265
279
  endAbilityCooldown(abilityId: number): void;
280
+ interruptMovement(): void;
266
281
  interruptAttack(): void;
267
282
  interruptCast(abilityId: number): void;
268
283
  getDistanceTo(target: Unit | Vec2): number;
@@ -277,6 +292,8 @@ export declare class Unit extends Handle<junit> {
277
292
  unpauseEx(): void;
278
293
  incrementStunCounter(): void;
279
294
  decrementStunCounter(): void;
295
+ incrementForceStunCounter(): void;
296
+ decrementForceStunCounter(): void;
280
297
  set waygateActive(v: boolean);
281
298
  get waygateActive(): boolean;
282
299
  set waygateDestination(v: Vec2);
@@ -285,6 +302,7 @@ export declare class Unit extends Handle<junit> {
285
302
  get onUnitInRange(): Record<number, Event<[Unit]>>;
286
303
  get onManaEqual(): Record<number, Event<[Unit, number]>>;
287
304
  get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
305
+ get targetAcquiredEvent(): Event;
288
306
  get onSelect(): Event;
289
307
  get onDeselect(): Event;
290
308
  get onImmediateOrder(): Event<[number]>;
@@ -337,7 +355,8 @@ export declare class Unit extends Handle<junit> {
337
355
  static itemDroppedEvent: UnitTriggerEvent<[Item]>;
338
356
  static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
339
357
  static itemUsedEvent: UnitTriggerEvent<[Item]>;
340
- static itemStackedEvent: UnitTriggerEvent<[Item]>;
358
+ static itemStackedEvent: UnitTriggerEvent<[target: Item, source: Item]>;
359
+ static get itemChargesChangedEvent(): Event<[unit: Unit, item: Item]>;
341
360
  static get itemUseOrderEvent(): Event<[unit: Unit, item: Item]>;
342
361
  static get itemMoveOrderEvent(): Event<[
343
362
  unit: Unit,
@@ -356,5 +375,6 @@ export declare class Unit extends Handle<junit> {
356
375
  setField(field: junitstringfield, value: string): boolean;
357
376
  toString(): string;
358
377
  static getBySyncId(syncId: UnitSyncId): Unit | undefined;
378
+ static synchronize: (player: Player, object: Unit | undefined) => Promise<Unit | undefined>;
359
379
  }
360
380
  export {};