warscript 0.0.1-dev.ea69747 → 0.0.1-dev.eb92d79

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 (130) hide show
  1. package/attributes.d.ts +12 -0
  2. package/attributes.lua +16 -0
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/core/types/frame.d.ts +4 -1
  6. package/core/types/frame.lua +22 -1
  7. package/core/types/group.d.ts +0 -1
  8. package/core/types/handle.d.ts +2 -1
  9. package/core/types/handle.lua +5 -0
  10. package/core/types/image.d.ts +0 -1
  11. package/core/types/missile.d.ts +2 -2
  12. package/core/types/missile.lua +8 -2
  13. package/core/types/unit.lua +8 -0
  14. package/core/util.d.ts +1 -1
  15. package/core/util.lua +6 -0
  16. package/decl/index.d.ts +1 -0
  17. package/engine/ability.d.ts +1 -1
  18. package/engine/behavior.d.ts +10 -10
  19. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  20. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  21. package/engine/behaviour/ability/apply-unit-behavior.lua +31 -9
  22. package/engine/behaviour/ability/damage.d.ts +33 -11
  23. package/engine/behaviour/ability/damage.lua +89 -31
  24. package/engine/behaviour/ability/heal.d.ts +33 -6
  25. package/engine/behaviour/ability/heal.lua +89 -10
  26. package/engine/behaviour/ability/instant-impact.lua +4 -0
  27. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  28. package/engine/behaviour/ability/restore-mana.lua +29 -0
  29. package/engine/behaviour/ability.d.ts +8 -1
  30. package/engine/behaviour/ability.lua +62 -0
  31. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  32. package/engine/behaviour/unit.d.ts +8 -2
  33. package/engine/behaviour/unit.lua +27 -0
  34. package/engine/buff.d.ts +62 -20
  35. package/engine/buff.lua +247 -72
  36. package/engine/game-map.d.ts +7 -0
  37. package/engine/game-map.lua +32 -0
  38. package/engine/internal/ability.d.ts +2 -12
  39. package/engine/internal/ability.lua +2 -78
  40. package/engine/internal/item+owner.lua +2 -2
  41. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  42. package/engine/internal/mechanics/ability-duration.lua +2 -0
  43. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  44. package/engine/internal/mechanics/cast-ability.lua +86 -0
  45. package/engine/internal/unit/bonus.d.ts +9 -8
  46. package/engine/internal/unit/bonus.lua +6 -1
  47. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  48. package/engine/internal/unit/detach-missiles.lua +30 -0
  49. package/engine/internal/unit/item.d.ts +23 -0
  50. package/engine/internal/unit/item.lua +74 -0
  51. package/engine/internal/unit+ability.lua +2 -2
  52. package/engine/internal/unit+transport.lua +4 -10
  53. package/engine/internal/unit-missile-launch.lua +25 -6
  54. package/engine/internal/unit.d.ts +42 -13
  55. package/engine/internal/unit.lua +259 -93
  56. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  57. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  58. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  59. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  60. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  61. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  62. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  63. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  64. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  65. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  66. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  67. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  68. package/engine/object-data/entry/ability-type.d.ts +1 -1
  69. package/engine/object-data/entry/ability-type.lua +1 -0
  70. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  71. package/engine/object-data/entry/buff-type/applicable.lua +27 -71
  72. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  73. package/engine/object-data/entry/buff-type.d.ts +0 -1
  74. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  75. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  76. package/engine/object-data/entry/item-type.d.ts +12 -1
  77. package/engine/object-data/entry/item-type.lua +78 -0
  78. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  79. package/engine/object-data/entry/unit-type.d.ts +42 -2
  80. package/engine/object-data/entry/unit-type.lua +378 -50
  81. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  82. package/engine/object-data/entry/upgrade.d.ts +0 -1
  83. package/engine/object-data/entry.d.ts +2 -3
  84. package/engine/object-field/ability.d.ts +25 -6
  85. package/engine/object-field/ability.lua +57 -1
  86. package/engine/object-field/unit.d.ts +1 -0
  87. package/engine/object-field/unit.lua +3 -0
  88. package/engine/object-field.d.ts +6 -4
  89. package/engine/object-field.lua +38 -12
  90. package/engine/random.d.ts +1 -0
  91. package/engine/random.lua +9 -0
  92. package/engine/standard/entries/unit-type.d.ts +42 -1
  93. package/engine/standard/entries/unit-type.lua +42 -1
  94. package/engine/standard/fields/ability.d.ts +1 -1
  95. package/engine/standard/fields/ability.lua +1 -1
  96. package/engine/unit.d.ts +2 -0
  97. package/engine/unit.lua +11 -2
  98. package/event.d.ts +2 -3
  99. package/event.lua +9 -5
  100. package/exception.d.ts +2 -0
  101. package/exception.lua +4 -0
  102. package/global/vec2.lua +1 -0
  103. package/lualib_bundle.lua +146 -42
  104. package/math/vec2.d.ts +2 -9
  105. package/math.d.ts +0 -2
  106. package/net/socket.d.ts +7 -1
  107. package/net/socket.lua +45 -4
  108. package/network.d.ts +1 -0
  109. package/network.lua +3 -2
  110. package/objutil/ability.d.ts +0 -1
  111. package/objutil/buff.d.ts +0 -1
  112. package/objutil/buff.lua +1 -1
  113. package/objutil/object.d.ts +0 -1
  114. package/objutil/unit.d.ts +0 -1
  115. package/package.json +13 -14
  116. package/property.d.ts +55 -0
  117. package/property.lua +374 -0
  118. package/string.d.ts +30 -0
  119. package/string.lua +14 -0
  120. package/util/stream.d.ts +0 -1
  121. package/utility/arrays.d.ts +4 -5
  122. package/utility/arrays.lua +4 -1
  123. package/utility/bit-set.d.ts +0 -2
  124. package/utility/linked-set.d.ts +31 -9
  125. package/utility/linked-set.lua +21 -2
  126. package/utility/lua-maps.d.ts +1 -2
  127. package/utility/lua-sets.d.ts +1 -2
  128. package/utility/types.d.ts +3 -2
  129. package/core/mapbounds.d.ts +0 -8
  130. package/core/mapbounds.lua +0 -12
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { Handle, HandleDestructor } from "../../core/types/handle";
4
3
  import { Player } from "../../core/types/player";
@@ -43,6 +42,7 @@ export interface DamagingEvent {
43
42
  damageType: jdamagetype;
44
43
  weaponType: jweapontype;
45
44
  readonly isAttack: boolean;
45
+ readonly originalAmount: number;
46
46
  }
47
47
  export type DamageEvent = DamagingEvent & {
48
48
  preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
@@ -68,23 +68,44 @@ declare const modifiers: {
68
68
  speed: (unit: junit, value: number) => void;
69
69
  armor: (unit: junit, value: number) => void;
70
70
  };
71
- interface UnitWeapon {
71
+ export declare class UnitWeapon {
72
+ readonly unit: Unit;
72
73
  readonly index: 0 | 1;
73
- cooldown: number;
74
- projectileArc: number;
75
- projectileArt: string;
76
- projectileSpeed: number;
77
- attackPoint: number;
74
+ constructor(unit: Unit, index: 0 | 1);
75
+ get cooldown(): number;
76
+ set cooldown(cooldown: number);
77
+ get damage(): [minimumDamage: number, maximumDamage: number];
78
+ set damage([minimumDamage, maximumDamage]: [number, number]);
79
+ get damageBase(): number;
80
+ set damageBase(damageBase: number);
81
+ get damageDiceCount(): number;
82
+ set damageDiceCount(damageDiceCount: number);
83
+ get damageDiceSideCount(): number;
84
+ set damageDiceSideCount(damageDiceSideCount: number);
85
+ get range(): number;
86
+ set range(range: number);
87
+ get impactDelay(): number;
88
+ set impactDelay(impactDelay: number);
89
+ get missileArc(): number;
90
+ set missileArc(missileArc: number);
91
+ get missileModelPath(): string;
92
+ set missileModelPath(missileModelPath: string);
93
+ get missileSpeed(): number;
94
+ set missileSpeed(missileSpeed: number);
78
95
  }
79
96
  declare const enum UnitPropertyKey {
80
97
  IS_PAUSED = 100,
81
98
  STUN_COUNTER = 101,
82
- PREVENT_DEATH_HEALTH_BONUS = 102,
83
- IS_TEAM_GLOW_HIDDEN = 103
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
84
103
  }
85
104
  export declare class Unit extends Handle<junit> {
86
105
  private [UnitPropertyKey.IS_PAUSED]?;
87
106
  private [UnitPropertyKey.STUN_COUNTER]?;
107
+ private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
108
+ private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
88
109
  private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
89
110
  private [UnitPropertyKey.IS_TEAM_GLOW_HIDDEN]?;
90
111
  private _owner?;
@@ -123,6 +144,8 @@ export declare class Unit extends Handle<junit> {
123
144
  playAnimation(animation: number): void;
124
145
  queueAnimation(animation: string): void;
125
146
  get weapons(): [UnitWeapon, UnitWeapon];
147
+ get firstWeapon(): UnitWeapon;
148
+ get secondWeapon(): UnitWeapon;
126
149
  get level(): number;
127
150
  set level(v: number);
128
151
  get xp(): number;
@@ -148,6 +171,10 @@ export declare class Unit extends Handle<junit> {
148
171
  set color(color: PlayerColor);
149
172
  get acquisitionRange(): number;
150
173
  set acquisitionRange(v: number);
174
+ /**
175
+ * Keeps this unit alive even if its health becomes negative until the current game thread yields.
176
+ */
177
+ delayHealthChecks(): void;
151
178
  get maxHealth(): number;
152
179
  set maxHealth(maxHealth: number);
153
180
  get healthRegenerationRate(): number;
@@ -201,7 +228,7 @@ export declare class Unit extends Handle<junit> {
201
228
  isSelected(player: Player): boolean;
202
229
  explode(): void;
203
230
  kill(): void;
204
- revive(pos: Vec2, doEffect: boolean): void;
231
+ revive(x: number, y: number, doEffect?: boolean): void;
205
232
  healTarget(target: Widget, amount: number): void;
206
233
  useItem(item: Item): boolean;
207
234
  issueImmediateOrder(order: number): boolean;
@@ -222,6 +249,7 @@ export declare class Unit extends Handle<junit> {
222
249
  getAbilityById(abilityId: number): UnitAbility | undefined;
223
250
  removeAbility(abilityId: number): boolean;
224
251
  hideAbility(abilityId: number, flag: boolean): void;
252
+ getAbilityRemainingCooldown(abilityId: number): number;
225
253
  startAbilityCooldown(abilityId: number, cooldown: number): void;
226
254
  endAbilityCooldown(abilityId: number): void;
227
255
  interruptAttack(): void;
@@ -295,9 +323,10 @@ export declare class Unit extends Handle<junit> {
295
323
  static readonly autoAttackStartEvent: UnitTriggerEvent<[Unit]>;
296
324
  static readonly onDamaging: Event<[source: Unit | undefined, target: Unit, event: DamagingEvent]>;
297
325
  static readonly onDamage: InitializingEvent<[source: Unit | undefined, target: Unit, event: DamageEvent], jtrigger>;
298
- static onItemDrop: UnitTriggerEvent<[Item]>;
299
- static onItemPickup: UnitTriggerEvent<[Item]>;
300
- static onItemUse: UnitTriggerEvent<[Item]>;
326
+ static itemDroppedEvent: UnitTriggerEvent<[Item]>;
327
+ static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
328
+ static itemUsedEvent: UnitTriggerEvent<[Item]>;
329
+ static itemStackedEvent: UnitTriggerEvent<[Item]>;
301
330
  static get onCreate(): EventDispatcher<[Unit], [Unit]>;
302
331
  static get destroyEvent(): EventDispatcher<[Unit], [Unit]>;
303
332
  getField(field: junitintegerfield | junitrealfield): number;
@@ -5,9 +5,12 @@ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
5
5
  local __TS__New = ____lualib.__TS__New
6
6
  local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
8
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
9
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
- local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
13
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -92,6 +95,10 @@ local isUnitInRangeXY = IsUnitInRangeXY
92
95
  local isUnitInRange = IsUnitInRange
93
96
  local setResourceAmount = SetResourceAmount
94
97
  local getResourceAmount = GetResourceAmount
98
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
101
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
102
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
103
  local unitDisableAbility = BlzUnitDisableAbility
97
104
  local unitInterruptAttack = BlzUnitInterruptAttack
@@ -275,16 +282,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
282
  end
276
283
  local function dispatch(event, idGetter, argsGetter)
277
284
  local initialized = false
278
- local x = {}
279
285
  return setmetatable(
280
- x,
286
+ {},
281
287
  {
282
288
  __index = function(self, id)
283
289
  if type(id) ~= "number" then
284
290
  return event[id]
285
291
  end
286
292
  if not initialized then
287
- local invoke = Event.invoke
288
293
  event:addListener(function(...)
289
294
  local id = idGetter(...)
290
295
  local dispatched = rawget(self, id)
@@ -322,7 +327,6 @@ local function dispatchAbility(event)
322
327
  return event[id]
323
328
  end
324
329
  if not initialized then
325
- local invoke = Event.invoke
326
330
  event:addListener(function(unit, ability, ...)
327
331
  local dispatched = rawget(self, ability.typeId)
328
332
  if dispatched ~= nil then
@@ -387,51 +391,158 @@ local getters = {
387
391
  return BlzGetUnitArmor(unit)
388
392
  end
389
393
  }
390
- local weaponGetters = {
391
- index = function(self, handle, index)
392
- return index
393
- end,
394
- cooldown = function(self, handle, index)
395
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index)
396
- end,
397
- projectileArc = function(self, handle, index)
398
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index)
399
- end,
400
- projectileArt = function(self, handle, index)
401
- return BlzGetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index)
402
- end,
403
- projectileSpeed = function(self, handle, index)
404
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index)
405
- end,
406
- attackPoint = function(self, handle, index)
407
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index)
408
- end
409
- }
410
- local weaponSetters = {
411
- cooldown = function(self, handle, index, value)
412
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index, value))
413
- end,
414
- projectileArc = function(self, handle, index, value)
415
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index, value))
416
- end,
417
- projectileArt = function(self, handle, index, value)
418
- assert(BlzSetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index, value))
419
- end,
420
- projectileSpeed = function(self, handle, index, value)
421
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index, value))
422
- end,
423
- attackPoint = function(self, handle, index, value)
424
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index, value))
425
- end
426
- }
427
- local weaponMetatable = {
428
- __index = function(self, key)
429
- return weaponGetters[key](weaponGetters, self.h, self.i)
430
- end,
431
- __newindex = function(self, key, value)
432
- weaponSetters[key](weaponSetters, self.h, self.i, value)
433
- end
434
- }
394
+ ____exports.UnitWeapon = __TS__Class()
395
+ local UnitWeapon = ____exports.UnitWeapon
396
+ UnitWeapon.name = "UnitWeapon"
397
+ function UnitWeapon.prototype.____constructor(self, unit, index)
398
+ self.unit = unit
399
+ self.index = index
400
+ end
401
+ __TS__SetDescriptor(
402
+ UnitWeapon.prototype,
403
+ "cooldown",
404
+ {
405
+ get = function(self)
406
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
407
+ end,
408
+ set = function(self, cooldown)
409
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
410
+ end
411
+ },
412
+ true
413
+ )
414
+ __TS__SetDescriptor(
415
+ UnitWeapon.prototype,
416
+ "damage",
417
+ {
418
+ get = function(self)
419
+ local minimumDamage = self.damageBase + self.damageDiceCount
420
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
421
+ return {minimumDamage, maximumDamage}
422
+ end,
423
+ set = function(self, ____bindingPattern0)
424
+ local maximumDamage
425
+ local minimumDamage
426
+ minimumDamage = ____bindingPattern0[1]
427
+ maximumDamage = ____bindingPattern0[2]
428
+ self.damageBase = minimumDamage - 1
429
+ self.damageDiceCount = 1
430
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
431
+ end
432
+ },
433
+ true
434
+ )
435
+ __TS__SetDescriptor(
436
+ UnitWeapon.prototype,
437
+ "damageBase",
438
+ {
439
+ get = function(self)
440
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
441
+ end,
442
+ set = function(self, damageBase)
443
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
444
+ end
445
+ },
446
+ true
447
+ )
448
+ __TS__SetDescriptor(
449
+ UnitWeapon.prototype,
450
+ "damageDiceCount",
451
+ {
452
+ get = function(self)
453
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
454
+ end,
455
+ set = function(self, damageDiceCount)
456
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
457
+ end
458
+ },
459
+ true
460
+ )
461
+ __TS__SetDescriptor(
462
+ UnitWeapon.prototype,
463
+ "damageDiceSideCount",
464
+ {
465
+ get = function(self)
466
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
467
+ end,
468
+ set = function(self, damageDiceSideCount)
469
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
470
+ end
471
+ },
472
+ true
473
+ )
474
+ __TS__SetDescriptor(
475
+ UnitWeapon.prototype,
476
+ "range",
477
+ {
478
+ get = function(self)
479
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
480
+ end,
481
+ set = function(self, range)
482
+ local handle = self.unit.handle
483
+ local index = self.index
484
+ setUnitWeaponRealField(
485
+ handle,
486
+ UNIT_WEAPON_RF_ATTACK_RANGE,
487
+ index + 1,
488
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
489
+ )
490
+ end
491
+ },
492
+ true
493
+ )
494
+ __TS__SetDescriptor(
495
+ UnitWeapon.prototype,
496
+ "impactDelay",
497
+ {
498
+ get = function(self)
499
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
500
+ end,
501
+ set = function(self, impactDelay)
502
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
503
+ end
504
+ },
505
+ true
506
+ )
507
+ __TS__SetDescriptor(
508
+ UnitWeapon.prototype,
509
+ "missileArc",
510
+ {
511
+ get = function(self)
512
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
513
+ end,
514
+ set = function(self, missileArc)
515
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
516
+ end
517
+ },
518
+ true
519
+ )
520
+ __TS__SetDescriptor(
521
+ UnitWeapon.prototype,
522
+ "missileModelPath",
523
+ {
524
+ get = function(self)
525
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
526
+ end,
527
+ set = function(self, missileModelPath)
528
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
529
+ end
530
+ },
531
+ true
532
+ )
533
+ __TS__SetDescriptor(
534
+ UnitWeapon.prototype,
535
+ "missileSpeed",
536
+ {
537
+ get = function(self)
538
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
539
+ end,
540
+ set = function(self, missileSpeed)
541
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
542
+ end
543
+ },
544
+ true
545
+ )
435
546
  local unitInventorySize = UnitInventorySize
436
547
  local unitItemInSlot = UnitItemInSlot
437
548
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +553,6 @@ local getAbilityName = GetAbilityName
442
553
  local unitAddAbility = UnitAddAbility
443
554
  local getUnitGoldCost = GetUnitGoldCost
444
555
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
556
  local unitRemoveAbility = UnitRemoveAbility
448
557
  local function retrieveAbility(unit, ability, abilityId)
449
558
  if ability == nil then
@@ -520,6 +629,23 @@ for ____, player in ipairs(Player.all) do
520
629
  ShowUnit(dummy, false)
521
630
  dummies[player] = dummy
522
631
  end
632
+ local function delayHealthChecksCallback(unit)
633
+ local counter = (unit[102] or 0) - 1
634
+ if counter ~= 0 then
635
+ unit[102] = counter
636
+ return
637
+ end
638
+ unit[102] = nil
639
+ local healthBonus = unit[103]
640
+ if healthBonus ~= nil then
641
+ unit[103] = nil
642
+ local handle = unit.handle
643
+ BlzSetUnitMaxHP(
644
+ handle,
645
+ BlzGetUnitMaxHP(handle) - healthBonus
646
+ )
647
+ end
648
+ end
523
649
  ____exports.Unit = __TS__Class()
524
650
  local Unit = ____exports.Unit
525
651
  Unit.name = "Unit"
@@ -674,6 +800,10 @@ end
674
800
  function Unit.prototype.queueAnimation(self, animation)
675
801
  queueUnitAnimation(self.handle, animation)
676
802
  end
803
+ function Unit.prototype.delayHealthChecks(self)
804
+ self[102] = (self[102] or 0) + 1
805
+ Timer:run(delayHealthChecksCallback, self)
806
+ end
677
807
  function Unit.prototype.setPosition(self, x, y)
678
808
  setUnitPosition(self.handle, x, y)
679
809
  end
@@ -687,8 +817,15 @@ end
687
817
  function Unit.prototype.kill(self)
688
818
  killUnit(self.handle)
689
819
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
820
+ function Unit.prototype.revive(self, x, y, doEffect)
821
+ local ____ReviveHero_4 = ReviveHero
822
+ local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
823
+ local ____doEffect_2 = doEffect
824
+ if ____doEffect_2 == nil then
825
+ ____doEffect_2 = false
826
+ end
827
+ __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
+ ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
692
829
  end
693
830
  function Unit.prototype.healTarget(self, target, amount)
694
831
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +865,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
865
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
866
  end
730
867
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
868
+ return Item:of(unitItemInSlot(self.handle, slot))
732
869
  end
733
870
  function Unit.prototype.addAbility(self, abilityId)
734
871
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +921,9 @@ end
784
921
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
922
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
923
  end
924
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
925
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
926
+ end
787
927
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
928
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
929
  end
@@ -1071,12 +1211,27 @@ __TS__SetDescriptor(
1071
1211
  Unit.prototype,
1072
1212
  "weapons",
1073
1213
  {get = function(self)
1074
- local weapons = {
1075
- setmetatable({h = self.handle, i = 0}, weaponMetatable),
1076
- setmetatable({h = self.handle, i = 1}, weaponMetatable)
1077
- }
1078
- rawset(self, "weapons", weapons)
1079
- return weapons
1214
+ return {self.firstWeapon, self.secondWeapon}
1215
+ end},
1216
+ true
1217
+ )
1218
+ __TS__SetDescriptor(
1219
+ Unit.prototype,
1220
+ "firstWeapon",
1221
+ {get = function(self)
1222
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1223
+ rawset(self, "firstWeapon", weapon)
1224
+ return weapon
1225
+ end},
1226
+ true
1227
+ )
1228
+ __TS__SetDescriptor(
1229
+ Unit.prototype,
1230
+ "secondWeapon",
1231
+ {get = function(self)
1232
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1233
+ rawset(self, "secondWeapon", weapon)
1234
+ return weapon
1080
1235
  end},
1081
1236
  true
1082
1237
  )
@@ -1233,17 +1388,17 @@ __TS__SetDescriptor(
1233
1388
  "isTeamGlowVisible",
1234
1389
  {
1235
1390
  get = function(self)
1236
- return not self[103]
1391
+ return not self[105]
1237
1392
  end,
1238
1393
  set = function(self, isTeamGlowVisible)
1239
1394
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1395
+ local ____temp_5
1241
1396
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1397
+ ____temp_5 = true
1243
1398
  else
1244
- ____temp_2 = nil
1399
+ ____temp_5 = nil
1245
1400
  end
1246
- self[103] = ____temp_2
1401
+ self[105] = ____temp_5
1247
1402
  end
1248
1403
  },
1249
1404
  true
@@ -1253,7 +1408,7 @@ __TS__SetDescriptor(
1253
1408
  "color",
1254
1409
  {set = function(self, color)
1255
1410
  setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1411
+ if self[105] then
1257
1412
  showUnitTeamGlow(self.handle, false)
1258
1413
  end
1259
1414
  end},
@@ -1277,10 +1432,14 @@ __TS__SetDescriptor(
1277
1432
  "maxHealth",
1278
1433
  {
1279
1434
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1435
+ return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1281
1436
  end,
1282
1437
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1438
+ if maxHealth < 1 and self[102] ~= nil then
1439
+ self[103] = (self[103] or 0) + (1 - maxHealth)
1440
+ maxHealth = 1
1441
+ end
1442
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1284
1443
  end
1285
1444
  },
1286
1445
  true
@@ -1322,10 +1481,10 @@ __TS__SetDescriptor(
1322
1481
  "health",
1323
1482
  {
1324
1483
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1484
+ return GetWidgetLife(self.handle) - (self[104] or 0)
1326
1485
  end,
1327
1486
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1487
+ SetWidgetLife(self.handle, health + (self[104] or 0))
1329
1488
  end
1330
1489
  },
1331
1490
  true
@@ -1903,7 +2062,6 @@ Unit.onDecay = __TS__New(
1903
2062
  Unit.onResurrect = __TS__New(
1904
2063
  InitializingEvent,
1905
2064
  function(event)
1906
- local invoke = Event.invoke
1907
2065
  local dead = setmetatable({}, {__mode = "k"})
1908
2066
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2067
  dead[unit] = true
@@ -1919,10 +2077,15 @@ Unit.onResurrect = __TS__New(
1919
2077
  Unit.morphEvent = __TS__New(
1920
2078
  InitializingEvent,
1921
2079
  function(event)
2080
+ local function ifNotLeft(unit)
2081
+ local handle = unit.handle
2082
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2083
+ invoke(event, unit)
2084
+ end
2085
+ end
1922
2086
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2087
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2088
+ Timer:run(ifNotLeft, unit)
1926
2089
  end
1927
2090
  end)
1928
2091
  end
@@ -1960,27 +2123,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2123
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2124
  InitializingEvent,
1962
2125
  function(event)
1963
- local invoke = Event.invoke
1964
2126
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2127
+ local ____GetSpellTargetUnit_result_8
1966
2128
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2129
+ ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2130
  else
1969
- local ____GetSpellTargetItem_result_4
2131
+ local ____GetSpellTargetItem_result_7
1970
2132
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2133
+ ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
1972
2134
  else
1973
- local ____GetSpellTargetDestructable_result_3
2135
+ local ____GetSpellTargetDestructable_result_6
1974
2136
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2137
+ ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
1976
2138
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2139
+ ____GetSpellTargetDestructable_result_6 = nil
1978
2140
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2141
+ ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
1980
2142
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2143
+ ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
1982
2144
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2145
+ local target = ____GetSpellTargetUnit_result_8
1984
2146
  if target then
1985
2147
  invoke(event, unit, id, target)
1986
2148
  end
@@ -2177,7 +2339,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2339
  )
2178
2340
  Unit.onDamaging = (function()
2179
2341
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2342
  local trigger = CreateTrigger()
2182
2343
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2344
  TriggerAddCondition(
@@ -2276,7 +2437,6 @@ end)()
2276
2437
  Unit.onDamage = __TS__New(
2277
2438
  InitializingEvent,
2278
2439
  function(event)
2279
- local invoke = Event.invoke
2280
2440
  local trigger = CreateTrigger()
2281
2441
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2442
  TriggerAddCondition(
@@ -2292,6 +2452,7 @@ Unit.onDamage = __TS__New(
2292
2452
  damageType = BlzGetEventDamageType(),
2293
2453
  weaponType = BlzGetEventWeaponType(),
2294
2454
  isAttack = BlzGetEventIsAttack(),
2455
+ originalAmount = GetEventDamage(),
2295
2456
  preventDeath = damageEventPreventDeath
2296
2457
  }
2297
2458
  local evData = setmetatable(
@@ -2308,7 +2469,7 @@ Unit.onDamage = __TS__New(
2308
2469
  invoke(event, source, target, evData)
2309
2470
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2471
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2472
+ target[104] = (target[104] or 0) + bonusHealth
2312
2473
  BlzSetUnitMaxHP(
2313
2474
  target.handle,
2314
2475
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2483,7 @@ Unit.onDamage = __TS__New(
2322
2483
  evData[0],
2323
2484
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2485
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2486
+ target[104] = (target[104] or 0) - bonusHealth
2326
2487
  SetWidgetLife(
2327
2488
  target.handle,
2328
2489
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,7 +2503,7 @@ Unit.onDamage = __TS__New(
2342
2503
  DestroyTrigger(trigger)
2343
2504
  end
2344
2505
  )
2345
- Unit.onItemDrop = __TS__New(
2506
+ Unit.itemDroppedEvent = __TS__New(
2346
2507
  ____exports.UnitTriggerEvent,
2347
2508
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2509
  function()
@@ -2353,7 +2514,7 @@ Unit.onItemDrop = __TS__New(
2353
2514
  return IgnoreEvent
2354
2515
  end
2355
2516
  )
2356
- Unit.onItemPickup = __TS__New(
2517
+ Unit.itemPickedUpEvent = __TS__New(
2357
2518
  ____exports.UnitTriggerEvent,
2358
2519
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2520
  function()
@@ -2364,10 +2525,15 @@ Unit.onItemPickup = __TS__New(
2364
2525
  return IgnoreEvent
2365
2526
  end
2366
2527
  )
2367
- Unit.onItemUse = __TS__New(
2528
+ Unit.itemUsedEvent = __TS__New(
2368
2529
  ____exports.UnitTriggerEvent,
2369
2530
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2531
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2532
+ )
2533
+ Unit.itemStackedEvent = __TS__New(
2534
+ ____exports.UnitTriggerEvent,
2535
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2536
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2371
2537
  )
2372
2538
  __TS__ObjectDefineProperty(
2373
2539
  Unit,
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { ModelNodeName } from "./model-node-name";
4
3
  import { ModelNodeQualifier } from "./model-node-qualifier";