warscript 0.0.1-dev.fd21394 → 0.0.1-dev.fe0aeea

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 (157) 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 +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +8 -0
  8. package/core/types/frame.lua +93 -1
  9. package/core/types/sound.d.ts +17 -24
  10. package/core/types/sound.lua +94 -24
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +18 -1
  13. package/engine/behavior.d.ts +2 -2
  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/apply-unit-behavior.lua +1 -0
  20. package/engine/behaviour/ability/damage.d.ts +36 -11
  21. package/engine/behaviour/ability/damage.lua +90 -32
  22. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  23. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  24. package/engine/behaviour/ability/heal.d.ts +33 -6
  25. package/engine/behaviour/ability/heal.lua +89 -10
  26. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  27. package/engine/behaviour/ability/instant-impact.lua +4 -19
  28. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  29. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  30. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  31. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  32. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  33. package/engine/behaviour/ability/restore-mana.lua +29 -0
  34. package/engine/behaviour/ability.d.ts +20 -4
  35. package/engine/behaviour/ability.lua +111 -38
  36. package/engine/behaviour/unit.d.ts +7 -0
  37. package/engine/behaviour/unit.lua +20 -0
  38. package/engine/buff.d.ts +101 -39
  39. package/engine/buff.lua +458 -203
  40. package/engine/game-map.d.ts +7 -0
  41. package/engine/game-map.lua +32 -0
  42. package/engine/internal/ability.d.ts +16 -13
  43. package/engine/internal/ability.lua +80 -76
  44. package/engine/internal/item/ability.lua +106 -0
  45. package/engine/internal/item+owner.lua +2 -2
  46. package/engine/internal/item.d.ts +2 -2
  47. package/engine/internal/item.lua +56 -25
  48. package/engine/internal/mechanics/ability-duration.lua +1 -1
  49. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  50. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  51. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  52. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  53. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  54. package/engine/internal/object-data/evasion-probability.lua +16 -0
  55. package/engine/internal/unit/ability.d.ts +10 -1
  56. package/engine/internal/unit/ability.lua +36 -14
  57. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  58. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  59. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  60. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  61. package/engine/internal/unit/bonus.d.ts +6 -2
  62. package/engine/internal/unit/bonus.lua +23 -1
  63. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  64. package/engine/internal/unit/ignore-events-items.lua +5 -0
  65. package/engine/internal/unit/item.d.ts +24 -0
  66. package/engine/internal/unit/item.lua +78 -0
  67. package/engine/internal/unit/main-selected.d.ts +13 -0
  68. package/engine/internal/unit/main-selected.lua +51 -0
  69. package/engine/internal/unit+ability.lua +2 -2
  70. package/engine/internal/unit+transport.lua +4 -10
  71. package/engine/internal/unit-missile-launch.lua +24 -5
  72. package/engine/internal/unit.d.ts +31 -10
  73. package/engine/internal/unit.lua +170 -83
  74. package/engine/internal/utility.lua +12 -0
  75. package/engine/lightning.d.ts +12 -5
  76. package/engine/lightning.lua +48 -14
  77. package/engine/local-client.d.ts +7 -2
  78. package/engine/local-client.lua +82 -0
  79. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  80. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  81. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  82. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  83. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  84. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  85. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  86. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  87. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  88. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  89. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  90. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  91. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  92. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  93. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  94. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  95. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  96. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  97. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  98. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  99. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  100. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  101. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  102. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  103. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  104. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  105. package/engine/object-data/entry/ability-type/web.lua +52 -0
  106. package/engine/object-data/entry/ability-type.d.ts +19 -17
  107. package/engine/object-data/entry/ability-type.lua +82 -33
  108. package/engine/object-data/entry/buff-type/applicable.lua +13 -37
  109. package/engine/object-data/entry/buff-type.d.ts +1 -1
  110. package/engine/object-data/entry/buff-type.lua +2 -2
  111. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  112. package/engine/object-data/entry/item-type.d.ts +15 -1
  113. package/engine/object-data/entry/item-type.lua +93 -2
  114. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  115. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  116. package/engine/object-data/entry/sound-preset.lua +140 -0
  117. package/engine/object-data/entry/unit-type.d.ts +8 -1
  118. package/engine/object-data/entry/unit-type.lua +61 -8
  119. package/engine/object-data/entry/upgrade.d.ts +1 -1
  120. package/engine/object-data/entry/upgrade.lua +4 -4
  121. package/engine/object-data/entry.d.ts +16 -14
  122. package/engine/object-data/entry.lua +60 -32
  123. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  124. package/engine/object-field/ability.d.ts +26 -3
  125. package/engine/object-field/ability.lua +54 -1
  126. package/engine/object-field.d.ts +2 -2
  127. package/engine/object-field.lua +4 -0
  128. package/engine/standard/entries/sound-preset.d.ts +10 -0
  129. package/engine/standard/entries/sound-preset.lua +10 -0
  130. package/engine/standard/fields/ability.d.ts +2 -0
  131. package/engine/standard/fields/ability.lua +2 -0
  132. package/engine/unit.d.ts +3 -0
  133. package/engine/unit.lua +3 -0
  134. package/index.d.ts +1 -0
  135. package/index.lua +1 -0
  136. package/lualib_bundle.lua +7 -2
  137. package/net/socket.d.ts +7 -1
  138. package/net/socket.lua +45 -4
  139. package/network.d.ts +1 -0
  140. package/network.lua +3 -2
  141. package/objutil/buff.lua +1 -1
  142. package/objutil/unit.lua +8 -0
  143. package/package.json +2 -2
  144. package/patch-lua.d.ts +0 -0
  145. package/patch-lua.lua +10 -0
  146. package/property.d.ts +55 -0
  147. package/property.lua +374 -0
  148. package/utility/arrays.d.ts +8 -1
  149. package/utility/arrays.lua +34 -3
  150. package/utility/lazy.d.ts +2 -0
  151. package/utility/lazy.lua +14 -0
  152. package/utility/linked-set.d.ts +11 -2
  153. package/utility/linked-set.lua +5 -2
  154. package/utility/reflection.lua +11 -7
  155. package/utility/types.d.ts +1 -0
  156. package/core/mapbounds.d.ts +0 -8
  157. package/core/mapbounds.lua +0 -12
@@ -51,11 +51,14 @@ local ____arrays = require("utility.arrays")
51
51
  local forEach = ____arrays.forEach
52
52
  local ____math = require("math")
53
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
+ local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
54
56
  local match = string.match
55
57
  local ____tostring = _G.tostring
56
58
  local setUnitAnimation = SetUnitAnimation
57
59
  local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
60
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
+ local resetUnitAnimation = ResetUnitAnimation
59
62
  local queueUnitAnimation = QueueUnitAnimation
60
63
  local getUnitIntegerField = BlzGetUnitIntegerField
61
64
  local getUnitRealField = BlzGetUnitRealField
@@ -75,6 +78,7 @@ local setUnitScale = SetUnitScale
75
78
  local setUnitPosition = SetUnitPosition
76
79
  local setUnitTimeScale = SetUnitTimeScale
77
80
  local getHandleId = GetHandleId
81
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
82
  local createUnit = CreateUnit
79
83
  local killUnit = KillUnit
80
84
  local setUnitExploded = SetUnitExploded
@@ -562,17 +566,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
566
  ____exports.Unit:of(unit)
563
567
  )
564
568
  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
569
  for i = 0, unitInventorySize(unit) - 1 do
577
570
  local item = unitItemInSlot(unit, i)
578
571
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +623,15 @@ for ____, player in ipairs(Player.all) do
630
623
  dummies[player] = dummy
631
624
  end
632
625
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
626
+ local counter = (unit[103] or 0) - 1
634
627
  if counter ~= 0 then
635
- unit[102] = counter
628
+ unit[103] = counter
636
629
  return
637
630
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
631
+ unit[103] = nil
632
+ local healthBonus = unit[104]
640
633
  if healthBonus ~= nil then
641
- unit[103] = nil
634
+ unit[104] = nil
642
635
  local handle = unit.handle
643
636
  BlzSetUnitMaxHP(
644
637
  handle,
@@ -646,12 +639,17 @@ local function delayHealthChecksCallback(unit)
646
639
  )
647
640
  end
648
641
  end
642
+ local nextSyncId = 1
643
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
649
644
  ____exports.Unit = __TS__Class()
650
645
  local Unit = ____exports.Unit
651
646
  Unit.name = "Unit"
652
647
  __TS__ClassExtends(Unit, Handle)
653
648
  function Unit.prototype.____constructor(self, handle)
654
649
  Handle.prototype.____constructor(self, handle)
650
+ local ____nextSyncId_0 = nextSyncId
651
+ nextSyncId = ____nextSyncId_0 + 1
652
+ self.syncId = ____nextSyncId_0
655
653
  self._owner = Player:of(getOwningPlayer(handle))
656
654
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
655
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +662,7 @@ function Unit.prototype.____constructor(self, handle)
664
662
  fourCC("Amrf")
665
663
  ))
666
664
  end
665
+ unitBySyncId[self.syncId] = self
667
666
  local ____ = self.abilities
668
667
  end
669
668
  function Unit.prototype.getEvent(self, event, collector)
@@ -682,6 +681,8 @@ function Unit.prototype.getEvent(self, event, collector)
682
681
  end
683
682
  function Unit.prototype.onDestroy(self)
684
683
  local handle = self.handle
684
+ self[107] = getUnitX(handle)
685
+ self[108] = getUnitY(handle)
685
686
  if not self._owner then
686
687
  self._owner = Player:of(getOwningPlayer(handle))
687
688
  end
@@ -749,8 +750,8 @@ function Unit.prototype.addModifier(self, property, modifier)
749
750
  end}
750
751
  end
751
752
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
753
+ local ____combatClassification_1 = combatClassification
754
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
754
755
  end
755
756
  function Unit.prototype.addClassification(self, classification)
756
757
  return unitAddType(self.handle, classification)
@@ -768,13 +769,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
769
  return isUnitInvisible(self.handle, player.handle)
769
770
  end
770
771
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
772
+ local ____temp_2
772
773
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
774
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
774
775
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
776
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
776
777
  end
777
- return ____temp_1
778
+ return ____temp_2
778
779
  end
779
780
  function Unit.prototype.isAllyOf(self, unit)
780
781
  return isUnitAlly(
@@ -797,11 +798,14 @@ function Unit.prototype.playAnimation(self, animation, rarity)
797
798
  setUnitAnimation(self.handle, animation)
798
799
  end
799
800
  end
801
+ function Unit.prototype.resetAnimation(self)
802
+ resetUnitAnimation(self.handle)
803
+ end
800
804
  function Unit.prototype.queueAnimation(self, animation)
801
805
  queueUnitAnimation(self.handle, animation)
802
806
  end
803
807
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
808
+ self[103] = (self[103] or 0) + 1
805
809
  Timer:run(delayHealthChecksCallback, self)
806
810
  end
807
811
  function Unit.prototype.setPosition(self, x, y)
@@ -818,14 +822,14 @@ function Unit.prototype.kill(self)
818
822
  killUnit(self.handle)
819
823
  end
820
824
  function Unit.prototype.revive(self, x, y, doEffect)
821
- local ____ReviveHero_4 = ReviveHero
822
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
823
- local ____doEffect_2 = doEffect
824
- if ____doEffect_2 == nil then
825
- ____doEffect_2 = false
825
+ local ____ReviveHero_5 = ReviveHero
826
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
827
+ local ____doEffect_3 = doEffect
828
+ if ____doEffect_3 == nil then
829
+ ____doEffect_3 = false
826
830
  end
827
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
831
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
832
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
829
833
  end
830
834
  function Unit.prototype.healTarget(self, target, amount)
831
835
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,7 +869,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
865
869
  return UnitDropItemSlot(self.handle, item.handle, slot)
866
870
  end
867
871
  function Unit.prototype.itemInSlot(self, slot)
868
- return Item:of(UnitItemInSlot(self.handle, slot))
872
+ return Item:of(unitItemInSlot(self.handle, slot))
869
873
  end
870
874
  function Unit.prototype.addAbility(self, abilityId)
871
875
  if unitAddAbility(self.handle, abilityId) then
@@ -934,8 +938,15 @@ function Unit.prototype.interruptAttack(self)
934
938
  unitInterruptAttack(self.handle)
935
939
  end
936
940
  function Unit.prototype.interruptCast(self, abilityId)
937
- unitDisableAbility(self.handle, abilityId, true, false)
938
- unitDisableAbility(self.handle, abilityId, false, false)
941
+ local handle = self.handle
942
+ unitDisableAbility(handle, abilityId, true, false)
943
+ Timer:run(
944
+ unitDisableAbility,
945
+ handle,
946
+ abilityId,
947
+ false,
948
+ false
949
+ )
939
950
  end
940
951
  function Unit.prototype.getDistanceTo(self, target)
941
952
  local handle = self.handle
@@ -995,18 +1006,18 @@ function Unit.prototype.unpauseEx(self)
995
1006
  self:decrementStunCounter()
996
1007
  end
997
1008
  function Unit.prototype.incrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 0 then
1009
+ local stunCounter = self[102] or 0
1010
+ if not self[101] or stunCounter >= 0 then
1000
1011
  BlzPauseUnitEx(self.handle, true)
1001
1012
  end
1002
- self[101] = stunCounter + 1
1013
+ self[102] = stunCounter + 1
1003
1014
  end
1004
1015
  function Unit.prototype.decrementStunCounter(self)
1005
- local stunCounter = self[101] or 0
1006
- if not self[100] or stunCounter >= 1 then
1016
+ local stunCounter = self[102] or 0
1017
+ if not self[101] or stunCounter >= 1 then
1007
1018
  BlzPauseUnitEx(self.handle, false)
1008
1019
  end
1009
- self[101] = stunCounter - 1
1020
+ self[102] = stunCounter - 1
1010
1021
  end
1011
1022
  function Unit.create(self, owner, id, x, y, facing, skinId)
1012
1023
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1108,8 +1119,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1108
1119
  )
1109
1120
  return targetCollection
1110
1121
  end
1111
- function Unit.getSelectionOf(self, player)
1112
- targetCollection = {}
1122
+ function Unit.getSelectionOf(self, player, target)
1123
+ if target == nil then
1124
+ target = {}
1125
+ end
1126
+ targetCollection = target
1113
1127
  targetCollectionNextIndex = 1
1114
1128
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1115
1129
  return targetCollection
@@ -1131,6 +1145,9 @@ end
1131
1145
  function Unit.prototype.__tostring(self)
1132
1146
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1133
1147
  end
1148
+ function Unit.getBySyncId(self, syncId)
1149
+ return unitBySyncId[syncId]
1150
+ end
1134
1151
  __TS__SetDescriptor(
1135
1152
  Unit.prototype,
1136
1153
  "_deltas",
@@ -1194,6 +1211,14 @@ __TS__SetDescriptor(
1194
1211
  end},
1195
1212
  true
1196
1213
  )
1214
+ __TS__SetDescriptor(
1215
+ Unit.prototype,
1216
+ "isStunned",
1217
+ {get = function(self)
1218
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1219
+ end},
1220
+ true
1221
+ )
1197
1222
  __TS__SetDescriptor(
1198
1223
  Unit.prototype,
1199
1224
  "combatClassifications",
@@ -1388,17 +1413,17 @@ __TS__SetDescriptor(
1388
1413
  "isTeamGlowVisible",
1389
1414
  {
1390
1415
  get = function(self)
1391
- return not self[105]
1416
+ return not self[106]
1392
1417
  end,
1393
1418
  set = function(self, isTeamGlowVisible)
1394
1419
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1395
- local ____temp_5
1420
+ local ____temp_6
1396
1421
  if not isTeamGlowVisible then
1397
- ____temp_5 = true
1422
+ ____temp_6 = true
1398
1423
  else
1399
- ____temp_5 = nil
1424
+ ____temp_6 = nil
1400
1425
  end
1401
- self[105] = ____temp_5
1426
+ self[106] = ____temp_6
1402
1427
  end
1403
1428
  },
1404
1429
  true
@@ -1408,7 +1433,7 @@ __TS__SetDescriptor(
1408
1433
  "color",
1409
1434
  {set = function(self, color)
1410
1435
  setUnitColor(self.handle, color.handle)
1411
- if self[105] then
1436
+ if self[106] then
1412
1437
  showUnitTeamGlow(self.handle, false)
1413
1438
  end
1414
1439
  end},
@@ -1432,14 +1457,14 @@ __TS__SetDescriptor(
1432
1457
  "maxHealth",
1433
1458
  {
1434
1459
  get = function(self)
1435
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1460
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1436
1461
  end,
1437
1462
  set = function(self, maxHealth)
1438
- if maxHealth < 1 and self[102] ~= nil then
1439
- self[103] = (self[103] or 0) + (1 - maxHealth)
1463
+ if maxHealth < 1 and self[103] ~= nil then
1464
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1440
1465
  maxHealth = 1
1441
1466
  end
1442
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1467
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1443
1468
  end
1444
1469
  },
1445
1470
  true
@@ -1481,10 +1506,10 @@ __TS__SetDescriptor(
1481
1506
  "health",
1482
1507
  {
1483
1508
  get = function(self)
1484
- return GetWidgetLife(self.handle) - (self[104] or 0)
1509
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1485
1510
  end,
1486
1511
  set = function(self, health)
1487
- SetWidgetLife(self.handle, health + (self[104] or 0))
1512
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1488
1513
  end
1489
1514
  },
1490
1515
  true
@@ -1578,7 +1603,7 @@ __TS__SetDescriptor(
1578
1603
  "x",
1579
1604
  {
1580
1605
  get = function(self)
1581
- return getUnitX(self.handle)
1606
+ return self[107] or getUnitX(self.handle)
1582
1607
  end,
1583
1608
  set = function(self, v)
1584
1609
  SetUnitX(self.handle, v)
@@ -1591,7 +1616,7 @@ __TS__SetDescriptor(
1591
1616
  "y",
1592
1617
  {
1593
1618
  get = function(self)
1594
- return getUnitY(self.handle)
1619
+ return self[108] or getUnitY(self.handle)
1595
1620
  end,
1596
1621
  set = function(self, v)
1597
1622
  SetUnitY(self.handle, v)
@@ -1695,17 +1720,17 @@ __TS__SetDescriptor(
1695
1720
  set = function(self, isPaused)
1696
1721
  local handle = self.handle
1697
1722
  if isPaused and not IsUnitPaused(handle) then
1698
- self[100] = true
1699
- for _ = self[101] or 0, -1 do
1723
+ self[101] = true
1724
+ for _ = self[102] or 0, -1 do
1700
1725
  BlzPauseUnitEx(handle, true)
1701
1726
  end
1702
1727
  PauseUnit(handle, true)
1703
1728
  elseif not isPaused and IsUnitPaused(handle) then
1704
1729
  PauseUnit(handle, false)
1705
- for _ = self[101] or 0, -1 do
1730
+ for _ = self[102] or 0, -1 do
1706
1731
  BlzPauseUnitEx(handle, false)
1707
1732
  end
1708
- self[100] = nil
1733
+ self[101] = nil
1709
1734
  end
1710
1735
  end
1711
1736
  },
@@ -2124,25 +2149,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2124
2149
  InitializingEvent,
2125
2150
  function(event)
2126
2151
  local function listener(unit, id)
2127
- local ____GetSpellTargetUnit_result_8
2152
+ local ____GetSpellTargetUnit_result_9
2128
2153
  if GetSpellTargetUnit() then
2129
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2154
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2130
2155
  else
2131
- local ____GetSpellTargetItem_result_7
2156
+ local ____GetSpellTargetItem_result_8
2132
2157
  if GetSpellTargetItem() then
2133
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2158
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2134
2159
  else
2135
- local ____GetSpellTargetDestructable_result_6
2160
+ local ____GetSpellTargetDestructable_result_7
2136
2161
  if GetSpellTargetDestructable() then
2137
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2162
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2138
2163
  else
2139
- ____GetSpellTargetDestructable_result_6 = nil
2164
+ ____GetSpellTargetDestructable_result_7 = nil
2140
2165
  end
2141
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2166
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2142
2167
  end
2143
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2168
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2144
2169
  end
2145
- local target = ____GetSpellTargetUnit_result_8
2170
+ local target = ____GetSpellTargetUnit_result_9
2146
2171
  if target then
2147
2172
  invoke(event, unit, id, target)
2148
2173
  end
@@ -2314,10 +2339,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2314
2339
  ____exports.UnitTriggerEvent,
2315
2340
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2316
2341
  function()
2317
- local unit = ____exports.Unit:of(getOrderedUnit())
2318
- local issuedOrderId = getIssuedOrderId()
2319
- if unit ~= nil and unit.state == 1 then
2320
- return unit, issuedOrderId
2342
+ local handle = getOrderedUnit()
2343
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2344
+ local unit = ____exports.Unit:of(handle)
2345
+ if unit.state == 1 then
2346
+ return unit, getIssuedOrderId()
2347
+ end
2321
2348
  end
2322
2349
  return IgnoreEvent
2323
2350
  end
@@ -2452,6 +2479,7 @@ Unit.onDamage = __TS__New(
2452
2479
  damageType = BlzGetEventDamageType(),
2453
2480
  weaponType = BlzGetEventWeaponType(),
2454
2481
  isAttack = BlzGetEventIsAttack(),
2482
+ originalAmount = GetEventDamage(),
2455
2483
  preventDeath = damageEventPreventDeath
2456
2484
  }
2457
2485
  local evData = setmetatable(
@@ -2468,7 +2496,7 @@ Unit.onDamage = __TS__New(
2468
2496
  invoke(event, source, target, evData)
2469
2497
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2470
2498
  local bonusHealth = math.ceil(evData.amount)
2471
- target[104] = (target[104] or 0) + bonusHealth
2499
+ target[105] = (target[105] or 0) + bonusHealth
2472
2500
  BlzSetUnitMaxHP(
2473
2501
  target.handle,
2474
2502
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2482,7 +2510,7 @@ Unit.onDamage = __TS__New(
2482
2510
  evData[0],
2483
2511
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2484
2512
  )
2485
- target[104] = (target[104] or 0) - bonusHealth
2513
+ target[105] = (target[105] or 0) - bonusHealth
2486
2514
  SetWidgetLife(
2487
2515
  target.handle,
2488
2516
  GetWidgetLife(target.handle) - bonusHealth
@@ -2502,32 +2530,91 @@ Unit.onDamage = __TS__New(
2502
2530
  DestroyTrigger(trigger)
2503
2531
  end
2504
2532
  )
2505
- Unit.onItemDrop = __TS__New(
2533
+ Unit.itemDroppedEvent = __TS__New(
2506
2534
  ____exports.UnitTriggerEvent,
2507
2535
  EVENT_PLAYER_UNIT_DROP_ITEM,
2508
2536
  function()
2509
2537
  local unit = getTriggerUnit()
2510
- if getUnitTypeId(unit) ~= dummyUnitId then
2511
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2538
+ local item = getManipulatedItem()
2539
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2540
+ return ____exports.Unit:of(unit), Item:of(item)
2512
2541
  end
2513
2542
  return IgnoreEvent
2514
2543
  end
2515
2544
  )
2516
- Unit.onItemPickup = __TS__New(
2545
+ Unit.itemPickedUpEvent = __TS__New(
2517
2546
  ____exports.UnitTriggerEvent,
2518
2547
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2519
2548
  function()
2520
2549
  local unit = getTriggerUnit()
2521
- if getUnitTypeId(unit) ~= dummyUnitId then
2522
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2550
+ local item = getManipulatedItem()
2551
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2552
+ return ____exports.Unit:of(unit), Item:of(item)
2523
2553
  end
2524
2554
  return IgnoreEvent
2525
2555
  end
2526
2556
  )
2527
- Unit.onItemUse = __TS__New(
2557
+ Unit.itemUsedEvent = __TS__New(
2528
2558
  ____exports.UnitTriggerEvent,
2529
2559
  EVENT_PLAYER_UNIT_USE_ITEM,
2530
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2560
+ function()
2561
+ local unit = getTriggerUnit()
2562
+ local item = getManipulatedItem()
2563
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2564
+ return ____exports.Unit:of(unit), Item:of(item)
2565
+ end
2566
+ return IgnoreEvent
2567
+ end
2568
+ )
2569
+ Unit.itemStackedEvent = __TS__New(
2570
+ ____exports.UnitTriggerEvent,
2571
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2572
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2573
+ )
2574
+ __TS__ObjectDefineProperty(
2575
+ Unit,
2576
+ "itemUseOrderEvent",
2577
+ {get = function(self)
2578
+ local event = __TS__New(Event)
2579
+ for order = orderId("useslot0"), orderId("useslot5") do
2580
+ local slot = order - orderId("useslot0")
2581
+ local function listener(unit)
2582
+ local item = unit.items[slot + 1]
2583
+ if item ~= nil then
2584
+ invoke(event, unit, item)
2585
+ end
2586
+ end
2587
+ self.onImmediateOrder[order]:addListener(listener)
2588
+ self.onTargetOrder[order]:addListener(listener)
2589
+ self.onPointOrder[order]:addListener(listener)
2590
+ end
2591
+ rawset(self, "itemUseOrderEvent", event)
2592
+ return event
2593
+ end}
2594
+ )
2595
+ __TS__ObjectDefineProperty(
2596
+ Unit,
2597
+ "itemMoveOrderEvent",
2598
+ {get = function(self)
2599
+ local event = __TS__New(Event)
2600
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2601
+ local slotTo = order - orderId("moveslot0")
2602
+ self.onTargetOrder[order]:addListener(function(unit, item)
2603
+ local slotFrom = unit.items:findSlot(item)
2604
+ if slotFrom ~= nil then
2605
+ invoke(
2606
+ event,
2607
+ unit,
2608
+ item,
2609
+ slotFrom,
2610
+ slotTo
2611
+ )
2612
+ end
2613
+ end)
2614
+ end
2615
+ rawset(self, "itemMoveOrderEvent", event)
2616
+ return event
2617
+ end}
2531
2618
  )
2532
2619
  __TS__ObjectDefineProperty(
2533
2620
  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 {};