warscript 0.0.1-dev.59cd31d → 0.0.1-dev.5e8f6c0

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 (144) 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/effect.d.ts +13 -3
  6. package/core/types/effect.lua +116 -17
  7. package/core/types/frame.d.ts +8 -1
  8. package/core/types/frame.lua +93 -1
  9. package/core/types/group.d.ts +0 -1
  10. package/core/types/handle.d.ts +2 -1
  11. package/core/types/handle.lua +5 -0
  12. package/core/types/image.d.ts +0 -1
  13. package/core/types/missile.d.ts +2 -2
  14. package/core/types/missile.lua +8 -2
  15. package/core/types/unit.lua +8 -0
  16. package/core/util.d.ts +1 -1
  17. package/core/util.lua +12 -0
  18. package/decl/index.d.ts +1 -0
  19. package/engine/ability.d.ts +1 -1
  20. package/engine/behavior.d.ts +10 -10
  21. package/engine/behavior.lua +6 -6
  22. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  23. package/engine/behaviour/ability/always-enabled.lua +31 -0
  24. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  25. package/engine/behaviour/ability/apply-unit-behavior.d.ts +5 -1
  26. package/engine/behaviour/ability/damage.d.ts +33 -11
  27. package/engine/behaviour/ability/damage.lua +89 -31
  28. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  29. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  30. package/engine/behaviour/ability/heal.d.ts +33 -6
  31. package/engine/behaviour/ability/heal.lua +89 -10
  32. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  33. package/engine/behaviour/ability/instant-impact.lua +4 -15
  34. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  35. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  36. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  37. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  38. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  39. package/engine/behaviour/ability/restore-mana.lua +29 -0
  40. package/engine/behaviour/ability.d.ts +16 -2
  41. package/engine/behaviour/ability.lua +88 -12
  42. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  43. package/engine/behaviour/unit.d.ts +8 -2
  44. package/engine/behaviour/unit.lua +27 -0
  45. package/engine/buff.d.ts +68 -21
  46. package/engine/buff.lua +276 -90
  47. package/engine/game-map.d.ts +7 -0
  48. package/engine/game-map.lua +32 -0
  49. package/engine/internal/ability.d.ts +16 -13
  50. package/engine/internal/ability.lua +82 -76
  51. package/engine/internal/item/ability.lua +90 -0
  52. package/engine/internal/item+owner.lua +2 -2
  53. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  54. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  55. package/engine/internal/unit/ability.d.ts +10 -1
  56. package/engine/internal/unit/ability.lua +36 -14
  57. package/engine/internal/unit/bonus.d.ts +9 -8
  58. package/engine/internal/unit/bonus.lua +6 -1
  59. package/engine/internal/unit/item.d.ts +24 -0
  60. package/engine/internal/unit/item.lua +79 -0
  61. package/engine/internal/unit/main-selected.d.ts +13 -0
  62. package/engine/internal/unit/main-selected.lua +51 -0
  63. package/engine/internal/unit+ability.lua +2 -2
  64. package/engine/internal/unit+transport.lua +4 -10
  65. package/engine/internal/unit-missile-launch.lua +25 -6
  66. package/engine/internal/unit.d.ts +58 -16
  67. package/engine/internal/unit.lua +355 -128
  68. package/engine/internal/utility.lua +12 -0
  69. package/engine/local-client.d.ts +7 -2
  70. package/engine/local-client.lua +82 -0
  71. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  72. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  73. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  74. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  75. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  76. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  77. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  78. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  79. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  80. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  81. package/engine/object-data/entry/ability-type.d.ts +0 -1
  82. package/engine/object-data/entry/ability-type.lua +8 -12
  83. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  84. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  85. package/engine/object-data/entry/buff-type.d.ts +0 -1
  86. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  87. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  88. package/engine/object-data/entry/item-type.d.ts +14 -1
  89. package/engine/object-data/entry/item-type.lua +91 -0
  90. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  91. package/engine/object-data/entry/unit-type.d.ts +42 -2
  92. package/engine/object-data/entry/unit-type.lua +378 -50
  93. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  94. package/engine/object-data/entry/upgrade.d.ts +0 -1
  95. package/engine/object-data/entry.d.ts +2 -3
  96. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  97. package/engine/object-field/ability.d.ts +21 -1
  98. package/engine/object-field/ability.lua +51 -1
  99. package/engine/object-field.d.ts +0 -1
  100. package/engine/random.d.ts +1 -0
  101. package/engine/random.lua +9 -0
  102. package/engine/standard/entries/unit-type.d.ts +42 -1
  103. package/engine/standard/entries/unit-type.lua +42 -1
  104. package/engine/standard/fields/ability.d.ts +3 -1
  105. package/engine/standard/fields/ability.lua +3 -1
  106. package/engine/unit.d.ts +2 -0
  107. package/engine/unit.lua +11 -2
  108. package/event.d.ts +2 -3
  109. package/event.lua +9 -5
  110. package/global/vec2.lua +1 -0
  111. package/index.d.ts +1 -0
  112. package/index.lua +1 -0
  113. package/lualib_bundle.lua +146 -42
  114. package/math/vec2.d.ts +2 -9
  115. package/math.d.ts +0 -2
  116. package/net/socket.d.ts +7 -1
  117. package/net/socket.lua +45 -4
  118. package/network.d.ts +1 -0
  119. package/network.lua +3 -2
  120. package/objutil/ability.d.ts +0 -1
  121. package/objutil/buff.d.ts +0 -1
  122. package/objutil/buff.lua +1 -1
  123. package/objutil/object.d.ts +0 -1
  124. package/objutil/unit.d.ts +0 -1
  125. package/package.json +13 -14
  126. package/patch-lua.d.ts +0 -0
  127. package/patch-lua.lua +10 -0
  128. package/property.d.ts +55 -0
  129. package/property.lua +374 -0
  130. package/string.d.ts +30 -0
  131. package/string.lua +14 -0
  132. package/util/stream.d.ts +0 -1
  133. package/utility/arrays.d.ts +11 -5
  134. package/utility/arrays.lua +34 -3
  135. package/utility/bit-set.d.ts +0 -2
  136. package/utility/lazy.d.ts +2 -0
  137. package/utility/lazy.lua +14 -0
  138. package/utility/linked-set.d.ts +11 -3
  139. package/utility/linked-set.lua +5 -2
  140. package/utility/lua-maps.d.ts +1 -2
  141. package/utility/lua-sets.d.ts +1 -2
  142. package/utility/types.d.ts +3 -2
  143. package/core/mapbounds.d.ts +0 -8
  144. package/core/mapbounds.lua +0 -12
@@ -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
@@ -453,17 +562,6 @@ local function retrieveAbility(unit, ability, abilityId)
453
562
  ____exports.Unit:of(unit)
454
563
  )
455
564
  end
456
- if not unitAddAbility(unit, abilityId) then
457
- if getUnitAbility(unit, abilityId) == ability then
458
- return UnitAbility:of(
459
- ability,
460
- abilityId,
461
- ____exports.Unit:of(unit)
462
- )
463
- end
464
- else
465
- unitRemoveAbility(unit, abilityId)
466
- end
467
565
  for i = 0, unitInventorySize(unit) - 1 do
468
566
  local item = unitItemInSlot(unit, i)
469
567
  if getItemAbility(item, abilityId) == ability then
@@ -520,12 +618,34 @@ for ____, player in ipairs(Player.all) do
520
618
  ShowUnit(dummy, false)
521
619
  dummies[player] = dummy
522
620
  end
621
+ local function delayHealthChecksCallback(unit)
622
+ local counter = (unit[103] or 0) - 1
623
+ if counter ~= 0 then
624
+ unit[103] = counter
625
+ return
626
+ end
627
+ unit[103] = nil
628
+ local healthBonus = unit[104]
629
+ if healthBonus ~= nil then
630
+ unit[104] = nil
631
+ local handle = unit.handle
632
+ BlzSetUnitMaxHP(
633
+ handle,
634
+ BlzGetUnitMaxHP(handle) - healthBonus
635
+ )
636
+ end
637
+ end
638
+ local nextSyncId = 1
639
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
523
640
  ____exports.Unit = __TS__Class()
524
641
  local Unit = ____exports.Unit
525
642
  Unit.name = "Unit"
526
643
  __TS__ClassExtends(Unit, Handle)
527
644
  function Unit.prototype.____constructor(self, handle)
528
645
  Handle.prototype.____constructor(self, handle)
646
+ local ____nextSyncId_0 = nextSyncId
647
+ nextSyncId = ____nextSyncId_0 + 1
648
+ self.syncId = ____nextSyncId_0
529
649
  self._owner = Player:of(getOwningPlayer(handle))
530
650
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
651
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +658,7 @@ function Unit.prototype.____constructor(self, handle)
538
658
  fourCC("Amrf")
539
659
  ))
540
660
  end
661
+ unitBySyncId[self.syncId] = self
541
662
  local ____ = self.abilities
542
663
  end
543
664
  function Unit.prototype.getEvent(self, event, collector)
@@ -623,8 +744,8 @@ function Unit.prototype.addModifier(self, property, modifier)
623
744
  end}
624
745
  end
625
746
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
747
+ local ____combatClassification_1 = combatClassification
748
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
628
749
  end
629
750
  function Unit.prototype.addClassification(self, classification)
630
751
  return unitAddType(self.handle, classification)
@@ -642,13 +763,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
763
  return isUnitInvisible(self.handle, player.handle)
643
764
  end
644
765
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
766
+ local ____temp_2
646
767
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
768
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
648
769
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
770
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
650
771
  end
651
- return ____temp_1
772
+ return ____temp_2
652
773
  end
653
774
  function Unit.prototype.isAllyOf(self, unit)
654
775
  return isUnitAlly(
@@ -674,6 +795,10 @@ end
674
795
  function Unit.prototype.queueAnimation(self, animation)
675
796
  queueUnitAnimation(self.handle, animation)
676
797
  end
798
+ function Unit.prototype.delayHealthChecks(self)
799
+ self[103] = (self[103] or 0) + 1
800
+ Timer:run(delayHealthChecksCallback, self)
801
+ end
677
802
  function Unit.prototype.setPosition(self, x, y)
678
803
  setUnitPosition(self.handle, x, y)
679
804
  end
@@ -687,8 +812,15 @@ end
687
812
  function Unit.prototype.kill(self)
688
813
  killUnit(self.handle)
689
814
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
815
+ function Unit.prototype.revive(self, x, y, doEffect)
816
+ local ____ReviveHero_5 = ReviveHero
817
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
818
+ local ____doEffect_3 = doEffect
819
+ if ____doEffect_3 == nil then
820
+ ____doEffect_3 = false
821
+ end
822
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
823
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
692
824
  end
693
825
  function Unit.prototype.healTarget(self, target, amount)
694
826
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +860,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
860
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
861
  end
730
862
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
863
+ return Item:of(unitItemInSlot(self.handle, slot))
732
864
  end
733
865
  function Unit.prototype.addAbility(self, abilityId)
734
866
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +916,9 @@ end
784
916
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
917
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
918
  end
919
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
920
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
921
+ end
787
922
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
923
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
924
  end
@@ -794,8 +929,15 @@ function Unit.prototype.interruptAttack(self)
794
929
  unitInterruptAttack(self.handle)
795
930
  end
796
931
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
932
+ local handle = self.handle
933
+ unitDisableAbility(handle, abilityId, true, false)
934
+ Timer:run(
935
+ unitDisableAbility,
936
+ handle,
937
+ abilityId,
938
+ false,
939
+ false
940
+ )
799
941
  end
800
942
  function Unit.prototype.getDistanceTo(self, target)
801
943
  local handle = self.handle
@@ -855,18 +997,18 @@ function Unit.prototype.unpauseEx(self)
855
997
  self:decrementStunCounter()
856
998
  end
857
999
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1000
+ local stunCounter = self[102] or 0
1001
+ if not self[101] or stunCounter >= 0 then
860
1002
  BlzPauseUnitEx(self.handle, true)
861
1003
  end
862
- self[101] = stunCounter + 1
1004
+ self[102] = stunCounter + 1
863
1005
  end
864
1006
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1007
+ local stunCounter = self[102] or 0
1008
+ if not self[101] or stunCounter >= 1 then
867
1009
  BlzPauseUnitEx(self.handle, false)
868
1010
  end
869
- self[101] = stunCounter - 1
1011
+ self[102] = stunCounter - 1
870
1012
  end
871
1013
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1014
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1110,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1110
  )
969
1111
  return targetCollection
970
1112
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1113
+ function Unit.getSelectionOf(self, player, target)
1114
+ if target == nil then
1115
+ target = {}
1116
+ end
1117
+ targetCollection = target
973
1118
  targetCollectionNextIndex = 1
974
1119
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1120
  return targetCollection
@@ -991,6 +1136,9 @@ end
991
1136
  function Unit.prototype.__tostring(self)
992
1137
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1138
  end
1139
+ function Unit.getBySyncId(self, syncId)
1140
+ return unitBySyncId[syncId]
1141
+ end
994
1142
  __TS__SetDescriptor(
995
1143
  Unit.prototype,
996
1144
  "_deltas",
@@ -1071,12 +1219,27 @@ __TS__SetDescriptor(
1071
1219
  Unit.prototype,
1072
1220
  "weapons",
1073
1221
  {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
1222
+ return {self.firstWeapon, self.secondWeapon}
1223
+ end},
1224
+ true
1225
+ )
1226
+ __TS__SetDescriptor(
1227
+ Unit.prototype,
1228
+ "firstWeapon",
1229
+ {get = function(self)
1230
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1231
+ rawset(self, "firstWeapon", weapon)
1232
+ return weapon
1233
+ end},
1234
+ true
1235
+ )
1236
+ __TS__SetDescriptor(
1237
+ Unit.prototype,
1238
+ "secondWeapon",
1239
+ {get = function(self)
1240
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1241
+ rawset(self, "secondWeapon", weapon)
1242
+ return weapon
1080
1243
  end},
1081
1244
  true
1082
1245
  )
@@ -1233,17 +1396,17 @@ __TS__SetDescriptor(
1233
1396
  "isTeamGlowVisible",
1234
1397
  {
1235
1398
  get = function(self)
1236
- return not self[103]
1399
+ return not self[106]
1237
1400
  end,
1238
1401
  set = function(self, isTeamGlowVisible)
1239
1402
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1403
+ local ____temp_6
1241
1404
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1405
+ ____temp_6 = true
1243
1406
  else
1244
- ____temp_2 = nil
1407
+ ____temp_6 = nil
1245
1408
  end
1246
- self[103] = ____temp_2
1409
+ self[106] = ____temp_6
1247
1410
  end
1248
1411
  },
1249
1412
  true
@@ -1253,7 +1416,7 @@ __TS__SetDescriptor(
1253
1416
  "color",
1254
1417
  {set = function(self, color)
1255
1418
  setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1419
+ if self[106] then
1257
1420
  showUnitTeamGlow(self.handle, false)
1258
1421
  end
1259
1422
  end},
@@ -1277,10 +1440,14 @@ __TS__SetDescriptor(
1277
1440
  "maxHealth",
1278
1441
  {
1279
1442
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1443
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1444
  end,
1282
1445
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1446
+ if maxHealth < 1 and self[103] ~= nil then
1447
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1448
+ maxHealth = 1
1449
+ end
1450
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1451
  end
1285
1452
  },
1286
1453
  true
@@ -1322,10 +1489,10 @@ __TS__SetDescriptor(
1322
1489
  "health",
1323
1490
  {
1324
1491
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1492
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1493
  end,
1327
1494
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1495
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1496
  end
1330
1497
  },
1331
1498
  true
@@ -1536,17 +1703,17 @@ __TS__SetDescriptor(
1536
1703
  set = function(self, isPaused)
1537
1704
  local handle = self.handle
1538
1705
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1706
+ self[101] = true
1707
+ for _ = self[102] or 0, -1 do
1541
1708
  BlzPauseUnitEx(handle, true)
1542
1709
  end
1543
1710
  PauseUnit(handle, true)
1544
1711
  elseif not isPaused and IsUnitPaused(handle) then
1545
1712
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1713
+ for _ = self[102] or 0, -1 do
1547
1714
  BlzPauseUnitEx(handle, false)
1548
1715
  end
1549
- self[100] = nil
1716
+ self[101] = nil
1550
1717
  end
1551
1718
  end
1552
1719
  },
@@ -1903,7 +2070,6 @@ Unit.onDecay = __TS__New(
1903
2070
  Unit.onResurrect = __TS__New(
1904
2071
  InitializingEvent,
1905
2072
  function(event)
1906
- local invoke = Event.invoke
1907
2073
  local dead = setmetatable({}, {__mode = "k"})
1908
2074
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2075
  dead[unit] = true
@@ -1919,10 +2085,15 @@ Unit.onResurrect = __TS__New(
1919
2085
  Unit.morphEvent = __TS__New(
1920
2086
  InitializingEvent,
1921
2087
  function(event)
2088
+ local function ifNotLeft(unit)
2089
+ local handle = unit.handle
2090
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2091
+ invoke(event, unit)
2092
+ end
2093
+ end
1922
2094
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2095
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2096
+ Timer:run(ifNotLeft, unit)
1926
2097
  end
1927
2098
  end)
1928
2099
  end
@@ -1960,27 +2131,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2131
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2132
  InitializingEvent,
1962
2133
  function(event)
1963
- local invoke = Event.invoke
1964
2134
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2135
+ local ____GetSpellTargetUnit_result_9
1966
2136
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2137
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2138
  else
1969
- local ____GetSpellTargetItem_result_4
2139
+ local ____GetSpellTargetItem_result_8
1970
2140
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2141
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1972
2142
  else
1973
- local ____GetSpellTargetDestructable_result_3
2143
+ local ____GetSpellTargetDestructable_result_7
1974
2144
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2145
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
1976
2146
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2147
+ ____GetSpellTargetDestructable_result_7 = nil
1978
2148
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2149
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
1980
2150
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2151
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
1982
2152
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2153
+ local target = ____GetSpellTargetUnit_result_9
1984
2154
  if target then
1985
2155
  invoke(event, unit, id, target)
1986
2156
  end
@@ -2152,10 +2322,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2322
  ____exports.UnitTriggerEvent,
2153
2323
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2324
  function()
2155
- local unit = ____exports.Unit:of(getOrderedUnit())
2156
- local issuedOrderId = getIssuedOrderId()
2157
- if unit ~= nil and unit.state == 1 then
2158
- return unit, issuedOrderId
2325
+ local handle = getOrderedUnit()
2326
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2327
+ local unit = ____exports.Unit:of(handle)
2328
+ if unit.state == 1 then
2329
+ return unit, getIssuedOrderId()
2330
+ end
2159
2331
  end
2160
2332
  return IgnoreEvent
2161
2333
  end
@@ -2177,7 +2349,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2349
  )
2178
2350
  Unit.onDamaging = (function()
2179
2351
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2352
  local trigger = CreateTrigger()
2182
2353
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2354
  TriggerAddCondition(
@@ -2276,7 +2447,6 @@ end)()
2276
2447
  Unit.onDamage = __TS__New(
2277
2448
  InitializingEvent,
2278
2449
  function(event)
2279
- local invoke = Event.invoke
2280
2450
  local trigger = CreateTrigger()
2281
2451
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2452
  TriggerAddCondition(
@@ -2292,6 +2462,7 @@ Unit.onDamage = __TS__New(
2292
2462
  damageType = BlzGetEventDamageType(),
2293
2463
  weaponType = BlzGetEventWeaponType(),
2294
2464
  isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2295
2466
  preventDeath = damageEventPreventDeath
2296
2467
  }
2297
2468
  local evData = setmetatable(
@@ -2308,7 +2479,7 @@ Unit.onDamage = __TS__New(
2308
2479
  invoke(event, source, target, evData)
2309
2480
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2481
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2482
+ target[105] = (target[105] or 0) + bonusHealth
2312
2483
  BlzSetUnitMaxHP(
2313
2484
  target.handle,
2314
2485
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2493,7 @@ Unit.onDamage = __TS__New(
2322
2493
  evData[0],
2323
2494
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2495
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2496
+ target[105] = (target[105] or 0) - bonusHealth
2326
2497
  SetWidgetLife(
2327
2498
  target.handle,
2328
2499
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,7 +2513,7 @@ Unit.onDamage = __TS__New(
2342
2513
  DestroyTrigger(trigger)
2343
2514
  end
2344
2515
  )
2345
- Unit.onItemDrop = __TS__New(
2516
+ Unit.itemDroppedEvent = __TS__New(
2346
2517
  ____exports.UnitTriggerEvent,
2347
2518
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2519
  function()
@@ -2353,7 +2524,7 @@ Unit.onItemDrop = __TS__New(
2353
2524
  return IgnoreEvent
2354
2525
  end
2355
2526
  )
2356
- Unit.onItemPickup = __TS__New(
2527
+ Unit.itemPickedUpEvent = __TS__New(
2357
2528
  ____exports.UnitTriggerEvent,
2358
2529
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2530
  function()
@@ -2364,10 +2535,66 @@ Unit.onItemPickup = __TS__New(
2364
2535
  return IgnoreEvent
2365
2536
  end
2366
2537
  )
2367
- Unit.onItemUse = __TS__New(
2538
+ Unit.itemUsedEvent = __TS__New(
2368
2539
  ____exports.UnitTriggerEvent,
2369
2540
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2541
+ function()
2542
+ local unit = getTriggerUnit()
2543
+ if getUnitTypeId(unit) ~= dummyUnitId then
2544
+ return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2545
+ end
2546
+ return IgnoreEvent
2547
+ end
2548
+ )
2549
+ Unit.itemStackedEvent = __TS__New(
2550
+ ____exports.UnitTriggerEvent,
2551
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2552
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2553
+ )
2554
+ __TS__ObjectDefineProperty(
2555
+ Unit,
2556
+ "itemUseOrderEvent",
2557
+ {get = function(self)
2558
+ local event = __TS__New(Event)
2559
+ for order = orderId("useslot0"), orderId("useslot5") do
2560
+ local slot = order - orderId("useslot0")
2561
+ local function listener(unit)
2562
+ local item = unit.items[slot + 1]
2563
+ if item ~= nil then
2564
+ invoke(event, unit, item)
2565
+ end
2566
+ end
2567
+ self.onImmediateOrder[order]:addListener(listener)
2568
+ self.onTargetOrder[order]:addListener(listener)
2569
+ self.onPointOrder[order]:addListener(listener)
2570
+ end
2571
+ rawset(self, "itemUseOrderEvent", event)
2572
+ return event
2573
+ end}
2574
+ )
2575
+ __TS__ObjectDefineProperty(
2576
+ Unit,
2577
+ "itemMoveOrderEvent",
2578
+ {get = function(self)
2579
+ local event = __TS__New(Event)
2580
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2581
+ local slotTo = order - orderId("moveslot0")
2582
+ self.onTargetOrder[order]:addListener(function(unit, item)
2583
+ local slotFrom = unit.items:findSlot(item)
2584
+ if slotFrom ~= nil then
2585
+ invoke(
2586
+ event,
2587
+ unit,
2588
+ item,
2589
+ slotFrom,
2590
+ slotTo
2591
+ )
2592
+ end
2593
+ end)
2594
+ end
2595
+ rawset(self, "itemMoveOrderEvent", event)
2596
+ return event
2597
+ end}
2371
2598
  )
2372
2599
  __TS__ObjectDefineProperty(
2373
2600
  Unit,