warscript 0.0.1-dev.bb34489 → 0.0.1-dev.c03154e

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 (105) hide show
  1. package/binaryreader.d.ts +1 -0
  2. package/binaryreader.lua +3 -0
  3. package/core/types/effect.d.ts +13 -3
  4. package/core/types/effect.lua +116 -17
  5. package/core/types/frame.d.ts +8 -0
  6. package/core/types/frame.lua +93 -1
  7. package/core/types/handle.lua +2 -0
  8. package/core/util.d.ts +1 -1
  9. package/core/util.lua +12 -0
  10. package/engine/behavior.d.ts +2 -2
  11. package/engine/behavior.lua +6 -6
  12. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  13. package/engine/behaviour/ability/always-enabled.lua +31 -0
  14. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  15. package/engine/behaviour/ability/damage.d.ts +33 -11
  16. package/engine/behaviour/ability/damage.lua +89 -31
  17. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  18. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  19. package/engine/behaviour/ability/heal.d.ts +33 -6
  20. package/engine/behaviour/ability/heal.lua +89 -10
  21. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  22. package/engine/behaviour/ability/instant-impact.lua +4 -19
  23. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  24. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  25. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  26. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  27. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  28. package/engine/behaviour/ability/restore-mana.lua +29 -0
  29. package/engine/behaviour/ability.d.ts +14 -3
  30. package/engine/behaviour/ability.lua +79 -33
  31. package/engine/behaviour/unit.d.ts +5 -0
  32. package/engine/behaviour/unit.lua +20 -0
  33. package/engine/buff.d.ts +69 -19
  34. package/engine/buff.lua +283 -80
  35. package/engine/game-map.d.ts +7 -0
  36. package/engine/game-map.lua +32 -0
  37. package/engine/internal/ability.d.ts +16 -13
  38. package/engine/internal/ability.lua +80 -76
  39. package/engine/internal/item/ability.lua +106 -0
  40. package/engine/internal/item+owner.lua +2 -2
  41. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  42. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  43. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  44. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  45. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  46. package/engine/internal/object-data/evasion-probability.lua +16 -0
  47. package/engine/internal/unit/ability.d.ts +10 -1
  48. package/engine/internal/unit/ability.lua +36 -14
  49. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  50. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  51. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  52. package/engine/internal/unit/add-item-to-slot.lua +50 -0
  53. package/engine/internal/unit/bonus.d.ts +6 -2
  54. package/engine/internal/unit/bonus.lua +23 -1
  55. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  56. package/engine/internal/unit/ignore-events-items.lua +5 -0
  57. package/engine/internal/unit/item.d.ts +24 -0
  58. package/engine/internal/unit/item.lua +78 -0
  59. package/engine/internal/unit/main-selected.d.ts +13 -0
  60. package/engine/internal/unit/main-selected.lua +51 -0
  61. package/engine/internal/unit+ability.lua +2 -2
  62. package/engine/internal/unit+transport.lua +4 -10
  63. package/engine/internal/unit-missile-launch.lua +24 -5
  64. package/engine/internal/unit.d.ts +26 -10
  65. package/engine/internal/unit.lua +179 -89
  66. package/engine/internal/utility.lua +12 -0
  67. package/engine/lightning.d.ts +8 -2
  68. package/engine/lightning.lua +27 -2
  69. package/engine/local-client.d.ts +7 -2
  70. package/engine/local-client.lua +82 -0
  71. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  72. package/engine/object-data/entry/ability-type.lua +8 -12
  73. package/engine/object-data/entry/item-type.d.ts +14 -0
  74. package/engine/object-data/entry/item-type.lua +91 -0
  75. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  76. package/engine/object-field/ability.d.ts +26 -3
  77. package/engine/object-field/ability.lua +54 -1
  78. package/engine/object-field.d.ts +2 -2
  79. package/engine/object-field.lua +4 -0
  80. package/engine/standard/fields/ability.d.ts +2 -0
  81. package/engine/standard/fields/ability.lua +2 -0
  82. package/engine/unit.d.ts +3 -0
  83. package/engine/unit.lua +3 -0
  84. package/index.d.ts +1 -0
  85. package/index.lua +1 -0
  86. package/lualib_bundle.lua +7 -2
  87. package/net/socket.d.ts +7 -1
  88. package/net/socket.lua +45 -4
  89. package/network.d.ts +1 -0
  90. package/network.lua +3 -2
  91. package/objutil/buff.lua +1 -1
  92. package/package.json +2 -2
  93. package/patch-lua.d.ts +0 -0
  94. package/patch-lua.lua +10 -0
  95. package/property.d.ts +55 -0
  96. package/property.lua +374 -0
  97. package/utility/arrays.d.ts +8 -1
  98. package/utility/arrays.lua +34 -3
  99. package/utility/lazy.d.ts +2 -0
  100. package/utility/lazy.lua +14 -0
  101. package/utility/linked-set.d.ts +11 -2
  102. package/utility/linked-set.lua +5 -2
  103. package/utility/types.d.ts +1 -0
  104. package/core/mapbounds.d.ts +0 -8
  105. package/core/mapbounds.lua +0 -12
@@ -6,6 +6,7 @@ local __TS__New = ____lualib.__TS__New
6
6
  local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
+ local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
9
10
  local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
10
11
  local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
11
12
  local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
@@ -50,6 +51,8 @@ local ____arrays = require("utility.arrays")
50
51
  local forEach = ____arrays.forEach
51
52
  local ____math = require("math")
52
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
+ local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
53
56
  local match = string.match
54
57
  local ____tostring = _G.tostring
55
58
  local setUnitAnimation = SetUnitAnimation
@@ -74,6 +77,7 @@ local setUnitScale = SetUnitScale
74
77
  local setUnitPosition = SetUnitPosition
75
78
  local setUnitTimeScale = SetUnitTimeScale
76
79
  local getHandleId = GetHandleId
80
+ local getUnitCurrentOrder = GetUnitCurrentOrder
77
81
  local createUnit = CreateUnit
78
82
  local killUnit = KillUnit
79
83
  local setUnitExploded = SetUnitExploded
@@ -289,7 +293,6 @@ local function dispatch(event, idGetter, argsGetter)
289
293
  return event[id]
290
294
  end
291
295
  if not initialized then
292
- local invoke = Event.invoke
293
296
  event:addListener(function(...)
294
297
  local id = idGetter(...)
295
298
  local dispatched = rawget(self, id)
@@ -327,7 +330,6 @@ local function dispatchAbility(event)
327
330
  return event[id]
328
331
  end
329
332
  if not initialized then
330
- local invoke = Event.invoke
331
333
  event:addListener(function(unit, ability, ...)
332
334
  local dispatched = rawget(self, ability.typeId)
333
335
  if dispatched ~= nil then
@@ -563,17 +565,6 @@ local function retrieveAbility(unit, ability, abilityId)
563
565
  ____exports.Unit:of(unit)
564
566
  )
565
567
  end
566
- if not unitAddAbility(unit, abilityId) then
567
- if getUnitAbility(unit, abilityId) == ability then
568
- return UnitAbility:of(
569
- ability,
570
- abilityId,
571
- ____exports.Unit:of(unit)
572
- )
573
- end
574
- else
575
- unitRemoveAbility(unit, abilityId)
576
- end
577
568
  for i = 0, unitInventorySize(unit) - 1 do
578
569
  local item = unitItemInSlot(unit, i)
579
570
  if getItemAbility(item, abilityId) == ability then
@@ -631,15 +622,15 @@ for ____, player in ipairs(Player.all) do
631
622
  dummies[player] = dummy
632
623
  end
633
624
  local function delayHealthChecksCallback(unit)
634
- local counter = (unit[102] or 0) - 1
625
+ local counter = (unit[103] or 0) - 1
635
626
  if counter ~= 0 then
636
- unit[102] = counter
627
+ unit[103] = counter
637
628
  return
638
629
  end
639
- unit[102] = nil
640
- local healthBonus = unit[103]
630
+ unit[103] = nil
631
+ local healthBonus = unit[104]
641
632
  if healthBonus ~= nil then
642
- unit[103] = nil
633
+ unit[104] = nil
643
634
  local handle = unit.handle
644
635
  BlzSetUnitMaxHP(
645
636
  handle,
@@ -647,12 +638,17 @@ local function delayHealthChecksCallback(unit)
647
638
  )
648
639
  end
649
640
  end
641
+ local nextSyncId = 1
642
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
650
643
  ____exports.Unit = __TS__Class()
651
644
  local Unit = ____exports.Unit
652
645
  Unit.name = "Unit"
653
646
  __TS__ClassExtends(Unit, Handle)
654
647
  function Unit.prototype.____constructor(self, handle)
655
648
  Handle.prototype.____constructor(self, handle)
649
+ local ____nextSyncId_0 = nextSyncId
650
+ nextSyncId = ____nextSyncId_0 + 1
651
+ self.syncId = ____nextSyncId_0
656
652
  self._owner = Player:of(getOwningPlayer(handle))
657
653
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
658
654
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -665,6 +661,7 @@ function Unit.prototype.____constructor(self, handle)
665
661
  fourCC("Amrf")
666
662
  ))
667
663
  end
664
+ unitBySyncId[self.syncId] = self
668
665
  local ____ = self.abilities
669
666
  end
670
667
  function Unit.prototype.getEvent(self, event, collector)
@@ -686,6 +683,11 @@ function Unit.prototype.onDestroy(self)
686
683
  if not self._owner then
687
684
  self._owner = Player:of(getOwningPlayer(handle))
688
685
  end
686
+ local abilities = self.abilities
687
+ for ____, ability in ipairs(abilities) do
688
+ ability:destroy()
689
+ end
690
+ __TS__ArraySetLength(abilities, 0)
689
691
  for ____, player in ipairs(Player.all) do
690
692
  if self:isSelected(player) then
691
693
  Event.invoke(____exports.Unit.onDeselect, self, player)
@@ -700,6 +702,10 @@ function Unit.prototype.onDestroy(self)
700
702
  if eventsToDestroy ~= nil then
701
703
  forEach(eventsToDestroy, "destroy")
702
704
  end
705
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
706
+ unitRemoveAbility(handle, leaveDetectAbilityId)
707
+ removeUnit(handle)
708
+ end
703
709
  return Handle.prototype.onDestroy(self)
704
710
  end
705
711
  function Unit.prototype.addAttackHandler(self, condition, action)
@@ -741,8 +747,8 @@ function Unit.prototype.addModifier(self, property, modifier)
741
747
  end}
742
748
  end
743
749
  function Unit.prototype.hasCombatClassification(self, combatClassification)
744
- local ____combatClassification_0 = combatClassification
745
- 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
746
752
  end
747
753
  function Unit.prototype.addClassification(self, classification)
748
754
  return unitAddType(self.handle, classification)
@@ -760,13 +766,13 @@ function Unit.prototype.isInvisibleTo(self, player)
760
766
  return isUnitInvisible(self.handle, player.handle)
761
767
  end
762
768
  function Unit.prototype.isInRangeOf(self, x, y, range)
763
- local ____temp_1
769
+ local ____temp_2
764
770
  if type(x) == "number" then
765
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
771
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
766
772
  else
767
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
773
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
768
774
  end
769
- return ____temp_1
775
+ return ____temp_2
770
776
  end
771
777
  function Unit.prototype.isAllyOf(self, unit)
772
778
  return isUnitAlly(
@@ -793,7 +799,7 @@ function Unit.prototype.queueAnimation(self, animation)
793
799
  queueUnitAnimation(self.handle, animation)
794
800
  end
795
801
  function Unit.prototype.delayHealthChecks(self)
796
- self[102] = (self[102] or 0) + 1
802
+ self[103] = (self[103] or 0) + 1
797
803
  Timer:run(delayHealthChecksCallback, self)
798
804
  end
799
805
  function Unit.prototype.setPosition(self, x, y)
@@ -810,14 +816,14 @@ function Unit.prototype.kill(self)
810
816
  killUnit(self.handle)
811
817
  end
812
818
  function Unit.prototype.revive(self, x, y, doEffect)
813
- local ____ReviveHero_4 = ReviveHero
814
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
815
- local ____doEffect_2 = doEffect
816
- if ____doEffect_2 == nil then
817
- ____doEffect_2 = false
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
818
824
  end
819
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
820
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
825
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
826
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
821
827
  end
822
828
  function Unit.prototype.healTarget(self, target, amount)
823
829
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -857,7 +863,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
857
863
  return UnitDropItemSlot(self.handle, item.handle, slot)
858
864
  end
859
865
  function Unit.prototype.itemInSlot(self, slot)
860
- return Item:of(UnitItemInSlot(self.handle, slot))
866
+ return Item:of(unitItemInSlot(self.handle, slot))
861
867
  end
862
868
  function Unit.prototype.addAbility(self, abilityId)
863
869
  if unitAddAbility(self.handle, abilityId) then
@@ -926,8 +932,15 @@ function Unit.prototype.interruptAttack(self)
926
932
  unitInterruptAttack(self.handle)
927
933
  end
928
934
  function Unit.prototype.interruptCast(self, abilityId)
929
- unitDisableAbility(self.handle, abilityId, true, false)
930
- 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
+ )
931
944
  end
932
945
  function Unit.prototype.getDistanceTo(self, target)
933
946
  local handle = self.handle
@@ -987,18 +1000,18 @@ function Unit.prototype.unpauseEx(self)
987
1000
  self:decrementStunCounter()
988
1001
  end
989
1002
  function Unit.prototype.incrementStunCounter(self)
990
- local stunCounter = self[101] or 0
991
- if not self[100] or stunCounter >= 0 then
1003
+ local stunCounter = self[102] or 0
1004
+ if not self[101] or stunCounter >= 0 then
992
1005
  BlzPauseUnitEx(self.handle, true)
993
1006
  end
994
- self[101] = stunCounter + 1
1007
+ self[102] = stunCounter + 1
995
1008
  end
996
1009
  function Unit.prototype.decrementStunCounter(self)
997
- local stunCounter = self[101] or 0
998
- if not self[100] or stunCounter >= 1 then
1010
+ local stunCounter = self[102] or 0
1011
+ if not self[101] or stunCounter >= 1 then
999
1012
  BlzPauseUnitEx(self.handle, false)
1000
1013
  end
1001
- self[101] = stunCounter - 1
1014
+ self[102] = stunCounter - 1
1002
1015
  end
1003
1016
  function Unit.create(self, owner, id, x, y, facing, skinId)
1004
1017
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1100,8 +1113,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1100
1113
  )
1101
1114
  return targetCollection
1102
1115
  end
1103
- function Unit.getSelectionOf(self, player)
1104
- targetCollection = {}
1116
+ function Unit.getSelectionOf(self, player, target)
1117
+ if target == nil then
1118
+ target = {}
1119
+ end
1120
+ targetCollection = target
1105
1121
  targetCollectionNextIndex = 1
1106
1122
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1107
1123
  return targetCollection
@@ -1123,6 +1139,9 @@ end
1123
1139
  function Unit.prototype.__tostring(self)
1124
1140
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1125
1141
  end
1142
+ function Unit.getBySyncId(self, syncId)
1143
+ return unitBySyncId[syncId]
1144
+ end
1126
1145
  __TS__SetDescriptor(
1127
1146
  Unit.prototype,
1128
1147
  "_deltas",
@@ -1186,6 +1205,14 @@ __TS__SetDescriptor(
1186
1205
  end},
1187
1206
  true
1188
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
+ )
1189
1216
  __TS__SetDescriptor(
1190
1217
  Unit.prototype,
1191
1218
  "combatClassifications",
@@ -1380,17 +1407,17 @@ __TS__SetDescriptor(
1380
1407
  "isTeamGlowVisible",
1381
1408
  {
1382
1409
  get = function(self)
1383
- return not self[105]
1410
+ return not self[106]
1384
1411
  end,
1385
1412
  set = function(self, isTeamGlowVisible)
1386
1413
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1387
- local ____temp_5
1414
+ local ____temp_6
1388
1415
  if not isTeamGlowVisible then
1389
- ____temp_5 = true
1416
+ ____temp_6 = true
1390
1417
  else
1391
- ____temp_5 = nil
1418
+ ____temp_6 = nil
1392
1419
  end
1393
- self[105] = ____temp_5
1420
+ self[106] = ____temp_6
1394
1421
  end
1395
1422
  },
1396
1423
  true
@@ -1400,7 +1427,7 @@ __TS__SetDescriptor(
1400
1427
  "color",
1401
1428
  {set = function(self, color)
1402
1429
  setUnitColor(self.handle, color.handle)
1403
- if self[105] then
1430
+ if self[106] then
1404
1431
  showUnitTeamGlow(self.handle, false)
1405
1432
  end
1406
1433
  end},
@@ -1424,14 +1451,14 @@ __TS__SetDescriptor(
1424
1451
  "maxHealth",
1425
1452
  {
1426
1453
  get = function(self)
1427
- 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)
1428
1455
  end,
1429
1456
  set = function(self, maxHealth)
1430
- if maxHealth < 1 and self[102] ~= nil then
1431
- 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)
1432
1459
  maxHealth = 1
1433
1460
  end
1434
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1461
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1435
1462
  end
1436
1463
  },
1437
1464
  true
@@ -1473,10 +1500,10 @@ __TS__SetDescriptor(
1473
1500
  "health",
1474
1501
  {
1475
1502
  get = function(self)
1476
- return GetWidgetLife(self.handle) - (self[104] or 0)
1503
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1477
1504
  end,
1478
1505
  set = function(self, health)
1479
- SetWidgetLife(self.handle, health + (self[104] or 0))
1506
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1480
1507
  end
1481
1508
  },
1482
1509
  true
@@ -1687,17 +1714,17 @@ __TS__SetDescriptor(
1687
1714
  set = function(self, isPaused)
1688
1715
  local handle = self.handle
1689
1716
  if isPaused and not IsUnitPaused(handle) then
1690
- self[100] = true
1691
- for _ = self[101] or 0, -1 do
1717
+ self[101] = true
1718
+ for _ = self[102] or 0, -1 do
1692
1719
  BlzPauseUnitEx(handle, true)
1693
1720
  end
1694
1721
  PauseUnit(handle, true)
1695
1722
  elseif not isPaused and IsUnitPaused(handle) then
1696
1723
  PauseUnit(handle, false)
1697
- for _ = self[101] or 0, -1 do
1724
+ for _ = self[102] or 0, -1 do
1698
1725
  BlzPauseUnitEx(handle, false)
1699
1726
  end
1700
- self[100] = nil
1727
+ self[101] = nil
1701
1728
  end
1702
1729
  end
1703
1730
  },
@@ -2054,7 +2081,6 @@ Unit.onDecay = __TS__New(
2054
2081
  Unit.onResurrect = __TS__New(
2055
2082
  InitializingEvent,
2056
2083
  function(event)
2057
- local invoke = Event.invoke
2058
2084
  local dead = setmetatable({}, {__mode = "k"})
2059
2085
  ____exports.Unit.deathEvent:addListener(function(unit)
2060
2086
  dead[unit] = true
@@ -2070,10 +2096,15 @@ Unit.onResurrect = __TS__New(
2070
2096
  Unit.morphEvent = __TS__New(
2071
2097
  InitializingEvent,
2072
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
2073
2105
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2074
2106
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2075
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2076
- Timer:run(Event.invoke, event, unit)
2107
+ Timer:run(ifNotLeft, unit)
2077
2108
  end
2078
2109
  end)
2079
2110
  end
@@ -2111,27 +2142,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2111
2142
  Unit.onTargetCast = dispatchId(__TS__New(
2112
2143
  InitializingEvent,
2113
2144
  function(event)
2114
- local invoke = Event.invoke
2115
2145
  local function listener(unit, id)
2116
- local ____GetSpellTargetUnit_result_8
2146
+ local ____GetSpellTargetUnit_result_9
2117
2147
  if GetSpellTargetUnit() then
2118
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2148
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2119
2149
  else
2120
- local ____GetSpellTargetItem_result_7
2150
+ local ____GetSpellTargetItem_result_8
2121
2151
  if GetSpellTargetItem() then
2122
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2152
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2123
2153
  else
2124
- local ____GetSpellTargetDestructable_result_6
2154
+ local ____GetSpellTargetDestructable_result_7
2125
2155
  if GetSpellTargetDestructable() then
2126
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2156
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2127
2157
  else
2128
- ____GetSpellTargetDestructable_result_6 = nil
2158
+ ____GetSpellTargetDestructable_result_7 = nil
2129
2159
  end
2130
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2160
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2131
2161
  end
2132
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2162
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2133
2163
  end
2134
- local target = ____GetSpellTargetUnit_result_8
2164
+ local target = ____GetSpellTargetUnit_result_9
2135
2165
  if target then
2136
2166
  invoke(event, unit, id, target)
2137
2167
  end
@@ -2303,10 +2333,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2303
2333
  ____exports.UnitTriggerEvent,
2304
2334
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2305
2335
  function()
2306
- local unit = ____exports.Unit:of(getOrderedUnit())
2307
- local issuedOrderId = getIssuedOrderId()
2308
- if unit ~= nil and unit.state == 1 then
2309
- 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
2310
2342
  end
2311
2343
  return IgnoreEvent
2312
2344
  end
@@ -2328,7 +2360,6 @@ Unit.autoAttackStartEvent = __TS__New(
2328
2360
  )
2329
2361
  Unit.onDamaging = (function()
2330
2362
  local event = __TS__New(Event)
2331
- local invoke = Event.invoke
2332
2363
  local trigger = CreateTrigger()
2333
2364
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2334
2365
  TriggerAddCondition(
@@ -2427,7 +2458,6 @@ end)()
2427
2458
  Unit.onDamage = __TS__New(
2428
2459
  InitializingEvent,
2429
2460
  function(event)
2430
- local invoke = Event.invoke
2431
2461
  local trigger = CreateTrigger()
2432
2462
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2433
2463
  TriggerAddCondition(
@@ -2443,6 +2473,7 @@ Unit.onDamage = __TS__New(
2443
2473
  damageType = BlzGetEventDamageType(),
2444
2474
  weaponType = BlzGetEventWeaponType(),
2445
2475
  isAttack = BlzGetEventIsAttack(),
2476
+ originalAmount = GetEventDamage(),
2446
2477
  preventDeath = damageEventPreventDeath
2447
2478
  }
2448
2479
  local evData = setmetatable(
@@ -2459,7 +2490,7 @@ Unit.onDamage = __TS__New(
2459
2490
  invoke(event, source, target, evData)
2460
2491
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2461
2492
  local bonusHealth = math.ceil(evData.amount)
2462
- target[104] = (target[104] or 0) + bonusHealth
2493
+ target[105] = (target[105] or 0) + bonusHealth
2463
2494
  BlzSetUnitMaxHP(
2464
2495
  target.handle,
2465
2496
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2473,7 +2504,7 @@ Unit.onDamage = __TS__New(
2473
2504
  evData[0],
2474
2505
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2475
2506
  )
2476
- target[104] = (target[104] or 0) - bonusHealth
2507
+ target[105] = (target[105] or 0) - bonusHealth
2477
2508
  SetWidgetLife(
2478
2509
  target.handle,
2479
2510
  GetWidgetLife(target.handle) - bonusHealth
@@ -2493,32 +2524,91 @@ Unit.onDamage = __TS__New(
2493
2524
  DestroyTrigger(trigger)
2494
2525
  end
2495
2526
  )
2496
- Unit.onItemDrop = __TS__New(
2527
+ Unit.itemDroppedEvent = __TS__New(
2497
2528
  ____exports.UnitTriggerEvent,
2498
2529
  EVENT_PLAYER_UNIT_DROP_ITEM,
2499
2530
  function()
2500
2531
  local unit = getTriggerUnit()
2501
- if getUnitTypeId(unit) ~= dummyUnitId then
2502
- 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)
2503
2535
  end
2504
2536
  return IgnoreEvent
2505
2537
  end
2506
2538
  )
2507
- Unit.onItemPickup = __TS__New(
2539
+ Unit.itemPickedUpEvent = __TS__New(
2508
2540
  ____exports.UnitTriggerEvent,
2509
2541
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2510
2542
  function()
2511
2543
  local unit = getTriggerUnit()
2512
- if getUnitTypeId(unit) ~= dummyUnitId then
2513
- 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)
2514
2547
  end
2515
2548
  return IgnoreEvent
2516
2549
  end
2517
2550
  )
2518
- Unit.onItemUse = __TS__New(
2551
+ Unit.itemUsedEvent = __TS__New(
2519
2552
  ____exports.UnitTriggerEvent,
2520
2553
  EVENT_PLAYER_UNIT_USE_ITEM,
2521
- 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}
2522
2612
  )
2523
2613
  __TS__ObjectDefineProperty(
2524
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
@@ -12,7 +12,8 @@ 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
19
  export declare class Lightning extends Handle<jlightning> {
@@ -27,6 +28,7 @@ export declare class Lightning extends Handle<jlightning> {
27
28
  private [LightningPropertyKey.TARGET_Y]?;
28
29
  private [LightningPropertyKey.TARGET_Z]?;
29
30
  private [LightningPropertyKey.DURATION]?;
31
+ private [LightningPropertyKey.FADING]?;
30
32
  constructor(handle: jlightning, typeId: LightningTypeId);
31
33
  protected onDestroy(): HandleDestructor;
32
34
  static create<T extends Lightning>(this: LightningConstructor<T>, typeId: LightningTypeId, ...parameters: [
@@ -46,6 +48,10 @@ export declare class Lightning extends Handle<jlightning> {
46
48
  target: Unit
47
49
  ]
48
50
  ]): T;
49
- static flash(...parameters: [...parameters: Parameters<(typeof Lightning)["create"]>, duration: number]): void;
51
+ static flash(...parameters: [
52
+ ...parameters: Parameters<(typeof Lightning)["create"]>,
53
+ duration: number,
54
+ fading?: boolean
55
+ ]): void;
50
56
  }
51
57
  export {};
@@ -27,6 +27,11 @@ local getUnitZ = BlzGetUnitZ
27
27
  local getUnitFlyHeight = GetUnitFlyHeight
28
28
  local getLocationZ = GetLocationZ
29
29
  local moveLocation = MoveLocation
30
+ local getLightningColorA = GetLightningColorA
31
+ local getLightningColorR = GetLightningColorR
32
+ local getLightningColorG = GetLightningColorG
33
+ local getLightningColorB = GetLightningColorB
34
+ local setLightningColor = SetLightningColor
30
35
  local location = Location(0, 0)
31
36
  local unitToUnitLightnings = setmetatable({}, {__mode = "k"})
32
37
  local unitToPointLightnings = setmetatable({}, {__mode = "k"})
@@ -225,9 +230,19 @@ function Lightning.create(self, typeId, checkVisibility, sourceXOrSourceUnit, so
225
230
  return lightning
226
231
  end
227
232
  function Lightning.flash(self, ...)
228
- local parametersToForwardCount = select("#", ...) - 1
233
+ local parameterOrDuration, durationOrFading = select(-2, ...)
234
+ local hasFading = ____type(durationOrFading) ~= "number"
235
+ local parametersToForwardCount = select("#", ...) - (hasFading and 2 or 1)
229
236
  local lightning = forwardByN[parametersToForwardCount](____exports.Lightning.create, self, ...)
230
- local duration = select(-1, ...)
237
+ local duration
238
+ if hasFading then
239
+ duration = parameterOrDuration
240
+ if durationOrFading then
241
+ lightning[110] = true
242
+ end
243
+ else
244
+ duration = durationOrFading
245
+ end
231
246
  lightning[109] = duration
232
247
  temporaryLightningsCount = temporaryLightningsCount + 1
233
248
  temporaryLightnings[temporaryLightningsCount] = lightning
@@ -295,6 +310,16 @@ Timer.onPeriod[UPDATE_PERIOD]:addListener(function()
295
310
  temporaryLightnings[temporaryLightningsCount] = nil
296
311
  temporaryLightningsCount = temporaryLightningsCount - 1
297
312
  else
313
+ if lightning[110] then
314
+ local handle = lightning.handle
315
+ setLightningColor(
316
+ handle,
317
+ getLightningColorR(handle),
318
+ getLightningColorG(handle),
319
+ getLightningColorB(handle),
320
+ getLightningColorA(handle) * (1 - UPDATE_PERIOD / duration)
321
+ )
322
+ end
298
323
  lightning[109] = duration - UPDATE_PERIOD
299
324
  i = i + 1
300
325
  end