warscript 0.0.1-dev.ab8c392 → 0.0.1-dev.b34a02b

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 (115) 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/frame.d.ts +5 -1
  5. package/core/types/frame.lua +34 -1
  6. package/core/types/group.d.ts +0 -1
  7. package/core/types/image.d.ts +0 -1
  8. package/core/types/missile.d.ts +2 -2
  9. package/core/types/missile.lua +8 -2
  10. package/core/types/unit.lua +8 -0
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +6 -0
  13. package/decl/index.d.ts +1 -0
  14. package/engine/ability.d.ts +1 -1
  15. package/engine/behavior.d.ts +10 -10
  16. package/engine/behavior.lua +6 -6
  17. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  18. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  19. package/engine/behaviour/ability/damage.d.ts +33 -11
  20. package/engine/behaviour/ability/damage.lua +89 -31
  21. package/engine/behaviour/ability/heal.d.ts +33 -6
  22. package/engine/behaviour/ability/heal.lua +89 -10
  23. package/engine/behaviour/ability/instant-impact.lua +4 -0
  24. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  25. package/engine/behaviour/ability/restore-mana.lua +29 -0
  26. package/engine/behaviour/ability.d.ts +8 -1
  27. package/engine/behaviour/ability.lua +62 -0
  28. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  29. package/engine/behaviour/unit.d.ts +8 -2
  30. package/engine/behaviour/unit.lua +27 -0
  31. package/engine/buff.d.ts +62 -20
  32. package/engine/buff.lua +247 -72
  33. package/engine/game-map.d.ts +7 -0
  34. package/engine/game-map.lua +32 -0
  35. package/engine/internal/ability.d.ts +1 -11
  36. package/engine/internal/ability.lua +2 -78
  37. package/engine/internal/item+owner.lua +2 -2
  38. package/engine/internal/unit/bonus.d.ts +9 -8
  39. package/engine/internal/unit/bonus.lua +6 -1
  40. package/engine/internal/unit/item.d.ts +23 -0
  41. package/engine/internal/unit/item.lua +74 -0
  42. package/engine/internal/unit+ability.lua +2 -2
  43. package/engine/internal/unit+transport.lua +4 -10
  44. package/engine/internal/unit-missile-launch.lua +25 -6
  45. package/engine/internal/unit.d.ts +48 -16
  46. package/engine/internal/unit.lua +316 -111
  47. package/engine/local-client.d.ts +7 -2
  48. package/engine/local-client.lua +81 -0
  49. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  50. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  51. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  52. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  53. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  54. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  55. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  56. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  57. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  58. package/engine/object-data/entry/ability-type.d.ts +0 -1
  59. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  60. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  61. package/engine/object-data/entry/buff-type.d.ts +0 -1
  62. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  63. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  64. package/engine/object-data/entry/item-type.d.ts +12 -1
  65. package/engine/object-data/entry/item-type.lua +78 -0
  66. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  67. package/engine/object-data/entry/unit-type.d.ts +21 -2
  68. package/engine/object-data/entry/unit-type.lua +223 -49
  69. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  70. package/engine/object-data/entry/upgrade.d.ts +0 -1
  71. package/engine/object-data/entry.d.ts +2 -3
  72. package/engine/object-field/ability.d.ts +18 -1
  73. package/engine/object-field/ability.lua +51 -1
  74. package/engine/object-field.d.ts +0 -1
  75. package/engine/random.d.ts +1 -0
  76. package/engine/random.lua +9 -0
  77. package/engine/standard/entries/unit-type.d.ts +39 -1
  78. package/engine/standard/entries/unit-type.lua +39 -1
  79. package/engine/standard/fields/ability.d.ts +1 -1
  80. package/engine/standard/fields/ability.lua +1 -1
  81. package/engine/unit.d.ts +1 -0
  82. package/engine/unit.lua +10 -2
  83. package/event.d.ts +2 -3
  84. package/event.lua +9 -5
  85. package/index.d.ts +1 -0
  86. package/index.lua +1 -0
  87. package/lualib_bundle.lua +146 -42
  88. package/math/vec2.d.ts +2 -9
  89. package/math.d.ts +0 -2
  90. package/net/socket.d.ts +7 -1
  91. package/net/socket.lua +45 -4
  92. package/network.d.ts +1 -0
  93. package/network.lua +3 -2
  94. package/objutil/ability.d.ts +0 -1
  95. package/objutil/buff.d.ts +0 -1
  96. package/objutil/buff.lua +1 -1
  97. package/objutil/object.d.ts +0 -1
  98. package/objutil/unit.d.ts +0 -1
  99. package/package.json +13 -13
  100. package/patch-lua.d.ts +0 -0
  101. package/patch-lua.lua +10 -0
  102. package/property.d.ts +55 -0
  103. package/property.lua +374 -0
  104. package/string.d.ts +16 -0
  105. package/string.lua +5 -0
  106. package/util/stream.d.ts +0 -1
  107. package/utility/arrays.d.ts +3 -4
  108. package/utility/bit-set.d.ts +0 -2
  109. package/utility/linked-set.d.ts +11 -3
  110. package/utility/linked-set.lua +5 -2
  111. package/utility/lua-maps.d.ts +1 -2
  112. package/utility/lua-sets.d.ts +1 -2
  113. package/utility/types.d.ts +1 -0
  114. package/core/mapbounds.d.ts +0 -8
  115. package/core/mapbounds.lua +0 -12
@@ -5,13 +5,17 @@ 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
14
17
  local ____exports = {}
18
+ local mainSelectedUnitByPlayer
15
19
  local ____handle = require("core.types.handle")
16
20
  local Handle = ____handle.Handle
17
21
  local ____player = require("core.types.player")
@@ -47,7 +51,11 @@ local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_R
47
51
  local ____arrays = require("utility.arrays")
48
52
  local forEach = ____arrays.forEach
49
53
  local ____math = require("math")
54
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
50
55
  local min = ____math.min
56
+ local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
57
+ local ____local_2Dclient = require("engine.local-client")
58
+ local LocalClient = ____local_2Dclient.LocalClient
51
59
  local match = string.match
52
60
  local ____tostring = _G.tostring
53
61
  local setUnitAnimation = SetUnitAnimation
@@ -92,6 +100,10 @@ local isUnitInRangeXY = IsUnitInRangeXY
92
100
  local isUnitInRange = IsUnitInRange
93
101
  local setResourceAmount = SetResourceAmount
94
102
  local getResourceAmount = GetResourceAmount
103
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
104
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
105
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
106
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
108
  local unitDisableAbility = BlzUnitDisableAbility
97
109
  local unitInterruptAttack = BlzUnitInterruptAttack
@@ -275,16 +287,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
287
  end
276
288
  local function dispatch(event, idGetter, argsGetter)
277
289
  local initialized = false
278
- local x = {}
279
290
  return setmetatable(
280
- x,
291
+ {},
281
292
  {
282
293
  __index = function(self, id)
283
294
  if type(id) ~= "number" then
284
295
  return event[id]
285
296
  end
286
297
  if not initialized then
287
- local invoke = Event.invoke
288
298
  event:addListener(function(...)
289
299
  local id = idGetter(...)
290
300
  local dispatched = rawget(self, id)
@@ -322,7 +332,6 @@ local function dispatchAbility(event)
322
332
  return event[id]
323
333
  end
324
334
  if not initialized then
325
- local invoke = Event.invoke
326
335
  event:addListener(function(unit, ability, ...)
327
336
  local dispatched = rawget(self, ability.typeId)
328
337
  if dispatched ~= nil then
@@ -387,51 +396,158 @@ local getters = {
387
396
  return BlzGetUnitArmor(unit)
388
397
  end
389
398
  }
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
- }
399
+ ____exports.UnitWeapon = __TS__Class()
400
+ local UnitWeapon = ____exports.UnitWeapon
401
+ UnitWeapon.name = "UnitWeapon"
402
+ function UnitWeapon.prototype.____constructor(self, unit, index)
403
+ self.unit = unit
404
+ self.index = index
405
+ end
406
+ __TS__SetDescriptor(
407
+ UnitWeapon.prototype,
408
+ "cooldown",
409
+ {
410
+ get = function(self)
411
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
412
+ end,
413
+ set = function(self, cooldown)
414
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
415
+ end
416
+ },
417
+ true
418
+ )
419
+ __TS__SetDescriptor(
420
+ UnitWeapon.prototype,
421
+ "damage",
422
+ {
423
+ get = function(self)
424
+ local minimumDamage = self.damageBase + self.damageDiceCount
425
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
426
+ return {minimumDamage, maximumDamage}
427
+ end,
428
+ set = function(self, ____bindingPattern0)
429
+ local maximumDamage
430
+ local minimumDamage
431
+ minimumDamage = ____bindingPattern0[1]
432
+ maximumDamage = ____bindingPattern0[2]
433
+ self.damageBase = minimumDamage - 1
434
+ self.damageDiceCount = 1
435
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
436
+ end
437
+ },
438
+ true
439
+ )
440
+ __TS__SetDescriptor(
441
+ UnitWeapon.prototype,
442
+ "damageBase",
443
+ {
444
+ get = function(self)
445
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
446
+ end,
447
+ set = function(self, damageBase)
448
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
449
+ end
450
+ },
451
+ true
452
+ )
453
+ __TS__SetDescriptor(
454
+ UnitWeapon.prototype,
455
+ "damageDiceCount",
456
+ {
457
+ get = function(self)
458
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
459
+ end,
460
+ set = function(self, damageDiceCount)
461
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
462
+ end
463
+ },
464
+ true
465
+ )
466
+ __TS__SetDescriptor(
467
+ UnitWeapon.prototype,
468
+ "damageDiceSideCount",
469
+ {
470
+ get = function(self)
471
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
472
+ end,
473
+ set = function(self, damageDiceSideCount)
474
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
475
+ end
476
+ },
477
+ true
478
+ )
479
+ __TS__SetDescriptor(
480
+ UnitWeapon.prototype,
481
+ "range",
482
+ {
483
+ get = function(self)
484
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
485
+ end,
486
+ set = function(self, range)
487
+ local handle = self.unit.handle
488
+ local index = self.index
489
+ setUnitWeaponRealField(
490
+ handle,
491
+ UNIT_WEAPON_RF_ATTACK_RANGE,
492
+ index + 1,
493
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
494
+ )
495
+ end
496
+ },
497
+ true
498
+ )
499
+ __TS__SetDescriptor(
500
+ UnitWeapon.prototype,
501
+ "impactDelay",
502
+ {
503
+ get = function(self)
504
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
505
+ end,
506
+ set = function(self, impactDelay)
507
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
508
+ end
509
+ },
510
+ true
511
+ )
512
+ __TS__SetDescriptor(
513
+ UnitWeapon.prototype,
514
+ "missileArc",
515
+ {
516
+ get = function(self)
517
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
518
+ end,
519
+ set = function(self, missileArc)
520
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
521
+ end
522
+ },
523
+ true
524
+ )
525
+ __TS__SetDescriptor(
526
+ UnitWeapon.prototype,
527
+ "missileModelPath",
528
+ {
529
+ get = function(self)
530
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
531
+ end,
532
+ set = function(self, missileModelPath)
533
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
534
+ end
535
+ },
536
+ true
537
+ )
538
+ __TS__SetDescriptor(
539
+ UnitWeapon.prototype,
540
+ "missileSpeed",
541
+ {
542
+ get = function(self)
543
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
544
+ end,
545
+ set = function(self, missileSpeed)
546
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
547
+ end
548
+ },
549
+ true
550
+ )
435
551
  local unitInventorySize = UnitInventorySize
436
552
  local unitItemInSlot = UnitItemInSlot
437
553
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +558,6 @@ local getAbilityName = GetAbilityName
442
558
  local unitAddAbility = UnitAddAbility
443
559
  local getUnitGoldCost = GetUnitGoldCost
444
560
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
561
  local unitRemoveAbility = UnitRemoveAbility
448
562
  local function retrieveAbility(unit, ability, abilityId)
449
563
  if ability == nil then
@@ -520,12 +634,34 @@ for ____, player in ipairs(Player.all) do
520
634
  ShowUnit(dummy, false)
521
635
  dummies[player] = dummy
522
636
  end
637
+ local function delayHealthChecksCallback(unit)
638
+ local counter = (unit[103] or 0) - 1
639
+ if counter ~= 0 then
640
+ unit[103] = counter
641
+ return
642
+ end
643
+ unit[103] = nil
644
+ local healthBonus = unit[104]
645
+ if healthBonus ~= nil then
646
+ unit[104] = nil
647
+ local handle = unit.handle
648
+ BlzSetUnitMaxHP(
649
+ handle,
650
+ BlzGetUnitMaxHP(handle) - healthBonus
651
+ )
652
+ end
653
+ end
654
+ local nextSyncId = 1
655
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
523
656
  ____exports.Unit = __TS__Class()
524
657
  local Unit = ____exports.Unit
525
658
  Unit.name = "Unit"
526
659
  __TS__ClassExtends(Unit, Handle)
527
660
  function Unit.prototype.____constructor(self, handle)
528
661
  Handle.prototype.____constructor(self, handle)
662
+ local ____nextSyncId_0 = nextSyncId
663
+ nextSyncId = ____nextSyncId_0 + 1
664
+ self[100] = ____nextSyncId_0
529
665
  self._owner = Player:of(getOwningPlayer(handle))
530
666
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
667
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +674,7 @@ function Unit.prototype.____constructor(self, handle)
538
674
  fourCC("Amrf")
539
675
  ))
540
676
  end
677
+ unitBySyncId[self[100]] = self
541
678
  local ____ = self.abilities
542
679
  end
543
680
  function Unit.prototype.getEvent(self, event, collector)
@@ -623,8 +760,8 @@ function Unit.prototype.addModifier(self, property, modifier)
623
760
  end}
624
761
  end
625
762
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
763
+ local ____combatClassification_1 = combatClassification
764
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
628
765
  end
629
766
  function Unit.prototype.addClassification(self, classification)
630
767
  return unitAddType(self.handle, classification)
@@ -642,13 +779,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
779
  return isUnitInvisible(self.handle, player.handle)
643
780
  end
644
781
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
782
+ local ____temp_2
646
783
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
784
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
648
785
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
786
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
650
787
  end
651
- return ____temp_1
788
+ return ____temp_2
652
789
  end
653
790
  function Unit.prototype.isAllyOf(self, unit)
654
791
  return isUnitAlly(
@@ -674,6 +811,10 @@ end
674
811
  function Unit.prototype.queueAnimation(self, animation)
675
812
  queueUnitAnimation(self.handle, animation)
676
813
  end
814
+ function Unit.prototype.delayHealthChecks(self)
815
+ self[103] = (self[103] or 0) + 1
816
+ Timer:run(delayHealthChecksCallback, self)
817
+ end
677
818
  function Unit.prototype.setPosition(self, x, y)
678
819
  setUnitPosition(self.handle, x, y)
679
820
  end
@@ -687,8 +828,15 @@ end
687
828
  function Unit.prototype.kill(self)
688
829
  killUnit(self.handle)
689
830
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
831
+ function Unit.prototype.revive(self, x, y, doEffect)
832
+ local ____ReviveHero_5 = ReviveHero
833
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
834
+ local ____doEffect_3 = doEffect
835
+ if ____doEffect_3 == nil then
836
+ ____doEffect_3 = false
837
+ end
838
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
839
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
692
840
  end
693
841
  function Unit.prototype.healTarget(self, target, amount)
694
842
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +876,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
876
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
877
  end
730
878
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
879
+ return Item:of(unitItemInSlot(self.handle, slot))
732
880
  end
733
881
  function Unit.prototype.addAbility(self, abilityId)
734
882
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +932,9 @@ end
784
932
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
933
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
934
  end
935
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
936
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
937
+ end
787
938
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
939
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
940
  end
@@ -855,18 +1006,18 @@ function Unit.prototype.unpauseEx(self)
855
1006
  self:decrementStunCounter()
856
1007
  end
857
1008
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1009
+ local stunCounter = self[102] or 0
1010
+ if not self[101] or stunCounter >= 0 then
860
1011
  BlzPauseUnitEx(self.handle, true)
861
1012
  end
862
- self[101] = stunCounter + 1
1013
+ self[102] = stunCounter + 1
863
1014
  end
864
1015
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1016
+ local stunCounter = self[102] or 0
1017
+ if not self[101] or stunCounter >= 1 then
867
1018
  BlzPauseUnitEx(self.handle, false)
868
1019
  end
869
- self[101] = stunCounter - 1
1020
+ self[102] = stunCounter - 1
870
1021
  end
871
1022
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1023
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1119,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1119
  )
969
1120
  return targetCollection
970
1121
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1122
+ function Unit.getSelectionOf(self, player, target)
1123
+ if target == nil then
1124
+ target = {}
1125
+ end
1126
+ targetCollection = target
973
1127
  targetCollectionNextIndex = 1
974
1128
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1129
  return targetCollection
@@ -991,6 +1145,9 @@ end
991
1145
  function Unit.prototype.__tostring(self)
992
1146
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1147
  end
1148
+ function Unit.getMainSelectedOf(self, player)
1149
+ return mainSelectedUnitByPlayer[player]
1150
+ end
994
1151
  __TS__SetDescriptor(
995
1152
  Unit.prototype,
996
1153
  "_deltas",
@@ -1071,12 +1228,27 @@ __TS__SetDescriptor(
1071
1228
  Unit.prototype,
1072
1229
  "weapons",
1073
1230
  {get = function(self)
1074
- local weapons = {
1075
- setmetatable({h = self.handle, i = 0}, weaponMetatable),
1076
- setmetatable({h = self.handle, i = 1}, weaponMetatable)
1077
- }
1078
- rawset(self, "weapons", weapons)
1079
- return weapons
1231
+ return {self.firstWeapon, self.secondWeapon}
1232
+ end},
1233
+ true
1234
+ )
1235
+ __TS__SetDescriptor(
1236
+ Unit.prototype,
1237
+ "firstWeapon",
1238
+ {get = function(self)
1239
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1240
+ rawset(self, "firstWeapon", weapon)
1241
+ return weapon
1242
+ end},
1243
+ true
1244
+ )
1245
+ __TS__SetDescriptor(
1246
+ Unit.prototype,
1247
+ "secondWeapon",
1248
+ {get = function(self)
1249
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1250
+ rawset(self, "secondWeapon", weapon)
1251
+ return weapon
1080
1252
  end},
1081
1253
  true
1082
1254
  )
@@ -1233,17 +1405,17 @@ __TS__SetDescriptor(
1233
1405
  "isTeamGlowVisible",
1234
1406
  {
1235
1407
  get = function(self)
1236
- return not self[103]
1408
+ return not self[106]
1237
1409
  end,
1238
1410
  set = function(self, isTeamGlowVisible)
1239
1411
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1412
+ local ____temp_6
1241
1413
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1414
+ ____temp_6 = true
1243
1415
  else
1244
- ____temp_2 = nil
1416
+ ____temp_6 = nil
1245
1417
  end
1246
- self[103] = ____temp_2
1418
+ self[106] = ____temp_6
1247
1419
  end
1248
1420
  },
1249
1421
  true
@@ -1253,7 +1425,7 @@ __TS__SetDescriptor(
1253
1425
  "color",
1254
1426
  {set = function(self, color)
1255
1427
  setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1428
+ if self[106] then
1257
1429
  showUnitTeamGlow(self.handle, false)
1258
1430
  end
1259
1431
  end},
@@ -1277,10 +1449,14 @@ __TS__SetDescriptor(
1277
1449
  "maxHealth",
1278
1450
  {
1279
1451
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1452
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1453
  end,
1282
1454
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1455
+ if maxHealth < 1 and self[103] ~= nil then
1456
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1457
+ maxHealth = 1
1458
+ end
1459
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1460
  end
1285
1461
  },
1286
1462
  true
@@ -1322,10 +1498,10 @@ __TS__SetDescriptor(
1322
1498
  "health",
1323
1499
  {
1324
1500
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1501
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1502
  end,
1327
1503
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1504
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1505
  end
1330
1506
  },
1331
1507
  true
@@ -1536,17 +1712,17 @@ __TS__SetDescriptor(
1536
1712
  set = function(self, isPaused)
1537
1713
  local handle = self.handle
1538
1714
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1715
+ self[101] = true
1716
+ for _ = self[102] or 0, -1 do
1541
1717
  BlzPauseUnitEx(handle, true)
1542
1718
  end
1543
1719
  PauseUnit(handle, true)
1544
1720
  elseif not isPaused and IsUnitPaused(handle) then
1545
1721
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1722
+ for _ = self[102] or 0, -1 do
1547
1723
  BlzPauseUnitEx(handle, false)
1548
1724
  end
1549
- self[100] = nil
1725
+ self[101] = nil
1550
1726
  end
1551
1727
  end
1552
1728
  },
@@ -1903,7 +2079,6 @@ Unit.onDecay = __TS__New(
1903
2079
  Unit.onResurrect = __TS__New(
1904
2080
  InitializingEvent,
1905
2081
  function(event)
1906
- local invoke = Event.invoke
1907
2082
  local dead = setmetatable({}, {__mode = "k"})
1908
2083
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2084
  dead[unit] = true
@@ -1919,10 +2094,15 @@ Unit.onResurrect = __TS__New(
1919
2094
  Unit.morphEvent = __TS__New(
1920
2095
  InitializingEvent,
1921
2096
  function(event)
2097
+ local function ifNotLeft(unit)
2098
+ local handle = unit.handle
2099
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2100
+ invoke(event, unit)
2101
+ end
2102
+ end
1922
2103
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2104
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2105
+ Timer:run(ifNotLeft, unit)
1926
2106
  end
1927
2107
  end)
1928
2108
  end
@@ -1960,27 +2140,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2140
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2141
  InitializingEvent,
1962
2142
  function(event)
1963
- local invoke = Event.invoke
1964
2143
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2144
+ local ____GetSpellTargetUnit_result_9
1966
2145
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2146
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2147
  else
1969
- local ____GetSpellTargetItem_result_4
2148
+ local ____GetSpellTargetItem_result_8
1970
2149
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2150
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1972
2151
  else
1973
- local ____GetSpellTargetDestructable_result_3
2152
+ local ____GetSpellTargetDestructable_result_7
1974
2153
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2154
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
1976
2155
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2156
+ ____GetSpellTargetDestructable_result_7 = nil
1978
2157
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2158
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
1980
2159
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2160
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
1982
2161
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2162
+ local target = ____GetSpellTargetUnit_result_9
1984
2163
  if target then
1985
2164
  invoke(event, unit, id, target)
1986
2165
  end
@@ -2177,7 +2356,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2356
  )
2178
2357
  Unit.onDamaging = (function()
2179
2358
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2359
  local trigger = CreateTrigger()
2182
2360
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2361
  TriggerAddCondition(
@@ -2276,7 +2454,6 @@ end)()
2276
2454
  Unit.onDamage = __TS__New(
2277
2455
  InitializingEvent,
2278
2456
  function(event)
2279
- local invoke = Event.invoke
2280
2457
  local trigger = CreateTrigger()
2281
2458
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2459
  TriggerAddCondition(
@@ -2292,6 +2469,7 @@ Unit.onDamage = __TS__New(
2292
2469
  damageType = BlzGetEventDamageType(),
2293
2470
  weaponType = BlzGetEventWeaponType(),
2294
2471
  isAttack = BlzGetEventIsAttack(),
2472
+ originalAmount = GetEventDamage(),
2295
2473
  preventDeath = damageEventPreventDeath
2296
2474
  }
2297
2475
  local evData = setmetatable(
@@ -2308,7 +2486,7 @@ Unit.onDamage = __TS__New(
2308
2486
  invoke(event, source, target, evData)
2309
2487
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2488
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2489
+ target[105] = (target[105] or 0) + bonusHealth
2312
2490
  BlzSetUnitMaxHP(
2313
2491
  target.handle,
2314
2492
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2500,7 @@ Unit.onDamage = __TS__New(
2322
2500
  evData[0],
2323
2501
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2502
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2503
+ target[105] = (target[105] or 0) - bonusHealth
2326
2504
  SetWidgetLife(
2327
2505
  target.handle,
2328
2506
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,7 +2520,7 @@ Unit.onDamage = __TS__New(
2342
2520
  DestroyTrigger(trigger)
2343
2521
  end
2344
2522
  )
2345
- Unit.onItemDrop = __TS__New(
2523
+ Unit.itemDroppedEvent = __TS__New(
2346
2524
  ____exports.UnitTriggerEvent,
2347
2525
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2526
  function()
@@ -2353,7 +2531,7 @@ Unit.onItemDrop = __TS__New(
2353
2531
  return IgnoreEvent
2354
2532
  end
2355
2533
  )
2356
- Unit.onItemPickup = __TS__New(
2534
+ Unit.itemPickedUpEvent = __TS__New(
2357
2535
  ____exports.UnitTriggerEvent,
2358
2536
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2537
  function()
@@ -2364,10 +2542,15 @@ Unit.onItemPickup = __TS__New(
2364
2542
  return IgnoreEvent
2365
2543
  end
2366
2544
  )
2367
- Unit.onItemUse = __TS__New(
2545
+ Unit.itemUsedEvent = __TS__New(
2368
2546
  ____exports.UnitTriggerEvent,
2369
2547
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2548
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2549
+ )
2550
+ Unit.itemStackedEvent = __TS__New(
2551
+ ____exports.UnitTriggerEvent,
2552
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2553
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2371
2554
  )
2372
2555
  __TS__ObjectDefineProperty(
2373
2556
  Unit,
@@ -2427,4 +2610,26 @@ __TS__ObjectDefineProperty(
2427
2610
  end)
2428
2611
  end
2429
2612
  end)(Unit)
2613
+ mainSelectedUnitByPlayer = {}
2614
+ local syncSlider = BlzCreateFrameByType(
2615
+ "SLIDER",
2616
+ "UnitSyncId",
2617
+ BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
2618
+ "",
2619
+ 0
2620
+ )
2621
+ BlzFrameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
2622
+ LocalClient.mainSelectedUnitChangeEvent:addListener(function()
2623
+ local ____opt_10 = LocalClient.mainSelectedUnit
2624
+ local syncId = ____opt_10 and ____opt_10[100]
2625
+ BlzFrameSetValue(syncSlider, syncId or 0)
2626
+ end)
2627
+ local trg = CreateTrigger()
2628
+ BlzTriggerRegisterFrameEvent(trg, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
2629
+ TriggerAddAction(
2630
+ trg,
2631
+ function()
2632
+ mainSelectedUnitByPlayer[Player:of(GetTriggerPlayer())] = unitBySyncId[BlzGetTriggerFrameValue()]
2633
+ end
2634
+ )
2430
2635
  return ____exports