warscript 0.0.1-dev.2af030d → 0.0.1-dev.3599429

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/ability.lua +0 -14
  39. package/engine/internal/unit/bonus.d.ts +9 -8
  40. package/engine/internal/unit/bonus.lua +6 -1
  41. package/engine/internal/unit/item.d.ts +24 -0
  42. package/engine/internal/unit/item.lua +84 -0
  43. package/engine/internal/unit/main-selected.d.ts +13 -0
  44. package/engine/internal/unit/main-selected.lua +51 -0
  45. package/engine/internal/unit+ability.lua +2 -2
  46. package/engine/internal/unit+transport.lua +4 -10
  47. package/engine/internal/unit-missile-launch.lua +24 -5
  48. package/engine/internal/unit.d.ts +26 -12
  49. package/engine/internal/unit.lua +118 -76
  50. package/engine/local-client.d.ts +7 -2
  51. package/engine/local-client.lua +82 -0
  52. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  53. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  54. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  55. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  56. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  57. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  58. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  59. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  60. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  61. package/engine/object-data/entry/ability-type.d.ts +0 -1
  62. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  63. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  64. package/engine/object-data/entry/buff-type.d.ts +0 -1
  65. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  66. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  67. package/engine/object-data/entry/item-type.d.ts +12 -1
  68. package/engine/object-data/entry/item-type.lua +78 -0
  69. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  70. package/engine/object-data/entry/unit-type.d.ts +0 -1
  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 +18 -0
  80. package/engine/standard/entries/unit-type.lua +18 -0
  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 -13
  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 +16 -0
  107. package/string.lua +5 -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
@@ -7,6 +7,9 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
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
10
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
@@ -279,16 +282,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
282
  end
280
283
  local function dispatch(event, idGetter, argsGetter)
281
284
  local initialized = false
282
- local x = {}
283
285
  return setmetatable(
284
- x,
286
+ {},
285
287
  {
286
288
  __index = function(self, id)
287
289
  if type(id) ~= "number" then
288
290
  return event[id]
289
291
  end
290
292
  if not initialized then
291
- local invoke = Event.invoke
292
293
  event:addListener(function(...)
293
294
  local id = idGetter(...)
294
295
  local dispatched = rawget(self, id)
@@ -326,7 +327,6 @@ local function dispatchAbility(event)
326
327
  return event[id]
327
328
  end
328
329
  if not initialized then
329
- local invoke = Event.invoke
330
330
  event:addListener(function(unit, ability, ...)
331
331
  local dispatched = rawget(self, ability.typeId)
332
332
  if dispatched ~= nil then
@@ -562,17 +562,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
562
  ____exports.Unit:of(unit)
563
563
  )
564
564
  end
565
- if not unitAddAbility(unit, abilityId) then
566
- if getUnitAbility(unit, abilityId) == ability then
567
- return UnitAbility:of(
568
- ability,
569
- abilityId,
570
- ____exports.Unit:of(unit)
571
- )
572
- end
573
- else
574
- unitRemoveAbility(unit, abilityId)
575
- end
576
565
  for i = 0, unitInventorySize(unit) - 1 do
577
566
  local item = unitItemInSlot(unit, i)
578
567
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +619,15 @@ for ____, player in ipairs(Player.all) do
630
619
  dummies[player] = dummy
631
620
  end
632
621
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
622
+ local counter = (unit[103] or 0) - 1
634
623
  if counter ~= 0 then
635
- unit[102] = counter
624
+ unit[103] = counter
636
625
  return
637
626
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
627
+ unit[103] = nil
628
+ local healthBonus = unit[104]
640
629
  if healthBonus ~= nil then
641
- unit[103] = nil
630
+ unit[104] = nil
642
631
  local handle = unit.handle
643
632
  BlzSetUnitMaxHP(
644
633
  handle,
@@ -646,12 +635,17 @@ local function delayHealthChecksCallback(unit)
646
635
  )
647
636
  end
648
637
  end
638
+ local nextSyncId = 1
639
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
649
640
  ____exports.Unit = __TS__Class()
650
641
  local Unit = ____exports.Unit
651
642
  Unit.name = "Unit"
652
643
  __TS__ClassExtends(Unit, Handle)
653
644
  function Unit.prototype.____constructor(self, handle)
654
645
  Handle.prototype.____constructor(self, handle)
646
+ local ____nextSyncId_0 = nextSyncId
647
+ nextSyncId = ____nextSyncId_0 + 1
648
+ self.syncId = ____nextSyncId_0
655
649
  self._owner = Player:of(getOwningPlayer(handle))
656
650
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
651
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +658,7 @@ function Unit.prototype.____constructor(self, handle)
664
658
  fourCC("Amrf")
665
659
  ))
666
660
  end
661
+ unitBySyncId[self.syncId] = self
667
662
  local ____ = self.abilities
668
663
  end
669
664
  function Unit.prototype.getEvent(self, event, collector)
@@ -749,8 +744,8 @@ function Unit.prototype.addModifier(self, property, modifier)
749
744
  end}
750
745
  end
751
746
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- 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
754
749
  end
755
750
  function Unit.prototype.addClassification(self, classification)
756
751
  return unitAddType(self.handle, classification)
@@ -768,13 +763,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
763
  return isUnitInvisible(self.handle, player.handle)
769
764
  end
770
765
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
766
+ local ____temp_2
772
767
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
768
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
774
769
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
770
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
776
771
  end
777
- return ____temp_1
772
+ return ____temp_2
778
773
  end
779
774
  function Unit.prototype.isAllyOf(self, unit)
780
775
  return isUnitAlly(
@@ -801,7 +796,7 @@ function Unit.prototype.queueAnimation(self, animation)
801
796
  queueUnitAnimation(self.handle, animation)
802
797
  end
803
798
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
799
+ self[103] = (self[103] or 0) + 1
805
800
  Timer:run(delayHealthChecksCallback, self)
806
801
  end
807
802
  function Unit.prototype.setPosition(self, x, y)
@@ -817,8 +812,15 @@ end
817
812
  function Unit.prototype.kill(self)
818
813
  killUnit(self.handle)
819
814
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- 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))
822
824
  end
823
825
  function Unit.prototype.healTarget(self, target, amount)
824
826
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -858,7 +860,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
858
860
  return UnitDropItemSlot(self.handle, item.handle, slot)
859
861
  end
860
862
  function Unit.prototype.itemInSlot(self, slot)
861
- return Item:of(UnitItemInSlot(self.handle, slot))
863
+ return Item:of(unitItemInSlot(self.handle, slot))
862
864
  end
863
865
  function Unit.prototype.addAbility(self, abilityId)
864
866
  if unitAddAbility(self.handle, abilityId) then
@@ -914,6 +916,9 @@ end
914
916
  function Unit.prototype.hideAbility(self, abilityId, flag)
915
917
  BlzUnitHideAbility(self.handle, abilityId, flag)
916
918
  end
919
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
920
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
921
+ end
917
922
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
918
923
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
919
924
  end
@@ -985,18 +990,18 @@ function Unit.prototype.unpauseEx(self)
985
990
  self:decrementStunCounter()
986
991
  end
987
992
  function Unit.prototype.incrementStunCounter(self)
988
- local stunCounter = self[101] or 0
989
- if not self[100] or stunCounter >= 0 then
993
+ local stunCounter = self[102] or 0
994
+ if not self[101] or stunCounter >= 0 then
990
995
  BlzPauseUnitEx(self.handle, true)
991
996
  end
992
- self[101] = stunCounter + 1
997
+ self[102] = stunCounter + 1
993
998
  end
994
999
  function Unit.prototype.decrementStunCounter(self)
995
- local stunCounter = self[101] or 0
996
- if not self[100] or stunCounter >= 1 then
1000
+ local stunCounter = self[102] or 0
1001
+ if not self[101] or stunCounter >= 1 then
997
1002
  BlzPauseUnitEx(self.handle, false)
998
1003
  end
999
- self[101] = stunCounter - 1
1004
+ self[102] = stunCounter - 1
1000
1005
  end
1001
1006
  function Unit.create(self, owner, id, x, y, facing, skinId)
1002
1007
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1098,8 +1103,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1098
1103
  )
1099
1104
  return targetCollection
1100
1105
  end
1101
- function Unit.getSelectionOf(self, player)
1102
- targetCollection = {}
1106
+ function Unit.getSelectionOf(self, player, target)
1107
+ if target == nil then
1108
+ target = {}
1109
+ end
1110
+ targetCollection = target
1103
1111
  targetCollectionNextIndex = 1
1104
1112
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1105
1113
  return targetCollection
@@ -1121,6 +1129,9 @@ end
1121
1129
  function Unit.prototype.__tostring(self)
1122
1130
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1123
1131
  end
1132
+ function Unit.getBySyncId(self, syncId)
1133
+ return unitBySyncId[syncId]
1134
+ end
1124
1135
  __TS__SetDescriptor(
1125
1136
  Unit.prototype,
1126
1137
  "_deltas",
@@ -1378,17 +1389,17 @@ __TS__SetDescriptor(
1378
1389
  "isTeamGlowVisible",
1379
1390
  {
1380
1391
  get = function(self)
1381
- return not self[105]
1392
+ return not self[106]
1382
1393
  end,
1383
1394
  set = function(self, isTeamGlowVisible)
1384
1395
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1385
- local ____temp_2
1396
+ local ____temp_6
1386
1397
  if not isTeamGlowVisible then
1387
- ____temp_2 = true
1398
+ ____temp_6 = true
1388
1399
  else
1389
- ____temp_2 = nil
1400
+ ____temp_6 = nil
1390
1401
  end
1391
- self[105] = ____temp_2
1402
+ self[106] = ____temp_6
1392
1403
  end
1393
1404
  },
1394
1405
  true
@@ -1398,7 +1409,7 @@ __TS__SetDescriptor(
1398
1409
  "color",
1399
1410
  {set = function(self, color)
1400
1411
  setUnitColor(self.handle, color.handle)
1401
- if self[105] then
1412
+ if self[106] then
1402
1413
  showUnitTeamGlow(self.handle, false)
1403
1414
  end
1404
1415
  end},
@@ -1422,14 +1433,14 @@ __TS__SetDescriptor(
1422
1433
  "maxHealth",
1423
1434
  {
1424
1435
  get = function(self)
1425
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1436
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1426
1437
  end,
1427
1438
  set = function(self, maxHealth)
1428
- if maxHealth < 1 and self[102] ~= nil then
1429
- self[103] = (self[103] or 0) + (1 - maxHealth)
1439
+ if maxHealth < 1 and self[103] ~= nil then
1440
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1430
1441
  maxHealth = 1
1431
1442
  end
1432
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1443
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1433
1444
  end
1434
1445
  },
1435
1446
  true
@@ -1471,10 +1482,10 @@ __TS__SetDescriptor(
1471
1482
  "health",
1472
1483
  {
1473
1484
  get = function(self)
1474
- return GetWidgetLife(self.handle) - (self[104] or 0)
1485
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1475
1486
  end,
1476
1487
  set = function(self, health)
1477
- SetWidgetLife(self.handle, health + (self[104] or 0))
1488
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1478
1489
  end
1479
1490
  },
1480
1491
  true
@@ -1685,17 +1696,17 @@ __TS__SetDescriptor(
1685
1696
  set = function(self, isPaused)
1686
1697
  local handle = self.handle
1687
1698
  if isPaused and not IsUnitPaused(handle) then
1688
- self[100] = true
1689
- for _ = self[101] or 0, -1 do
1699
+ self[101] = true
1700
+ for _ = self[102] or 0, -1 do
1690
1701
  BlzPauseUnitEx(handle, true)
1691
1702
  end
1692
1703
  PauseUnit(handle, true)
1693
1704
  elseif not isPaused and IsUnitPaused(handle) then
1694
1705
  PauseUnit(handle, false)
1695
- for _ = self[101] or 0, -1 do
1706
+ for _ = self[102] or 0, -1 do
1696
1707
  BlzPauseUnitEx(handle, false)
1697
1708
  end
1698
- self[100] = nil
1709
+ self[101] = nil
1699
1710
  end
1700
1711
  end
1701
1712
  },
@@ -2052,7 +2063,6 @@ Unit.onDecay = __TS__New(
2052
2063
  Unit.onResurrect = __TS__New(
2053
2064
  InitializingEvent,
2054
2065
  function(event)
2055
- local invoke = Event.invoke
2056
2066
  local dead = setmetatable({}, {__mode = "k"})
2057
2067
  ____exports.Unit.deathEvent:addListener(function(unit)
2058
2068
  dead[unit] = true
@@ -2068,10 +2078,15 @@ Unit.onResurrect = __TS__New(
2068
2078
  Unit.morphEvent = __TS__New(
2069
2079
  InitializingEvent,
2070
2080
  function(event)
2081
+ local function ifNotLeft(unit)
2082
+ local handle = unit.handle
2083
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2084
+ invoke(event, unit)
2085
+ end
2086
+ end
2071
2087
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2072
2088
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2073
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2074
- Timer:run(Event.invoke, event, unit)
2089
+ Timer:run(ifNotLeft, unit)
2075
2090
  end
2076
2091
  end)
2077
2092
  end
@@ -2109,27 +2124,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2109
2124
  Unit.onTargetCast = dispatchId(__TS__New(
2110
2125
  InitializingEvent,
2111
2126
  function(event)
2112
- local invoke = Event.invoke
2113
2127
  local function listener(unit, id)
2114
- local ____GetSpellTargetUnit_result_5
2128
+ local ____GetSpellTargetUnit_result_9
2115
2129
  if GetSpellTargetUnit() then
2116
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2130
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2117
2131
  else
2118
- local ____GetSpellTargetItem_result_4
2132
+ local ____GetSpellTargetItem_result_8
2119
2133
  if GetSpellTargetItem() then
2120
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2134
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2121
2135
  else
2122
- local ____GetSpellTargetDestructable_result_3
2136
+ local ____GetSpellTargetDestructable_result_7
2123
2137
  if GetSpellTargetDestructable() then
2124
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2138
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2125
2139
  else
2126
- ____GetSpellTargetDestructable_result_3 = nil
2140
+ ____GetSpellTargetDestructable_result_7 = nil
2127
2141
  end
2128
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2142
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2129
2143
  end
2130
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2144
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2131
2145
  end
2132
- local target = ____GetSpellTargetUnit_result_5
2146
+ local target = ____GetSpellTargetUnit_result_9
2133
2147
  if target then
2134
2148
  invoke(event, unit, id, target)
2135
2149
  end
@@ -2326,7 +2340,6 @@ Unit.autoAttackStartEvent = __TS__New(
2326
2340
  )
2327
2341
  Unit.onDamaging = (function()
2328
2342
  local event = __TS__New(Event)
2329
- local invoke = Event.invoke
2330
2343
  local trigger = CreateTrigger()
2331
2344
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2332
2345
  TriggerAddCondition(
@@ -2425,7 +2438,6 @@ end)()
2425
2438
  Unit.onDamage = __TS__New(
2426
2439
  InitializingEvent,
2427
2440
  function(event)
2428
- local invoke = Event.invoke
2429
2441
  local trigger = CreateTrigger()
2430
2442
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2431
2443
  TriggerAddCondition(
@@ -2441,6 +2453,7 @@ Unit.onDamage = __TS__New(
2441
2453
  damageType = BlzGetEventDamageType(),
2442
2454
  weaponType = BlzGetEventWeaponType(),
2443
2455
  isAttack = BlzGetEventIsAttack(),
2456
+ originalAmount = GetEventDamage(),
2444
2457
  preventDeath = damageEventPreventDeath
2445
2458
  }
2446
2459
  local evData = setmetatable(
@@ -2457,7 +2470,7 @@ Unit.onDamage = __TS__New(
2457
2470
  invoke(event, source, target, evData)
2458
2471
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2459
2472
  local bonusHealth = math.ceil(evData.amount)
2460
- target[104] = (target[104] or 0) + bonusHealth
2473
+ target[105] = (target[105] or 0) + bonusHealth
2461
2474
  BlzSetUnitMaxHP(
2462
2475
  target.handle,
2463
2476
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2471,7 +2484,7 @@ Unit.onDamage = __TS__New(
2471
2484
  evData[0],
2472
2485
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2473
2486
  )
2474
- target[104] = (target[104] or 0) - bonusHealth
2487
+ target[105] = (target[105] or 0) - bonusHealth
2475
2488
  SetWidgetLife(
2476
2489
  target.handle,
2477
2490
  GetWidgetLife(target.handle) - bonusHealth
@@ -2491,7 +2504,7 @@ Unit.onDamage = __TS__New(
2491
2504
  DestroyTrigger(trigger)
2492
2505
  end
2493
2506
  )
2494
- Unit.onItemDrop = __TS__New(
2507
+ Unit.itemDroppedEvent = __TS__New(
2495
2508
  ____exports.UnitTriggerEvent,
2496
2509
  EVENT_PLAYER_UNIT_DROP_ITEM,
2497
2510
  function()
@@ -2502,7 +2515,7 @@ Unit.onItemDrop = __TS__New(
2502
2515
  return IgnoreEvent
2503
2516
  end
2504
2517
  )
2505
- Unit.onItemPickup = __TS__New(
2518
+ Unit.itemPickedUpEvent = __TS__New(
2506
2519
  ____exports.UnitTriggerEvent,
2507
2520
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2508
2521
  function()
@@ -2513,10 +2526,39 @@ Unit.onItemPickup = __TS__New(
2513
2526
  return IgnoreEvent
2514
2527
  end
2515
2528
  )
2516
- Unit.onItemUse = __TS__New(
2529
+ Unit.itemUsedEvent = __TS__New(
2517
2530
  ____exports.UnitTriggerEvent,
2518
2531
  EVENT_PLAYER_UNIT_USE_ITEM,
2519
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2532
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2533
+ )
2534
+ Unit.itemStackedEvent = __TS__New(
2535
+ ____exports.UnitTriggerEvent,
2536
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2537
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2538
+ )
2539
+ __TS__ObjectDefineProperty(
2540
+ Unit,
2541
+ "itemMovedEvent",
2542
+ {get = function(self)
2543
+ local event = __TS__New(Event)
2544
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2545
+ local slotTo = order - orderId("moveslot0")
2546
+ self.onTargetOrder[order]:addListener(function(unit, item)
2547
+ local slotFrom = unit.items:findSlot(item)
2548
+ if slotFrom ~= nil then
2549
+ invoke(
2550
+ event,
2551
+ unit,
2552
+ item,
2553
+ slotFrom,
2554
+ slotTo
2555
+ )
2556
+ end
2557
+ end)
2558
+ end
2559
+ rawset(self, "itemMovedEvent", event)
2560
+ return event
2561
+ end}
2520
2562
  )
2521
2563
  __TS__ObjectDefineProperty(
2522
2564
  Unit,
@@ -1,7 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Unit } from "../core/types/unit";
3
3
  import { Async } from "../core/types/async";
4
- import { TriggerEvent } from "../event";
4
+ import { Event, TriggerEvent } from "../event";
5
5
  import { GraphicsMode } from "./index";
6
6
  export declare class LocalClient {
7
7
  private constructor();
@@ -11,6 +11,11 @@ export declare class LocalClient {
11
11
  static get isHD(): boolean;
12
12
  static get graphicsMode(): GraphicsMode;
13
13
  static get isActive(): boolean;
14
- static get mouseFocusUnit(): Async<Unit>;
14
+ static get mouseFocusUnit(): Async<Unit> | undefined;
15
+ static get mainSelectedUnit(): Async<Unit> | undefined;
16
+ static get mainSelectedUnitChangeEvent(): Event<[
17
+ previousMainSelectedUnit: Unit | undefined,
18
+ newMainSelectedUnit: Unit | undefined
19
+ ]>;
15
20
  static readonly onDisconnect: TriggerEvent<[]>;
16
21
  }
@@ -1,4 +1,5 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
2
3
  local __TS__Class = ____lualib.__TS__Class
3
4
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
4
5
  local __TS__New = ____lualib.__TS__New
@@ -6,13 +7,25 @@ local ____exports = {}
6
7
  local ____unit = require("core.types.unit")
7
8
  local Unit = ____unit.Unit
8
9
  local ____event = require("event")
10
+ local Event = ____event.Event
9
11
  local TriggerEvent = ____event.TriggerEvent
12
+ local ____frame = require("core.types.frame")
13
+ local Frame = ____frame.Frame
14
+ local ____player = require("core.types.player")
15
+ local Player = ____player.Player
16
+ local ____timer = require("core.types.timer")
17
+ local Timer = ____timer.Timer
10
18
  local loadTOCFile = BlzLoadTOCFile
11
19
  local getLocalClientWidth = BlzGetLocalClientWidth
12
20
  local getLocalClientHeight = BlzGetLocalClientHeight
13
21
  local isLocalClientActive = BlzIsLocalClientActive
22
+ local isHeroUnitId = IsHeroUnitId
23
+ local getHandleId = GetHandleId
14
24
  local getMouseFocusUnit = BlzGetMouseFocusUnit
25
+ local getUnitRealField = BlzGetUnitRealField
26
+ local getUnitTypeId = GetUnitTypeId
15
27
  local getLocale = BlzGetLocale
28
+ local tableSort = table.sort
16
29
  local tocPath = "_warscript\\IsHD.toc"
17
30
  compiletime(function()
18
31
  if currentMap then
@@ -21,6 +34,29 @@ compiletime(function()
21
34
  currentMap:addFileString("_HD.w3mod\\" .. tocPath, fdfPath .. "\r\n")
22
35
  end
23
36
  end)
37
+ local selectionButtons
38
+ Timer:run(function()
39
+ selectionButtons = __TS__ArrayMap(
40
+ Frame:byName("SimpleInfoPanelUnitDetail").parent:getChild(5):getChild(0).children,
41
+ function(____, frame) return frame:getChild(1) end
42
+ )
43
+ end)
44
+ local localSelectedUnits = {}
45
+ local indexByLocalSelectedUnit = {}
46
+ local function compareUnitsSelectionPriority(a, b)
47
+ local aHandle = a.handle
48
+ local bHandle = b.handle
49
+ local priorityDelta = getUnitRealField(bHandle, UNIT_RF_PRIORITY) - getUnitRealField(aHandle, UNIT_RF_PRIORITY)
50
+ if priorityDelta ~= 0 then
51
+ return priorityDelta < 0
52
+ end
53
+ local aTypeId = getUnitTypeId(aHandle)
54
+ local bTypeId = getUnitTypeId(bHandle)
55
+ local orderDelta = (isHeroUnitId(aTypeId) and getHandleId(aHandle) or aTypeId) - (isHeroUnitId(bTypeId) and getHandleId(bHandle) or bTypeId)
56
+ return (orderDelta ~= 0 and orderDelta or indexByLocalSelectedUnit[a] - indexByLocalSelectedUnit[b]) < 0
57
+ end
58
+ local mainSelectedUnitChangeEvent
59
+ local previousMainSelectedUnit
24
60
  ____exports.LocalClient = __TS__Class()
25
61
  local LocalClient = ____exports.LocalClient
26
62
  LocalClient.name = "LocalClient"
@@ -69,6 +105,52 @@ __TS__ObjectDefineProperty(
69
105
  return Unit:of(getMouseFocusUnit())
70
106
  end}
71
107
  )
108
+ __TS__ObjectDefineProperty(
109
+ LocalClient,
110
+ "mainSelectedUnit",
111
+ {get = function(self)
112
+ Unit:getSelectionOf(Player["local"], localSelectedUnits)
113
+ for i = 1, #localSelectedUnits do
114
+ indexByLocalSelectedUnit[localSelectedUnits[i]] = i
115
+ end
116
+ tableSort(localSelectedUnits, compareUnitsSelectionPriority)
117
+ local mainSelectedUnitIndex
118
+ if selectionButtons and #localSelectedUnits > 1 then
119
+ local maxButtonWidth = 0
120
+ for i = 0, #selectionButtons - 1 do
121
+ local width = selectionButtons[i + 1].width
122
+ if width > maxButtonWidth then
123
+ maxButtonWidth = width
124
+ mainSelectedUnitIndex = i
125
+ end
126
+ end
127
+ end
128
+ local mainSelectedUnit = localSelectedUnits[(mainSelectedUnitIndex or 0) + 1]
129
+ for i = 1, #localSelectedUnits do
130
+ indexByLocalSelectedUnit[localSelectedUnits[i]] = nil
131
+ localSelectedUnits[i] = nil
132
+ end
133
+ if mainSelectedUnitChangeEvent ~= nil and mainSelectedUnit ~= previousMainSelectedUnit then
134
+ local previousPreviousMainSelectedUnit = previousMainSelectedUnit
135
+ previousMainSelectedUnit = mainSelectedUnit
136
+ Event.invoke(mainSelectedUnitChangeEvent, previousPreviousMainSelectedUnit, previousMainSelectedUnit)
137
+ end
138
+ return mainSelectedUnit
139
+ end}
140
+ )
141
+ __TS__ObjectDefineProperty(
142
+ LocalClient,
143
+ "mainSelectedUnitChangeEvent",
144
+ {get = function(self)
145
+ if mainSelectedUnitChangeEvent == nil then
146
+ mainSelectedUnitChangeEvent = __TS__New(Event)
147
+ Timer.onPeriod[1 / 64]:addListener(function()
148
+ local _ = ____exports.LocalClient.mainSelectedUnit
149
+ end)
150
+ end
151
+ return mainSelectedUnitChangeEvent
152
+ end}
153
+ )
72
154
  LocalClient.onDisconnect = __TS__New(
73
155
  TriggerEvent,
74
156
  function(trigger)
@@ -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";
@@ -1,5 +1,3 @@
1
- /// <reference types="@warscript/language-extensions" />
2
- /// <reference types="@typescript-to-lua/language-extensions" />
3
1
  /** @noSelfInFile */
4
2
  export declare const enum CombatClassification {
5
3
  NONE = 1,// 2^0
@@ -1,4 +1,3 @@
1
- /// <reference types="warpack-types/warpack" />
2
1
  /** @noSelfInFile */
3
2
  import { ChannelAbilityType, ChannelAbilityTypeTargetingType } from "./channel";
4
3
  import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
@@ -1,4 +1,3 @@
1
- /// <reference types="warpack-types/warpack" />
2
1
  /** @noSelfInFile */
3
2
  import { DiseaseCloudAbilityType } from "./disease-cloud";
4
3
  export declare class BlankPassiveAbilityType extends DiseaseCloudAbilityType {
@@ -1,4 +1,3 @@
1
- /// <reference types="warpack-types/warpack" />
2
1
  /** @noSelfInFile */
3
2
  import { AbilityType, AbilityTypeId } from "../ability-type";
4
3
  import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
@@ -0,0 +1,10 @@
1
+ /** @noSelfInFile */
2
+ import { AbilityType, AbilityTypeId } from "../ability-type";
3
+ import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
4
+ export declare class MineAbilityType extends AbilityType {
5
+ static readonly BASE_ID: AbilityTypeId;
6
+ get activationDelay(): number[];
7
+ set activationDelay(activationDelay: ObjectDataEntryLevelFieldValueSupplier<number>);
8
+ get invisibilityDelay(): number[];
9
+ set invisibilityDelay(invisibilityDelay: ObjectDataEntryLevelFieldValueSupplier<number>);
10
+ }