warscript 0.0.1-dev.fae1c72 → 0.0.1-dev.fcc9d08

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 (119) hide show
  1. package/binaryreader.d.ts +1 -0
  2. package/binaryreader.lua +3 -0
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -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 -0
  8. package/core/types/frame.lua +93 -1
  9. package/core/types/sound.d.ts +1 -0
  10. package/core/types/sound.lua +32 -2
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +12 -0
  13. package/engine/behavior.d.ts +6 -6
  14. package/engine/behavior.lua +6 -6
  15. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  16. package/engine/behaviour/ability/always-enabled.lua +31 -0
  17. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  18. package/engine/behaviour/ability/apply-buff.lua +32 -0
  19. package/engine/behaviour/ability/damage.d.ts +33 -11
  20. package/engine/behaviour/ability/damage.lua +89 -31
  21. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  22. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  23. package/engine/behaviour/ability/heal.d.ts +33 -6
  24. package/engine/behaviour/ability/heal.lua +89 -10
  25. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  26. package/engine/behaviour/ability/instant-impact.lua +4 -19
  27. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  28. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  29. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  30. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  31. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  32. package/engine/behaviour/ability/restore-mana.lua +29 -0
  33. package/engine/behaviour/ability.d.ts +15 -3
  34. package/engine/behaviour/ability.lua +93 -34
  35. package/engine/behaviour/unit.d.ts +5 -0
  36. package/engine/behaviour/unit.lua +20 -0
  37. package/engine/buff.d.ts +95 -38
  38. package/engine/buff.lua +424 -200
  39. package/engine/game-map.d.ts +7 -0
  40. package/engine/game-map.lua +32 -0
  41. package/engine/internal/ability.d.ts +16 -13
  42. package/engine/internal/ability.lua +80 -76
  43. package/engine/internal/item/ability.lua +106 -0
  44. package/engine/internal/item+owner.lua +2 -2
  45. package/engine/internal/item.d.ts +2 -2
  46. package/engine/internal/item.lua +56 -25
  47. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  48. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  49. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  50. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  51. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  52. package/engine/internal/object-data/evasion-probability.lua +16 -0
  53. package/engine/internal/unit/ability.d.ts +10 -1
  54. package/engine/internal/unit/ability.lua +36 -14
  55. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  56. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  57. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  58. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  59. package/engine/internal/unit/bonus.d.ts +6 -2
  60. package/engine/internal/unit/bonus.lua +23 -1
  61. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  62. package/engine/internal/unit/ignore-events-items.lua +5 -0
  63. package/engine/internal/unit/item.d.ts +24 -0
  64. package/engine/internal/unit/item.lua +78 -0
  65. package/engine/internal/unit/main-selected.d.ts +13 -0
  66. package/engine/internal/unit/main-selected.lua +51 -0
  67. package/engine/internal/unit+ability.lua +2 -2
  68. package/engine/internal/unit+transport.lua +4 -10
  69. package/engine/internal/unit-missile-launch.lua +24 -5
  70. package/engine/internal/unit.d.ts +27 -11
  71. package/engine/internal/unit.lua +175 -86
  72. package/engine/internal/utility.lua +12 -0
  73. package/engine/lightning.d.ts +12 -5
  74. package/engine/lightning.lua +48 -14
  75. package/engine/local-client.d.ts +7 -2
  76. package/engine/local-client.lua +82 -0
  77. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  78. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  79. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  80. package/engine/object-data/entry/ability-type/blank-configurable.lua +21 -1
  81. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  82. package/engine/object-data/entry/ability-type.lua +8 -12
  83. package/engine/object-data/entry/buff-type/applicable.lua +10 -34
  84. package/engine/object-data/entry/item-type.d.ts +14 -0
  85. package/engine/object-data/entry/item-type.lua +91 -0
  86. package/engine/object-data/entry/unit-type.d.ts +7 -0
  87. package/engine/object-data/entry/unit-type.lua +53 -0
  88. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  89. package/engine/object-field/ability.d.ts +26 -3
  90. package/engine/object-field/ability.lua +54 -1
  91. package/engine/object-field.d.ts +2 -2
  92. package/engine/object-field.lua +4 -0
  93. package/engine/standard/fields/ability.d.ts +2 -0
  94. package/engine/standard/fields/ability.lua +2 -0
  95. package/engine/unit.d.ts +3 -0
  96. package/engine/unit.lua +3 -0
  97. package/index.d.ts +1 -0
  98. package/index.lua +1 -0
  99. package/lualib_bundle.lua +7 -2
  100. package/net/socket.d.ts +7 -1
  101. package/net/socket.lua +45 -4
  102. package/network.d.ts +1 -0
  103. package/network.lua +3 -2
  104. package/objutil/buff.lua +1 -1
  105. package/objutil/unit.lua +8 -0
  106. package/package.json +2 -2
  107. package/patch-lua.d.ts +0 -0
  108. package/patch-lua.lua +10 -0
  109. package/property.d.ts +55 -0
  110. package/property.lua +374 -0
  111. package/utility/arrays.d.ts +8 -1
  112. package/utility/arrays.lua +34 -3
  113. package/utility/lazy.d.ts +2 -0
  114. package/utility/lazy.lua +14 -0
  115. package/utility/linked-set.d.ts +11 -2
  116. package/utility/linked-set.lua +5 -2
  117. package/utility/types.d.ts +1 -0
  118. package/core/mapbounds.d.ts +0 -8
  119. 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
@@ -48,6 +51,8 @@ local ____arrays = require("utility.arrays")
48
51
  local forEach = ____arrays.forEach
49
52
  local ____math = require("math")
50
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
+ local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
51
56
  local match = string.match
52
57
  local ____tostring = _G.tostring
53
58
  local setUnitAnimation = SetUnitAnimation
@@ -72,6 +77,7 @@ local setUnitScale = SetUnitScale
72
77
  local setUnitPosition = SetUnitPosition
73
78
  local setUnitTimeScale = SetUnitTimeScale
74
79
  local getHandleId = GetHandleId
80
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
81
  local createUnit = CreateUnit
76
82
  local killUnit = KillUnit
77
83
  local setUnitExploded = SetUnitExploded
@@ -279,16 +285,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
285
  end
280
286
  local function dispatch(event, idGetter, argsGetter)
281
287
  local initialized = false
282
- local x = {}
283
288
  return setmetatable(
284
- x,
289
+ {},
285
290
  {
286
291
  __index = function(self, id)
287
292
  if type(id) ~= "number" then
288
293
  return event[id]
289
294
  end
290
295
  if not initialized then
291
- local invoke = Event.invoke
292
296
  event:addListener(function(...)
293
297
  local id = idGetter(...)
294
298
  local dispatched = rawget(self, id)
@@ -326,7 +330,6 @@ local function dispatchAbility(event)
326
330
  return event[id]
327
331
  end
328
332
  if not initialized then
329
- local invoke = Event.invoke
330
333
  event:addListener(function(unit, ability, ...)
331
334
  local dispatched = rawget(self, ability.typeId)
332
335
  if dispatched ~= nil then
@@ -562,17 +565,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
565
  ____exports.Unit:of(unit)
563
566
  )
564
567
  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
568
  for i = 0, unitInventorySize(unit) - 1 do
577
569
  local item = unitItemInSlot(unit, i)
578
570
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +622,15 @@ for ____, player in ipairs(Player.all) do
630
622
  dummies[player] = dummy
631
623
  end
632
624
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
625
+ local counter = (unit[103] or 0) - 1
634
626
  if counter ~= 0 then
635
- unit[102] = counter
627
+ unit[103] = counter
636
628
  return
637
629
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
630
+ unit[103] = nil
631
+ local healthBonus = unit[104]
640
632
  if healthBonus ~= nil then
641
- unit[103] = nil
633
+ unit[104] = nil
642
634
  local handle = unit.handle
643
635
  BlzSetUnitMaxHP(
644
636
  handle,
@@ -646,12 +638,17 @@ local function delayHealthChecksCallback(unit)
646
638
  )
647
639
  end
648
640
  end
641
+ local nextSyncId = 1
642
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
649
643
  ____exports.Unit = __TS__Class()
650
644
  local Unit = ____exports.Unit
651
645
  Unit.name = "Unit"
652
646
  __TS__ClassExtends(Unit, Handle)
653
647
  function Unit.prototype.____constructor(self, handle)
654
648
  Handle.prototype.____constructor(self, handle)
649
+ local ____nextSyncId_0 = nextSyncId
650
+ nextSyncId = ____nextSyncId_0 + 1
651
+ self.syncId = ____nextSyncId_0
655
652
  self._owner = Player:of(getOwningPlayer(handle))
656
653
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
654
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +661,7 @@ function Unit.prototype.____constructor(self, handle)
664
661
  fourCC("Amrf")
665
662
  ))
666
663
  end
664
+ unitBySyncId[self.syncId] = self
667
665
  local ____ = self.abilities
668
666
  end
669
667
  function Unit.prototype.getEvent(self, event, collector)
@@ -749,8 +747,8 @@ function Unit.prototype.addModifier(self, property, modifier)
749
747
  end}
750
748
  end
751
749
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
750
+ local ____combatClassification_1 = combatClassification
751
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
754
752
  end
755
753
  function Unit.prototype.addClassification(self, classification)
756
754
  return unitAddType(self.handle, classification)
@@ -768,13 +766,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
766
  return isUnitInvisible(self.handle, player.handle)
769
767
  end
770
768
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
769
+ local ____temp_2
772
770
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
771
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
774
772
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
773
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
776
774
  end
777
- return ____temp_1
775
+ return ____temp_2
778
776
  end
779
777
  function Unit.prototype.isAllyOf(self, unit)
780
778
  return isUnitAlly(
@@ -801,7 +799,7 @@ function Unit.prototype.queueAnimation(self, animation)
801
799
  queueUnitAnimation(self.handle, animation)
802
800
  end
803
801
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
802
+ self[103] = (self[103] or 0) + 1
805
803
  Timer:run(delayHealthChecksCallback, self)
806
804
  end
807
805
  function Unit.prototype.setPosition(self, x, y)
@@ -817,8 +815,15 @@ end
817
815
  function Unit.prototype.kill(self)
818
816
  killUnit(self.handle)
819
817
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
818
+ function Unit.prototype.revive(self, x, y, doEffect)
819
+ local ____ReviveHero_5 = ReviveHero
820
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
821
+ local ____doEffect_3 = doEffect
822
+ if ____doEffect_3 == nil then
823
+ ____doEffect_3 = false
824
+ end
825
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
826
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
822
827
  end
823
828
  function Unit.prototype.healTarget(self, target, amount)
824
829
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -858,7 +863,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
858
863
  return UnitDropItemSlot(self.handle, item.handle, slot)
859
864
  end
860
865
  function Unit.prototype.itemInSlot(self, slot)
861
- return Item:of(UnitItemInSlot(self.handle, slot))
866
+ return Item:of(unitItemInSlot(self.handle, slot))
862
867
  end
863
868
  function Unit.prototype.addAbility(self, abilityId)
864
869
  if unitAddAbility(self.handle, abilityId) then
@@ -927,8 +932,15 @@ function Unit.prototype.interruptAttack(self)
927
932
  unitInterruptAttack(self.handle)
928
933
  end
929
934
  function Unit.prototype.interruptCast(self, abilityId)
930
- unitDisableAbility(self.handle, abilityId, true, false)
931
- unitDisableAbility(self.handle, abilityId, false, false)
935
+ local handle = self.handle
936
+ unitDisableAbility(handle, abilityId, true, false)
937
+ Timer:run(
938
+ unitDisableAbility,
939
+ handle,
940
+ abilityId,
941
+ false,
942
+ false
943
+ )
932
944
  end
933
945
  function Unit.prototype.getDistanceTo(self, target)
934
946
  local handle = self.handle
@@ -988,18 +1000,18 @@ function Unit.prototype.unpauseEx(self)
988
1000
  self:decrementStunCounter()
989
1001
  end
990
1002
  function Unit.prototype.incrementStunCounter(self)
991
- local stunCounter = self[101] or 0
992
- if not self[100] or stunCounter >= 0 then
1003
+ local stunCounter = self[102] or 0
1004
+ if not self[101] or stunCounter >= 0 then
993
1005
  BlzPauseUnitEx(self.handle, true)
994
1006
  end
995
- self[101] = stunCounter + 1
1007
+ self[102] = stunCounter + 1
996
1008
  end
997
1009
  function Unit.prototype.decrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 1 then
1010
+ local stunCounter = self[102] or 0
1011
+ if not self[101] or stunCounter >= 1 then
1000
1012
  BlzPauseUnitEx(self.handle, false)
1001
1013
  end
1002
- self[101] = stunCounter - 1
1014
+ self[102] = stunCounter - 1
1003
1015
  end
1004
1016
  function Unit.create(self, owner, id, x, y, facing, skinId)
1005
1017
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1101,8 +1113,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1101
1113
  )
1102
1114
  return targetCollection
1103
1115
  end
1104
- function Unit.getSelectionOf(self, player)
1105
- targetCollection = {}
1116
+ function Unit.getSelectionOf(self, player, target)
1117
+ if target == nil then
1118
+ target = {}
1119
+ end
1120
+ targetCollection = target
1106
1121
  targetCollectionNextIndex = 1
1107
1122
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1108
1123
  return targetCollection
@@ -1124,6 +1139,9 @@ end
1124
1139
  function Unit.prototype.__tostring(self)
1125
1140
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1126
1141
  end
1142
+ function Unit.getBySyncId(self, syncId)
1143
+ return unitBySyncId[syncId]
1144
+ end
1127
1145
  __TS__SetDescriptor(
1128
1146
  Unit.prototype,
1129
1147
  "_deltas",
@@ -1187,6 +1205,14 @@ __TS__SetDescriptor(
1187
1205
  end},
1188
1206
  true
1189
1207
  )
1208
+ __TS__SetDescriptor(
1209
+ Unit.prototype,
1210
+ "isStunned",
1211
+ {get = function(self)
1212
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1213
+ end},
1214
+ true
1215
+ )
1190
1216
  __TS__SetDescriptor(
1191
1217
  Unit.prototype,
1192
1218
  "combatClassifications",
@@ -1381,17 +1407,17 @@ __TS__SetDescriptor(
1381
1407
  "isTeamGlowVisible",
1382
1408
  {
1383
1409
  get = function(self)
1384
- return not self[105]
1410
+ return not self[106]
1385
1411
  end,
1386
1412
  set = function(self, isTeamGlowVisible)
1387
1413
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1388
- local ____temp_2
1414
+ local ____temp_6
1389
1415
  if not isTeamGlowVisible then
1390
- ____temp_2 = true
1416
+ ____temp_6 = true
1391
1417
  else
1392
- ____temp_2 = nil
1418
+ ____temp_6 = nil
1393
1419
  end
1394
- self[105] = ____temp_2
1420
+ self[106] = ____temp_6
1395
1421
  end
1396
1422
  },
1397
1423
  true
@@ -1401,7 +1427,7 @@ __TS__SetDescriptor(
1401
1427
  "color",
1402
1428
  {set = function(self, color)
1403
1429
  setUnitColor(self.handle, color.handle)
1404
- if self[105] then
1430
+ if self[106] then
1405
1431
  showUnitTeamGlow(self.handle, false)
1406
1432
  end
1407
1433
  end},
@@ -1425,14 +1451,14 @@ __TS__SetDescriptor(
1425
1451
  "maxHealth",
1426
1452
  {
1427
1453
  get = function(self)
1428
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1454
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1429
1455
  end,
1430
1456
  set = function(self, maxHealth)
1431
- if maxHealth < 1 and self[102] ~= nil then
1432
- self[103] = (self[103] or 0) + (1 - maxHealth)
1457
+ if maxHealth < 1 and self[103] ~= nil then
1458
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1433
1459
  maxHealth = 1
1434
1460
  end
1435
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1461
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1436
1462
  end
1437
1463
  },
1438
1464
  true
@@ -1474,10 +1500,10 @@ __TS__SetDescriptor(
1474
1500
  "health",
1475
1501
  {
1476
1502
  get = function(self)
1477
- return GetWidgetLife(self.handle) - (self[104] or 0)
1503
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1478
1504
  end,
1479
1505
  set = function(self, health)
1480
- SetWidgetLife(self.handle, health + (self[104] or 0))
1506
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1481
1507
  end
1482
1508
  },
1483
1509
  true
@@ -1688,17 +1714,17 @@ __TS__SetDescriptor(
1688
1714
  set = function(self, isPaused)
1689
1715
  local handle = self.handle
1690
1716
  if isPaused and not IsUnitPaused(handle) then
1691
- self[100] = true
1692
- for _ = self[101] or 0, -1 do
1717
+ self[101] = true
1718
+ for _ = self[102] or 0, -1 do
1693
1719
  BlzPauseUnitEx(handle, true)
1694
1720
  end
1695
1721
  PauseUnit(handle, true)
1696
1722
  elseif not isPaused and IsUnitPaused(handle) then
1697
1723
  PauseUnit(handle, false)
1698
- for _ = self[101] or 0, -1 do
1724
+ for _ = self[102] or 0, -1 do
1699
1725
  BlzPauseUnitEx(handle, false)
1700
1726
  end
1701
- self[100] = nil
1727
+ self[101] = nil
1702
1728
  end
1703
1729
  end
1704
1730
  },
@@ -2055,7 +2081,6 @@ Unit.onDecay = __TS__New(
2055
2081
  Unit.onResurrect = __TS__New(
2056
2082
  InitializingEvent,
2057
2083
  function(event)
2058
- local invoke = Event.invoke
2059
2084
  local dead = setmetatable({}, {__mode = "k"})
2060
2085
  ____exports.Unit.deathEvent:addListener(function(unit)
2061
2086
  dead[unit] = true
@@ -2071,10 +2096,15 @@ Unit.onResurrect = __TS__New(
2071
2096
  Unit.morphEvent = __TS__New(
2072
2097
  InitializingEvent,
2073
2098
  function(event)
2099
+ local function ifNotLeft(unit)
2100
+ local handle = unit.handle
2101
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2102
+ invoke(event, unit)
2103
+ end
2104
+ end
2074
2105
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2075
2106
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2076
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2077
- Timer:run(Event.invoke, event, unit)
2107
+ Timer:run(ifNotLeft, unit)
2078
2108
  end
2079
2109
  end)
2080
2110
  end
@@ -2112,27 +2142,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2112
2142
  Unit.onTargetCast = dispatchId(__TS__New(
2113
2143
  InitializingEvent,
2114
2144
  function(event)
2115
- local invoke = Event.invoke
2116
2145
  local function listener(unit, id)
2117
- local ____GetSpellTargetUnit_result_5
2146
+ local ____GetSpellTargetUnit_result_9
2118
2147
  if GetSpellTargetUnit() then
2119
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2148
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2120
2149
  else
2121
- local ____GetSpellTargetItem_result_4
2150
+ local ____GetSpellTargetItem_result_8
2122
2151
  if GetSpellTargetItem() then
2123
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2152
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2124
2153
  else
2125
- local ____GetSpellTargetDestructable_result_3
2154
+ local ____GetSpellTargetDestructable_result_7
2126
2155
  if GetSpellTargetDestructable() then
2127
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2156
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2128
2157
  else
2129
- ____GetSpellTargetDestructable_result_3 = nil
2158
+ ____GetSpellTargetDestructable_result_7 = nil
2130
2159
  end
2131
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2160
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2132
2161
  end
2133
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2162
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2134
2163
  end
2135
- local target = ____GetSpellTargetUnit_result_5
2164
+ local target = ____GetSpellTargetUnit_result_9
2136
2165
  if target then
2137
2166
  invoke(event, unit, id, target)
2138
2167
  end
@@ -2304,10 +2333,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2304
2333
  ____exports.UnitTriggerEvent,
2305
2334
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2306
2335
  function()
2307
- local unit = ____exports.Unit:of(getOrderedUnit())
2308
- local issuedOrderId = getIssuedOrderId()
2309
- if unit ~= nil and unit.state == 1 then
2310
- return unit, issuedOrderId
2336
+ local handle = getOrderedUnit()
2337
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2338
+ local unit = ____exports.Unit:of(handle)
2339
+ if unit.state == 1 then
2340
+ return unit, getIssuedOrderId()
2341
+ end
2311
2342
  end
2312
2343
  return IgnoreEvent
2313
2344
  end
@@ -2329,7 +2360,6 @@ Unit.autoAttackStartEvent = __TS__New(
2329
2360
  )
2330
2361
  Unit.onDamaging = (function()
2331
2362
  local event = __TS__New(Event)
2332
- local invoke = Event.invoke
2333
2363
  local trigger = CreateTrigger()
2334
2364
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2335
2365
  TriggerAddCondition(
@@ -2428,7 +2458,6 @@ end)()
2428
2458
  Unit.onDamage = __TS__New(
2429
2459
  InitializingEvent,
2430
2460
  function(event)
2431
- local invoke = Event.invoke
2432
2461
  local trigger = CreateTrigger()
2433
2462
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2434
2463
  TriggerAddCondition(
@@ -2444,6 +2473,7 @@ Unit.onDamage = __TS__New(
2444
2473
  damageType = BlzGetEventDamageType(),
2445
2474
  weaponType = BlzGetEventWeaponType(),
2446
2475
  isAttack = BlzGetEventIsAttack(),
2476
+ originalAmount = GetEventDamage(),
2447
2477
  preventDeath = damageEventPreventDeath
2448
2478
  }
2449
2479
  local evData = setmetatable(
@@ -2460,7 +2490,7 @@ Unit.onDamage = __TS__New(
2460
2490
  invoke(event, source, target, evData)
2461
2491
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2462
2492
  local bonusHealth = math.ceil(evData.amount)
2463
- target[104] = (target[104] or 0) + bonusHealth
2493
+ target[105] = (target[105] or 0) + bonusHealth
2464
2494
  BlzSetUnitMaxHP(
2465
2495
  target.handle,
2466
2496
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2474,7 +2504,7 @@ Unit.onDamage = __TS__New(
2474
2504
  evData[0],
2475
2505
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2476
2506
  )
2477
- target[104] = (target[104] or 0) - bonusHealth
2507
+ target[105] = (target[105] or 0) - bonusHealth
2478
2508
  SetWidgetLife(
2479
2509
  target.handle,
2480
2510
  GetWidgetLife(target.handle) - bonusHealth
@@ -2494,32 +2524,91 @@ Unit.onDamage = __TS__New(
2494
2524
  DestroyTrigger(trigger)
2495
2525
  end
2496
2526
  )
2497
- Unit.onItemDrop = __TS__New(
2527
+ Unit.itemDroppedEvent = __TS__New(
2498
2528
  ____exports.UnitTriggerEvent,
2499
2529
  EVENT_PLAYER_UNIT_DROP_ITEM,
2500
2530
  function()
2501
2531
  local unit = getTriggerUnit()
2502
- if getUnitTypeId(unit) ~= dummyUnitId then
2503
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2532
+ local item = getManipulatedItem()
2533
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2534
+ return ____exports.Unit:of(unit), Item:of(item)
2504
2535
  end
2505
2536
  return IgnoreEvent
2506
2537
  end
2507
2538
  )
2508
- Unit.onItemPickup = __TS__New(
2539
+ Unit.itemPickedUpEvent = __TS__New(
2509
2540
  ____exports.UnitTriggerEvent,
2510
2541
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2511
2542
  function()
2512
2543
  local unit = getTriggerUnit()
2513
- if getUnitTypeId(unit) ~= dummyUnitId then
2514
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2544
+ local item = getManipulatedItem()
2545
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2546
+ return ____exports.Unit:of(unit), Item:of(item)
2515
2547
  end
2516
2548
  return IgnoreEvent
2517
2549
  end
2518
2550
  )
2519
- Unit.onItemUse = __TS__New(
2551
+ Unit.itemUsedEvent = __TS__New(
2520
2552
  ____exports.UnitTriggerEvent,
2521
2553
  EVENT_PLAYER_UNIT_USE_ITEM,
2522
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2554
+ function()
2555
+ local unit = getTriggerUnit()
2556
+ local item = getManipulatedItem()
2557
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2558
+ return ____exports.Unit:of(unit), Item:of(item)
2559
+ end
2560
+ return IgnoreEvent
2561
+ end
2562
+ )
2563
+ Unit.itemStackedEvent = __TS__New(
2564
+ ____exports.UnitTriggerEvent,
2565
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2566
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2567
+ )
2568
+ __TS__ObjectDefineProperty(
2569
+ Unit,
2570
+ "itemUseOrderEvent",
2571
+ {get = function(self)
2572
+ local event = __TS__New(Event)
2573
+ for order = orderId("useslot0"), orderId("useslot5") do
2574
+ local slot = order - orderId("useslot0")
2575
+ local function listener(unit)
2576
+ local item = unit.items[slot + 1]
2577
+ if item ~= nil then
2578
+ invoke(event, unit, item)
2579
+ end
2580
+ end
2581
+ self.onImmediateOrder[order]:addListener(listener)
2582
+ self.onTargetOrder[order]:addListener(listener)
2583
+ self.onPointOrder[order]:addListener(listener)
2584
+ end
2585
+ rawset(self, "itemUseOrderEvent", event)
2586
+ return event
2587
+ end}
2588
+ )
2589
+ __TS__ObjectDefineProperty(
2590
+ Unit,
2591
+ "itemMoveOrderEvent",
2592
+ {get = function(self)
2593
+ local event = __TS__New(Event)
2594
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2595
+ local slotTo = order - orderId("moveslot0")
2596
+ self.onTargetOrder[order]:addListener(function(unit, item)
2597
+ local slotFrom = unit.items:findSlot(item)
2598
+ if slotFrom ~= nil then
2599
+ invoke(
2600
+ event,
2601
+ unit,
2602
+ item,
2603
+ slotFrom,
2604
+ slotTo
2605
+ )
2606
+ end
2607
+ end)
2608
+ end
2609
+ rawset(self, "itemMoveOrderEvent", event)
2610
+ return event
2611
+ end}
2523
2612
  )
2524
2613
  __TS__ObjectDefineProperty(
2525
2614
  Unit,
@@ -1,6 +1,8 @@
1
1
  local ____exports = {}
2
2
  local getUnitAbility = BlzGetUnitAbility
3
3
  local unitAddAbility = UnitAddAbility
4
+ local unitInventorySize = UnitInventorySize
5
+ local unitItemInSlot = UnitItemInSlot
4
6
  local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
5
7
  ---
6
8
  -- @internal For use by internal systems only.
@@ -10,4 +12,14 @@ ____exports.addInternalAbility = function(unit, abilityTypeId)
10
12
  end
11
13
  return getUnitAbility(unit, abilityTypeId)
12
14
  end
15
+ ---
16
+ -- @internal For use by internal systems only.
17
+ ____exports.findUnitItemSlot = function(unit, item)
18
+ for slot = 0, unitInventorySize(unit) - 1 do
19
+ if item == unitItemInSlot(unit, slot) then
20
+ return slot
21
+ end
22
+ end
23
+ return nil
24
+ end
13
25
  return ____exports
@@ -1,7 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { LightningTypeId } from "./object-data/entry/lightning-type";
3
- import { Handle, HandleDestructor } from "../core/types/handle";
4
3
  import { Unit } from "../core/types/unit";
4
+ import { AbstractDestroyable, Destructor } from "../destroyable";
5
5
  declare const enum LightningPropertyKey {
6
6
  CHECK_VISIBILITY = 100,
7
7
  SOURCE_UNIT = 101,
@@ -12,10 +12,12 @@ declare const enum LightningPropertyKey {
12
12
  TARGET_X = 106,
13
13
  TARGET_Y = 107,
14
14
  TARGET_Z = 108,
15
- DURATION = 109
15
+ DURATION = 109,
16
+ FADING = 110
16
17
  }
17
18
  export type LightningConstructor<T extends Lightning> = typeof Lightning & (new (handle: jlightning, typeId: LightningTypeId) => T);
18
- export declare class Lightning extends Handle<jlightning> {
19
+ export declare class Lightning extends AbstractDestroyable {
20
+ readonly handle: jlightning;
19
21
  readonly typeId: LightningTypeId;
20
22
  private [LightningPropertyKey.CHECK_VISIBILITY]?;
21
23
  private [LightningPropertyKey.SOURCE_UNIT]?;
@@ -27,8 +29,9 @@ export declare class Lightning extends Handle<jlightning> {
27
29
  private [LightningPropertyKey.TARGET_Y]?;
28
30
  private [LightningPropertyKey.TARGET_Z]?;
29
31
  private [LightningPropertyKey.DURATION]?;
32
+ private [LightningPropertyKey.FADING]?;
30
33
  constructor(handle: jlightning, typeId: LightningTypeId);
31
- protected onDestroy(): HandleDestructor;
34
+ protected onDestroy(): Destructor;
32
35
  static create<T extends Lightning>(this: LightningConstructor<T>, typeId: LightningTypeId, ...parameters: [
33
36
  ...checkVisibility: [boolean] | [],
34
37
  ...sourceAndTarget: [sourceX: number, sourceY: number, targetX: number, targetY: number] | [
@@ -46,6 +49,10 @@ export declare class Lightning extends Handle<jlightning> {
46
49
  target: Unit
47
50
  ]
48
51
  ]): T;
49
- static flash(...parameters: [...parameters: Parameters<(typeof Lightning)["create"]>, duration: number]): void;
52
+ static flash(...parameters: [
53
+ ...parameters: Parameters<(typeof Lightning)["create"]>,
54
+ duration: number,
55
+ fading?: boolean
56
+ ]): void;
50
57
  }
51
58
  export {};