warscript 0.0.1-dev.833c02f → 0.0.1-dev.83ffb73

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 (51) hide show
  1. package/core/types/timer.d.ts +2 -1
  2. package/core/types/timer.lua +7 -2
  3. package/decl/native.d.ts +4 -2
  4. package/engine/behavior.d.ts +2 -0
  5. package/engine/behavior.lua +53 -27
  6. package/engine/behaviour/ability/apply-buff.lua +1 -1
  7. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  8. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  9. package/engine/behaviour/ability.lua +8 -17
  10. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  11. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  12. package/engine/behaviour/unit.d.ts +26 -0
  13. package/engine/behaviour/unit.lua +163 -4
  14. package/engine/buff.d.ts +2 -1
  15. package/engine/buff.lua +9 -3
  16. package/engine/internal/ability.d.ts +4 -0
  17. package/engine/internal/ability.lua +23 -0
  18. package/engine/internal/item/ability.lua +63 -11
  19. package/engine/internal/item.d.ts +3 -1
  20. package/engine/internal/item.lua +75 -3
  21. package/engine/internal/unit/ability.d.ts +35 -0
  22. package/engine/internal/unit/ability.lua +62 -0
  23. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  24. package/engine/internal/unit/allowed-targets.lua +9 -1
  25. package/engine/internal/unit/order.d.ts +20 -0
  26. package/engine/internal/unit/order.lua +136 -0
  27. package/engine/internal/unit-missile-launch.lua +1 -1
  28. package/engine/internal/unit.d.ts +10 -4
  29. package/engine/internal/unit.lua +144 -58
  30. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  31. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  32. package/engine/object-data/entry/ability-type.lua +1 -3
  33. package/engine/object-data/entry/unit-type.d.ts +11 -2
  34. package/engine/object-data/entry/unit-type.lua +59 -1
  35. package/engine/object-field/unit.d.ts +11 -0
  36. package/engine/object-field/unit.lua +34 -0
  37. package/engine/object-field.d.ts +6 -3
  38. package/engine/object-field.lua +85 -73
  39. package/engine/standard/fields/unit.d.ts +4 -0
  40. package/engine/standard/fields/unit.lua +7 -0
  41. package/engine/text-tag.d.ts +36 -2
  42. package/engine/text-tag.lua +175 -10
  43. package/engine/unit.d.ts +1 -0
  44. package/engine/unit.lua +1 -0
  45. package/package.json +2 -2
  46. package/utility/functions.d.ts +5 -0
  47. package/utility/functions.lua +5 -0
  48. package/utility/lua-maps.d.ts +1 -0
  49. package/utility/lua-maps.lua +4 -0
  50. package/core/types/order.d.ts +0 -25
  51. package/core/types/order.lua +0 -55
@@ -60,6 +60,8 @@ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage
60
60
  local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
61
  local ____attributes = require("attributes")
62
62
  local isAttribute = ____attributes.isAttribute
63
+ local ____ability = require("engine.internal.item.ability")
64
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
63
65
  local match = string.match
64
66
  local ____tostring = _G.tostring
65
67
  local setUnitAnimation = SetUnitAnimation
@@ -123,10 +125,6 @@ local getOrderedUnit = GetOrderedUnit
123
125
  local getIssuedOrderId = GetIssuedOrderId
124
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
125
127
  local unitAlive = UnitAlive
126
- local unitAddType = UnitAddType
127
- local unitRemoveType = UnitRemoveType
128
- local isUnitIllusion = IsUnitIllusion
129
- local isUnitType = IsUnitType
130
128
  local isUnitAlly = IsUnitAlly
131
129
  local isUnitEnemy = IsUnitEnemy
132
130
  local getOwningPlayer = GetOwningPlayer
@@ -347,6 +345,9 @@ local function dispatchAbility(event)
347
345
  }
348
346
  )
349
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
350
351
  local function damageEventPreventDeath(self, callback, ...)
351
352
  if self[0] ~= nil then
352
353
  return
@@ -443,6 +444,19 @@ __TS__SetDescriptor(
443
444
  },
444
445
  true
445
446
  )
447
+ __TS__SetDescriptor(
448
+ UnitWeapon.prototype,
449
+ "allowedTargetCombatClassifications",
450
+ {
451
+ get = function(self)
452
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
453
+ end,
454
+ set = function(self, allowedTargetCombatClassifications)
455
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
456
+ end
457
+ },
458
+ true
459
+ )
446
460
  __TS__SetDescriptor(
447
461
  UnitWeapon.prototype,
448
462
  "damageBase",
@@ -649,15 +663,24 @@ end
649
663
  local nextSyncId = 1
650
664
  local unitBySyncId = setmetatable({}, {__mode = "v"})
651
665
  local damagingEventByTarget = setmetatable({}, {__mode = "k"})
666
+ local function addAbility(unit, abilityTypeId)
667
+ local ____unitAddAbility_result_0
668
+ if unitAddAbility(unit, abilityTypeId) then
669
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
670
+ else
671
+ ____unitAddAbility_result_0 = nil
672
+ end
673
+ return ____unitAddAbility_result_0
674
+ end
652
675
  ____exports.Unit = __TS__Class()
653
676
  local Unit = ____exports.Unit
654
677
  Unit.name = "Unit"
655
678
  __TS__ClassExtends(Unit, Handle)
656
679
  function Unit.prototype.____constructor(self, handle)
657
680
  Handle.prototype.____constructor(self, handle)
658
- local ____nextSyncId_0 = nextSyncId
659
- nextSyncId = ____nextSyncId_0 + 1
660
- self.syncId = ____nextSyncId_0
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
661
684
  self._owner = Player:of(getOwningPlayer(handle))
662
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
663
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -758,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
758
781
  end}
759
782
  end
760
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
761
- local ____combatClassification_1 = combatClassification
762
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
784
+ local ____combatClassification_2 = combatClassification
785
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
763
786
  end
764
787
  function Unit.prototype.addClassification(self, classification)
765
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
766
789
  end
767
790
  function Unit.prototype.removeClassification(self, classification)
768
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
769
792
  end
770
793
  function Unit.prototype.hasClassification(self, classification)
771
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
772
795
  end
773
796
  function Unit.prototype.isVisibleTo(self, player)
774
797
  return isUnitVisible(self.handle, player.handle)
@@ -777,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
777
800
  return isUnitInvisible(self.handle, player.handle)
778
801
  end
779
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
780
- local ____temp_2
803
+ local ____temp_3
781
804
  if type(x) == "number" then
782
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
783
806
  else
784
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
785
808
  end
786
- return ____temp_2
809
+ return ____temp_3
787
810
  end
788
811
  function Unit.prototype.isAllyOf(self, unit)
789
812
  return isUnitAlly(
@@ -812,6 +835,15 @@ end
812
835
  function Unit.prototype.queueAnimation(self, animation)
813
836
  QueueUnitAnimation(self.handle, animation)
814
837
  end
838
+ function Unit.prototype.chooseWeapon(self, target)
839
+ if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
840
+ return self.firstWeapon
841
+ end
842
+ if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
843
+ return self.secondWeapon
844
+ end
845
+ return nil
846
+ end
815
847
  function Unit.prototype.delayHealthChecks(self)
816
848
  self[103] = (self[103] or 0) + 1
817
849
  Timer:run(delayHealthChecksCallback, self)
@@ -830,14 +862,14 @@ function Unit.prototype.kill(self)
830
862
  killUnit(self.handle)
831
863
  end
832
864
  function Unit.prototype.revive(self, x, y, doEffect)
833
- local ____ReviveHero_5 = ReviveHero
834
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
835
- local ____doEffect_3 = doEffect
836
- if ____doEffect_3 == nil then
837
- ____doEffect_3 = false
865
+ local ____ReviveHero_6 = ReviveHero
866
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
867
+ local ____doEffect_4 = doEffect
868
+ if ____doEffect_4 == nil then
869
+ ____doEffect_4 = false
838
870
  end
839
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
840
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
871
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
872
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
841
873
  end
842
874
  function Unit.prototype.healTarget(self, target, amount)
843
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -880,17 +912,16 @@ function Unit.prototype.itemInSlot(self, slot)
880
912
  return Item:of(unitItemInSlot(self.handle, slot))
881
913
  end
882
914
  function Unit.prototype.addAbility(self, abilityId)
883
- if unitAddAbility(self.handle, abilityId) then
884
- local ability = UnitAbility:of(
885
- checkNotNull(getUnitAbility(self.handle, abilityId)),
886
- abilityId,
887
- self
888
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
889
921
  local abilities = self.abilities
890
922
  abilities[#abilities + 1] = ability
891
- return ability
892
923
  end
893
- return nil
924
+ return ability
894
925
  end
895
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
896
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -905,19 +936,11 @@ function Unit.prototype.hasAbility(self, abilityId)
905
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
906
937
  end
907
938
  function Unit.prototype.getAbilityById(self, abilityId)
908
- local handle = self.handle
909
- if unitAddAbility(handle, abilityId) then
910
- assert(unitRemoveAbility(handle, abilityId))
911
- return nil
912
- end
913
- return UnitAbility:of(
914
- getUnitAbility(self.handle, abilityId),
915
- abilityId,
916
- self
917
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
918
941
  end
919
942
  function Unit.prototype.removeAbility(self, abilityId)
920
- if unitRemoveAbility(self.handle, abilityId) then
943
+ if doUnitAbilityAction(self.handle, abilityId, unitRemoveAbility, abilityId) then
921
944
  local abilities = self.abilities
922
945
  for i = 1, #abilities do
923
946
  if abilities[i].typeId == abilityId then
@@ -942,6 +965,21 @@ end
942
965
  function Unit.prototype.endAbilityCooldown(self, abilityId)
943
966
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
944
967
  end
968
+ function Unit.prototype.interruptMovement(self)
969
+ local handle = self.handle
970
+ unitDisableAbility(
971
+ handle,
972
+ fourCC("Amov"),
973
+ true,
974
+ false
975
+ )
976
+ unitDisableAbility(
977
+ handle,
978
+ fourCC("Amov"),
979
+ false,
980
+ false
981
+ )
982
+ end
945
983
  function Unit.prototype.interruptAttack(self)
946
984
  unitInterruptAttack(self.handle)
947
985
  end
@@ -1215,7 +1253,7 @@ __TS__SetDescriptor(
1215
1253
  Unit.prototype,
1216
1254
  "isIllusion",
1217
1255
  {get = function(self)
1218
- return isUnitIllusion(self.handle)
1256
+ return IsUnitIllusion(self.handle)
1219
1257
  end},
1220
1258
  true
1221
1259
  )
@@ -1438,13 +1476,13 @@ __TS__SetDescriptor(
1438
1476
  end,
1439
1477
  set = function(self, isTeamGlowVisible)
1440
1478
  BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1441
- local ____temp_6
1479
+ local ____temp_7
1442
1480
  if not isTeamGlowVisible then
1443
- ____temp_6 = true
1481
+ ____temp_7 = true
1444
1482
  else
1445
- ____temp_6 = nil
1483
+ ____temp_7 = nil
1446
1484
  end
1447
- self[106] = ____temp_6
1485
+ self[106] = ____temp_7
1448
1486
  end
1449
1487
  },
1450
1488
  true
@@ -2048,6 +2086,14 @@ __TS__SetDescriptor(
2048
2086
  end},
2049
2087
  true
2050
2088
  )
2089
+ __TS__SetDescriptor(
2090
+ Unit.prototype,
2091
+ "targetAcquiredEvent",
2092
+ {get = function(self)
2093
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2094
+ end},
2095
+ true
2096
+ )
2051
2097
  __TS__SetDescriptor(
2052
2098
  Unit.prototype,
2053
2099
  "onSelect",
@@ -2183,25 +2229,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2183
2229
  InitializingEvent,
2184
2230
  function(event)
2185
2231
  local function listener(unit, id)
2186
- local ____GetSpellTargetUnit_result_9
2232
+ local ____GetSpellTargetUnit_result_10
2187
2233
  if GetSpellTargetUnit() then
2188
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2234
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2189
2235
  else
2190
- local ____GetSpellTargetItem_result_8
2236
+ local ____GetSpellTargetItem_result_9
2191
2237
  if GetSpellTargetItem() then
2192
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2238
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2193
2239
  else
2194
- local ____GetSpellTargetDestructable_result_7
2240
+ local ____GetSpellTargetDestructable_result_8
2195
2241
  if GetSpellTargetDestructable() then
2196
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2242
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2197
2243
  else
2198
- ____GetSpellTargetDestructable_result_7 = nil
2244
+ ____GetSpellTargetDestructable_result_8 = nil
2199
2245
  end
2200
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2246
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2201
2247
  end
2202
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2248
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2203
2249
  end
2204
- local target = ____GetSpellTargetUnit_result_9
2250
+ local target = ____GetSpellTargetUnit_result_10
2205
2251
  if target then
2206
2252
  invoke(event, unit, id, target)
2207
2253
  end
@@ -2420,7 +2466,8 @@ Unit.onDamaging = (function()
2420
2466
  metadata = metadata,
2421
2467
  isAttack = BlzGetEventIsAttack(),
2422
2468
  originalAmount = GetEventDamage(),
2423
- originalMetadata = metadata
2469
+ originalMetadata = metadata,
2470
+ preventRetaliation = damagingEventPreventRetaliation
2424
2471
  }
2425
2472
  if data.isAttack and source then
2426
2473
  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
@@ -2449,6 +2496,20 @@ Unit.onDamaging = (function()
2449
2496
  }
2450
2497
  )
2451
2498
  )
2499
+ if data[0] and source then
2500
+ local sourceOwner = source.owner.handle
2501
+ data[1] = sourceOwner
2502
+ local targetOwner = target.owner.handle
2503
+ data[2] = targetOwner
2504
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2505
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2506
+ data[3] = true
2507
+ end
2508
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2509
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2510
+ data[4] = true
2511
+ end
2512
+ end
2452
2513
  damagingEventByTarget[target] = data
2453
2514
  return
2454
2515
  end
@@ -2532,6 +2593,16 @@ Unit.onDamage = __TS__New(
2532
2593
  data[key] = value
2533
2594
  end
2534
2595
  end
2596
+ local sourceOwner = damagingEvent[1]
2597
+ if sourceOwner then
2598
+ local targetOwner = damagingEvent[2]
2599
+ if damagingEvent[3] then
2600
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2601
+ end
2602
+ if damagingEvent[4] then
2603
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2604
+ end
2605
+ end
2535
2606
  end
2536
2607
  local evData = setmetatable(
2537
2608
  {},
@@ -2624,6 +2695,21 @@ Unit.itemStackedEvent = __TS__New(
2624
2695
  EVENT_PLAYER_UNIT_STACK_ITEM,
2625
2696
  function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2626
2697
  )
2698
+ __TS__ObjectDefineProperty(
2699
+ Unit,
2700
+ "itemChargesChangedEvent",
2701
+ {get = function(self)
2702
+ local event = __TS__New(Event)
2703
+ Item.chargesChangedEvent:addListener(function(item)
2704
+ local unit = item.owner
2705
+ if unit ~= nil then
2706
+ invoke(event, unit, item)
2707
+ end
2708
+ end)
2709
+ rawset(self, "itemChargesChangedEvent", event)
2710
+ return event
2711
+ end}
2712
+ )
2627
2713
  __TS__ObjectDefineProperty(
2628
2714
  Unit,
2629
2715
  "itemUseOrderEvent",
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum ArmorType {
3
+ LIGHT = 0,
4
+ MEDIUM = 1,
5
+ HEAVY = 2,
6
+ FORTIFIED = 3,
7
+ NORMAL = 4,
8
+ HERO = 5,
9
+ DIVINE = 6,
10
+ UNARMORED = 7
11
+ }
@@ -0,0 +1,46 @@
1
+ local ____exports = {}
2
+ local ____records = require("utility.records")
3
+ local invertRecord = ____records.invertRecord
4
+ local stringByArmorType = {
5
+ [0] = "small",
6
+ [1] = "medium",
7
+ [2] = "large",
8
+ [3] = "fort",
9
+ [4] = "normal",
10
+ [5] = "hero",
11
+ [6] = "divine",
12
+ [7] = "none"
13
+ }
14
+ local armorTypeByString = invertRecord(stringByArmorType)
15
+ local nativeByArmorType = {
16
+ [0] = DEFENSE_TYPE_LIGHT,
17
+ [1] = DEFENSE_TYPE_MEDIUM,
18
+ [2] = DEFENSE_TYPE_LARGE,
19
+ [3] = DEFENSE_TYPE_FORT,
20
+ [4] = DEFENSE_TYPE_NORMAL,
21
+ [5] = DEFENSE_TYPE_HERO,
22
+ [6] = DEFENSE_TYPE_DIVINE,
23
+ [7] = DEFENSE_TYPE_NONE
24
+ }
25
+ local armorTypeByNative = invertRecord(nativeByArmorType)
26
+ ---
27
+ -- @internal For use by internal systems only.
28
+ ____exports.armorTypeToString = function(armorType)
29
+ return stringByArmorType[armorType]
30
+ end
31
+ ---
32
+ -- @internal For use by internal systems only.
33
+ ____exports.stringToArmorType = function(____string)
34
+ return armorTypeByString[____string] or 7
35
+ end
36
+ ---
37
+ -- @internal For use by internal systems only.
38
+ ____exports.armorTypeToNative = function(armorType)
39
+ return nativeByArmorType[armorType]
40
+ end
41
+ ---
42
+ -- @internal For use by internal systems only.
43
+ ____exports.nativeToArmorType = function(armorType)
44
+ return armorTypeByNative[armorType]
45
+ end
46
+ return ____exports
@@ -979,9 +979,7 @@ for abilityTypeId, animationFQN in pairs(postcompile(function() return castAnima
979
979
  4,
980
980
  function(caster, ability)
981
981
  if ability:getField(ABILITY_RLF_CASTING_TIME) ~= 0 then
982
- Timer:run(function()
983
- caster:playAnimation(animationFQN)
984
- end)
982
+ Timer:run(caster, "playAnimation", animationFQN)
985
983
  end
986
984
  end
987
985
  )
@@ -13,6 +13,7 @@ import type { AbilityTypeId } from "./ability-type";
13
13
  import type { UpgradeId } from "./upgrade";
14
14
  import { AnimationQualifier } from "../auxiliary/animation-qualifier";
15
15
  import { AttackType } from "../auxiliary/attack-type";
16
+ import { ArmorType } from "../auxiliary/armor-type";
16
17
  export type UnitTypeId = ObjectDataEntryId & number & {
17
18
  readonly __unitTypeId: unique symbol;
18
19
  };
@@ -144,6 +145,8 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
144
145
  set runSpeedSD(runSpeedSD: number);
145
146
  get runSpeedHD(): number;
146
147
  set runSpeedHD(runSpeedHD: number);
148
+ get selectionCircleHeight(): number;
149
+ set selectionCircleHeight(height: number);
147
150
  get selectionCircleScale(): number;
148
151
  set selectionCircleScale(selectionCircleScale: number);
149
152
  get selectionCircleScaleSD(): number;
@@ -182,16 +185,20 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
182
185
  set walkSpeedSD(walkSpeedSD: number);
183
186
  get walkSpeedHD(): number;
184
187
  set walkSpeedHD(walkSpeedHD: number);
188
+ get armor(): number;
189
+ set armor(armor: number);
185
190
  get armorSoundType(): ArmorSoundType;
186
191
  set armorSoundType(armorSoundType: ArmorSoundType);
187
192
  get armorSoundTypeSD(): ArmorSoundType;
188
193
  set armorSoundTypeSD(armorSoundTypeSD: ArmorSoundType);
189
194
  get armorSoundTypeHD(): ArmorSoundType;
190
195
  set armorSoundTypeHD(armorSoundTypeHD: ArmorSoundType);
196
+ get armorType(): ArmorType;
197
+ set armorType(armorType: ArmorType);
191
198
  get combatClassifications(): CombatClassifications;
192
199
  set combatClassifications(combatClassifications: CombatClassifications);
193
- get unitClassifications(): UnitClassifications;
194
- set unitClassifications(unitClassifications: UnitClassifications);
200
+ get classifications(): UnitClassifications;
201
+ set classifications(unitClassifications: UnitClassifications);
195
202
  get weapons(): TupleOf<UnitTypeWeapon, 2>;
196
203
  get firstWeapon(): UnitTypeWeapon;
197
204
  get secondWeapon(): UnitTypeWeapon;
@@ -225,6 +232,8 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
225
232
  set goldCost(goldCost: number);
226
233
  get healthRegenerationRate(): number;
227
234
  set healthRegenerationRate(healthRegenerationRate: number);
235
+ get level(): number;
236
+ set level(level: number);
228
237
  get manaRegenerationRate(): number;
229
238
  set manaRegenerationRate(manaRegenerationRate: number);
230
239
  get maximumHealth(): number;
@@ -27,6 +27,9 @@ local attackTypeToString = ____attack_2Dtype.attackTypeToString
27
27
  local stringToAttackType = ____attack_2Dtype.stringToAttackType
28
28
  local ____config = require("config")
29
29
  local WarscriptConfig = ____config.WarscriptConfig
30
+ local ____armor_2Dtype = require("engine.object-data.auxiliary.armor-type")
31
+ local armorTypeToString = ____armor_2Dtype.armorTypeToString
32
+ local stringToArmorType = ____armor_2Dtype.stringToArmorType
30
33
  local getOrCreateUnitTypeWeapons
31
34
  ____exports.UnitTypeWeapon = __TS__Class()
32
35
  local UnitTypeWeapon = ____exports.UnitTypeWeapon
@@ -936,6 +939,19 @@ __TS__SetDescriptor(
936
939
  },
937
940
  true
938
941
  )
942
+ __TS__SetDescriptor(
943
+ UnitType.prototype,
944
+ "selectionCircleHeight",
945
+ {
946
+ get = function(self)
947
+ return self:getNumberField("uslz")
948
+ end,
949
+ set = function(self, height)
950
+ self:setNumberField("uslz", height)
951
+ end
952
+ },
953
+ true
954
+ )
939
955
  __TS__SetDescriptor(
940
956
  UnitType.prototype,
941
957
  "selectionCircleScale",
@@ -1183,6 +1199,19 @@ __TS__SetDescriptor(
1183
1199
  },
1184
1200
  true
1185
1201
  )
1202
+ __TS__SetDescriptor(
1203
+ UnitType.prototype,
1204
+ "armor",
1205
+ {
1206
+ get = function(self)
1207
+ return self:getNumberField("udef")
1208
+ end,
1209
+ set = function(self, armor)
1210
+ self:setNumberField("udef", armor)
1211
+ end
1212
+ },
1213
+ true
1214
+ )
1186
1215
  __TS__SetDescriptor(
1187
1216
  UnitType.prototype,
1188
1217
  "armorSoundType",
@@ -1222,6 +1251,22 @@ __TS__SetDescriptor(
1222
1251
  },
1223
1252
  true
1224
1253
  )
1254
+ __TS__SetDescriptor(
1255
+ UnitType.prototype,
1256
+ "armorType",
1257
+ {
1258
+ get = function(self)
1259
+ return stringToArmorType(self:getStringField("udty"))
1260
+ end,
1261
+ set = function(self, armorType)
1262
+ self:setStringField(
1263
+ "udty",
1264
+ armorTypeToString(armorType)
1265
+ )
1266
+ end
1267
+ },
1268
+ true
1269
+ )
1225
1270
  __TS__SetDescriptor(
1226
1271
  UnitType.prototype,
1227
1272
  "combatClassifications",
@@ -1240,7 +1285,7 @@ __TS__SetDescriptor(
1240
1285
  )
1241
1286
  __TS__SetDescriptor(
1242
1287
  UnitType.prototype,
1243
- "unitClassifications",
1288
+ "classifications",
1244
1289
  {
1245
1290
  get = function(self)
1246
1291
  return stringArrayToUnitClassifications(self:getStringsField("utyp"))
@@ -1476,6 +1521,19 @@ __TS__SetDescriptor(
1476
1521
  },
1477
1522
  true
1478
1523
  )
1524
+ __TS__SetDescriptor(
1525
+ UnitType.prototype,
1526
+ "level",
1527
+ {
1528
+ get = function(self)
1529
+ return self:getNumberField("ulev")
1530
+ end,
1531
+ set = function(self, level)
1532
+ self:setNumberField("ulev", level)
1533
+ end
1534
+ },
1535
+ true
1536
+ )
1479
1537
  __TS__SetDescriptor(
1480
1538
  UnitType.prototype,
1481
1539
  "manaRegenerationRate",
@@ -4,6 +4,7 @@ import { ObjectField, ObjectLevelField, ObjectLevelFieldValueChangeEvent, Readon
4
4
  import { UnitType, UnitTypeId } from "../object-data/entry/unit-type";
5
5
  import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
6
6
  import { AttackType } from "../object-data/auxiliary/attack-type";
7
+ import { UnitClassifications } from "../object-data/auxiliary/unit-classification";
7
8
  export declare abstract class UnitField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = any> extends ObjectField<UnitType, Unit, ValueType, NativeFieldType> {
8
9
  protected get instanceClass(): typeof Unit;
9
10
  protected getObjectDataEntryId(instance: Unit): UnitTypeId;
@@ -56,4 +57,14 @@ export declare abstract class UnitEnumWeaponField<T extends number> extends Unit
56
57
  export declare class UnitAttackTypeWeaponField extends UnitEnumWeaponField<AttackType> {
57
58
  protected values: ReadonlyNonEmptyLinkedSet<AttackType>;
58
59
  }
60
+ export declare class UnitClassificationsField extends UnitField<UnitClassifications, junitintegerfield> {
61
+ protected get defaultValue(): UnitClassifications;
62
+ protected getNativeFieldById(id: number): junitintegerfield;
63
+ protected getNativeFieldValue(instance: Unit): UnitClassifications;
64
+ protected setNativeFieldValue(instance: Unit, value: UnitClassifications): boolean;
65
+ }
66
+ export declare class UnitPropulsionWindowField extends UnitFloatField {
67
+ protected getNativeFieldValue(instance: Unit): number;
68
+ protected setNativeFieldValue(instance: Unit, value: number): boolean;
69
+ }
59
70
  export {};
@@ -18,6 +18,8 @@ local convertUnitStringField = ConvertUnitStringField
18
18
  local convertUnitWeaponIntegerField = ConvertUnitWeaponIntegerField
19
19
  local getUnitWeaponIntegerField = BlzGetUnitWeaponIntegerField
20
20
  local setUnitWeaponIntegerField = BlzSetUnitWeaponIntegerField
21
+ local getUnitPropulsionWindow = GetUnitPropWindow
22
+ local setUnitPropulsionWindow = SetUnitPropWindow
21
23
  ____exports.UnitField = __TS__Class()
22
24
  local UnitField = ____exports.UnitField
23
25
  UnitField.name = "UnitField"
@@ -215,4 +217,36 @@ function UnitAttackTypeWeaponField.prototype.____constructor(self, ...)
215
217
  6
216
218
  )
217
219
  end
220
+ ____exports.UnitClassificationsField = __TS__Class()
221
+ local UnitClassificationsField = ____exports.UnitClassificationsField
222
+ UnitClassificationsField.name = "UnitClassificationsField"
223
+ __TS__ClassExtends(UnitClassificationsField, ____exports.UnitField)
224
+ function UnitClassificationsField.prototype.getNativeFieldById(self, id)
225
+ return convertUnitIntegerField(id)
226
+ end
227
+ function UnitClassificationsField.prototype.getNativeFieldValue(self, instance)
228
+ return instance:getField(self.nativeField)
229
+ end
230
+ function UnitClassificationsField.prototype.setNativeFieldValue(self, instance, value)
231
+ return instance:setField(self.nativeField, value)
232
+ end
233
+ __TS__SetDescriptor(
234
+ UnitClassificationsField.prototype,
235
+ "defaultValue",
236
+ {get = function(self)
237
+ return 0
238
+ end},
239
+ true
240
+ )
241
+ ____exports.UnitPropulsionWindowField = __TS__Class()
242
+ local UnitPropulsionWindowField = ____exports.UnitPropulsionWindowField
243
+ UnitPropulsionWindowField.name = "UnitPropulsionWindowField"
244
+ __TS__ClassExtends(UnitPropulsionWindowField, ____exports.UnitFloatField)
245
+ function UnitPropulsionWindowField.prototype.getNativeFieldValue(self, instance)
246
+ return getUnitPropulsionWindow(instance.handle)
247
+ end
248
+ function UnitPropulsionWindowField.prototype.setNativeFieldValue(self, instance, value)
249
+ setUnitPropulsionWindow(instance.handle, value)
250
+ return true
251
+ end
218
252
  return ____exports