warscript 0.0.1-dev.ee2345e → 0.0.1-dev.f967846

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 (117) hide show
  1. package/attributes.d.ts +0 -1
  2. package/binaryreader.d.ts +1 -0
  3. package/binaryreader.lua +3 -0
  4. package/core/types/frame.d.ts +8 -1
  5. package/core/types/frame.lua +93 -1
  6. package/core/types/group.d.ts +0 -1
  7. package/core/types/image.d.ts +0 -1
  8. package/core/types/missile.d.ts +2 -2
  9. package/core/types/missile.lua +8 -2
  10. package/core/types/unit.lua +8 -0
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +6 -0
  13. package/decl/index.d.ts +1 -0
  14. package/engine/ability.d.ts +1 -1
  15. package/engine/behavior.d.ts +10 -10
  16. package/engine/behavior.lua +6 -6
  17. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  18. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  19. package/engine/behaviour/ability/damage.d.ts +33 -11
  20. package/engine/behaviour/ability/damage.lua +89 -31
  21. package/engine/behaviour/ability/heal.d.ts +33 -6
  22. package/engine/behaviour/ability/heal.lua +89 -10
  23. package/engine/behaviour/ability/instant-impact.lua +4 -0
  24. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  25. package/engine/behaviour/ability/restore-mana.lua +29 -0
  26. package/engine/behaviour/ability.d.ts +8 -1
  27. package/engine/behaviour/ability.lua +62 -0
  28. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  29. package/engine/behaviour/unit.d.ts +8 -2
  30. package/engine/behaviour/unit.lua +27 -0
  31. package/engine/buff.d.ts +62 -20
  32. package/engine/buff.lua +247 -72
  33. package/engine/game-map.d.ts +7 -0
  34. package/engine/game-map.lua +32 -0
  35. package/engine/internal/ability.d.ts +3 -11
  36. package/engine/internal/ability.lua +9 -78
  37. package/engine/internal/item+owner.lua +2 -2
  38. package/engine/internal/unit/bonus.d.ts +9 -8
  39. package/engine/internal/unit/bonus.lua +6 -1
  40. package/engine/internal/unit/item.d.ts +24 -0
  41. package/engine/internal/unit/item.lua +84 -0
  42. package/engine/internal/unit/main-selected.d.ts +7 -0
  43. package/engine/internal/unit/main-selected.lua +40 -0
  44. package/engine/internal/unit+ability.lua +2 -2
  45. package/engine/internal/unit+transport.lua +4 -10
  46. package/engine/internal/unit-missile-launch.lua +25 -6
  47. package/engine/internal/unit.d.ts +57 -16
  48. package/engine/internal/unit.lua +317 -111
  49. package/engine/local-client.d.ts +7 -2
  50. package/engine/local-client.lua +82 -0
  51. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  52. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  53. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  54. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  55. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  56. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  57. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  58. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  59. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  60. package/engine/object-data/entry/ability-type.d.ts +0 -1
  61. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  62. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  63. package/engine/object-data/entry/buff-type.d.ts +0 -1
  64. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  65. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  66. package/engine/object-data/entry/item-type.d.ts +12 -1
  67. package/engine/object-data/entry/item-type.lua +78 -0
  68. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  69. package/engine/object-data/entry/unit-type.d.ts +37 -2
  70. package/engine/object-data/entry/unit-type.lua +333 -49
  71. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  72. package/engine/object-data/entry/upgrade.d.ts +0 -1
  73. package/engine/object-data/entry.d.ts +2 -3
  74. package/engine/object-field/ability.d.ts +18 -1
  75. package/engine/object-field/ability.lua +51 -1
  76. package/engine/object-field.d.ts +0 -1
  77. package/engine/random.d.ts +1 -0
  78. package/engine/random.lua +9 -0
  79. package/engine/standard/entries/unit-type.d.ts +39 -1
  80. package/engine/standard/entries/unit-type.lua +39 -1
  81. package/engine/standard/fields/ability.d.ts +1 -1
  82. package/engine/standard/fields/ability.lua +1 -1
  83. package/engine/unit.d.ts +2 -0
  84. package/engine/unit.lua +11 -2
  85. package/event.d.ts +2 -3
  86. package/event.lua +9 -5
  87. package/index.d.ts +1 -0
  88. package/index.lua +1 -0
  89. package/lualib_bundle.lua +146 -42
  90. package/math/vec2.d.ts +2 -9
  91. package/math.d.ts +0 -2
  92. package/net/socket.d.ts +7 -1
  93. package/net/socket.lua +45 -4
  94. package/network.d.ts +1 -0
  95. package/network.lua +3 -2
  96. package/objutil/ability.d.ts +0 -1
  97. package/objutil/buff.d.ts +0 -1
  98. package/objutil/buff.lua +1 -1
  99. package/objutil/object.d.ts +0 -1
  100. package/objutil/unit.d.ts +0 -1
  101. package/package.json +13 -14
  102. package/patch-lua.d.ts +0 -0
  103. package/patch-lua.lua +10 -0
  104. package/property.d.ts +55 -0
  105. package/property.lua +374 -0
  106. package/string.d.ts +30 -0
  107. package/string.lua +14 -0
  108. package/util/stream.d.ts +0 -1
  109. package/utility/arrays.d.ts +3 -4
  110. package/utility/bit-set.d.ts +0 -2
  111. package/utility/linked-set.d.ts +11 -3
  112. package/utility/linked-set.lua +5 -2
  113. package/utility/lua-maps.d.ts +1 -2
  114. package/utility/lua-sets.d.ts +1 -2
  115. package/utility/types.d.ts +1 -0
  116. package/core/mapbounds.d.ts +0 -8
  117. 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
@@ -520,12 +629,34 @@ 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[103] or 0) - 1
634
+ if counter ~= 0 then
635
+ unit[103] = counter
636
+ return
637
+ end
638
+ unit[103] = nil
639
+ local healthBonus = unit[104]
640
+ if healthBonus ~= nil then
641
+ unit[104] = nil
642
+ local handle = unit.handle
643
+ BlzSetUnitMaxHP(
644
+ handle,
645
+ BlzGetUnitMaxHP(handle) - healthBonus
646
+ )
647
+ end
648
+ end
649
+ local nextSyncId = 1
650
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
523
651
  ____exports.Unit = __TS__Class()
524
652
  local Unit = ____exports.Unit
525
653
  Unit.name = "Unit"
526
654
  __TS__ClassExtends(Unit, Handle)
527
655
  function Unit.prototype.____constructor(self, handle)
528
656
  Handle.prototype.____constructor(self, handle)
657
+ local ____nextSyncId_0 = nextSyncId
658
+ nextSyncId = ____nextSyncId_0 + 1
659
+ self.syncId = ____nextSyncId_0
529
660
  self._owner = Player:of(getOwningPlayer(handle))
530
661
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
662
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +669,7 @@ function Unit.prototype.____constructor(self, handle)
538
669
  fourCC("Amrf")
539
670
  ))
540
671
  end
672
+ unitBySyncId[self.syncId] = self
541
673
  local ____ = self.abilities
542
674
  end
543
675
  function Unit.prototype.getEvent(self, event, collector)
@@ -623,8 +755,8 @@ function Unit.prototype.addModifier(self, property, modifier)
623
755
  end}
624
756
  end
625
757
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
758
+ local ____combatClassification_1 = combatClassification
759
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
628
760
  end
629
761
  function Unit.prototype.addClassification(self, classification)
630
762
  return unitAddType(self.handle, classification)
@@ -642,13 +774,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
774
  return isUnitInvisible(self.handle, player.handle)
643
775
  end
644
776
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
777
+ local ____temp_2
646
778
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
779
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
648
780
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
781
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
650
782
  end
651
- return ____temp_1
783
+ return ____temp_2
652
784
  end
653
785
  function Unit.prototype.isAllyOf(self, unit)
654
786
  return isUnitAlly(
@@ -674,6 +806,10 @@ end
674
806
  function Unit.prototype.queueAnimation(self, animation)
675
807
  queueUnitAnimation(self.handle, animation)
676
808
  end
809
+ function Unit.prototype.delayHealthChecks(self)
810
+ self[103] = (self[103] or 0) + 1
811
+ Timer:run(delayHealthChecksCallback, self)
812
+ end
677
813
  function Unit.prototype.setPosition(self, x, y)
678
814
  setUnitPosition(self.handle, x, y)
679
815
  end
@@ -687,8 +823,15 @@ end
687
823
  function Unit.prototype.kill(self)
688
824
  killUnit(self.handle)
689
825
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
826
+ function Unit.prototype.revive(self, x, y, doEffect)
827
+ local ____ReviveHero_5 = ReviveHero
828
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
829
+ local ____doEffect_3 = doEffect
830
+ if ____doEffect_3 == nil then
831
+ ____doEffect_3 = false
832
+ end
833
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
834
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
692
835
  end
693
836
  function Unit.prototype.healTarget(self, target, amount)
694
837
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +871,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
871
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
872
  end
730
873
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
874
+ return Item:of(unitItemInSlot(self.handle, slot))
732
875
  end
733
876
  function Unit.prototype.addAbility(self, abilityId)
734
877
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +927,9 @@ end
784
927
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
928
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
929
  end
930
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
931
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
932
+ end
787
933
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
934
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
935
  end
@@ -855,18 +1001,18 @@ function Unit.prototype.unpauseEx(self)
855
1001
  self:decrementStunCounter()
856
1002
  end
857
1003
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1004
+ local stunCounter = self[102] or 0
1005
+ if not self[101] or stunCounter >= 0 then
860
1006
  BlzPauseUnitEx(self.handle, true)
861
1007
  end
862
- self[101] = stunCounter + 1
1008
+ self[102] = stunCounter + 1
863
1009
  end
864
1010
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1011
+ local stunCounter = self[102] or 0
1012
+ if not self[101] or stunCounter >= 1 then
867
1013
  BlzPauseUnitEx(self.handle, false)
868
1014
  end
869
- self[101] = stunCounter - 1
1015
+ self[102] = stunCounter - 1
870
1016
  end
871
1017
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1018
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1114,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1114
  )
969
1115
  return targetCollection
970
1116
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1117
+ function Unit.getSelectionOf(self, player, target)
1118
+ if target == nil then
1119
+ target = {}
1120
+ end
1121
+ targetCollection = target
973
1122
  targetCollectionNextIndex = 1
974
1123
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1124
  return targetCollection
@@ -991,6 +1140,9 @@ end
991
1140
  function Unit.prototype.__tostring(self)
992
1141
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1142
  end
1143
+ function Unit.getBySyncId(self, syncId)
1144
+ return unitBySyncId[syncId]
1145
+ end
994
1146
  __TS__SetDescriptor(
995
1147
  Unit.prototype,
996
1148
  "_deltas",
@@ -1071,12 +1223,27 @@ __TS__SetDescriptor(
1071
1223
  Unit.prototype,
1072
1224
  "weapons",
1073
1225
  {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
1226
+ return {self.firstWeapon, self.secondWeapon}
1227
+ end},
1228
+ true
1229
+ )
1230
+ __TS__SetDescriptor(
1231
+ Unit.prototype,
1232
+ "firstWeapon",
1233
+ {get = function(self)
1234
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1235
+ rawset(self, "firstWeapon", weapon)
1236
+ return weapon
1237
+ end},
1238
+ true
1239
+ )
1240
+ __TS__SetDescriptor(
1241
+ Unit.prototype,
1242
+ "secondWeapon",
1243
+ {get = function(self)
1244
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1245
+ rawset(self, "secondWeapon", weapon)
1246
+ return weapon
1080
1247
  end},
1081
1248
  true
1082
1249
  )
@@ -1233,17 +1400,17 @@ __TS__SetDescriptor(
1233
1400
  "isTeamGlowVisible",
1234
1401
  {
1235
1402
  get = function(self)
1236
- return not self[103]
1403
+ return not self[106]
1237
1404
  end,
1238
1405
  set = function(self, isTeamGlowVisible)
1239
1406
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1407
+ local ____temp_6
1241
1408
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1409
+ ____temp_6 = true
1243
1410
  else
1244
- ____temp_2 = nil
1411
+ ____temp_6 = nil
1245
1412
  end
1246
- self[103] = ____temp_2
1413
+ self[106] = ____temp_6
1247
1414
  end
1248
1415
  },
1249
1416
  true
@@ -1253,7 +1420,7 @@ __TS__SetDescriptor(
1253
1420
  "color",
1254
1421
  {set = function(self, color)
1255
1422
  setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1423
+ if self[106] then
1257
1424
  showUnitTeamGlow(self.handle, false)
1258
1425
  end
1259
1426
  end},
@@ -1277,10 +1444,14 @@ __TS__SetDescriptor(
1277
1444
  "maxHealth",
1278
1445
  {
1279
1446
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1447
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1448
  end,
1282
1449
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1450
+ if maxHealth < 1 and self[103] ~= nil then
1451
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1452
+ maxHealth = 1
1453
+ end
1454
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1455
  end
1285
1456
  },
1286
1457
  true
@@ -1322,10 +1493,10 @@ __TS__SetDescriptor(
1322
1493
  "health",
1323
1494
  {
1324
1495
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1496
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1497
  end,
1327
1498
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1499
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1500
  end
1330
1501
  },
1331
1502
  true
@@ -1536,17 +1707,17 @@ __TS__SetDescriptor(
1536
1707
  set = function(self, isPaused)
1537
1708
  local handle = self.handle
1538
1709
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1710
+ self[101] = true
1711
+ for _ = self[102] or 0, -1 do
1541
1712
  BlzPauseUnitEx(handle, true)
1542
1713
  end
1543
1714
  PauseUnit(handle, true)
1544
1715
  elseif not isPaused and IsUnitPaused(handle) then
1545
1716
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1717
+ for _ = self[102] or 0, -1 do
1547
1718
  BlzPauseUnitEx(handle, false)
1548
1719
  end
1549
- self[100] = nil
1720
+ self[101] = nil
1550
1721
  end
1551
1722
  end
1552
1723
  },
@@ -1903,7 +2074,6 @@ Unit.onDecay = __TS__New(
1903
2074
  Unit.onResurrect = __TS__New(
1904
2075
  InitializingEvent,
1905
2076
  function(event)
1906
- local invoke = Event.invoke
1907
2077
  local dead = setmetatable({}, {__mode = "k"})
1908
2078
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2079
  dead[unit] = true
@@ -1919,10 +2089,15 @@ Unit.onResurrect = __TS__New(
1919
2089
  Unit.morphEvent = __TS__New(
1920
2090
  InitializingEvent,
1921
2091
  function(event)
2092
+ local function ifNotLeft(unit)
2093
+ local handle = unit.handle
2094
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2095
+ invoke(event, unit)
2096
+ end
2097
+ end
1922
2098
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2099
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2100
+ Timer:run(ifNotLeft, unit)
1926
2101
  end
1927
2102
  end)
1928
2103
  end
@@ -1960,27 +2135,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2135
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2136
  InitializingEvent,
1962
2137
  function(event)
1963
- local invoke = Event.invoke
1964
2138
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2139
+ local ____GetSpellTargetUnit_result_9
1966
2140
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2141
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2142
  else
1969
- local ____GetSpellTargetItem_result_4
2143
+ local ____GetSpellTargetItem_result_8
1970
2144
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2145
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1972
2146
  else
1973
- local ____GetSpellTargetDestructable_result_3
2147
+ local ____GetSpellTargetDestructable_result_7
1974
2148
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2149
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
1976
2150
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2151
+ ____GetSpellTargetDestructable_result_7 = nil
1978
2152
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2153
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
1980
2154
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2155
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
1982
2156
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2157
+ local target = ____GetSpellTargetUnit_result_9
1984
2158
  if target then
1985
2159
  invoke(event, unit, id, target)
1986
2160
  end
@@ -2177,7 +2351,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2351
  )
2178
2352
  Unit.onDamaging = (function()
2179
2353
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2354
  local trigger = CreateTrigger()
2182
2355
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2356
  TriggerAddCondition(
@@ -2276,7 +2449,6 @@ end)()
2276
2449
  Unit.onDamage = __TS__New(
2277
2450
  InitializingEvent,
2278
2451
  function(event)
2279
- local invoke = Event.invoke
2280
2452
  local trigger = CreateTrigger()
2281
2453
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2454
  TriggerAddCondition(
@@ -2292,6 +2464,7 @@ Unit.onDamage = __TS__New(
2292
2464
  damageType = BlzGetEventDamageType(),
2293
2465
  weaponType = BlzGetEventWeaponType(),
2294
2466
  isAttack = BlzGetEventIsAttack(),
2467
+ originalAmount = GetEventDamage(),
2295
2468
  preventDeath = damageEventPreventDeath
2296
2469
  }
2297
2470
  local evData = setmetatable(
@@ -2308,7 +2481,7 @@ Unit.onDamage = __TS__New(
2308
2481
  invoke(event, source, target, evData)
2309
2482
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2483
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2484
+ target[105] = (target[105] or 0) + bonusHealth
2312
2485
  BlzSetUnitMaxHP(
2313
2486
  target.handle,
2314
2487
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2495,7 @@ Unit.onDamage = __TS__New(
2322
2495
  evData[0],
2323
2496
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2497
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2498
+ target[105] = (target[105] or 0) - bonusHealth
2326
2499
  SetWidgetLife(
2327
2500
  target.handle,
2328
2501
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,7 +2515,7 @@ Unit.onDamage = __TS__New(
2342
2515
  DestroyTrigger(trigger)
2343
2516
  end
2344
2517
  )
2345
- Unit.onItemDrop = __TS__New(
2518
+ Unit.itemDroppedEvent = __TS__New(
2346
2519
  ____exports.UnitTriggerEvent,
2347
2520
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2521
  function()
@@ -2353,7 +2526,7 @@ Unit.onItemDrop = __TS__New(
2353
2526
  return IgnoreEvent
2354
2527
  end
2355
2528
  )
2356
- Unit.onItemPickup = __TS__New(
2529
+ Unit.itemPickedUpEvent = __TS__New(
2357
2530
  ____exports.UnitTriggerEvent,
2358
2531
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2532
  function()
@@ -2364,10 +2537,43 @@ Unit.onItemPickup = __TS__New(
2364
2537
  return IgnoreEvent
2365
2538
  end
2366
2539
  )
2367
- Unit.onItemUse = __TS__New(
2540
+ Unit.itemUsedEvent = __TS__New(
2368
2541
  ____exports.UnitTriggerEvent,
2369
2542
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2543
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2544
+ )
2545
+ Unit.itemStackedEvent = __TS__New(
2546
+ ____exports.UnitTriggerEvent,
2547
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2548
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2549
+ )
2550
+ __TS__ObjectDefineProperty(
2551
+ Unit,
2552
+ "itemMovedEvent",
2553
+ {get = function(self)
2554
+ local event = __TS__New(Event)
2555
+ do
2556
+ local order = orderId("moveslot1")
2557
+ while order <= orderId("moveslot5") do
2558
+ self.onTargetOrder[order]:addListener(function(unit, item)
2559
+ local slotFrom = unit.items:findSlot(item)
2560
+ if slotFrom ~= nil then
2561
+ local slotTo = order - orderId("moveslot1")
2562
+ invoke(
2563
+ event,
2564
+ unit,
2565
+ item,
2566
+ slotFrom,
2567
+ slotTo
2568
+ )
2569
+ end
2570
+ end)
2571
+ order = order + 1
2572
+ end
2573
+ end
2574
+ rawset(self, "itemMovedEvent", event)
2575
+ return event
2576
+ end}
2371
2577
  )
2372
2578
  __TS__ObjectDefineProperty(
2373
2579
  Unit,