warscript 0.0.1-dev.6f480d0 → 0.0.1-dev.797e3f9

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.
@@ -0,0 +1,13 @@
1
+ /// <reference types="@typescript-to-lua/language-extensions" />
2
+ /** @noSelfInFile */
3
+ export type Attribute<T> = {
4
+ readonly __attribute: unique symbol;
5
+ readonly __type: T;
6
+ } & symbol;
7
+ export declare namespace Attribute {
8
+ const create: <T>() => Attribute<T>;
9
+ }
10
+ export declare class AttributesHolder {
11
+ readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
12
+ readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
13
+ }
package/attributes.lua ADDED
@@ -0,0 +1,16 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local ____exports = {}
4
+ ____exports.Attribute = {}
5
+ local Attribute = ____exports.Attribute
6
+ do
7
+ Attribute.create = function()
8
+ return {}
9
+ end
10
+ end
11
+ ____exports.AttributesHolder = __TS__Class()
12
+ local AttributesHolder = ____exports.AttributesHolder
13
+ AttributesHolder.name = "AttributesHolder"
14
+ function AttributesHolder.prototype.____constructor(self)
15
+ end
16
+ return ____exports
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import { Event } from "../../event";
3
+ import { AttributesHolder } from "../../attributes";
3
4
  export type HandleConstructor<H extends jhandle, T extends Handle<H>, Args extends any[]> = new (handle: H, ...args: Args) => T;
4
5
  export type HandleDestructor = {
5
6
  readonly __handleDestructor: unique symbol;
@@ -11,7 +12,7 @@ type NoOverride = {
11
12
  declare const enum HandlePropertyKey {
12
13
  STATE = 0
13
14
  }
14
- export declare class Handle<H extends jhandle, DestroyParameters extends any[] = []> implements Destroyable {
15
+ export declare class Handle<H extends jhandle, DestroyParameters extends any[] = []> extends AttributesHolder implements Destroyable {
15
16
  readonly handle: H;
16
17
  private [HandlePropertyKey.STATE]?;
17
18
  private onDestroyEvent?;
@@ -1,5 +1,6 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
3
4
  local __TS__New = ____lualib.__TS__New
4
5
  local __TS__Delete = ____lualib.__TS__Delete
5
6
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
@@ -12,13 +13,17 @@ local getClass = ____reflection.getClass
12
13
  local getSuperclass = ____reflection.getSuperclass
13
14
  local ____exception = require("exception")
14
15
  local IllegalStateException = ____exception.IllegalStateException
16
+ local ____attributes = require("attributes")
17
+ local AttributesHolder = ____attributes.AttributesHolder
15
18
  local getHandleId = GetHandleId
16
19
  local onCreateEventByHandleConstructor = {}
17
20
  local onDestroyEventByHandleConstructor = {}
18
21
  ____exports.Handle = __TS__Class()
19
22
  local Handle = ____exports.Handle
20
23
  Handle.name = "Handle"
24
+ __TS__ClassExtends(Handle, AttributesHolder)
21
25
  function Handle.prototype.____constructor(self, handle)
26
+ AttributesHolder.prototype.____constructor(self)
22
27
  self[0] = 0
23
28
  local id = getHandleId(handle)
24
29
  local clazz = self.constructor
@@ -3,14 +3,13 @@ import { AbilityBehavior } from "../ability";
3
3
  import { Ability } from "../../internal/ability";
4
4
  import { UnitBehavior } from "../unit";
5
5
  import { Unit } from "../../internal/unit";
6
- import { MutableKeys } from "../../../utility/types";
7
6
  import { AbilityDependentValue } from "../../object-field/ability";
8
7
  export declare class ApplyUnitBehaviorAbilityBehavior<T extends UnitBehavior> extends AbilityBehavior {
9
8
  private readonly unitBehaviorConstructor;
10
9
  private readonly parameters?;
11
10
  private readonly keys?;
12
11
  private unitBehavior?;
13
- constructor(ability: Ability, unitBehaviorConstructor: new (unit: Unit) => T, parameters?: Partial<{ [K in MutableKeys<T> & KeysOfType<T, string | number | boolean>]: T[K] extends string | number | boolean ? AbilityDependentValue<T[K]> : never; }> | undefined);
12
+ constructor(ability: Ability, unitBehaviorConstructor: new (unit: Unit) => T, parameters?: Partial<{ [K in keyof T & { [P in keyof T]-?: (<T_1>() => T_1 extends { [Q in P]: T[P]; } ? 1 : 2) extends <T_2>() => T_2 extends { -readonly [Q_1 in P]: T[P]; } ? 1 : 2 ? P : never; }[keyof T] & KeysOfType<T, string | number | boolean>]: T[K] extends string | number | boolean ? AbilityDependentValue<T[K]> : never; }> | undefined);
14
13
  update(): void;
15
14
  onUnitGainAbility(unit: Unit): void;
16
15
  onUnitLoseAbility(): void;
@@ -1,4 +1,2 @@
1
1
  /** @noSelfInFile */
2
- import { Ability } from "../ability";
3
- import { Unit } from "../unit";
4
- export declare const getAbilityDuration: (ability: Ability, target?: Unit) => number;
2
+ export {};
@@ -4,6 +4,8 @@ local UnitClassification = ____unit.UnitClassification
4
4
  local ____ability = require("engine.standard.fields.ability")
5
5
  local DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD
6
6
  local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD
7
+ ---
8
+ -- @internal For use by internal systems only.
7
9
  ____exports.getAbilityDuration = function(ability, target)
8
10
  local level = ability.level
9
11
  return target ~= nil and target:hasClassification(UnitClassification.RESISTANT) and DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level) or DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level)
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -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
@@ -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
@@ -0,0 +1,10 @@
1
+ /** @noSelfInFile */
2
+ import { AbilityType, AbilityTypeId } from "../ability-type";
3
+ import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
4
+ export declare class BlinkAbilityType extends AbilityType {
5
+ static readonly BASE_ID: AbilityTypeId;
6
+ get maximumRange(): number[];
7
+ set maximumRange(maximumRange: ObjectDataEntryLevelFieldValueSupplier<number>);
8
+ get minimumRange(): number[];
9
+ set minimumRange(minimumRange: ObjectDataEntryLevelFieldValueSupplier<number>);
10
+ }
@@ -0,0 +1,39 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local ____exports = {}
6
+ local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
7
+ local AbilityType = ____ability_2Dtype.AbilityType
8
+ ____exports.BlinkAbilityType = __TS__Class()
9
+ local BlinkAbilityType = ____exports.BlinkAbilityType
10
+ BlinkAbilityType.name = "BlinkAbilityType"
11
+ __TS__ClassExtends(BlinkAbilityType, AbilityType)
12
+ BlinkAbilityType.BASE_ID = fourCC("AEbl")
13
+ __TS__SetDescriptor(
14
+ BlinkAbilityType.prototype,
15
+ "maximumRange",
16
+ {
17
+ get = function(self)
18
+ return self:getNumberLevelField("Ebl1")
19
+ end,
20
+ set = function(self, maximumRange)
21
+ self:setNumberLevelField("Ebl1", maximumRange)
22
+ end
23
+ },
24
+ true
25
+ )
26
+ __TS__SetDescriptor(
27
+ BlinkAbilityType.prototype,
28
+ "minimumRange",
29
+ {
30
+ get = function(self)
31
+ return self:getNumberLevelField("Ebl2")
32
+ end,
33
+ set = function(self, minimumRange)
34
+ self:setNumberLevelField("Ebl2", minimumRange)
35
+ end
36
+ },
37
+ true
38
+ )
39
+ return ____exports
@@ -7,6 +7,7 @@ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
7
7
  local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
8
8
  local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
9
9
  local ____exports = {}
10
+ local preparePhysicalPositiveApplicatorAbility
10
11
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
11
12
  local AbilityType = ____ability_2Dtype.AbilityType
12
13
  local ____cripple = require("engine.object-data.entry.ability-type.cripple")
@@ -34,20 +35,14 @@ local ____blood_2Dlust = require("engine.object-data.entry.ability-type.blood-lu
34
35
  local BloodLustAbilityType = ____blood_2Dlust.BloodLustAbilityType
35
36
  local ____berserk = require("engine.object-data.entry.ability-type.berserk")
36
37
  local BerserkAbilityType = ____berserk.BerserkAbilityType
37
- local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
38
- local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
39
- local ____dummy_2Dinventory = require("engine.internal.object-data.dummy-inventory")
40
- local INVENTORY_ABILITY_TYPE_ID = ____dummy_2Dinventory.INVENTORY_ABILITY_TYPE_ID
41
38
  local ____blank = require("engine.object-data.entry.upgrade.blank")
42
39
  local BlankUpgrade = ____blank.BlankUpgrade
43
- local ____dummy_2Dunits = require("engine.internal.misc.dummy-units")
44
- local INVENTORY_DUMMY_NATIVE_UNIT = ____dummy_2Dunits.INVENTORY_DUMMY_NATIVE_UNIT
45
- local ____preconditions = require("utility.preconditions")
46
- local checkNotNull = ____preconditions.checkNotNull
47
40
  local ____unit_2Dtype = require("engine.object-data.entry.unit-type")
48
41
  local UnitType = ____unit_2Dtype.UnitType
49
42
  local ____permanent_2Dimmolation = require("engine.object-data.entry.ability-type.permanent-immolation")
50
43
  local PermanentImmolationAbilityType = ____permanent_2Dimmolation.PermanentImmolationAbilityType
44
+ local ____cast_2Dability = require("engine.internal.mechanics.cast-ability")
45
+ local castAbility = ____cast_2Dability.castAbility
51
46
  local createItem = CreateItem
52
47
  local getAbilityId = BlzGetAbilityId
53
48
  local getItemAbility = BlzGetItemAbility
@@ -260,75 +255,25 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
260
255
  return unitAddAbility(unit.handle, applicatorAbilityTypeId)
261
256
  end
262
257
  if applicatorType == 852100 then
263
- local success
264
- local nativeUnit = unit.handle
265
- local nativeItem = createItem(DUMMY_ITEM_ID, 0, 0)
266
- unitAddItem(INVENTORY_DUMMY_NATIVE_UNIT, nativeItem)
267
- itemAddAbility(nativeItem, applicatorAbilityTypeId)
268
- local applicatorAbility = checkNotNull(getItemAbility(nativeItem, applicatorAbilityTypeId))
269
- if level == nil then
270
- level = 0
271
- setAbilityIntegerField(applicatorAbility, ABILITY_IF_LEVELS, 1)
272
- end
273
- setAbilityRealLevelField(applicatorAbility, ABILITY_RLF_DURATION_NORMAL, level, duration or 0)
274
- setAbilityRealLevelField(applicatorAbility, ABILITY_RLF_DURATION_HERO, level, duration or 0)
275
- if movementSpeedIncreaseFactor ~= nil then
276
- setAbilityRealLevelField(applicatorAbility, ABILITY_RLF_MOVEMENT_SPEED_INCREASE_BSK1, level, movementSpeedIncreaseFactor)
277
- end
278
- setItemBooleanField(nativeItem, ITEM_BF_ACTIVELY_USED, true)
279
- setItemBooleanField(nativeItem, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
280
- if level > 0 then
258
+ local nativePlayer = unit.owner.handle
259
+ if level ~= nil and level > 0 then
281
260
  local upgradeId = applicatorUpgradeIdByApplicatorAbilityTypeId[applicatorAbilityTypeId]
282
261
  if upgradeId ~= nil then
283
- setPlayerTechResearched(
284
- getOwningPlayer(nativeUnit),
285
- upgradeId,
286
- level
287
- )
288
- end
289
- end
290
- if not unitAddItem(nativeUnit, nativeItem) then
291
- local latestInventoryAbilityTypeId = 0
292
- local nativeItemBySlot = {}
293
- local inventorySize = unitInventorySize(nativeUnit)
294
- if inventorySize ~= 0 then
295
- for slot = 0, inventorySize - 1 do
296
- nativeItemBySlot[slot] = UnitRemoveItemFromSlot(nativeUnit, slot)
297
- end
298
- local unitNativeAbility = getUnitAbilityByIndex(nativeUnit, 0)
299
- local i = 1
300
- while unitNativeAbility ~= nil do
301
- local abilityTypeId = getAbilityId(unitNativeAbility)
302
- if INVENTORY_ABILITY_TYPE_IDS[abilityTypeId] ~= nil then
303
- latestInventoryAbilityTypeId = abilityTypeId
304
- end
305
- unitNativeAbility = getUnitAbilityByIndex(nativeUnit, i)
306
- i = i + 1
307
- end
308
- unitRemoveAbility(nativeUnit, latestInventoryAbilityTypeId)
262
+ setPlayerTechResearched(nativePlayer, upgradeId, level)
309
263
  end
310
- unitAddAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
311
- success = unitAddItem(nativeUnit, nativeItem)
312
- unitRemoveAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
313
- if latestInventoryAbilityTypeId ~= 0 then
314
- unitAddAbility(nativeUnit, latestInventoryAbilityTypeId)
315
- for slot, nativeItem in pairs(nativeItemBySlot) do
316
- unitAddItem(nativeUnit, nativeItem)
317
- unitDropItemSlot(nativeUnit, nativeItem, slot)
318
- end
319
- end
320
- else
321
- success = true
322
264
  end
323
- removeItem(nativeItem)
324
- if level ~= nil and level > 1 then
265
+ local success = castAbility(
266
+ unit.handle,
267
+ applicatorAbilityTypeId,
268
+ preparePhysicalPositiveApplicatorAbility,
269
+ level,
270
+ duration or 0,
271
+ movementSpeedIncreaseFactor
272
+ )
273
+ if level ~= nil and level > 0 then
325
274
  local upgradeId = applicatorUpgradeIdByApplicatorAbilityTypeId[applicatorAbilityTypeId]
326
275
  if upgradeId ~= nil then
327
- setPlayerTechResearched(
328
- getOwningPlayer(nativeUnit),
329
- upgradeId,
330
- 0
331
- )
276
+ setPlayerTechResearched(nativePlayer, upgradeId, 0)
332
277
  end
333
278
  end
334
279
  return success
@@ -364,6 +309,17 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
364
309
  end
365
310
  return success
366
311
  end
312
+ preparePhysicalPositiveApplicatorAbility = function(ability, level, duration, movementSpeedIncreaseFactor)
313
+ if level == nil then
314
+ setAbilityIntegerField(ability, ABILITY_IF_LEVELS, 1)
315
+ level = 1
316
+ end
317
+ setAbilityRealLevelField(ability, ABILITY_RLF_DURATION_NORMAL, level, duration)
318
+ setAbilityRealLevelField(ability, ABILITY_RLF_DURATION_HERO, level, duration)
319
+ if movementSpeedIncreaseFactor ~= nil then
320
+ setAbilityRealLevelField(ability, ABILITY_RLF_MOVEMENT_SPEED_INCREASE_BSK1, level, movementSpeedIncreaseFactor)
321
+ end
322
+ end
367
323
  ---
368
324
  -- @internal For use by internal systems only.
369
325
  ____exports.removeBuff = function(unit, applicableBuffTypeId)
@@ -13,6 +13,7 @@ import { ObjectDataEntryIdGenerator } from "../utility/object-data-entry-id-gene
13
13
  import type { AbilityTypeId } from "./ability-type";
14
14
  import type { UpgradeId } from "./upgrade";
15
15
  import { AnimationQualifier } from "../auxiliary/animation-qualifier";
16
+ import { AttackType } from "../auxiliary/attack-type";
16
17
  export type UnitTypeId = ObjectDataEntryId & {
17
18
  readonly __unitTypeId: unique symbol;
18
19
  };
@@ -23,12 +24,16 @@ export declare class UnitTypeWeapon {
23
24
  private readonly unitType;
24
25
  private readonly index;
25
26
  private constructor();
27
+ get attackType(): AttackType;
28
+ set attackType(attackType: AttackType);
26
29
  get backSwingDuration(): number;
27
30
  set backSwingDuration(backSwingDuration: number);
28
31
  get impactDelay(): number;
29
32
  set impactDelay(impactDelay: number);
30
33
  get missileModelPath(): string;
31
34
  set missileModelPath(missileModelPath: string);
35
+ get range(): number;
36
+ set range(range: number);
32
37
  get soundType(): WeaponSoundType;
33
38
  set soundType(soundType: WeaponSoundType);
34
39
  get soundTypeSD(): WeaponSoundType;
@@ -117,6 +122,12 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
117
122
  set modelPathSD(modelPathSD: string);
118
123
  get modelPathHD(): string;
119
124
  set modelPathHD(modelPathHD: string);
125
+ get runSpeed(): number;
126
+ set runSpeed(runSpeed: number);
127
+ get runSpeedSD(): number;
128
+ set runSpeedSD(runSpeedSD: number);
129
+ get runSpeedHD(): number;
130
+ set runSpeedHD(runSpeedHD: number);
120
131
  get selectionCircleScale(): number;
121
132
  set selectionCircleScale(selectionCircleScale: number);
122
133
  get selectionCircleScaleSD(): number;
@@ -149,6 +160,12 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
149
160
  set shadowImageXOffset(shadowImageXOffset: number);
150
161
  get shadowImageYOffset(): number;
151
162
  set shadowImageYOffset(shadowImageYOffset: number);
163
+ get walkSpeed(): number;
164
+ set walkSpeed(walkSpeed: number);
165
+ get walkSpeedSD(): number;
166
+ set walkSpeedSD(walkSpeedSD: number);
167
+ get walkSpeedHD(): number;
168
+ set walkSpeedHD(walkSpeedHD: number);
152
169
  get armorSoundType(): ArmorSoundType;
153
170
  set armorSoundType(armorSoundType: ArmorSoundType);
154
171
  get armorSoundTypeSD(): ArmorSoundType;
@@ -215,4 +232,8 @@ export declare abstract class HeroUnitType<Id extends HeroUnitTypeId = HeroUnitT
215
232
  protected static generateId(): number;
216
233
  get heroAbilityTypeIds(): AbilityTypeId[];
217
234
  set heroAbilityTypeIds(heroAbilityTypeIds: AbilityTypeId[]);
235
+ get properNames(): string[];
236
+ set properNames(properNames: string | string[]);
237
+ get properNameCount(): number;
238
+ set properNameCount(properNameCount: number);
218
239
  }
@@ -3,6 +3,7 @@ local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
4
  local __TS__New = ____lualib.__TS__New
5
5
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
6
+ local __TS__ArrayIsArray = ____lualib.__TS__ArrayIsArray
6
7
  local ____exports = {}
7
8
  local ____arrays = require("utility.arrays")
8
9
  local arrayOfNotNull = ____arrays.arrayOfNotNull
@@ -28,21 +29,21 @@ function UnitTypeWeapon.prototype.____constructor(self, unitType, index)
28
29
  end
29
30
  __TS__SetDescriptor(
30
31
  UnitTypeWeapon.prototype,
31
- "backSwingDuration",
32
+ "attackType",
32
33
  {
33
34
  get = function(self)
34
35
  local ____self_0 = self.unitType
35
- return ____self_0.getNumberField(
36
+ return ____self_0.getStringField(
36
37
  ____self_0,
37
- "ubs" .. tostring(self.index)
38
+ ("ua" .. tostring(self.index)) .. "t"
38
39
  )
39
40
  end,
40
- set = function(self, backSwingDuration)
41
+ set = function(self, attackType)
41
42
  local ____self_1 = self.unitType
42
- ____self_1.setNumberField(
43
+ ____self_1.setStringField(
43
44
  ____self_1,
44
- "ubs" .. tostring(self.index),
45
- backSwingDuration
45
+ ("ua" .. tostring(self.index)) .. "t",
46
+ attackType
46
47
  )
47
48
  end
48
49
  },
@@ -50,21 +51,21 @@ __TS__SetDescriptor(
50
51
  )
51
52
  __TS__SetDescriptor(
52
53
  UnitTypeWeapon.prototype,
53
- "impactDelay",
54
+ "backSwingDuration",
54
55
  {
55
56
  get = function(self)
56
57
  local ____self_2 = self.unitType
57
58
  return ____self_2.getNumberField(
58
59
  ____self_2,
59
- "udp" .. tostring(self.index)
60
+ "ubs" .. tostring(self.index)
60
61
  )
61
62
  end,
62
- set = function(self, impactDelay)
63
+ set = function(self, backSwingDuration)
63
64
  local ____self_3 = self.unitType
64
65
  ____self_3.setNumberField(
65
66
  ____self_3,
66
- "udp" .. tostring(self.index),
67
- impactDelay
67
+ "ubs" .. tostring(self.index),
68
+ backSwingDuration
68
69
  )
69
70
  end
70
71
  },
@@ -72,21 +73,21 @@ __TS__SetDescriptor(
72
73
  )
73
74
  __TS__SetDescriptor(
74
75
  UnitTypeWeapon.prototype,
75
- "missileModelPath",
76
+ "impactDelay",
76
77
  {
77
78
  get = function(self)
78
79
  local ____self_4 = self.unitType
79
- return ____self_4.getStringField(
80
+ return ____self_4.getNumberField(
80
81
  ____self_4,
81
- ("ua" .. tostring(self.index)) .. "m"
82
+ "udp" .. tostring(self.index)
82
83
  )
83
84
  end,
84
- set = function(self, missileModelPath)
85
+ set = function(self, impactDelay)
85
86
  local ____self_5 = self.unitType
86
- ____self_5.setStringField(
87
+ ____self_5.setNumberField(
87
88
  ____self_5,
88
- ("ua" .. tostring(self.index)) .. "m",
89
- missileModelPath
89
+ "udp" .. tostring(self.index),
90
+ impactDelay
90
91
  )
91
92
  end
92
93
  },
@@ -94,21 +95,21 @@ __TS__SetDescriptor(
94
95
  )
95
96
  __TS__SetDescriptor(
96
97
  UnitTypeWeapon.prototype,
97
- "soundType",
98
+ "missileModelPath",
98
99
  {
99
100
  get = function(self)
100
101
  local ____self_6 = self.unitType
101
102
  return ____self_6.getStringField(
102
103
  ____self_6,
103
- "ucs" .. tostring(self.index)
104
+ ("ua" .. tostring(self.index)) .. "m"
104
105
  )
105
106
  end,
106
- set = function(self, soundType)
107
+ set = function(self, missileModelPath)
107
108
  local ____self_7 = self.unitType
108
109
  ____self_7.setStringField(
109
110
  ____self_7,
110
- "ucs" .. tostring(self.index),
111
- soundType
111
+ ("ua" .. tostring(self.index)) .. "m",
112
+ missileModelPath
112
113
  )
113
114
  end
114
115
  },
@@ -116,21 +117,21 @@ __TS__SetDescriptor(
116
117
  )
117
118
  __TS__SetDescriptor(
118
119
  UnitTypeWeapon.prototype,
119
- "soundTypeSD",
120
+ "range",
120
121
  {
121
122
  get = function(self)
122
123
  local ____self_8 = self.unitType
123
- return ____self_8.getStringField(
124
+ return ____self_8.getNumberField(
124
125
  ____self_8,
125
- ("ucs" .. tostring(self.index)) .. ":sd"
126
+ ("ua" .. tostring(self.index)) .. "r"
126
127
  )
127
128
  end,
128
- set = function(self, soundTypeSD)
129
+ set = function(self, range)
129
130
  local ____self_9 = self.unitType
130
- ____self_9.setStringField(
131
+ ____self_9.setNumberField(
131
132
  ____self_9,
132
- ("ucs" .. tostring(self.index)) .. ":sd",
133
- soundTypeSD
133
+ ("ua" .. tostring(self.index)) .. "r",
134
+ range
134
135
  )
135
136
  end
136
137
  },
@@ -138,19 +139,63 @@ __TS__SetDescriptor(
138
139
  )
139
140
  __TS__SetDescriptor(
140
141
  UnitTypeWeapon.prototype,
141
- "soundTypeHD",
142
+ "soundType",
142
143
  {
143
144
  get = function(self)
144
145
  local ____self_10 = self.unitType
145
146
  return ____self_10.getStringField(
146
147
  ____self_10,
147
- ("ucs" .. tostring(self.index)) .. ":hd"
148
+ "ucs" .. tostring(self.index)
148
149
  )
149
150
  end,
150
- set = function(self, soundTypeHD)
151
+ set = function(self, soundType)
151
152
  local ____self_11 = self.unitType
152
153
  ____self_11.setStringField(
153
154
  ____self_11,
155
+ "ucs" .. tostring(self.index),
156
+ soundType
157
+ )
158
+ end
159
+ },
160
+ true
161
+ )
162
+ __TS__SetDescriptor(
163
+ UnitTypeWeapon.prototype,
164
+ "soundTypeSD",
165
+ {
166
+ get = function(self)
167
+ local ____self_12 = self.unitType
168
+ return ____self_12.getStringField(
169
+ ____self_12,
170
+ ("ucs" .. tostring(self.index)) .. ":sd"
171
+ )
172
+ end,
173
+ set = function(self, soundTypeSD)
174
+ local ____self_13 = self.unitType
175
+ ____self_13.setStringField(
176
+ ____self_13,
177
+ ("ucs" .. tostring(self.index)) .. ":sd",
178
+ soundTypeSD
179
+ )
180
+ end
181
+ },
182
+ true
183
+ )
184
+ __TS__SetDescriptor(
185
+ UnitTypeWeapon.prototype,
186
+ "soundTypeHD",
187
+ {
188
+ get = function(self)
189
+ local ____self_14 = self.unitType
190
+ return ____self_14.getStringField(
191
+ ____self_14,
192
+ ("ucs" .. tostring(self.index)) .. ":hd"
193
+ )
194
+ end,
195
+ set = function(self, soundTypeHD)
196
+ local ____self_15 = self.unitType
197
+ ____self_15.setStringField(
198
+ ____self_15,
154
199
  ("ucs" .. tostring(self.index)) .. ":hd",
155
200
  soundTypeHD
156
201
  )
@@ -683,6 +728,45 @@ __TS__SetDescriptor(
683
728
  },
684
729
  true
685
730
  )
731
+ __TS__SetDescriptor(
732
+ UnitType.prototype,
733
+ "runSpeed",
734
+ {
735
+ get = function(self)
736
+ return self:getNumberField("urun")
737
+ end,
738
+ set = function(self, runSpeed)
739
+ self:setNumberField("urun", runSpeed)
740
+ end
741
+ },
742
+ true
743
+ )
744
+ __TS__SetDescriptor(
745
+ UnitType.prototype,
746
+ "runSpeedSD",
747
+ {
748
+ get = function(self)
749
+ return self:getNumberField("urun:sd")
750
+ end,
751
+ set = function(self, runSpeedSD)
752
+ self:setNumberField("urun:sd", runSpeedSD)
753
+ end
754
+ },
755
+ true
756
+ )
757
+ __TS__SetDescriptor(
758
+ UnitType.prototype,
759
+ "runSpeedHD",
760
+ {
761
+ get = function(self)
762
+ return self:getNumberField("urun:hd")
763
+ end,
764
+ set = function(self, runSpeedHD)
765
+ self:setNumberField("urun:hd", runSpeedHD)
766
+ end
767
+ },
768
+ true
769
+ )
686
770
  __TS__SetDescriptor(
687
771
  UnitType.prototype,
688
772
  "selectionCircleScale",
@@ -891,6 +975,45 @@ __TS__SetDescriptor(
891
975
  },
892
976
  true
893
977
  )
978
+ __TS__SetDescriptor(
979
+ UnitType.prototype,
980
+ "walkSpeed",
981
+ {
982
+ get = function(self)
983
+ return self:getNumberField("uwal")
984
+ end,
985
+ set = function(self, walkSpeed)
986
+ self:setNumberField("uwal", walkSpeed)
987
+ end
988
+ },
989
+ true
990
+ )
991
+ __TS__SetDescriptor(
992
+ UnitType.prototype,
993
+ "walkSpeedSD",
994
+ {
995
+ get = function(self)
996
+ return self:getNumberField("uwal:sd")
997
+ end,
998
+ set = function(self, walkSpeedSD)
999
+ self:setNumberField("uwal:sd", walkSpeedSD)
1000
+ end
1001
+ },
1002
+ true
1003
+ )
1004
+ __TS__SetDescriptor(
1005
+ UnitType.prototype,
1006
+ "walkSpeedHD",
1007
+ {
1008
+ get = function(self)
1009
+ return self:getNumberField("uwal:hd")
1010
+ end,
1011
+ set = function(self, walkSpeedHD)
1012
+ self:setNumberField("uwal:hd", walkSpeedHD)
1013
+ end
1014
+ },
1015
+ true
1016
+ )
894
1017
  __TS__SetDescriptor(
895
1018
  UnitType.prototype,
896
1019
  "armorSoundType",
@@ -1262,11 +1385,11 @@ __TS__SetDescriptor(
1262
1385
  implementReadonlyNumberIndexSupplier(
1263
1386
  ____exports.UnitType,
1264
1387
  function(id)
1265
- local ____class_12 = __TS__Class()
1266
- ____class_12.name = ____class_12.name
1267
- __TS__ClassExtends(____class_12, ____exports.UnitType)
1268
- ____class_12.BASE_ID = id
1269
- return ____class_12
1388
+ local ____class_16 = __TS__Class()
1389
+ ____class_16.name = ____class_16.name
1390
+ __TS__ClassExtends(____class_16, ____exports.UnitType)
1391
+ ____class_16.BASE_ID = id
1392
+ return ____class_16
1270
1393
  end
1271
1394
  )
1272
1395
  ____exports.HeroUnitType = __TS__Class()
@@ -1293,14 +1416,45 @@ __TS__SetDescriptor(
1293
1416
  },
1294
1417
  true
1295
1418
  )
1419
+ __TS__SetDescriptor(
1420
+ HeroUnitType.prototype,
1421
+ "properNames",
1422
+ {
1423
+ get = function(self)
1424
+ return self:getStringsField("upro")
1425
+ end,
1426
+ set = function(self, properNames)
1427
+ if __TS__ArrayIsArray(properNames) then
1428
+ self:setStringsField("upro", properNames)
1429
+ self:setNumberField("upru", #properNames)
1430
+ else
1431
+ self:setStringField("upro", properNames)
1432
+ end
1433
+ end
1434
+ },
1435
+ true
1436
+ )
1437
+ __TS__SetDescriptor(
1438
+ HeroUnitType.prototype,
1439
+ "properNameCount",
1440
+ {
1441
+ get = function(self)
1442
+ return self:getNumberField("upru")
1443
+ end,
1444
+ set = function(self, properNameCount)
1445
+ self:setNumberField("upru", properNameCount)
1446
+ end
1447
+ },
1448
+ true
1449
+ )
1296
1450
  implementReadonlyNumberIndexSupplier(
1297
1451
  ____exports.HeroUnitType,
1298
1452
  function(id)
1299
- local ____class_13 = __TS__Class()
1300
- ____class_13.name = ____class_13.name
1301
- __TS__ClassExtends(____class_13, ____exports.HeroUnitType)
1302
- ____class_13.BASE_ID = id
1303
- return ____class_13
1453
+ local ____class_17 = __TS__Class()
1454
+ ____class_17.name = ____class_17.name
1455
+ __TS__ClassExtends(____class_17, ____exports.HeroUnitType)
1456
+ ____class_17.BASE_ID = id
1457
+ return ____class_17
1304
1458
  end
1305
1459
  )
1306
1460
  return ____exports
@@ -30,6 +30,9 @@ export declare const DEMON_HUNTER_DEMON_FORM_HERO_UNIT_TYPE_ID: StandardHeroUnit
30
30
  export declare const ABOMINATION_UNIT_TYPE_ID: StandardUnitTypeId;
31
31
  export declare const GHOUL_UNIT_TYPE_ID: StandardUnitTypeId;
32
32
  export declare const DEATH_KNIGHT_HERO_UNIT_TYPE_ID: StandardHeroUnitTypeId;
33
+ export declare const ZOMBIE_UNIT_TYPE_ID: StandardUnitTypeId;
34
+ export declare const ZOMBIE_FEMALE_UNIT_TYPE_ID: StandardUnitTypeId;
35
+ export declare const ARTHAS_EVIL_HERO_UNIT_TYPE_ID: StandardHeroUnitTypeId;
33
36
  export declare const DIRE_MAMMOTH_UNIT_TYPE_ID: StandardUnitTypeId;
34
37
  export declare const ELDER_JUNGLE_STALKER_UNIT_TYPE_ID: StandardUnitTypeId;
35
38
  export declare const ENRAGED_ELEMENTAL_UNIT_TYPE_ID: StandardUnitTypeId;
@@ -29,6 +29,9 @@ ____exports.DEMON_HUNTER_DEMON_FORM_HERO_UNIT_TYPE_ID = fourCC("Edmm")
29
29
  ____exports.ABOMINATION_UNIT_TYPE_ID = fourCC("uabo")
30
30
  ____exports.GHOUL_UNIT_TYPE_ID = fourCC("ugho")
31
31
  ____exports.DEATH_KNIGHT_HERO_UNIT_TYPE_ID = fourCC("Udea")
32
+ ____exports.ZOMBIE_UNIT_TYPE_ID = fourCC("nzom")
33
+ ____exports.ZOMBIE_FEMALE_UNIT_TYPE_ID = fourCC("nzof")
34
+ ____exports.ARTHAS_EVIL_HERO_UNIT_TYPE_ID = fourCC("Uear")
32
35
  ____exports.DIRE_MAMMOTH_UNIT_TYPE_ID = fourCC("nmdr")
33
36
  ____exports.ELDER_JUNGLE_STALKER_UNIT_TYPE_ID = fourCC("njga")
34
37
  ____exports.ENRAGED_ELEMENTAL_UNIT_TYPE_ID = fourCC("nele")
package/engine/unit.d.ts CHANGED
@@ -14,6 +14,7 @@ import "./internal/unit/missile";
14
14
  import "./internal/unit-missile-launch";
15
15
  import "./internal/unit/ghost-counter";
16
16
  import "./internal/unit/invulnerability-counter";
17
+ import "./internal/unit/detach-missiles";
17
18
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
18
19
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
19
20
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -14,6 +14,7 @@ require("engine.internal.unit.missile")
14
14
  require("engine.internal.unit-missile-launch")
15
15
  require("engine.internal.unit.ghost-counter")
16
16
  require("engine.internal.unit.invulnerability-counter")
17
+ require("engine.internal.unit.detach-missiles")
17
18
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
18
19
  do
19
20
  local ____unit = require("engine.internal.unit")
package/global/vec2.lua CHANGED
@@ -15,6 +15,7 @@ local abs = math.abs
15
15
 
16
16
  local location = Location and Location(0, 0)
17
17
  local moveLocation = MoveLocation
18
+ local getLocationZ = GetLocationZ
18
19
 
19
20
  local vec2 = {}
20
21
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "warscript",
4
- "version": "0.0.1-dev.6f480d0",
4
+ "version": "0.0.1-dev.797e3f9",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -22,8 +22,7 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@warscript/language-extensions": "^0.0.1",
25
- "@warscript/tstl-plugin": "^0.0.1",
26
- "typescript-to-lua": "^1.24.1",
25
+ "@warscript/tstl-plugin": "^0.0.3",
27
26
  "lua-types": "^2.13.1",
28
27
  "warpack": "0.0.1-dev.5bdabe5"
29
28
  },
package/string.d.ts CHANGED
@@ -103,4 +103,18 @@ declare global {
103
103
  function isNotBlank(string: string): boolean;
104
104
  }
105
105
  }
106
+ declare global {
107
+ namespace string {
108
+ /**
109
+ * Returns the number of characters matching the given predicate.
110
+ */
111
+ function count(string: string, predicate: (char: string) => boolean): number;
112
+ }
113
+ interface String {
114
+ /**
115
+ * Returns the number of characters matching the given predicate.
116
+ */
117
+ count(predicate: (char: string) => boolean): number;
118
+ }
119
+ }
106
120
  export {};
package/string.lua CHANGED
@@ -31,4 +31,13 @@ end
31
31
  _G.string.isNotBlank = function(____string)
32
32
  return (match(____string, "^%s*$")) == nil
33
33
  end
34
+ _G.string.count = function(____string, predicate)
35
+ local result = 0
36
+ for i = 1, #____string do
37
+ if predicate(sub(____string, i, i)) then
38
+ result = result + 1
39
+ end
40
+ end
41
+ return result
42
+ end
34
43
  return ____exports
@@ -12,14 +12,14 @@ export type ValueOf<T> = T[keyof T];
12
12
  export type EntryOf<T> = ValueOf<{
13
13
  [K in keyof T]: [K, T[K]];
14
14
  }>;
15
- export type MutableKeys<T extends object> = {
15
+ export type MutableKeys<T extends object> = keyof T & {
16
16
  [P in keyof T]-?: IfEquals<{
17
17
  [Q in P]: T[P];
18
18
  }, {
19
19
  -readonly [Q in P]: T[P];
20
20
  }, P>;
21
21
  }[keyof T];
22
- export type ReadonlyKeys<T extends object> = {
22
+ export type ReadonlyKeys<T extends object> = keyof T & {
23
23
  [P in keyof T]-?: IfEquals<{
24
24
  [Q in P]: T[P];
25
25
  }, {