warscript 0.0.1-dev.c37d12c → 0.0.1-dev.ccd5725
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.
- package/attributes.d.ts +13 -0
- package/attributes.lua +16 -0
- package/core/types/handle.d.ts +2 -1
- package/core/types/handle.lua +5 -0
- package/engine/behaviour/ability/apply-unit-behavior.d.ts +8 -4
- package/engine/behaviour/ability/apply-unit-behavior.lua +31 -9
- package/engine/internal/ability.d.ts +1 -1
- package/engine/internal/mechanics/ability-duration.d.ts +1 -3
- package/engine/internal/mechanics/ability-duration.lua +2 -0
- package/engine/internal/mechanics/cast-ability.d.ts +2 -0
- package/engine/internal/mechanics/cast-ability.lua +86 -0
- package/engine/internal/unit/detach-missiles.d.ts +7 -0
- package/engine/internal/unit/detach-missiles.lua +30 -0
- package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
- package/engine/object-data/entry/ability-type/blink.lua +39 -0
- package/engine/object-data/entry/ability-type.d.ts +1 -0
- package/engine/object-data/entry/ability-type.lua +1 -0
- package/engine/object-data/entry/buff-type/applicable.lua +27 -71
- package/engine/object-data/entry/unit-type.d.ts +17 -0
- package/engine/object-data/entry/unit-type.lua +166 -44
- package/engine/object-field/ability.d.ts +7 -5
- package/engine/object-field/ability.lua +6 -0
- package/engine/object-field/unit.d.ts +1 -0
- package/engine/object-field/unit.lua +3 -0
- package/engine/object-field.d.ts +6 -5
- package/engine/object-field.lua +37 -18
- package/engine/standard/entries/unit-type.d.ts +3 -0
- package/engine/standard/entries/unit-type.lua +3 -0
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/global/vec2.lua +1 -0
- package/package.json +2 -2
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +16 -0
- package/utility/types.d.ts +2 -2
package/attributes.d.ts
ADDED
|
@@ -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
|
package/core/types/handle.d.ts
CHANGED
|
@@ -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?;
|
package/core/types/handle.lua
CHANGED
|
@@ -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
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { AbilityBehavior } from "../ability";
|
|
3
3
|
import { Ability } from "../../internal/ability";
|
|
4
|
-
import {
|
|
4
|
+
import { UnitBehavior } from "../unit";
|
|
5
5
|
import { Unit } from "../../internal/unit";
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import { AbilityDependentValue } from "../../object-field/ability";
|
|
7
|
+
export declare class ApplyUnitBehaviorAbilityBehavior<T extends UnitBehavior> extends AbilityBehavior {
|
|
8
|
+
private readonly unitBehaviorConstructor;
|
|
9
|
+
private readonly parameters?;
|
|
10
|
+
private readonly keys?;
|
|
8
11
|
private unitBehavior?;
|
|
9
|
-
constructor(ability: Ability, unitBehaviorConstructor:
|
|
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);
|
|
13
|
+
update(): void;
|
|
10
14
|
onUnitGainAbility(unit: Unit): void;
|
|
11
15
|
onUnitLoseAbility(): void;
|
|
12
16
|
}
|
|
@@ -1,23 +1,38 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
|
|
5
|
+
local __TS__ArraySort = ____lualib.__TS__ArraySort
|
|
4
6
|
local __TS__New = ____lualib.__TS__New
|
|
5
7
|
local ____exports = {}
|
|
6
8
|
local ____ability = require("engine.behaviour.ability")
|
|
7
9
|
local AbilityBehavior = ____ability.AbilityBehavior
|
|
10
|
+
local ____ability = require("engine.object-field.ability")
|
|
11
|
+
local AbilityField = ____ability.AbilityField
|
|
12
|
+
local AbilityLevelField = ____ability.AbilityLevelField
|
|
8
13
|
____exports.ApplyUnitBehaviorAbilityBehavior = __TS__Class()
|
|
9
14
|
local ApplyUnitBehaviorAbilityBehavior = ____exports.ApplyUnitBehaviorAbilityBehavior
|
|
10
15
|
ApplyUnitBehaviorAbilityBehavior.name = "ApplyUnitBehaviorAbilityBehavior"
|
|
11
16
|
__TS__ClassExtends(ApplyUnitBehaviorAbilityBehavior, AbilityBehavior)
|
|
12
|
-
function ApplyUnitBehaviorAbilityBehavior.prototype.____constructor(self, ability, unitBehaviorConstructor,
|
|
13
|
-
local args = {...}
|
|
17
|
+
function ApplyUnitBehaviorAbilityBehavior.prototype.____constructor(self, ability, unitBehaviorConstructor, parameters)
|
|
14
18
|
AbilityBehavior.prototype.____constructor(self, ability)
|
|
15
|
-
self.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
self.unitBehaviorConstructor = unitBehaviorConstructor
|
|
20
|
+
self.parameters = parameters
|
|
21
|
+
if parameters ~= nil then
|
|
22
|
+
self.keys = __TS__ArraySort(__TS__ObjectKeys(parameters))
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
function ApplyUnitBehaviorAbilityBehavior.prototype.update(self)
|
|
26
|
+
local unitBehavior = self.unitBehavior
|
|
27
|
+
local parameters = self.parameters
|
|
28
|
+
local keys = self.keys
|
|
29
|
+
if unitBehavior ~= nil and parameters ~= nil and keys ~= nil then
|
|
30
|
+
for ____, key in ipairs(keys) do
|
|
31
|
+
local value = parameters[key]
|
|
32
|
+
if value ~= nil then
|
|
33
|
+
unitBehavior[key] = self:resolveCurrentAbilityDependentValue(value)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
21
36
|
end
|
|
22
37
|
end
|
|
23
38
|
function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitGainAbility(self, unit)
|
|
@@ -25,7 +40,8 @@ function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitGainAbility(self, unit
|
|
|
25
40
|
if ____opt_0 ~= nil then
|
|
26
41
|
____opt_0:destroy()
|
|
27
42
|
end
|
|
28
|
-
self.unitBehavior = self
|
|
43
|
+
self.unitBehavior = __TS__New(self.unitBehaviorConstructor, unit)
|
|
44
|
+
self:update()
|
|
29
45
|
end
|
|
30
46
|
function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitLoseAbility(self)
|
|
31
47
|
local ____opt_2 = self.unitBehavior
|
|
@@ -33,4 +49,10 @@ function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitLoseAbility(self)
|
|
|
33
49
|
____opt_2:destroy()
|
|
34
50
|
end
|
|
35
51
|
end
|
|
52
|
+
AbilityField.valueChangeEvent:addListener(function(ability)
|
|
53
|
+
____exports.ApplyUnitBehaviorAbilityBehavior:forAll(ability, "update")
|
|
54
|
+
end)
|
|
55
|
+
AbilityLevelField.valueChangeEvent:addListener(function(ability)
|
|
56
|
+
____exports.ApplyUnitBehaviorAbilityBehavior:forAll(ability, "update")
|
|
57
|
+
end)
|
|
36
58
|
return ____exports
|
|
@@ -12,7 +12,7 @@ interface Fields<K, V> {
|
|
|
12
12
|
interface AbilityLevel {
|
|
13
13
|
realFields: Fields<jabilityreallevelfield, number>;
|
|
14
14
|
}
|
|
15
|
-
type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
15
|
+
export type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
16
16
|
export declare class AbilitySnapshot {
|
|
17
17
|
}
|
|
18
18
|
export declare abstract class Ability extends Handle<jability> {
|
|
@@ -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,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,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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="warpack-types/warpack" />
|
|
2
2
|
/** @noSelfInFile */
|
|
3
|
+
import "../../internal/unit/ability";
|
|
3
4
|
import { TupleOf } from "../../../utility/types";
|
|
4
5
|
import { AnimationName } from "../auxiliary/animation-name";
|
|
5
6
|
import { AnimationQualifier } from "../auxiliary/animation-qualifier";
|
|
@@ -6,6 +6,7 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
|
6
6
|
local ____exports = {}
|
|
7
7
|
local ____unit = require("engine.internal.unit")
|
|
8
8
|
local Unit = ____unit.Unit
|
|
9
|
+
require("engine.internal.unit.ability")
|
|
9
10
|
local ____timer = require("core.types.timer")
|
|
10
11
|
local Timer = ____timer.Timer
|
|
11
12
|
local ____effect = require("core.types.effect")
|
|
@@ -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
|
|
264
|
-
|
|
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
|
-
|
|
324
|
-
|
|
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;
|