warscript 0.0.1-dev.820013f → 0.0.1-dev.833c02f

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 (158) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  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 +3 -0
  8. package/core/types/frame.lua +59 -0
  9. package/core/types/sound.d.ts +17 -24
  10. package/core/types/sound.lua +99 -24
  11. package/core/types/timer.d.ts +6 -7
  12. package/core/types/timer.lua +18 -21
  13. package/core/util.d.ts +1 -1
  14. package/core/util.lua +12 -1
  15. package/decl/native.d.ts +840 -786
  16. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  17. package/engine/behaviour/ability/always-enabled.lua +31 -0
  18. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  19. package/engine/behaviour/ability/apply-buff.lua +32 -0
  20. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  21. package/engine/behaviour/ability/damage.d.ts +9 -3
  22. package/engine/behaviour/ability/damage.lua +26 -38
  23. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  24. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  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.d.ts +20 -4
  32. package/engine/behaviour/ability.lua +111 -38
  33. package/engine/behaviour/unit.d.ts +2 -0
  34. package/engine/buff.d.ts +62 -42
  35. package/engine/buff.lua +312 -234
  36. package/engine/internal/ability.d.ts +15 -2
  37. package/engine/internal/ability.lua +84 -4
  38. package/engine/internal/item/ability.lua +106 -0
  39. package/engine/internal/item.d.ts +4 -3
  40. package/engine/internal/item.lua +56 -25
  41. package/engine/internal/mechanics/ability-duration.lua +1 -1
  42. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  43. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  44. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  45. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  46. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  47. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  48. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  49. package/engine/internal/object-data/evasion-probability.lua +16 -0
  50. package/engine/internal/unit/ability.d.ts +10 -1
  51. package/engine/internal/unit/ability.lua +36 -14
  52. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  53. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  54. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  55. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  56. package/engine/internal/unit/bonus.d.ts +2 -0
  57. package/engine/internal/unit/bonus.lua +17 -0
  58. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  59. package/engine/internal/unit/ignore-events-items.lua +5 -0
  60. package/engine/internal/unit/item.d.ts +1 -0
  61. package/engine/internal/unit/item.lua +8 -4
  62. package/engine/internal/unit/main-selected.d.ts +6 -0
  63. package/engine/internal/unit/main-selected.lua +12 -1
  64. package/engine/internal/unit+damage.d.ts +2 -11
  65. package/engine/internal/unit+damage.lua +10 -14
  66. package/engine/internal/unit+spellSteal.lua +1 -2
  67. package/engine/internal/unit.d.ts +27 -3
  68. package/engine/internal/unit.lua +181 -59
  69. package/engine/internal/utility.lua +12 -0
  70. package/engine/lightning.d.ts +12 -5
  71. package/engine/lightning.lua +48 -14
  72. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  73. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  74. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  75. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  76. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  77. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  78. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  79. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  80. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  81. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  82. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  83. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  84. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  85. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  86. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  87. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  88. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  89. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  90. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  91. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  92. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  93. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  94. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  95. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  96. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  97. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  98. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  99. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  100. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  101. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  102. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  103. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  104. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  105. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  106. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  107. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  108. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  109. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  110. package/engine/object-data/entry/ability-type/web.lua +52 -0
  111. package/engine/object-data/entry/ability-type.d.ts +19 -17
  112. package/engine/object-data/entry/ability-type.lua +89 -33
  113. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  114. package/engine/object-data/entry/buff-type.d.ts +6 -12
  115. package/engine/object-data/entry/buff-type.lua +13 -29
  116. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  117. package/engine/object-data/entry/item-type.d.ts +3 -1
  118. package/engine/object-data/entry/item-type.lua +15 -2
  119. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  120. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  121. package/engine/object-data/entry/sound-preset.lua +140 -0
  122. package/engine/object-data/entry/unit-type.d.ts +10 -3
  123. package/engine/object-data/entry/unit-type.lua +155 -92
  124. package/engine/object-data/entry/upgrade.d.ts +1 -1
  125. package/engine/object-data/entry/upgrade.lua +4 -4
  126. package/engine/object-data/entry.d.ts +16 -14
  127. package/engine/object-data/entry.lua +60 -32
  128. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  129. package/engine/object-field/ability.d.ts +10 -4
  130. package/engine/object-field/ability.lua +3 -0
  131. package/engine/object-field/unit.d.ts +46 -3
  132. package/engine/object-field/unit.lua +173 -7
  133. package/engine/object-field.d.ts +11 -3
  134. package/engine/object-field.lua +162 -76
  135. package/engine/standard/entries/buff-type.d.ts +3 -0
  136. package/engine/standard/entries/buff-type.lua +3 -0
  137. package/engine/standard/entries/sound-preset.d.ts +10 -0
  138. package/engine/standard/entries/sound-preset.lua +10 -0
  139. package/engine/standard/fields/ability.d.ts +2 -0
  140. package/engine/standard/fields/ability.lua +2 -0
  141. package/engine/unit.d.ts +1 -0
  142. package/engine/unit.lua +1 -0
  143. package/objutil/buff.lua +1 -2
  144. package/objutil/unit.lua +8 -0
  145. package/package.json +2 -2
  146. package/utility/arrays.d.ts +9 -1
  147. package/utility/arrays.lua +37 -3
  148. package/utility/functions.d.ts +1 -0
  149. package/utility/functions.lua +1 -0
  150. package/utility/lazy.d.ts +2 -0
  151. package/utility/lazy.lua +14 -0
  152. package/utility/linked-set.d.ts +1 -0
  153. package/utility/linked-set.lua +3 -0
  154. package/utility/lua-maps.d.ts +3 -0
  155. package/utility/lua-maps.lua +16 -0
  156. package/utility/lua-sets.d.ts +1 -0
  157. package/utility/lua-sets.lua +3 -0
  158. package/utility/reflection.lua +11 -7
@@ -51,12 +51,19 @@ 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
56
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
59
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
60
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
+ local ____attributes = require("attributes")
62
+ local isAttribute = ____attributes.isAttribute
54
63
  local match = string.match
55
64
  local ____tostring = _G.tostring
56
65
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
66
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
67
  local getUnitIntegerField = BlzGetUnitIntegerField
61
68
  local getUnitRealField = BlzGetUnitRealField
62
69
  local getHeroStr = GetHeroStr
@@ -75,9 +82,9 @@ local setUnitScale = SetUnitScale
75
82
  local setUnitPosition = SetUnitPosition
76
83
  local setUnitTimeScale = SetUnitTimeScale
77
84
  local getHandleId = GetHandleId
85
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
86
  local createUnit = CreateUnit
79
87
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
88
  local removeUnit = RemoveUnit
82
89
  local getUnitTypeId = GetUnitTypeId
83
90
  local isHeroUnitId = IsHeroUnitId
@@ -93,8 +100,6 @@ local getSpellTargetItem = GetSpellTargetItem
93
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
101
  local isUnitInRangeXY = IsUnitInRangeXY
95
102
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -125,8 +130,6 @@ local isUnitType = IsUnitType
125
130
  local isUnitAlly = IsUnitAlly
126
131
  local isUnitEnemy = IsUnitEnemy
127
132
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
133
  ____exports.UnitClassification = {}
131
134
  local UnitClassification = ____exports.UnitClassification
132
135
  do
@@ -136,6 +139,7 @@ do
136
139
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
140
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
141
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
142
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
143
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
144
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
145
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -354,7 +358,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
358
  rawset(self, 1 + i, (select(i, ...)))
355
359
  end
356
360
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
361
+ local damageSetters = {
362
+ amount = BlzSetEventDamage,
363
+ attackType = function(attackType)
364
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
365
+ end,
366
+ damageType = BlzSetEventDamageType,
367
+ weaponType = BlzSetEventWeaponType
368
+ }
358
369
  local jlimitopByOperator = {
359
370
  [0] = LESS_THAN_OR_EQUAL,
360
371
  [1] = LESS_THAN_OR_EQUAL,
@@ -562,17 +573,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
573
  ____exports.Unit:of(unit)
563
574
  )
564
575
  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
576
  for i = 0, unitInventorySize(unit) - 1 do
577
577
  local item = unitItemInSlot(unit, i)
578
578
  if getItemAbility(item, abilityId) == ability then
@@ -647,7 +647,8 @@ local function delayHealthChecksCallback(unit)
647
647
  end
648
648
  end
649
649
  local nextSyncId = 1
650
- local unitBySyncId = setmetatable({}, {__mode = "k"})
650
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
651
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
651
652
  ____exports.Unit = __TS__Class()
652
653
  local Unit = ____exports.Unit
653
654
  Unit.name = "Unit"
@@ -688,6 +689,8 @@ function Unit.prototype.getEvent(self, event, collector)
688
689
  end
689
690
  function Unit.prototype.onDestroy(self)
690
691
  local handle = self.handle
692
+ self[107] = getUnitX(handle)
693
+ self[108] = getUnitY(handle)
691
694
  if not self._owner then
692
695
  self._owner = Player:of(getOwningPlayer(handle))
693
696
  end
@@ -798,13 +801,16 @@ function Unit.prototype.playAnimation(self, animation, rarity)
798
801
  if type(animation) == "number" then
799
802
  setUnitAnimationByIndex(self.handle, animation)
800
803
  elseif rarity then
801
- setUnitAnimationWithRarity(self.handle, animation, rarity)
804
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
802
805
  else
803
806
  setUnitAnimation(self.handle, animation)
804
807
  end
805
808
  end
809
+ function Unit.prototype.resetAnimation(self)
810
+ ResetUnitAnimation(self.handle)
811
+ end
806
812
  function Unit.prototype.queueAnimation(self, animation)
807
- queueUnitAnimation(self.handle, animation)
813
+ QueueUnitAnimation(self.handle, animation)
808
814
  end
809
815
  function Unit.prototype.delayHealthChecks(self)
810
816
  self[103] = (self[103] or 0) + 1
@@ -817,7 +823,7 @@ function Unit.prototype.isSelected(self, player)
817
823
  return IsUnitSelected(self.handle, player.handle)
818
824
  end
819
825
  function Unit.prototype.explode(self)
820
- setUnitExploded(self.handle, true)
826
+ SetUnitExploded(self.handle, true)
821
827
  killUnit(self.handle)
822
828
  end
823
829
  function Unit.prototype.kill(self)
@@ -940,8 +946,15 @@ function Unit.prototype.interruptAttack(self)
940
946
  unitInterruptAttack(self.handle)
941
947
  end
942
948
  function Unit.prototype.interruptCast(self, abilityId)
943
- unitDisableAbility(self.handle, abilityId, true, false)
944
- unitDisableAbility(self.handle, abilityId, false, false)
949
+ local handle = self.handle
950
+ unitDisableAbility(handle, abilityId, true, false)
951
+ Timer:run(
952
+ unitDisableAbility,
953
+ handle,
954
+ abilityId,
955
+ false,
956
+ false
957
+ )
945
958
  end
946
959
  function Unit.prototype.getDistanceTo(self, target)
947
960
  local handle = self.handle
@@ -1206,6 +1219,14 @@ __TS__SetDescriptor(
1206
1219
  end},
1207
1220
  true
1208
1221
  )
1222
+ __TS__SetDescriptor(
1223
+ Unit.prototype,
1224
+ "isStunned",
1225
+ {get = function(self)
1226
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1227
+ end},
1228
+ true
1229
+ )
1209
1230
  __TS__SetDescriptor(
1210
1231
  Unit.prototype,
1211
1232
  "combatClassifications",
@@ -1279,6 +1300,19 @@ __TS__SetDescriptor(
1279
1300
  },
1280
1301
  true
1281
1302
  )
1303
+ __TS__SetDescriptor(
1304
+ Unit.prototype,
1305
+ "primaryAttribute",
1306
+ {
1307
+ get = function(self)
1308
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1309
+ end,
1310
+ set = function(self, primaryAttribute)
1311
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1312
+ end
1313
+ },
1314
+ true
1315
+ )
1282
1316
  __TS__SetDescriptor(
1283
1317
  Unit.prototype,
1284
1318
  "strengthBase",
@@ -1403,7 +1437,7 @@ __TS__SetDescriptor(
1403
1437
  return not self[106]
1404
1438
  end,
1405
1439
  set = function(self, isTeamGlowVisible)
1406
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1440
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1407
1441
  local ____temp_6
1408
1442
  if not isTeamGlowVisible then
1409
1443
  ____temp_6 = true
@@ -1419,9 +1453,9 @@ __TS__SetDescriptor(
1419
1453
  Unit.prototype,
1420
1454
  "color",
1421
1455
  {set = function(self, color)
1422
- setUnitColor(self.handle, color.handle)
1456
+ SetUnitColor(self.handle, color.handle)
1423
1457
  if self[106] then
1424
- showUnitTeamGlow(self.handle, false)
1458
+ BlzShowUnitTeamGlow(self.handle, false)
1425
1459
  end
1426
1460
  end},
1427
1461
  true
@@ -1590,7 +1624,7 @@ __TS__SetDescriptor(
1590
1624
  "x",
1591
1625
  {
1592
1626
  get = function(self)
1593
- return getUnitX(self.handle)
1627
+ return self[107] or getUnitX(self.handle)
1594
1628
  end,
1595
1629
  set = function(self, v)
1596
1630
  SetUnitX(self.handle, v)
@@ -1603,7 +1637,7 @@ __TS__SetDescriptor(
1603
1637
  "y",
1604
1638
  {
1605
1639
  get = function(self)
1606
- return getUnitY(self.handle)
1640
+ return self[108] or getUnitY(self.handle)
1607
1641
  end,
1608
1642
  set = function(self, v)
1609
1643
  SetUnitY(self.handle, v)
@@ -1689,10 +1723,10 @@ __TS__SetDescriptor(
1689
1723
  "gold",
1690
1724
  {
1691
1725
  get = function(self)
1692
- return getResourceAmount(self.handle)
1726
+ return GetResourceAmount(self.handle)
1693
1727
  end,
1694
1728
  set = function(self, gold)
1695
- setResourceAmount(self.handle, gold)
1729
+ SetResourceAmount(self.handle, gold)
1696
1730
  end
1697
1731
  },
1698
1732
  true
@@ -1820,6 +1854,19 @@ __TS__SetDescriptor(
1820
1854
  end},
1821
1855
  true
1822
1856
  )
1857
+ __TS__SetDescriptor(
1858
+ Unit.prototype,
1859
+ "movementType",
1860
+ {
1861
+ get = function(self)
1862
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1863
+ end,
1864
+ set = function(self, movementType)
1865
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1866
+ end
1867
+ },
1868
+ true
1869
+ )
1823
1870
  __TS__SetDescriptor(
1824
1871
  Unit.prototype,
1825
1872
  "pathing",
@@ -2326,10 +2373,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2326
2373
  ____exports.UnitTriggerEvent,
2327
2374
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2328
2375
  function()
2329
- local unit = ____exports.Unit:of(getOrderedUnit())
2330
- local issuedOrderId = getIssuedOrderId()
2331
- if unit ~= nil and unit.state == 1 then
2332
- return unit, issuedOrderId
2376
+ local handle = getOrderedUnit()
2377
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2378
+ local unit = ____exports.Unit:of(handle)
2379
+ if unit.state == 1 then
2380
+ return unit, getIssuedOrderId()
2381
+ end
2333
2382
  end
2334
2383
  return IgnoreEvent
2335
2384
  end
@@ -2360,13 +2409,18 @@ Unit.onDamaging = (function()
2360
2409
  if source and source.typeId == dummyUnitId then
2361
2410
  source = nil
2362
2411
  end
2363
- local target = BlzGetEventDamageTarget()
2412
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2413
+ local metadata = damageMetadataByTarget[target]
2414
+ damageMetadataByTarget[target] = nil
2364
2415
  local data = {
2365
2416
  amount = GetEventDamage(),
2366
- attackType = BlzGetEventAttackType(),
2417
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2367
2418
  damageType = BlzGetEventDamageType(),
2368
2419
  weaponType = BlzGetEventWeaponType(),
2369
- isAttack = BlzGetEventIsAttack()
2420
+ metadata = metadata,
2421
+ isAttack = BlzGetEventIsAttack(),
2422
+ originalAmount = GetEventDamage(),
2423
+ originalMetadata = metadata
2370
2424
  }
2371
2425
  if data.isAttack and source then
2372
2426
  local weapon = BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 1) and (BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 0) and -1 or 1) or 0
@@ -2380,18 +2434,22 @@ Unit.onDamaging = (function()
2380
2434
  invoke(
2381
2435
  event,
2382
2436
  source,
2383
- ____exports.Unit:of(target),
2437
+ target,
2384
2438
  setmetatable(
2385
2439
  {},
2386
2440
  {
2387
2441
  __index = data,
2388
2442
  __newindex = function(self, key, value)
2389
- damageSetters[key](value)
2443
+ local damageSetter = damageSetters[key]
2444
+ if damageSetter ~= nil then
2445
+ damageSetter(value)
2446
+ end
2390
2447
  data[key] = value
2391
2448
  end
2392
2449
  }
2393
2450
  )
2394
2451
  )
2452
+ damagingEventByTarget[target] = data
2395
2453
  return
2396
2454
  end
2397
2455
  BlzSetEventDamage(0)
@@ -2399,7 +2457,7 @@ Unit.onDamaging = (function()
2399
2457
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2400
2458
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2401
2459
  local sourceOwner = source.owner.handle
2402
- local targetOwner = GetOwningPlayer(target)
2460
+ local targetOwner = target.owner.handle
2403
2461
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2404
2462
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2405
2463
  Timer:run(function()
@@ -2415,23 +2473,19 @@ Unit.onDamaging = (function()
2415
2473
  for ____, ____value in ipairs(source._attackHandlers) do
2416
2474
  local condition = ____value[1]
2417
2475
  local action = ____value[2]
2418
- if condition(
2419
- source,
2420
- ____exports.Unit:of(target),
2421
- data
2422
- ) then
2476
+ if condition(source, target, data) then
2423
2477
  action(
2424
2478
  source,
2425
- ____exports.Unit:of(target),
2479
+ target,
2426
2480
  setmetatable(
2427
2481
  {fire = function()
2428
2482
  UnitDamageTarget(
2429
2483
  source.handle,
2430
- target,
2484
+ target.handle,
2431
2485
  data.amount,
2432
2486
  true,
2433
2487
  true,
2434
- data.attackType,
2488
+ attackTypeToNative(data.attackType),
2435
2489
  data.damageType,
2436
2490
  data.weaponType
2437
2491
  )
@@ -2458,26 +2512,40 @@ Unit.onDamage = __TS__New(
2458
2512
  if source and source.typeId == dummyUnitId then
2459
2513
  source = nil
2460
2514
  end
2515
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2516
+ local damagingEvent = damagingEventByTarget[target]
2517
+ damagingEventByTarget[target] = nil
2461
2518
  local data = {
2462
2519
  amount = GetEventDamage(),
2463
- attackType = BlzGetEventAttackType(),
2520
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2464
2521
  damageType = BlzGetEventDamageType(),
2465
2522
  weaponType = BlzGetEventWeaponType(),
2523
+ metadata = damagingEvent and damagingEvent.metadata,
2466
2524
  isAttack = BlzGetEventIsAttack(),
2467
- originalAmount = GetEventDamage(),
2525
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2526
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2468
2527
  preventDeath = damageEventPreventDeath
2469
2528
  }
2529
+ if damagingEvent then
2530
+ for key, value in pairs(damagingEvent) do
2531
+ if isAttribute(key) then
2532
+ data[key] = value
2533
+ end
2534
+ end
2535
+ end
2470
2536
  local evData = setmetatable(
2471
2537
  {},
2472
2538
  {
2473
2539
  __index = data,
2474
2540
  __newindex = function(self, key, value)
2475
- damageSetters[key](value)
2541
+ local damageSetter = damageSetters[key]
2542
+ if damageSetter ~= nil then
2543
+ damageSetter(value)
2544
+ end
2476
2545
  data[key] = value
2477
2546
  end
2478
2547
  }
2479
2548
  )
2480
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2481
2549
  invoke(event, source, target, evData)
2482
2550
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2483
2551
  local bonusHealth = math.ceil(evData.amount)
@@ -2520,8 +2588,9 @@ Unit.itemDroppedEvent = __TS__New(
2520
2588
  EVENT_PLAYER_UNIT_DROP_ITEM,
2521
2589
  function()
2522
2590
  local unit = getTriggerUnit()
2523
- if getUnitTypeId(unit) ~= dummyUnitId then
2524
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2591
+ local item = getManipulatedItem()
2592
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2593
+ return ____exports.Unit:of(unit), Item:of(item)
2525
2594
  end
2526
2595
  return IgnoreEvent
2527
2596
  end
@@ -2531,8 +2600,9 @@ Unit.itemPickedUpEvent = __TS__New(
2531
2600
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2532
2601
  function()
2533
2602
  local unit = getTriggerUnit()
2534
- if getUnitTypeId(unit) ~= dummyUnitId then
2535
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2603
+ local item = getManipulatedItem()
2604
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2605
+ return ____exports.Unit:of(unit), Item:of(item)
2536
2606
  end
2537
2607
  return IgnoreEvent
2538
2608
  end
@@ -2540,13 +2610,65 @@ Unit.itemPickedUpEvent = __TS__New(
2540
2610
  Unit.itemUsedEvent = __TS__New(
2541
2611
  ____exports.UnitTriggerEvent,
2542
2612
  EVENT_PLAYER_UNIT_USE_ITEM,
2543
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2613
+ function()
2614
+ local unit = getTriggerUnit()
2615
+ local item = getManipulatedItem()
2616
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2617
+ return ____exports.Unit:of(unit), Item:of(item)
2618
+ end
2619
+ return IgnoreEvent
2620
+ end
2544
2621
  )
2545
2622
  Unit.itemStackedEvent = __TS__New(
2546
2623
  ____exports.UnitTriggerEvent,
2547
2624
  EVENT_PLAYER_UNIT_STACK_ITEM,
2548
2625
  function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2549
2626
  )
2627
+ __TS__ObjectDefineProperty(
2628
+ Unit,
2629
+ "itemUseOrderEvent",
2630
+ {get = function(self)
2631
+ local event = __TS__New(Event)
2632
+ for order = orderId("useslot0"), orderId("useslot5") do
2633
+ local slot = order - orderId("useslot0")
2634
+ local function listener(unit)
2635
+ local item = unit.items[slot + 1]
2636
+ if item ~= nil then
2637
+ invoke(event, unit, item)
2638
+ end
2639
+ end
2640
+ self.onImmediateOrder[order]:addListener(listener)
2641
+ self.onTargetOrder[order]:addListener(listener)
2642
+ self.onPointOrder[order]:addListener(listener)
2643
+ end
2644
+ rawset(self, "itemUseOrderEvent", event)
2645
+ return event
2646
+ end}
2647
+ )
2648
+ __TS__ObjectDefineProperty(
2649
+ Unit,
2650
+ "itemMoveOrderEvent",
2651
+ {get = function(self)
2652
+ local event = __TS__New(Event)
2653
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2654
+ local slotTo = order - orderId("moveslot0")
2655
+ self.onTargetOrder[order]:addListener(function(unit, item)
2656
+ local slotFrom = unit.items:findSlot(item)
2657
+ if slotFrom ~= nil then
2658
+ invoke(
2659
+ event,
2660
+ unit,
2661
+ item,
2662
+ slotFrom,
2663
+ slotTo
2664
+ )
2665
+ end
2666
+ end)
2667
+ end
2668
+ rawset(self, "itemMoveOrderEvent", event)
2669
+ return event
2670
+ end}
2671
+ )
2550
2672
  __TS__ObjectDefineProperty(
2551
2673
  Unit,
2552
2674
  "onCreate",
@@ -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 {};