warscript 0.0.1-dev.b530e1f → 0.0.1-dev.c16baee

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 (93) hide show
  1. package/attributes.d.ts +12 -0
  2. package/attributes.lua +16 -0
  3. package/core/types/frame.d.ts +0 -1
  4. package/core/types/group.d.ts +0 -1
  5. package/core/types/handle.d.ts +2 -1
  6. package/core/types/handle.lua +5 -2
  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/decl/index.d.ts +1 -0
  12. package/engine/ability.d.ts +1 -1
  13. package/engine/behavior.d.ts +10 -10
  14. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  15. package/engine/behaviour/ability/apply-unit-behavior.lua +31 -9
  16. package/engine/behaviour/ability/instant-impact.lua +4 -0
  17. package/engine/behaviour/ability.d.ts +8 -1
  18. package/engine/behaviour/ability.lua +62 -0
  19. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  20. package/engine/behaviour/unit.d.ts +3 -2
  21. package/engine/behaviour/unit.lua +7 -0
  22. package/engine/buff.d.ts +2 -2
  23. package/engine/buff.lua +8 -10
  24. package/engine/internal/ability.d.ts +1 -1
  25. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  26. package/engine/internal/mechanics/ability-duration.lua +2 -0
  27. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  28. package/engine/internal/mechanics/cast-ability.lua +86 -0
  29. package/engine/internal/unit/bonus.d.ts +5 -6
  30. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  31. package/engine/internal/unit/detach-missiles.lua +30 -0
  32. package/engine/internal/unit-missile-launch.lua +1 -1
  33. package/engine/internal/unit.d.ts +37 -10
  34. package/engine/internal/unit.lua +241 -84
  35. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  36. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  37. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  38. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  39. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  40. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  41. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  42. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  43. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  44. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  45. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  46. package/engine/object-data/entry/ability-type.d.ts +0 -1
  47. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  48. package/engine/object-data/entry/buff-type/applicable.lua +27 -71
  49. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  50. package/engine/object-data/entry/buff-type.d.ts +0 -1
  51. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  52. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  53. package/engine/object-data/entry/item-type.d.ts +0 -1
  54. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  55. package/engine/object-data/entry/unit-type.d.ts +42 -2
  56. package/engine/object-data/entry/unit-type.lua +378 -50
  57. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  58. package/engine/object-data/entry/upgrade.d.ts +0 -1
  59. package/engine/object-data/entry.d.ts +2 -3
  60. package/engine/object-field/ability.d.ts +8 -6
  61. package/engine/object-field/ability.lua +6 -0
  62. package/engine/object-field/unit.d.ts +1 -0
  63. package/engine/object-field/unit.lua +3 -0
  64. package/engine/object-field.d.ts +2 -1
  65. package/engine/object-field.lua +16 -12
  66. package/engine/random.d.ts +1 -0
  67. package/engine/random.lua +9 -0
  68. package/engine/standard/entries/unit-type.d.ts +42 -1
  69. package/engine/standard/entries/unit-type.lua +42 -1
  70. package/engine/standard/fields/ability.d.ts +1 -1
  71. package/engine/standard/fields/ability.lua +1 -1
  72. package/engine/unit.d.ts +1 -0
  73. package/engine/unit.lua +10 -2
  74. package/event.d.ts +2 -3
  75. package/event.lua +9 -5
  76. package/global/vec2.lua +1 -0
  77. package/lualib_bundle.lua +139 -40
  78. package/math/vec2.d.ts +2 -9
  79. package/math.d.ts +0 -2
  80. package/objutil/ability.d.ts +0 -1
  81. package/objutil/buff.d.ts +0 -1
  82. package/objutil/object.d.ts +0 -1
  83. package/objutil/unit.d.ts +0 -1
  84. package/package.json +13 -14
  85. package/string.d.ts +30 -0
  86. package/string.lua +14 -0
  87. package/util/stream.d.ts +0 -1
  88. package/utility/arrays.d.ts +3 -4
  89. package/utility/bit-set.d.ts +0 -2
  90. package/utility/linked-set.d.ts +1 -2
  91. package/utility/lua-maps.d.ts +1 -2
  92. package/utility/lua-sets.d.ts +1 -2
  93. package/utility/types.d.ts +2 -2
@@ -0,0 +1,86 @@
1
+ local ____exports = {}
2
+ local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
3
+ local AbilityType = ____ability_2Dtype.AbilityType
4
+ local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
5
+ local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
6
+ local ____dummy_2Dunits = require("engine.internal.misc.dummy-units")
7
+ local INVENTORY_DUMMY_NATIVE_UNIT = ____dummy_2Dunits.INVENTORY_DUMMY_NATIVE_UNIT
8
+ local ____preconditions = require("utility.preconditions")
9
+ local checkNotNull = ____preconditions.checkNotNull
10
+ local ____dummy_2Dinventory = require("engine.internal.object-data.dummy-inventory")
11
+ local INVENTORY_ABILITY_TYPE_ID = ____dummy_2Dinventory.INVENTORY_ABILITY_TYPE_ID
12
+ local ____arrays = require("utility.arrays")
13
+ local map = ____arrays.map
14
+ local toLuaSet = ____arrays.toLuaSet
15
+ local createItem = CreateItem
16
+ local getAbilityId = BlzGetAbilityId
17
+ local getItemAbility = BlzGetItemAbility
18
+ local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
19
+ local itemAddAbility = BlzItemAddAbility
20
+ local setItemBooleanField = BlzSetItemBooleanField
21
+ local removeItem = RemoveItem
22
+ local unitAddAbility = UnitAddAbility
23
+ local unitAddItem = UnitAddItem
24
+ local unitDropItemSlot = UnitDropItemSlot
25
+ local unitInventorySize = UnitInventorySize
26
+ local unitRemoveAbility = UnitRemoveAbility
27
+ local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
28
+ local INVENTORY_ABILITY_TYPE_IDS = postcompile(function()
29
+ return toLuaSet(AbilityType:getAllIdsByBaseIds(map({
30
+ "AInv",
31
+ "Aihn",
32
+ "Aien",
33
+ "Aion",
34
+ "Aiun"
35
+ }, fourCC)))
36
+ end)
37
+ ---
38
+ -- @internal For use by internal systems only.
39
+ ____exports.castAbility = function(nativeUnit, abilityTypeId, prepareAbility, ...)
40
+ local nativeItem = createItem(DUMMY_ITEM_ID, 0, 0)
41
+ unitAddItem(INVENTORY_DUMMY_NATIVE_UNIT, nativeItem)
42
+ itemAddAbility(nativeItem, abilityTypeId)
43
+ local nativeAbility = checkNotNull(getItemAbility(nativeItem, abilityTypeId))
44
+ if prepareAbility ~= nil then
45
+ prepareAbility(nativeAbility, ...)
46
+ end
47
+ setItemBooleanField(nativeItem, ITEM_BF_ACTIVELY_USED, true)
48
+ setItemBooleanField(nativeItem, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
49
+ local success
50
+ if unitAddItem(nativeUnit, nativeItem) then
51
+ success = true
52
+ else
53
+ local latestInventoryAbilityTypeId = 0
54
+ local nativeItemBySlot = {}
55
+ local inventorySize = unitInventorySize(nativeUnit)
56
+ if inventorySize ~= 0 then
57
+ for slot = 0, inventorySize - 1 do
58
+ nativeItemBySlot[slot] = unitRemoveItemFromSlot(nativeUnit, slot)
59
+ end
60
+ local unitNativeAbility = getUnitAbilityByIndex(nativeUnit, 0)
61
+ local i = 1
62
+ while unitNativeAbility ~= nil do
63
+ local abilityTypeId = getAbilityId(unitNativeAbility)
64
+ if INVENTORY_ABILITY_TYPE_IDS[abilityTypeId] ~= nil then
65
+ latestInventoryAbilityTypeId = abilityTypeId
66
+ end
67
+ unitNativeAbility = getUnitAbilityByIndex(nativeUnit, i)
68
+ i = i + 1
69
+ end
70
+ unitRemoveAbility(nativeUnit, latestInventoryAbilityTypeId)
71
+ end
72
+ unitAddAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
73
+ success = unitAddItem(nativeUnit, nativeItem)
74
+ unitRemoveAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
75
+ if latestInventoryAbilityTypeId ~= 0 then
76
+ unitAddAbility(nativeUnit, latestInventoryAbilityTypeId)
77
+ for slot, nativeItem in pairs(nativeItemBySlot) do
78
+ unitAddItem(nativeUnit, nativeItem)
79
+ unitDropItemSlot(nativeUnit, nativeItem, slot)
80
+ end
81
+ end
82
+ end
83
+ removeItem(nativeItem)
84
+ return success
85
+ end
86
+ return ____exports
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { Unit } from "../unit";
4
3
  import { AbilityTypeId } from "../../object-data/entry/ability-type";
@@ -34,8 +33,8 @@ export declare namespace UnitBonusType {
34
33
  const DAMAGE: UnitBonusType<UnitDamageBonusId>;
35
34
  const RECEIVED_DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
36
35
  }
37
- export declare const addUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
38
- export declare const removeUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => boolean;
39
- export declare const updateUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id, value: number) => boolean;
40
- export declare const addOrUpdateOrRemoveUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id | undefined, value: number) => Id | undefined;
41
- export declare const getUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => number;
36
+ export declare const addUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
37
+ export declare const removeUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => boolean;
38
+ export declare const updateUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id, value: number) => boolean;
39
+ export declare const addOrUpdateOrRemoveUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id | undefined, value: number) => Id | undefined;
40
+ export declare const getUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => number;
@@ -0,0 +1,7 @@
1
+ /** @noSelfInFile */
2
+ declare module "../unit" {
3
+ interface Unit {
4
+ detachMissiles(this: Unit): void;
5
+ }
6
+ }
7
+ export {};
@@ -0,0 +1,30 @@
1
+ local ____exports = {}
2
+ local ____unit = require("engine.internal.unit")
3
+ local Unit = ____unit.Unit
4
+ local ____cast_2Dability = require("engine.internal.mechanics.cast-ability")
5
+ local castAbility = ____cast_2Dability.castAbility
6
+ local ____blink = require("engine.object-data.entry.ability-type.blink")
7
+ local BlinkAbilityType = ____blink.BlinkAbilityType
8
+ local ____math = require("math")
9
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
10
+ local getUnitX = GetUnitX
11
+ local getUnitY = GetUnitY
12
+ local setUnitX = SetUnitX
13
+ local setUnitY = SetUnitY
14
+ local BLINK_ABILITY_TYPE_ID = compiletime(function()
15
+ local abilityType = BlinkAbilityType:create()
16
+ abilityType.minimumRange = 0
17
+ abilityType.maximumRange = MAXIMUM_INTEGER
18
+ abilityType.manaCost = 0
19
+ abilityType.cooldown = 0
20
+ return abilityType.id
21
+ end)
22
+ Unit.prototype.detachMissiles = function(self)
23
+ local nativeUnit = self.handle
24
+ local x = getUnitX(nativeUnit)
25
+ local y = getUnitY(nativeUnit)
26
+ castAbility(nativeUnit, BLINK_ABILITY_TYPE_ID)
27
+ setUnitX(nativeUnit, x)
28
+ setUnitY(nativeUnit, y)
29
+ end
30
+ return ____exports
@@ -25,7 +25,7 @@ local function timerCallback(source, target)
25
25
  Event.invoke(autoAttackFinishEvent, source, target)
26
26
  end
27
27
  Unit.autoAttackStartEvent:addListener(function(source, target)
28
- local attackPoint = source.weapons[1].attackPoint
28
+ local attackPoint = source.weapons[1].impactDelay
29
29
  local timer = Timer:simple(attackPoint, timerCallback, source, target)
30
30
  eventTimerByUnit[source] = timer
31
31
  end)
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { Handle, HandleDestructor } from "../../core/types/handle";
4
3
  import { Player } from "../../core/types/player";
@@ -68,23 +67,44 @@ declare const modifiers: {
68
67
  speed: (unit: junit, value: number) => void;
69
68
  armor: (unit: junit, value: number) => void;
70
69
  };
71
- interface UnitWeapon {
70
+ export declare class UnitWeapon {
71
+ readonly unit: Unit;
72
72
  readonly index: 0 | 1;
73
- cooldown: number;
74
- projectileArc: number;
75
- projectileArt: string;
76
- projectileSpeed: number;
77
- attackPoint: number;
73
+ constructor(unit: Unit, index: 0 | 1);
74
+ get cooldown(): number;
75
+ set cooldown(cooldown: number);
76
+ get damage(): [minimumDamage: number, maximumDamage: number];
77
+ set damage([minimumDamage, maximumDamage]: [number, number]);
78
+ get damageBase(): number;
79
+ set damageBase(damageBase: number);
80
+ get damageDiceCount(): number;
81
+ set damageDiceCount(damageDiceCount: number);
82
+ get damageDiceSideCount(): number;
83
+ set damageDiceSideCount(damageDiceSideCount: number);
84
+ get range(): number;
85
+ set range(range: number);
86
+ get impactDelay(): number;
87
+ set impactDelay(impactDelay: number);
88
+ get missileArc(): number;
89
+ set missileArc(missileArc: number);
90
+ get missileModelPath(): string;
91
+ set missileModelPath(missileModelPath: string);
92
+ get missileSpeed(): number;
93
+ set missileSpeed(missileSpeed: number);
78
94
  }
79
95
  declare const enum UnitPropertyKey {
80
96
  IS_PAUSED = 100,
81
97
  STUN_COUNTER = 101,
82
- PREVENT_DEATH_HEALTH_BONUS = 102,
83
- IS_TEAM_GLOW_HIDDEN = 103
98
+ DELAY_HEALTH_CHECKS_COUNTER = 102,
99
+ DELAY_HEALTH_CHECKS_HEALTH_BONUS = 103,
100
+ PREVENT_DEATH_HEALTH_BONUS = 104,
101
+ IS_TEAM_GLOW_HIDDEN = 105
84
102
  }
85
103
  export declare class Unit extends Handle<junit> {
86
104
  private [UnitPropertyKey.IS_PAUSED]?;
87
105
  private [UnitPropertyKey.STUN_COUNTER]?;
106
+ private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
107
+ private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
88
108
  private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
89
109
  private [UnitPropertyKey.IS_TEAM_GLOW_HIDDEN]?;
90
110
  private _owner?;
@@ -123,6 +143,8 @@ export declare class Unit extends Handle<junit> {
123
143
  playAnimation(animation: number): void;
124
144
  queueAnimation(animation: string): void;
125
145
  get weapons(): [UnitWeapon, UnitWeapon];
146
+ get firstWeapon(): UnitWeapon;
147
+ get secondWeapon(): UnitWeapon;
126
148
  get level(): number;
127
149
  set level(v: number);
128
150
  get xp(): number;
@@ -148,6 +170,10 @@ export declare class Unit extends Handle<junit> {
148
170
  set color(color: PlayerColor);
149
171
  get acquisitionRange(): number;
150
172
  set acquisitionRange(v: number);
173
+ /**
174
+ * Keeps this unit alive even if its health becomes negative until the current game thread yields.
175
+ */
176
+ delayHealthChecks(): void;
151
177
  get maxHealth(): number;
152
178
  set maxHealth(maxHealth: number);
153
179
  get healthRegenerationRate(): number;
@@ -201,7 +227,7 @@ export declare class Unit extends Handle<junit> {
201
227
  isSelected(player: Player): boolean;
202
228
  explode(): void;
203
229
  kill(): void;
204
- revive(pos: Vec2, doEffect: boolean): void;
230
+ revive(x: number, y: number, doEffect?: boolean): void;
205
231
  healTarget(target: Widget, amount: number): void;
206
232
  useItem(item: Item): boolean;
207
233
  issueImmediateOrder(order: number): boolean;
@@ -222,6 +248,7 @@ export declare class Unit extends Handle<junit> {
222
248
  getAbilityById(abilityId: number): UnitAbility | undefined;
223
249
  removeAbility(abilityId: number): boolean;
224
250
  hideAbility(abilityId: number, flag: boolean): void;
251
+ getAbilityRemainingCooldown(abilityId: number): number;
225
252
  startAbilityCooldown(abilityId: number, cooldown: number): void;
226
253
  endAbilityCooldown(abilityId: number): void;
227
254
  interruptAttack(): void;