warscript 0.0.1-dev.58c74da → 0.0.1-dev.5e8f6c0

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 (140) hide show
  1. package/attributes.d.ts +0 -1
  2. package/binaryreader.d.ts +1 -0
  3. package/binaryreader.lua +3 -0
  4. package/core/types/effect.d.ts +13 -3
  5. package/core/types/effect.lua +116 -17
  6. package/core/types/frame.d.ts +8 -1
  7. package/core/types/frame.lua +93 -1
  8. package/core/types/group.d.ts +0 -1
  9. package/core/types/image.d.ts +0 -1
  10. package/core/types/missile.d.ts +2 -2
  11. package/core/types/missile.lua +8 -2
  12. package/core/types/unit.lua +8 -0
  13. package/core/util.d.ts +1 -1
  14. package/core/util.lua +12 -0
  15. package/decl/index.d.ts +1 -0
  16. package/engine/ability.d.ts +1 -1
  17. package/engine/behavior.d.ts +10 -10
  18. package/engine/behavior.lua +6 -6
  19. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  20. package/engine/behaviour/ability/always-enabled.lua +31 -0
  21. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  22. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  23. package/engine/behaviour/ability/damage.d.ts +33 -11
  24. package/engine/behaviour/ability/damage.lua +89 -31
  25. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  26. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  27. package/engine/behaviour/ability/heal.d.ts +33 -6
  28. package/engine/behaviour/ability/heal.lua +89 -10
  29. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  30. package/engine/behaviour/ability/instant-impact.lua +4 -15
  31. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  32. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  33. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  34. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  35. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  36. package/engine/behaviour/ability/restore-mana.lua +29 -0
  37. package/engine/behaviour/ability.d.ts +16 -2
  38. package/engine/behaviour/ability.lua +88 -12
  39. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  40. package/engine/behaviour/unit.d.ts +8 -2
  41. package/engine/behaviour/unit.lua +27 -0
  42. package/engine/buff.d.ts +68 -21
  43. package/engine/buff.lua +276 -90
  44. package/engine/game-map.d.ts +7 -0
  45. package/engine/game-map.lua +32 -0
  46. package/engine/internal/ability.d.ts +16 -13
  47. package/engine/internal/ability.lua +82 -76
  48. package/engine/internal/item/ability.lua +90 -0
  49. package/engine/internal/item+owner.lua +2 -2
  50. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  51. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  52. package/engine/internal/unit/ability.d.ts +10 -1
  53. package/engine/internal/unit/ability.lua +36 -14
  54. package/engine/internal/unit/bonus.d.ts +9 -8
  55. package/engine/internal/unit/bonus.lua +6 -1
  56. package/engine/internal/unit/item.d.ts +24 -0
  57. package/engine/internal/unit/item.lua +79 -0
  58. package/engine/internal/unit/main-selected.d.ts +13 -0
  59. package/engine/internal/unit/main-selected.lua +51 -0
  60. package/engine/internal/unit+ability.lua +2 -2
  61. package/engine/internal/unit+transport.lua +4 -10
  62. package/engine/internal/unit-missile-launch.lua +25 -6
  63. package/engine/internal/unit.d.ts +52 -18
  64. package/engine/internal/unit.lua +338 -136
  65. package/engine/internal/utility.lua +12 -0
  66. package/engine/local-client.d.ts +7 -2
  67. package/engine/local-client.lua +82 -0
  68. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  69. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  70. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  71. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  72. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  73. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  74. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  75. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  76. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  77. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  78. package/engine/object-data/entry/ability-type.d.ts +0 -1
  79. package/engine/object-data/entry/ability-type.lua +8 -12
  80. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  81. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  82. package/engine/object-data/entry/buff-type.d.ts +0 -1
  83. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  84. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  85. package/engine/object-data/entry/item-type.d.ts +14 -1
  86. package/engine/object-data/entry/item-type.lua +91 -0
  87. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  88. package/engine/object-data/entry/unit-type.d.ts +21 -2
  89. package/engine/object-data/entry/unit-type.lua +223 -49
  90. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  91. package/engine/object-data/entry/upgrade.d.ts +0 -1
  92. package/engine/object-data/entry.d.ts +2 -3
  93. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  94. package/engine/object-field/ability.d.ts +21 -1
  95. package/engine/object-field/ability.lua +51 -1
  96. package/engine/object-field.d.ts +0 -1
  97. package/engine/random.d.ts +1 -0
  98. package/engine/random.lua +9 -0
  99. package/engine/standard/entries/unit-type.d.ts +18 -0
  100. package/engine/standard/entries/unit-type.lua +18 -0
  101. package/engine/standard/fields/ability.d.ts +3 -1
  102. package/engine/standard/fields/ability.lua +3 -1
  103. package/engine/unit.d.ts +2 -0
  104. package/engine/unit.lua +11 -2
  105. package/event.d.ts +2 -3
  106. package/event.lua +9 -5
  107. package/index.d.ts +1 -0
  108. package/index.lua +1 -0
  109. package/lualib_bundle.lua +146 -42
  110. package/math/vec2.d.ts +2 -9
  111. package/math.d.ts +0 -2
  112. package/net/socket.d.ts +7 -1
  113. package/net/socket.lua +45 -4
  114. package/network.d.ts +1 -0
  115. package/network.lua +3 -2
  116. package/objutil/ability.d.ts +0 -1
  117. package/objutil/buff.d.ts +0 -1
  118. package/objutil/buff.lua +1 -1
  119. package/objutil/object.d.ts +0 -1
  120. package/objutil/unit.d.ts +0 -1
  121. package/package.json +13 -13
  122. package/patch-lua.d.ts +0 -0
  123. package/patch-lua.lua +10 -0
  124. package/property.d.ts +55 -0
  125. package/property.lua +374 -0
  126. package/string.d.ts +16 -0
  127. package/string.lua +5 -0
  128. package/util/stream.d.ts +0 -1
  129. package/utility/arrays.d.ts +11 -5
  130. package/utility/arrays.lua +34 -3
  131. package/utility/bit-set.d.ts +0 -2
  132. package/utility/lazy.d.ts +2 -0
  133. package/utility/lazy.lua +14 -0
  134. package/utility/linked-set.d.ts +11 -3
  135. package/utility/linked-set.lua +5 -2
  136. package/utility/lua-maps.d.ts +1 -2
  137. package/utility/lua-sets.d.ts +1 -2
  138. package/utility/types.d.ts +1 -0
  139. package/core/mapbounds.d.ts +0 -8
  140. package/core/mapbounds.lua +0 -12
@@ -5,9 +5,12 @@ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
5
5
  local __TS__New = ____lualib.__TS__New
6
6
  local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
8
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
9
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
- local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
13
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -92,6 +95,10 @@ local isUnitInRangeXY = IsUnitInRangeXY
92
95
  local isUnitInRange = IsUnitInRange
93
96
  local setResourceAmount = SetResourceAmount
94
97
  local getResourceAmount = GetResourceAmount
98
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
101
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
102
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
103
  local unitDisableAbility = BlzUnitDisableAbility
97
104
  local unitInterruptAttack = BlzUnitInterruptAttack
@@ -275,16 +282,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
282
  end
276
283
  local function dispatch(event, idGetter, argsGetter)
277
284
  local initialized = false
278
- local x = {}
279
285
  return setmetatable(
280
- x,
286
+ {},
281
287
  {
282
288
  __index = function(self, id)
283
289
  if type(id) ~= "number" then
284
290
  return event[id]
285
291
  end
286
292
  if not initialized then
287
- local invoke = Event.invoke
288
293
  event:addListener(function(...)
289
294
  local id = idGetter(...)
290
295
  local dispatched = rawget(self, id)
@@ -322,7 +327,6 @@ local function dispatchAbility(event)
322
327
  return event[id]
323
328
  end
324
329
  if not initialized then
325
- local invoke = Event.invoke
326
330
  event:addListener(function(unit, ability, ...)
327
331
  local dispatched = rawget(self, ability.typeId)
328
332
  if dispatched ~= nil then
@@ -387,51 +391,158 @@ local getters = {
387
391
  return BlzGetUnitArmor(unit)
388
392
  end
389
393
  }
390
- local weaponGetters = {
391
- index = function(self, handle, index)
392
- return index
393
- end,
394
- cooldown = function(self, handle, index)
395
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index)
396
- end,
397
- projectileArc = function(self, handle, index)
398
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index)
399
- end,
400
- projectileArt = function(self, handle, index)
401
- return BlzGetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index)
402
- end,
403
- projectileSpeed = function(self, handle, index)
404
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index)
405
- end,
406
- attackPoint = function(self, handle, index)
407
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index)
408
- end
409
- }
410
- local weaponSetters = {
411
- cooldown = function(self, handle, index, value)
412
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index, value))
413
- end,
414
- projectileArc = function(self, handle, index, value)
415
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index, value))
416
- end,
417
- projectileArt = function(self, handle, index, value)
418
- assert(BlzSetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index, value))
419
- end,
420
- projectileSpeed = function(self, handle, index, value)
421
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index, value))
422
- end,
423
- attackPoint = function(self, handle, index, value)
424
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index, value))
425
- end
426
- }
427
- local weaponMetatable = {
428
- __index = function(self, key)
429
- return weaponGetters[key](weaponGetters, self.h, self.i)
430
- end,
431
- __newindex = function(self, key, value)
432
- weaponSetters[key](weaponSetters, self.h, self.i, value)
433
- end
434
- }
394
+ ____exports.UnitWeapon = __TS__Class()
395
+ local UnitWeapon = ____exports.UnitWeapon
396
+ UnitWeapon.name = "UnitWeapon"
397
+ function UnitWeapon.prototype.____constructor(self, unit, index)
398
+ self.unit = unit
399
+ self.index = index
400
+ end
401
+ __TS__SetDescriptor(
402
+ UnitWeapon.prototype,
403
+ "cooldown",
404
+ {
405
+ get = function(self)
406
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
407
+ end,
408
+ set = function(self, cooldown)
409
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
410
+ end
411
+ },
412
+ true
413
+ )
414
+ __TS__SetDescriptor(
415
+ UnitWeapon.prototype,
416
+ "damage",
417
+ {
418
+ get = function(self)
419
+ local minimumDamage = self.damageBase + self.damageDiceCount
420
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
421
+ return {minimumDamage, maximumDamage}
422
+ end,
423
+ set = function(self, ____bindingPattern0)
424
+ local maximumDamage
425
+ local minimumDamage
426
+ minimumDamage = ____bindingPattern0[1]
427
+ maximumDamage = ____bindingPattern0[2]
428
+ self.damageBase = minimumDamage - 1
429
+ self.damageDiceCount = 1
430
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
431
+ end
432
+ },
433
+ true
434
+ )
435
+ __TS__SetDescriptor(
436
+ UnitWeapon.prototype,
437
+ "damageBase",
438
+ {
439
+ get = function(self)
440
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
441
+ end,
442
+ set = function(self, damageBase)
443
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
444
+ end
445
+ },
446
+ true
447
+ )
448
+ __TS__SetDescriptor(
449
+ UnitWeapon.prototype,
450
+ "damageDiceCount",
451
+ {
452
+ get = function(self)
453
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
454
+ end,
455
+ set = function(self, damageDiceCount)
456
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
457
+ end
458
+ },
459
+ true
460
+ )
461
+ __TS__SetDescriptor(
462
+ UnitWeapon.prototype,
463
+ "damageDiceSideCount",
464
+ {
465
+ get = function(self)
466
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
467
+ end,
468
+ set = function(self, damageDiceSideCount)
469
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
470
+ end
471
+ },
472
+ true
473
+ )
474
+ __TS__SetDescriptor(
475
+ UnitWeapon.prototype,
476
+ "range",
477
+ {
478
+ get = function(self)
479
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
480
+ end,
481
+ set = function(self, range)
482
+ local handle = self.unit.handle
483
+ local index = self.index
484
+ setUnitWeaponRealField(
485
+ handle,
486
+ UNIT_WEAPON_RF_ATTACK_RANGE,
487
+ index + 1,
488
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
489
+ )
490
+ end
491
+ },
492
+ true
493
+ )
494
+ __TS__SetDescriptor(
495
+ UnitWeapon.prototype,
496
+ "impactDelay",
497
+ {
498
+ get = function(self)
499
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
500
+ end,
501
+ set = function(self, impactDelay)
502
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
503
+ end
504
+ },
505
+ true
506
+ )
507
+ __TS__SetDescriptor(
508
+ UnitWeapon.prototype,
509
+ "missileArc",
510
+ {
511
+ get = function(self)
512
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
513
+ end,
514
+ set = function(self, missileArc)
515
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
516
+ end
517
+ },
518
+ true
519
+ )
520
+ __TS__SetDescriptor(
521
+ UnitWeapon.prototype,
522
+ "missileModelPath",
523
+ {
524
+ get = function(self)
525
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
526
+ end,
527
+ set = function(self, missileModelPath)
528
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
529
+ end
530
+ },
531
+ true
532
+ )
533
+ __TS__SetDescriptor(
534
+ UnitWeapon.prototype,
535
+ "missileSpeed",
536
+ {
537
+ get = function(self)
538
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
539
+ end,
540
+ set = function(self, missileSpeed)
541
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
542
+ end
543
+ },
544
+ true
545
+ )
435
546
  local unitInventorySize = UnitInventorySize
436
547
  local unitItemInSlot = UnitItemInSlot
437
548
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +553,6 @@ local getAbilityName = GetAbilityName
442
553
  local unitAddAbility = UnitAddAbility
443
554
  local getUnitGoldCost = GetUnitGoldCost
444
555
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
556
  local unitRemoveAbility = UnitRemoveAbility
448
557
  local function retrieveAbility(unit, ability, abilityId)
449
558
  if ability == nil then
@@ -453,17 +562,6 @@ local function retrieveAbility(unit, ability, abilityId)
453
562
  ____exports.Unit:of(unit)
454
563
  )
455
564
  end
456
- if not unitAddAbility(unit, abilityId) then
457
- if getUnitAbility(unit, abilityId) == ability then
458
- return UnitAbility:of(
459
- ability,
460
- abilityId,
461
- ____exports.Unit:of(unit)
462
- )
463
- end
464
- else
465
- unitRemoveAbility(unit, abilityId)
466
- end
467
565
  for i = 0, unitInventorySize(unit) - 1 do
468
566
  local item = unitItemInSlot(unit, i)
469
567
  if getItemAbility(item, abilityId) == ability then
@@ -521,15 +619,15 @@ for ____, player in ipairs(Player.all) do
521
619
  dummies[player] = dummy
522
620
  end
523
621
  local function delayHealthChecksCallback(unit)
524
- local counter = (unit[102] or 0) - 1
622
+ local counter = (unit[103] or 0) - 1
525
623
  if counter ~= 0 then
526
- unit[102] = counter
624
+ unit[103] = counter
527
625
  return
528
626
  end
529
- unit[102] = nil
530
- local healthBonus = unit[103]
627
+ unit[103] = nil
628
+ local healthBonus = unit[104]
531
629
  if healthBonus ~= nil then
532
- unit[103] = nil
630
+ unit[104] = nil
533
631
  local handle = unit.handle
534
632
  BlzSetUnitMaxHP(
535
633
  handle,
@@ -537,12 +635,17 @@ local function delayHealthChecksCallback(unit)
537
635
  )
538
636
  end
539
637
  end
638
+ local nextSyncId = 1
639
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
540
640
  ____exports.Unit = __TS__Class()
541
641
  local Unit = ____exports.Unit
542
642
  Unit.name = "Unit"
543
643
  __TS__ClassExtends(Unit, Handle)
544
644
  function Unit.prototype.____constructor(self, handle)
545
645
  Handle.prototype.____constructor(self, handle)
646
+ local ____nextSyncId_0 = nextSyncId
647
+ nextSyncId = ____nextSyncId_0 + 1
648
+ self.syncId = ____nextSyncId_0
546
649
  self._owner = Player:of(getOwningPlayer(handle))
547
650
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
548
651
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -555,6 +658,7 @@ function Unit.prototype.____constructor(self, handle)
555
658
  fourCC("Amrf")
556
659
  ))
557
660
  end
661
+ unitBySyncId[self.syncId] = self
558
662
  local ____ = self.abilities
559
663
  end
560
664
  function Unit.prototype.getEvent(self, event, collector)
@@ -640,8 +744,8 @@ function Unit.prototype.addModifier(self, property, modifier)
640
744
  end}
641
745
  end
642
746
  function Unit.prototype.hasCombatClassification(self, combatClassification)
643
- local ____combatClassification_0 = combatClassification
644
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
747
+ local ____combatClassification_1 = combatClassification
748
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
645
749
  end
646
750
  function Unit.prototype.addClassification(self, classification)
647
751
  return unitAddType(self.handle, classification)
@@ -659,13 +763,13 @@ function Unit.prototype.isInvisibleTo(self, player)
659
763
  return isUnitInvisible(self.handle, player.handle)
660
764
  end
661
765
  function Unit.prototype.isInRangeOf(self, x, y, range)
662
- local ____temp_1
766
+ local ____temp_2
663
767
  if type(x) == "number" then
664
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
768
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
665
769
  else
666
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
770
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
667
771
  end
668
- return ____temp_1
772
+ return ____temp_2
669
773
  end
670
774
  function Unit.prototype.isAllyOf(self, unit)
671
775
  return isUnitAlly(
@@ -692,7 +796,7 @@ function Unit.prototype.queueAnimation(self, animation)
692
796
  queueUnitAnimation(self.handle, animation)
693
797
  end
694
798
  function Unit.prototype.delayHealthChecks(self)
695
- self[102] = (self[102] or 0) + 1
799
+ self[103] = (self[103] or 0) + 1
696
800
  Timer:run(delayHealthChecksCallback, self)
697
801
  end
698
802
  function Unit.prototype.setPosition(self, x, y)
@@ -708,8 +812,15 @@ end
708
812
  function Unit.prototype.kill(self)
709
813
  killUnit(self.handle)
710
814
  end
711
- function Unit.prototype.revive(self, pos, doEffect)
712
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
815
+ function Unit.prototype.revive(self, x, y, doEffect)
816
+ local ____ReviveHero_5 = ReviveHero
817
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
818
+ local ____doEffect_3 = doEffect
819
+ if ____doEffect_3 == nil then
820
+ ____doEffect_3 = false
821
+ end
822
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
823
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
713
824
  end
714
825
  function Unit.prototype.healTarget(self, target, amount)
715
826
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -749,7 +860,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
749
860
  return UnitDropItemSlot(self.handle, item.handle, slot)
750
861
  end
751
862
  function Unit.prototype.itemInSlot(self, slot)
752
- return Item:of(UnitItemInSlot(self.handle, slot))
863
+ return Item:of(unitItemInSlot(self.handle, slot))
753
864
  end
754
865
  function Unit.prototype.addAbility(self, abilityId)
755
866
  if unitAddAbility(self.handle, abilityId) then
@@ -805,6 +916,9 @@ end
805
916
  function Unit.prototype.hideAbility(self, abilityId, flag)
806
917
  BlzUnitHideAbility(self.handle, abilityId, flag)
807
918
  end
919
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
920
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
921
+ end
808
922
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
809
923
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
810
924
  end
@@ -815,8 +929,15 @@ function Unit.prototype.interruptAttack(self)
815
929
  unitInterruptAttack(self.handle)
816
930
  end
817
931
  function Unit.prototype.interruptCast(self, abilityId)
818
- unitDisableAbility(self.handle, abilityId, true, false)
819
- unitDisableAbility(self.handle, abilityId, false, false)
932
+ local handle = self.handle
933
+ unitDisableAbility(handle, abilityId, true, false)
934
+ Timer:run(
935
+ unitDisableAbility,
936
+ handle,
937
+ abilityId,
938
+ false,
939
+ false
940
+ )
820
941
  end
821
942
  function Unit.prototype.getDistanceTo(self, target)
822
943
  local handle = self.handle
@@ -876,18 +997,18 @@ function Unit.prototype.unpauseEx(self)
876
997
  self:decrementStunCounter()
877
998
  end
878
999
  function Unit.prototype.incrementStunCounter(self)
879
- local stunCounter = self[101] or 0
880
- if not self[100] or stunCounter >= 0 then
1000
+ local stunCounter = self[102] or 0
1001
+ if not self[101] or stunCounter >= 0 then
881
1002
  BlzPauseUnitEx(self.handle, true)
882
1003
  end
883
- self[101] = stunCounter + 1
1004
+ self[102] = stunCounter + 1
884
1005
  end
885
1006
  function Unit.prototype.decrementStunCounter(self)
886
- local stunCounter = self[101] or 0
887
- if not self[100] or stunCounter >= 1 then
1007
+ local stunCounter = self[102] or 0
1008
+ if not self[101] or stunCounter >= 1 then
888
1009
  BlzPauseUnitEx(self.handle, false)
889
1010
  end
890
- self[101] = stunCounter - 1
1011
+ self[102] = stunCounter - 1
891
1012
  end
892
1013
  function Unit.create(self, owner, id, x, y, facing, skinId)
893
1014
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -989,8 +1110,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
989
1110
  )
990
1111
  return targetCollection
991
1112
  end
992
- function Unit.getSelectionOf(self, player)
993
- targetCollection = {}
1113
+ function Unit.getSelectionOf(self, player, target)
1114
+ if target == nil then
1115
+ target = {}
1116
+ end
1117
+ targetCollection = target
994
1118
  targetCollectionNextIndex = 1
995
1119
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
996
1120
  return targetCollection
@@ -1012,6 +1136,9 @@ end
1012
1136
  function Unit.prototype.__tostring(self)
1013
1137
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1014
1138
  end
1139
+ function Unit.getBySyncId(self, syncId)
1140
+ return unitBySyncId[syncId]
1141
+ end
1015
1142
  __TS__SetDescriptor(
1016
1143
  Unit.prototype,
1017
1144
  "_deltas",
@@ -1092,12 +1219,27 @@ __TS__SetDescriptor(
1092
1219
  Unit.prototype,
1093
1220
  "weapons",
1094
1221
  {get = function(self)
1095
- local weapons = {
1096
- setmetatable({h = self.handle, i = 0}, weaponMetatable),
1097
- setmetatable({h = self.handle, i = 1}, weaponMetatable)
1098
- }
1099
- rawset(self, "weapons", weapons)
1100
- return weapons
1222
+ return {self.firstWeapon, self.secondWeapon}
1223
+ end},
1224
+ true
1225
+ )
1226
+ __TS__SetDescriptor(
1227
+ Unit.prototype,
1228
+ "firstWeapon",
1229
+ {get = function(self)
1230
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1231
+ rawset(self, "firstWeapon", weapon)
1232
+ return weapon
1233
+ end},
1234
+ true
1235
+ )
1236
+ __TS__SetDescriptor(
1237
+ Unit.prototype,
1238
+ "secondWeapon",
1239
+ {get = function(self)
1240
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1241
+ rawset(self, "secondWeapon", weapon)
1242
+ return weapon
1101
1243
  end},
1102
1244
  true
1103
1245
  )
@@ -1254,17 +1396,17 @@ __TS__SetDescriptor(
1254
1396
  "isTeamGlowVisible",
1255
1397
  {
1256
1398
  get = function(self)
1257
- return not self[105]
1399
+ return not self[106]
1258
1400
  end,
1259
1401
  set = function(self, isTeamGlowVisible)
1260
1402
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1261
- local ____temp_2
1403
+ local ____temp_6
1262
1404
  if not isTeamGlowVisible then
1263
- ____temp_2 = true
1405
+ ____temp_6 = true
1264
1406
  else
1265
- ____temp_2 = nil
1407
+ ____temp_6 = nil
1266
1408
  end
1267
- self[105] = ____temp_2
1409
+ self[106] = ____temp_6
1268
1410
  end
1269
1411
  },
1270
1412
  true
@@ -1274,7 +1416,7 @@ __TS__SetDescriptor(
1274
1416
  "color",
1275
1417
  {set = function(self, color)
1276
1418
  setUnitColor(self.handle, color.handle)
1277
- if self[105] then
1419
+ if self[106] then
1278
1420
  showUnitTeamGlow(self.handle, false)
1279
1421
  end
1280
1422
  end},
@@ -1298,14 +1440,14 @@ __TS__SetDescriptor(
1298
1440
  "maxHealth",
1299
1441
  {
1300
1442
  get = function(self)
1301
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1443
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1302
1444
  end,
1303
1445
  set = function(self, maxHealth)
1304
- if maxHealth < 1 and self[102] ~= nil then
1305
- self[103] = (self[103] or 0) + (1 - maxHealth)
1446
+ if maxHealth < 1 and self[103] ~= nil then
1447
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1306
1448
  maxHealth = 1
1307
1449
  end
1308
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1450
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1309
1451
  end
1310
1452
  },
1311
1453
  true
@@ -1347,10 +1489,10 @@ __TS__SetDescriptor(
1347
1489
  "health",
1348
1490
  {
1349
1491
  get = function(self)
1350
- return GetWidgetLife(self.handle) - (self[104] or 0)
1492
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1351
1493
  end,
1352
1494
  set = function(self, health)
1353
- SetWidgetLife(self.handle, health + (self[104] or 0))
1495
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1354
1496
  end
1355
1497
  },
1356
1498
  true
@@ -1561,17 +1703,17 @@ __TS__SetDescriptor(
1561
1703
  set = function(self, isPaused)
1562
1704
  local handle = self.handle
1563
1705
  if isPaused and not IsUnitPaused(handle) then
1564
- self[100] = true
1565
- for _ = self[101] or 0, -1 do
1706
+ self[101] = true
1707
+ for _ = self[102] or 0, -1 do
1566
1708
  BlzPauseUnitEx(handle, true)
1567
1709
  end
1568
1710
  PauseUnit(handle, true)
1569
1711
  elseif not isPaused and IsUnitPaused(handle) then
1570
1712
  PauseUnit(handle, false)
1571
- for _ = self[101] or 0, -1 do
1713
+ for _ = self[102] or 0, -1 do
1572
1714
  BlzPauseUnitEx(handle, false)
1573
1715
  end
1574
- self[100] = nil
1716
+ self[101] = nil
1575
1717
  end
1576
1718
  end
1577
1719
  },
@@ -1928,7 +2070,6 @@ Unit.onDecay = __TS__New(
1928
2070
  Unit.onResurrect = __TS__New(
1929
2071
  InitializingEvent,
1930
2072
  function(event)
1931
- local invoke = Event.invoke
1932
2073
  local dead = setmetatable({}, {__mode = "k"})
1933
2074
  ____exports.Unit.deathEvent:addListener(function(unit)
1934
2075
  dead[unit] = true
@@ -1944,10 +2085,15 @@ Unit.onResurrect = __TS__New(
1944
2085
  Unit.morphEvent = __TS__New(
1945
2086
  InitializingEvent,
1946
2087
  function(event)
2088
+ local function ifNotLeft(unit)
2089
+ local handle = unit.handle
2090
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2091
+ invoke(event, unit)
2092
+ end
2093
+ end
1947
2094
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1948
2095
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1949
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1950
- Timer:run(Event.invoke, event, unit)
2096
+ Timer:run(ifNotLeft, unit)
1951
2097
  end
1952
2098
  end)
1953
2099
  end
@@ -1985,27 +2131,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1985
2131
  Unit.onTargetCast = dispatchId(__TS__New(
1986
2132
  InitializingEvent,
1987
2133
  function(event)
1988
- local invoke = Event.invoke
1989
2134
  local function listener(unit, id)
1990
- local ____GetSpellTargetUnit_result_5
2135
+ local ____GetSpellTargetUnit_result_9
1991
2136
  if GetSpellTargetUnit() then
1992
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2137
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1993
2138
  else
1994
- local ____GetSpellTargetItem_result_4
2139
+ local ____GetSpellTargetItem_result_8
1995
2140
  if GetSpellTargetItem() then
1996
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2141
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1997
2142
  else
1998
- local ____GetSpellTargetDestructable_result_3
2143
+ local ____GetSpellTargetDestructable_result_7
1999
2144
  if GetSpellTargetDestructable() then
2000
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2145
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2001
2146
  else
2002
- ____GetSpellTargetDestructable_result_3 = nil
2147
+ ____GetSpellTargetDestructable_result_7 = nil
2003
2148
  end
2004
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2149
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2005
2150
  end
2006
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2151
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2007
2152
  end
2008
- local target = ____GetSpellTargetUnit_result_5
2153
+ local target = ____GetSpellTargetUnit_result_9
2009
2154
  if target then
2010
2155
  invoke(event, unit, id, target)
2011
2156
  end
@@ -2177,10 +2322,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2177
2322
  ____exports.UnitTriggerEvent,
2178
2323
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2179
2324
  function()
2180
- local unit = ____exports.Unit:of(getOrderedUnit())
2181
- local issuedOrderId = getIssuedOrderId()
2182
- if unit ~= nil and unit.state == 1 then
2183
- return unit, issuedOrderId
2325
+ local handle = getOrderedUnit()
2326
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2327
+ local unit = ____exports.Unit:of(handle)
2328
+ if unit.state == 1 then
2329
+ return unit, getIssuedOrderId()
2330
+ end
2184
2331
  end
2185
2332
  return IgnoreEvent
2186
2333
  end
@@ -2202,7 +2349,6 @@ Unit.autoAttackStartEvent = __TS__New(
2202
2349
  )
2203
2350
  Unit.onDamaging = (function()
2204
2351
  local event = __TS__New(Event)
2205
- local invoke = Event.invoke
2206
2352
  local trigger = CreateTrigger()
2207
2353
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2208
2354
  TriggerAddCondition(
@@ -2301,7 +2447,6 @@ end)()
2301
2447
  Unit.onDamage = __TS__New(
2302
2448
  InitializingEvent,
2303
2449
  function(event)
2304
- local invoke = Event.invoke
2305
2450
  local trigger = CreateTrigger()
2306
2451
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2307
2452
  TriggerAddCondition(
@@ -2317,6 +2462,7 @@ Unit.onDamage = __TS__New(
2317
2462
  damageType = BlzGetEventDamageType(),
2318
2463
  weaponType = BlzGetEventWeaponType(),
2319
2464
  isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2320
2466
  preventDeath = damageEventPreventDeath
2321
2467
  }
2322
2468
  local evData = setmetatable(
@@ -2333,7 +2479,7 @@ Unit.onDamage = __TS__New(
2333
2479
  invoke(event, source, target, evData)
2334
2480
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2335
2481
  local bonusHealth = math.ceil(evData.amount)
2336
- target[104] = (target[104] or 0) + bonusHealth
2482
+ target[105] = (target[105] or 0) + bonusHealth
2337
2483
  BlzSetUnitMaxHP(
2338
2484
  target.handle,
2339
2485
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2347,7 +2493,7 @@ Unit.onDamage = __TS__New(
2347
2493
  evData[0],
2348
2494
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2349
2495
  )
2350
- target[104] = (target[104] or 0) - bonusHealth
2496
+ target[105] = (target[105] or 0) - bonusHealth
2351
2497
  SetWidgetLife(
2352
2498
  target.handle,
2353
2499
  GetWidgetLife(target.handle) - bonusHealth
@@ -2367,7 +2513,7 @@ Unit.onDamage = __TS__New(
2367
2513
  DestroyTrigger(trigger)
2368
2514
  end
2369
2515
  )
2370
- Unit.onItemDrop = __TS__New(
2516
+ Unit.itemDroppedEvent = __TS__New(
2371
2517
  ____exports.UnitTriggerEvent,
2372
2518
  EVENT_PLAYER_UNIT_DROP_ITEM,
2373
2519
  function()
@@ -2378,7 +2524,7 @@ Unit.onItemDrop = __TS__New(
2378
2524
  return IgnoreEvent
2379
2525
  end
2380
2526
  )
2381
- Unit.onItemPickup = __TS__New(
2527
+ Unit.itemPickedUpEvent = __TS__New(
2382
2528
  ____exports.UnitTriggerEvent,
2383
2529
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2384
2530
  function()
@@ -2389,10 +2535,66 @@ Unit.onItemPickup = __TS__New(
2389
2535
  return IgnoreEvent
2390
2536
  end
2391
2537
  )
2392
- Unit.onItemUse = __TS__New(
2538
+ Unit.itemUsedEvent = __TS__New(
2393
2539
  ____exports.UnitTriggerEvent,
2394
2540
  EVENT_PLAYER_UNIT_USE_ITEM,
2395
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2541
+ function()
2542
+ local unit = getTriggerUnit()
2543
+ if getUnitTypeId(unit) ~= dummyUnitId then
2544
+ return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2545
+ end
2546
+ return IgnoreEvent
2547
+ end
2548
+ )
2549
+ Unit.itemStackedEvent = __TS__New(
2550
+ ____exports.UnitTriggerEvent,
2551
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2552
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2553
+ )
2554
+ __TS__ObjectDefineProperty(
2555
+ Unit,
2556
+ "itemUseOrderEvent",
2557
+ {get = function(self)
2558
+ local event = __TS__New(Event)
2559
+ for order = orderId("useslot0"), orderId("useslot5") do
2560
+ local slot = order - orderId("useslot0")
2561
+ local function listener(unit)
2562
+ local item = unit.items[slot + 1]
2563
+ if item ~= nil then
2564
+ invoke(event, unit, item)
2565
+ end
2566
+ end
2567
+ self.onImmediateOrder[order]:addListener(listener)
2568
+ self.onTargetOrder[order]:addListener(listener)
2569
+ self.onPointOrder[order]:addListener(listener)
2570
+ end
2571
+ rawset(self, "itemUseOrderEvent", event)
2572
+ return event
2573
+ end}
2574
+ )
2575
+ __TS__ObjectDefineProperty(
2576
+ Unit,
2577
+ "itemMoveOrderEvent",
2578
+ {get = function(self)
2579
+ local event = __TS__New(Event)
2580
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2581
+ local slotTo = order - orderId("moveslot0")
2582
+ self.onTargetOrder[order]:addListener(function(unit, item)
2583
+ local slotFrom = unit.items:findSlot(item)
2584
+ if slotFrom ~= nil then
2585
+ invoke(
2586
+ event,
2587
+ unit,
2588
+ item,
2589
+ slotFrom,
2590
+ slotTo
2591
+ )
2592
+ end
2593
+ end)
2594
+ end
2595
+ rawset(self, "itemMoveOrderEvent", event)
2596
+ return event
2597
+ end}
2396
2598
  )
2397
2599
  __TS__ObjectDefineProperty(
2398
2600
  Unit,