warscript 0.0.1-dev.d690591 → 0.0.1-dev.d7e0522
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 +5 -0
- package/attributes.lua +8 -1
- package/core/types/order.d.ts +1 -0
- package/core/types/order.lua +11 -1
- package/engine/behaviour/unit.d.ts +13 -0
- package/engine/behaviour/unit.lua +104 -4
- package/engine/internal/ability.d.ts +2 -0
- package/engine/internal/ability.lua +7 -0
- package/engine/internal/item/ability.lua +12 -10
- package/engine/internal/item.d.ts +2 -1
- package/engine/internal/item.lua +69 -3
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit-missile-launch.lua +1 -1
- package/engine/internal/unit.d.ts +10 -2
- package/engine/internal/unit.lua +91 -8
- package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
- package/package.json +1 -1
package/attributes.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
+
declare const marker: {};
|
|
2
3
|
export type Attribute<T> = {
|
|
3
4
|
readonly __attribute: unique symbol;
|
|
4
5
|
readonly __type: T;
|
|
6
|
+
readonly __marker: typeof marker;
|
|
5
7
|
} & symbol;
|
|
8
|
+
export declare const attribute: <T>() => Attribute<T>;
|
|
9
|
+
export declare const isAttribute: (value: unknown) => value is Attribute<unknown>;
|
|
6
10
|
export declare namespace Attribute {
|
|
7
11
|
const create: <T>() => Attribute<T>;
|
|
8
12
|
}
|
|
@@ -10,3 +14,4 @@ export declare class AttributesHolder {
|
|
|
10
14
|
readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
|
|
11
15
|
readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
|
|
12
16
|
}
|
|
17
|
+
export {};
|
package/attributes.lua
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local ____exports = {}
|
|
4
|
+
local marker = {}
|
|
5
|
+
____exports.attribute = function()
|
|
6
|
+
return {__marker = marker}
|
|
7
|
+
end
|
|
8
|
+
____exports.isAttribute = function(value)
|
|
9
|
+
return type(value) == "table" and rawget(value, "__marker") == marker
|
|
10
|
+
end
|
|
4
11
|
____exports.Attribute = {}
|
|
5
12
|
local Attribute = ____exports.Attribute
|
|
6
13
|
do
|
|
7
14
|
Attribute.create = function()
|
|
8
|
-
return {}
|
|
15
|
+
return {__marker = marker}
|
|
9
16
|
end
|
|
10
17
|
end
|
|
11
18
|
____exports.AttributesHolder = __TS__Class()
|
package/core/types/order.d.ts
CHANGED
package/core/types/order.lua
CHANGED
|
@@ -3,16 +3,25 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____unit = require("core.types.unit")
|
|
5
5
|
local Unit = ____unit.Unit
|
|
6
|
+
local ____game = require("core.game")
|
|
7
|
+
local elapsedTime = ____game.elapsedTime
|
|
6
8
|
local getUnitCurrentOrder = GetUnitCurrentOrder
|
|
7
9
|
local orders = setmetatable({}, {__mode = "k"})
|
|
8
10
|
Unit.onImmediateOrder:addListener(function(unit, orderId)
|
|
9
|
-
orders[unit] = {
|
|
11
|
+
orders[unit] = {
|
|
12
|
+
id = orderId,
|
|
13
|
+
startX = unit.x,
|
|
14
|
+
startY = unit.y,
|
|
15
|
+
issueTime = elapsedTime(),
|
|
16
|
+
type = "immediate"
|
|
17
|
+
}
|
|
10
18
|
end)
|
|
11
19
|
Unit.onPointOrder:addListener(function(unit, orderId, x, y)
|
|
12
20
|
orders[unit] = {
|
|
13
21
|
id = orderId,
|
|
14
22
|
startX = unit.x,
|
|
15
23
|
startY = unit.y,
|
|
24
|
+
issueTime = elapsedTime(),
|
|
16
25
|
type = "point",
|
|
17
26
|
targetX = x,
|
|
18
27
|
targetY = y
|
|
@@ -23,6 +32,7 @@ Unit.onTargetOrder:addListener(function(unit, orderId, target)
|
|
|
23
32
|
id = orderId,
|
|
24
33
|
startX = unit.x,
|
|
25
34
|
startY = unit.y,
|
|
35
|
+
issueTime = elapsedTime(),
|
|
26
36
|
type = "target",
|
|
27
37
|
target = target
|
|
28
38
|
}
|
|
@@ -6,23 +6,36 @@ import "../internal/unit+ability";
|
|
|
6
6
|
import "../internal/unit-missile-launch";
|
|
7
7
|
import { Item } from "../internal/item";
|
|
8
8
|
import type { AbilityBehavior } from "./ability";
|
|
9
|
+
import { Event } from "../../event";
|
|
10
|
+
import { Destructor } from "../../destroyable";
|
|
11
|
+
import type { Widget } from "../../core/types/widget";
|
|
9
12
|
export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
|
|
10
13
|
export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
|
|
11
14
|
constructor(unit: Unit);
|
|
15
|
+
protected onDestroy(): Destructor;
|
|
12
16
|
readonly sourceAbilityBehavior?: AbilityBehavior;
|
|
13
17
|
get unit(): Unit;
|
|
18
|
+
registerInRangeUnitEvent<T extends string, Args extends any[]>(this: UnitBehavior<PeriodicActionParameters> & Record<T, (this: this, unit: Unit, ...args: Args) => unknown>, event: Event<[Unit, ...Args]>, range: number, listener: T): void;
|
|
19
|
+
onImmediateOrder(orderId: number): void;
|
|
20
|
+
onTargetOrder(orderId: number, target: Widget): void;
|
|
21
|
+
onPointOrder(orderId: number, x: number, y: number): void;
|
|
14
22
|
onAutoAttackStart(target: Unit): void;
|
|
15
23
|
onAutoAttackFinish(target: Unit): void;
|
|
24
|
+
onTargetingAutoAttackStart(source: Unit): void;
|
|
25
|
+
onTargetingAutoAttackFinish(source: Unit): void;
|
|
16
26
|
onDamageDealing(target: Unit, event: DamagingEvent): void;
|
|
17
27
|
onDamageDealt(target: Unit, event: DamageEvent): void;
|
|
18
28
|
onDamageReceiving(source: Unit | undefined, event: DamagingEvent): void;
|
|
19
29
|
onDamageReceived(source: Unit | undefined, event: DamageEvent): void;
|
|
20
30
|
onAbilityGained(ability: Ability): void;
|
|
21
31
|
onAbilityLost(ability: Ability): void;
|
|
32
|
+
onAbilityChannelingStart(ability: Ability): void;
|
|
33
|
+
onAbilityChannelingFinish(ability: Ability): void;
|
|
22
34
|
onItemDropped(item: Item): void;
|
|
23
35
|
onItemPickedUp(item: Item): void;
|
|
24
36
|
onItemUsed(item: Item): void;
|
|
25
37
|
onItemStacked(item: Item): void;
|
|
38
|
+
onItemChargesChanged(item: Item): void;
|
|
26
39
|
onKill(target: Unit): void;
|
|
27
40
|
onDeath(source: Unit | undefined): void;
|
|
28
41
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
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__New = ____lualib.__TS__New
|
|
4
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
6
|
local ____exports = {}
|
|
6
7
|
local ____behavior = require("engine.behavior")
|
|
@@ -9,6 +10,17 @@ local ____unit = require("engine.internal.unit")
|
|
|
9
10
|
local Unit = ____unit.Unit
|
|
10
11
|
require("engine.internal.unit+ability")
|
|
11
12
|
require("engine.internal.unit-missile-launch")
|
|
13
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
14
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
15
|
+
local ____lua_2Dmaps = require("utility.lua-maps")
|
|
16
|
+
local getOrPut = ____lua_2Dmaps.getOrPut
|
|
17
|
+
local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
|
|
18
|
+
local ____lua_2Dsets = require("utility.lua-sets")
|
|
19
|
+
local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
|
|
20
|
+
local behaviorsByEvent = {}
|
|
21
|
+
local rangeByBehaviorByEvent = {}
|
|
22
|
+
local listenerByBehaviorByEvent = {}
|
|
23
|
+
local eventsByBehavior = {}
|
|
12
24
|
____exports.UnitBehavior = __TS__Class()
|
|
13
25
|
local UnitBehavior = ____exports.UnitBehavior
|
|
14
26
|
UnitBehavior.name = "UnitBehavior"
|
|
@@ -16,10 +28,66 @@ __TS__ClassExtends(UnitBehavior, Behavior)
|
|
|
16
28
|
function UnitBehavior.prototype.____constructor(self, unit)
|
|
17
29
|
Behavior.prototype.____constructor(self, unit)
|
|
18
30
|
end
|
|
31
|
+
function UnitBehavior.prototype.onDestroy(self)
|
|
32
|
+
local events = eventsByBehavior[self]
|
|
33
|
+
if events ~= nil then
|
|
34
|
+
for event in pairs(events) do
|
|
35
|
+
local ____opt_0 = behaviorsByEvent[event]
|
|
36
|
+
if ____opt_0 ~= nil then
|
|
37
|
+
____opt_0:remove(self)
|
|
38
|
+
end
|
|
39
|
+
local ____opt_2 = rangeByBehaviorByEvent[event]
|
|
40
|
+
if ____opt_2 ~= nil then
|
|
41
|
+
____opt_2[self] = nil
|
|
42
|
+
end
|
|
43
|
+
local ____opt_4 = listenerByBehaviorByEvent[event]
|
|
44
|
+
if ____opt_4 ~= nil then
|
|
45
|
+
____opt_4[self] = nil
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
eventsByBehavior[self] = nil
|
|
49
|
+
end
|
|
50
|
+
return Behavior.prototype.onDestroy(self)
|
|
51
|
+
end
|
|
52
|
+
function UnitBehavior.prototype.registerInRangeUnitEvent(self, event, range, listener)
|
|
53
|
+
local rangeByBehavior = getOrPut(rangeByBehaviorByEvent, event, mutableLuaMap)
|
|
54
|
+
rangeByBehavior[self] = range
|
|
55
|
+
local listenerByBehavior = getOrPut(listenerByBehaviorByEvent, event, mutableLuaMap)
|
|
56
|
+
listenerByBehavior[self] = listener
|
|
57
|
+
getOrPut(eventsByBehavior, self, mutableLuaSet)[event] = true
|
|
58
|
+
local behaviors = behaviorsByEvent[event]
|
|
59
|
+
if behaviors == nil then
|
|
60
|
+
event:addListener(function(unit, ...)
|
|
61
|
+
local behaviors = behaviorsByEvent[event]
|
|
62
|
+
if behaviors ~= nil then
|
|
63
|
+
for behavior in pairs(behaviors) do
|
|
64
|
+
local range = rangeByBehavior[behavior]
|
|
65
|
+
if range ~= nil and unit:getCollisionDistanceTo(behavior.unit) <= range then
|
|
66
|
+
local ____self_6 = behavior
|
|
67
|
+
____self_6[listenerByBehavior[behavior]](____self_6, unit, ...)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end)
|
|
72
|
+
behaviors = __TS__New(LinkedSet)
|
|
73
|
+
behaviorsByEvent[event] = behaviors
|
|
74
|
+
end
|
|
75
|
+
behaviors:add(self)
|
|
76
|
+
end
|
|
77
|
+
function UnitBehavior.prototype.onImmediateOrder(self, orderId)
|
|
78
|
+
end
|
|
79
|
+
function UnitBehavior.prototype.onTargetOrder(self, orderId, target)
|
|
80
|
+
end
|
|
81
|
+
function UnitBehavior.prototype.onPointOrder(self, orderId, x, y)
|
|
82
|
+
end
|
|
19
83
|
function UnitBehavior.prototype.onAutoAttackStart(self, target)
|
|
20
84
|
end
|
|
21
85
|
function UnitBehavior.prototype.onAutoAttackFinish(self, target)
|
|
22
86
|
end
|
|
87
|
+
function UnitBehavior.prototype.onTargetingAutoAttackStart(self, source)
|
|
88
|
+
end
|
|
89
|
+
function UnitBehavior.prototype.onTargetingAutoAttackFinish(self, source)
|
|
90
|
+
end
|
|
23
91
|
function UnitBehavior.prototype.onDamageDealing(self, target, event)
|
|
24
92
|
end
|
|
25
93
|
function UnitBehavior.prototype.onDamageDealt(self, target, event)
|
|
@@ -32,6 +100,10 @@ function UnitBehavior.prototype.onAbilityGained(self, ability)
|
|
|
32
100
|
end
|
|
33
101
|
function UnitBehavior.prototype.onAbilityLost(self, ability)
|
|
34
102
|
end
|
|
103
|
+
function UnitBehavior.prototype.onAbilityChannelingStart(self, ability)
|
|
104
|
+
end
|
|
105
|
+
function UnitBehavior.prototype.onAbilityChannelingFinish(self, ability)
|
|
106
|
+
end
|
|
35
107
|
function UnitBehavior.prototype.onItemDropped(self, item)
|
|
36
108
|
end
|
|
37
109
|
function UnitBehavior.prototype.onItemPickedUp(self, item)
|
|
@@ -40,6 +112,8 @@ function UnitBehavior.prototype.onItemUsed(self, item)
|
|
|
40
112
|
end
|
|
41
113
|
function UnitBehavior.prototype.onItemStacked(self, item)
|
|
42
114
|
end
|
|
115
|
+
function UnitBehavior.prototype.onItemChargesChanged(self, item)
|
|
116
|
+
end
|
|
43
117
|
function UnitBehavior.prototype.onKill(self, target)
|
|
44
118
|
end
|
|
45
119
|
function UnitBehavior.prototype.onDeath(self, source)
|
|
@@ -53,11 +127,28 @@ __TS__SetDescriptor(
|
|
|
53
127
|
true
|
|
54
128
|
);
|
|
55
129
|
(function(self)
|
|
130
|
+
Unit.onImmediateOrder:addListener(function(source, orderId)
|
|
131
|
+
____exports.UnitBehavior:forAll(source, "onImmediateOrder", orderId)
|
|
132
|
+
end)
|
|
133
|
+
Unit.onTargetOrder:addListener(function(source, orderId, target)
|
|
134
|
+
____exports.UnitBehavior:forAll(source, "onTargetOrder", orderId, target)
|
|
135
|
+
end)
|
|
136
|
+
Unit.onPointOrder:addListener(function(source, orderId, x, y)
|
|
137
|
+
____exports.UnitBehavior:forAll(
|
|
138
|
+
source,
|
|
139
|
+
"onPointOrder",
|
|
140
|
+
orderId,
|
|
141
|
+
x,
|
|
142
|
+
y
|
|
143
|
+
)
|
|
144
|
+
end)
|
|
56
145
|
Unit.autoAttackStartEvent:addListener(function(source, target)
|
|
57
146
|
____exports.UnitBehavior:forAll(source, "onAutoAttackStart", target)
|
|
147
|
+
____exports.UnitBehavior:forAll(target, "onTargetingAutoAttackStart", source)
|
|
58
148
|
end)
|
|
59
149
|
Unit.autoAttackFinishEvent:addListener(function(source, target)
|
|
60
150
|
____exports.UnitBehavior:forAll(source, "onAutoAttackFinish", target)
|
|
151
|
+
____exports.UnitBehavior:forAll(target, "onTargetingAutoAttackFinish", source)
|
|
61
152
|
end)
|
|
62
153
|
Unit.onDamaging:addListener(function(source, target, event)
|
|
63
154
|
if source ~= nil then
|
|
@@ -71,11 +162,17 @@ __TS__SetDescriptor(
|
|
|
71
162
|
end
|
|
72
163
|
____exports.UnitBehavior:forAll(target, "onDamageReceived", source, event)
|
|
73
164
|
end)
|
|
74
|
-
Unit.abilityGainedEvent:addListener(function(source,
|
|
75
|
-
____exports.UnitBehavior:forAll(source, "onAbilityGained",
|
|
165
|
+
Unit.abilityGainedEvent:addListener(function(source, ability)
|
|
166
|
+
____exports.UnitBehavior:forAll(source, "onAbilityGained", ability)
|
|
167
|
+
end)
|
|
168
|
+
Unit.abilityLostEvent:addListener(function(source, ability)
|
|
169
|
+
____exports.UnitBehavior:forAll(source, "onAbilityLost", ability)
|
|
76
170
|
end)
|
|
77
|
-
Unit.
|
|
78
|
-
____exports.UnitBehavior:forAll(source, "
|
|
171
|
+
Unit.abilityChannelingStartEvent:addListener(function(source, ability)
|
|
172
|
+
____exports.UnitBehavior:forAll(source, "onAbilityChannelingStart", ability)
|
|
173
|
+
end)
|
|
174
|
+
Unit.abilityChannelingFinishEvent:addListener(function(source, ability)
|
|
175
|
+
____exports.UnitBehavior:forAll(source, "onAbilityChannelingFinish", ability)
|
|
79
176
|
end)
|
|
80
177
|
Unit.deathEvent:addListener(function(target, source)
|
|
81
178
|
if source ~= nil then
|
|
@@ -95,6 +192,9 @@ __TS__SetDescriptor(
|
|
|
95
192
|
Unit.itemStackedEvent:addListener(function(unit, item)
|
|
96
193
|
____exports.UnitBehavior:forAll(unit, "onItemStacked", item)
|
|
97
194
|
end)
|
|
195
|
+
Unit.itemChargesChangedEvent:addListener(function(unit, item)
|
|
196
|
+
____exports.UnitBehavior:forAll(unit, "onItemChargesChanged", item)
|
|
197
|
+
end)
|
|
98
198
|
end)(UnitBehavior)
|
|
99
199
|
Unit.destroyEvent:addListener(function(unit)
|
|
100
200
|
____exports.UnitBehavior:forAll(unit, "destroy")
|
|
@@ -58,6 +58,8 @@ export declare class UnitAbility extends Ability {
|
|
|
58
58
|
constructor(handle: jability, typeId: number, owner: Unit);
|
|
59
59
|
incrementHideCounter(): void;
|
|
60
60
|
decrementHideCounter(): void;
|
|
61
|
+
incrementDisableCounter(): void;
|
|
62
|
+
decrementDisableCounter(): void;
|
|
61
63
|
get level(): number;
|
|
62
64
|
set level(v: number);
|
|
63
65
|
get cooldownRemaining(): number;
|
|
@@ -38,6 +38,7 @@ local getHandleId = GetHandleId
|
|
|
38
38
|
local getItemBooleanField = BlzGetItemBooleanField
|
|
39
39
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
40
40
|
local unitHideAbility = BlzUnitHideAbility
|
|
41
|
+
local unitDisableAbility = BlzUnitDisableAbility
|
|
41
42
|
local match = string.match
|
|
42
43
|
local ____type = _G.type
|
|
43
44
|
local ____tostring = _G.tostring
|
|
@@ -402,6 +403,12 @@ end
|
|
|
402
403
|
function UnitAbility.prototype.decrementHideCounter(self)
|
|
403
404
|
unitHideAbility(self.u, self.typeId, false)
|
|
404
405
|
end
|
|
406
|
+
function UnitAbility.prototype.incrementDisableCounter(self)
|
|
407
|
+
unitDisableAbility(self.u, self.typeId, true, false)
|
|
408
|
+
end
|
|
409
|
+
function UnitAbility.prototype.decrementDisableCounter(self)
|
|
410
|
+
unitDisableAbility(self.u, self.typeId, false, false)
|
|
411
|
+
end
|
|
405
412
|
function UnitAbility.prototype.interruptCast(self)
|
|
406
413
|
self.owner:interruptCast(self.typeId)
|
|
407
414
|
end
|
|
@@ -55,22 +55,24 @@ local COOLDOWN_STARTER_ITEM_TYPE_ID = compiletime(function()
|
|
|
55
55
|
itemType.activelyUsed = true
|
|
56
56
|
return itemType.id
|
|
57
57
|
end)
|
|
58
|
-
|
|
58
|
+
---
|
|
59
|
+
-- @internal For use by internal systems only.
|
|
60
|
+
____exports.itemAbilityDummy = assert(CreateUnit(
|
|
59
61
|
Player.neutralVictim.handle,
|
|
60
62
|
dummyUnitId,
|
|
61
63
|
0,
|
|
62
64
|
0,
|
|
63
65
|
270
|
|
64
66
|
))
|
|
65
|
-
local cooldownStarterItem = UnitAddItemById(
|
|
67
|
+
local cooldownStarterItem = UnitAddItemById(____exports.itemAbilityDummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
|
|
66
68
|
local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
67
|
-
ShowUnit(
|
|
69
|
+
ShowUnit(____exports.itemAbilityDummy, false)
|
|
68
70
|
local function startItemCooldownInternal(handle, cooldown)
|
|
69
71
|
local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
|
|
70
72
|
setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
71
73
|
setAbilityRealLevelField(cooldownStarterAbility, ABILITY_RLF_COOLDOWN, 0, cooldown)
|
|
72
|
-
unitResetCooldown(
|
|
73
|
-
unitUseItem(
|
|
74
|
+
unitResetCooldown(____exports.itemAbilityDummy)
|
|
75
|
+
unitUseItem(____exports.itemAbilityDummy, cooldownStarterItem)
|
|
74
76
|
Timer:run(restoreCooldownGroup, handle, cooldownGroup)
|
|
75
77
|
end
|
|
76
78
|
restoreCooldownGroup = function(handle, cooldownGroup)
|
|
@@ -85,7 +87,7 @@ ____exports.startItemCooldown = function(handle, owner, cooldown)
|
|
|
85
87
|
end
|
|
86
88
|
---
|
|
87
89
|
-- @internal For use by internal systems only.
|
|
88
|
-
____exports.abilityActionDummy =
|
|
90
|
+
____exports.abilityActionDummy = ____exports.itemAbilityDummy
|
|
89
91
|
---
|
|
90
92
|
-- @internal For use by internal systems only.
|
|
91
93
|
____exports.doAbilityAction = function(handle, action, ...)
|
|
@@ -104,11 +106,11 @@ ____exports.doAbilityAction = function(handle, action, ...)
|
|
|
104
106
|
end
|
|
105
107
|
x = getItemX(handle)
|
|
106
108
|
y = getItemY(handle)
|
|
107
|
-
unitAddItem(
|
|
109
|
+
unitAddItem(____exports.itemAbilityDummy, handle)
|
|
108
110
|
end
|
|
109
111
|
local result = action(handle, ...)
|
|
110
112
|
if not isOwned then
|
|
111
|
-
unitRemoveItem(
|
|
113
|
+
unitRemoveItem(____exports.itemAbilityDummy, handle)
|
|
112
114
|
setItemPosition(handle, x, y)
|
|
113
115
|
if isPowerup then
|
|
114
116
|
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
@@ -139,9 +141,9 @@ ____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
|
|
|
139
141
|
isPowerup = true
|
|
140
142
|
end
|
|
141
143
|
unitRemoveItem(owner, handle)
|
|
142
|
-
unitAddItem(
|
|
144
|
+
unitAddItem(____exports.itemAbilityDummy, handle)
|
|
143
145
|
local result = action(handle, ...)
|
|
144
|
-
unitRemoveItem(
|
|
146
|
+
unitRemoveItem(____exports.itemAbilityDummy, handle)
|
|
145
147
|
unitAddItemToSlot(owner, handle, slot)
|
|
146
148
|
if isPowerup then
|
|
147
149
|
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
@@ -7,7 +7,6 @@ import { ItemAbility } from "./ability";
|
|
|
7
7
|
import { AbilityTypeId } from "../object-data/entry/ability-type";
|
|
8
8
|
import type { ItemTypeId } from "../object-data/entry/item-type";
|
|
9
9
|
type DefenseType = 0 | 1 | 2 | 3 | 4 | 5;
|
|
10
|
-
export declare const addAndGetAbility: (handle: jitem, abilityTypeId: AbilityTypeId) => jability | null;
|
|
11
10
|
declare const enum ItemPropertyKey {
|
|
12
11
|
ABILITIES = 100,
|
|
13
12
|
LUA_INDEX_BY_ABILITY_TYPE_ID = 101
|
|
@@ -74,6 +73,7 @@ export declare class Item extends Handle<jitem> {
|
|
|
74
73
|
set position(v: Vec2);
|
|
75
74
|
set charges(v: number);
|
|
76
75
|
get charges(): number;
|
|
76
|
+
consumeCharge(): boolean;
|
|
77
77
|
addAbility(abilityTypeId: AbilityTypeId): ItemAbility | undefined;
|
|
78
78
|
removeAbility(abilityTypeId: AbilityTypeId): boolean;
|
|
79
79
|
hasAbility(abilityTypeId: AbilityTypeId): boolean;
|
|
@@ -83,5 +83,6 @@ export declare class Item extends Handle<jitem> {
|
|
|
83
83
|
static getInRect(rect: ReadonlyRect): Item[];
|
|
84
84
|
static get onCreate(): Event<[Item]>;
|
|
85
85
|
static get destroyEvent(): Event<[Item]>;
|
|
86
|
+
static readonly chargesChangedEvent: Event<[Item]>;
|
|
86
87
|
}
|
|
87
88
|
export {};
|
package/engine/internal/item.lua
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__New = ____lualib.__TS__New
|
|
2
3
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
4
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
6
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
6
7
|
local __TS__Delete = ____lualib.__TS__Delete
|
|
7
8
|
local ____exports = {}
|
|
9
|
+
local invoke
|
|
8
10
|
local ____handle = require("core.types.handle")
|
|
9
11
|
local Handle = ____handle.Handle
|
|
10
12
|
local ____color = require("core.types.color")
|
|
11
13
|
local Color = ____color.Color
|
|
14
|
+
local ____event = require("event")
|
|
15
|
+
local Event = ____event.Event
|
|
12
16
|
local ____rect = require("core.types.rect")
|
|
13
17
|
local Rect = ____rect.Rect
|
|
14
18
|
local ____ability = require("engine.internal.ability")
|
|
15
19
|
local ItemAbility = ____ability.ItemAbility
|
|
16
20
|
local ____ability = require("engine.internal.item.ability")
|
|
17
21
|
local doAbilityAction = ____ability.doAbilityAction
|
|
22
|
+
local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
|
|
23
|
+
local itemAbilityDummy = ____ability.itemAbilityDummy
|
|
18
24
|
local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
|
|
19
25
|
local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
|
|
20
26
|
local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slot")
|
|
21
27
|
local SLOT_FILLER_ITEM_TYPE_ID = ____add_2Ditem_2Dto_2Dslot.SLOT_FILLER_ITEM_TYPE_ID
|
|
22
28
|
local ____vec2 = require("math.vec2")
|
|
23
29
|
local distance = ____vec2.distance
|
|
30
|
+
local itemChargesChangeEvent = __TS__New(Event)
|
|
24
31
|
local itemAddAbility = BlzItemAddAbility
|
|
25
32
|
local itemRemoveAbility = BlzItemRemoveAbility
|
|
26
33
|
local getItemAbility = BlzGetItemAbility
|
|
@@ -36,10 +43,24 @@ local getEnumItem = GetEnumItem
|
|
|
36
43
|
local getItemTypeId = GetItemTypeId
|
|
37
44
|
local getItemX = GetItemX
|
|
38
45
|
local getItemY = GetItemY
|
|
46
|
+
local getItemCharges = GetItemCharges
|
|
47
|
+
local setItemCharges = SetItemCharges
|
|
48
|
+
local unitRemoveAbility = UnitRemoveAbility
|
|
49
|
+
local unitUseItem = UnitUseItem
|
|
50
|
+
_G.SetItemCharges = function(whichItem, charges)
|
|
51
|
+
setItemCharges(whichItem, charges)
|
|
52
|
+
invoke(
|
|
53
|
+
itemChargesChangeEvent,
|
|
54
|
+
____exports.Item:of(whichItem)
|
|
55
|
+
)
|
|
56
|
+
end
|
|
39
57
|
local getItemIntegerField = BlzGetItemIntegerField
|
|
40
58
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
41
59
|
local getItemBooleanField = BlzGetItemBooleanField
|
|
60
|
+
invoke = Event.invoke
|
|
42
61
|
local enumRect = Rect:create(0, 0, 0, 0).handle
|
|
62
|
+
---
|
|
63
|
+
-- @internal For use by internal systems only.
|
|
43
64
|
____exports.addAndGetAbility = function(handle, abilityTypeId)
|
|
44
65
|
if itemAddAbility(handle, abilityTypeId) then
|
|
45
66
|
return getItemAbility(handle, abilityTypeId)
|
|
@@ -65,6 +86,23 @@ local function getItemAbilities(handle, item)
|
|
|
65
86
|
end
|
|
66
87
|
return abilities
|
|
67
88
|
end
|
|
89
|
+
local function consumeCharge(handle)
|
|
90
|
+
do
|
|
91
|
+
local i = 0
|
|
92
|
+
local ability = getItemAbilityByIndex(handle, i)
|
|
93
|
+
while ability ~= nil do
|
|
94
|
+
unitRemoveAbility(
|
|
95
|
+
itemAbilityDummy,
|
|
96
|
+
getAbilityId(ability)
|
|
97
|
+
)
|
|
98
|
+
do
|
|
99
|
+
i = i + 1
|
|
100
|
+
ability = getItemAbilityByIndex(handle, i)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
unitUseItem(itemAbilityDummy, handle)
|
|
105
|
+
end
|
|
68
106
|
local targetCollection
|
|
69
107
|
local targetCollectionNextIndex
|
|
70
108
|
local centerX
|
|
@@ -116,6 +154,32 @@ end
|
|
|
116
154
|
function Item.create(self, id, x, y, skinId)
|
|
117
155
|
return self:of(BlzCreateItemWithSkin(id, x, y, skinId or id))
|
|
118
156
|
end
|
|
157
|
+
function Item.prototype.consumeCharge(self)
|
|
158
|
+
local handle = self.handle
|
|
159
|
+
local charges = getItemCharges(handle)
|
|
160
|
+
if charges >= 2 then
|
|
161
|
+
setItemCharges(handle, charges - 1)
|
|
162
|
+
invoke(itemChargesChangeEvent, self)
|
|
163
|
+
return true
|
|
164
|
+
end
|
|
165
|
+
if charges == 1 then
|
|
166
|
+
if getItemBooleanField(handle, ITEM_BF_PERISHABLE) then
|
|
167
|
+
self:destroy()
|
|
168
|
+
return true
|
|
169
|
+
end
|
|
170
|
+
if not getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED) then
|
|
171
|
+
setItemCharges(handle, 0)
|
|
172
|
+
invoke(itemChargesChangeEvent, self)
|
|
173
|
+
return true
|
|
174
|
+
end
|
|
175
|
+
local ____doAbilityActionForceDummy_2 = doAbilityActionForceDummy
|
|
176
|
+
local ____opt_0 = self.owner
|
|
177
|
+
____doAbilityActionForceDummy_2(handle, ____opt_0 and ____opt_0.handle, consumeCharge)
|
|
178
|
+
invoke(itemChargesChangeEvent, self)
|
|
179
|
+
return true
|
|
180
|
+
end
|
|
181
|
+
return false
|
|
182
|
+
end
|
|
119
183
|
function Item.prototype.addAbility(self, abilityTypeId)
|
|
120
184
|
local nativeAbility = doAbilityAction(self.handle, ____exports.addAndGetAbility, abilityTypeId)
|
|
121
185
|
if nativeAbility ~= nil then
|
|
@@ -301,7 +365,7 @@ __TS__SetDescriptor(
|
|
|
301
365
|
"perishable",
|
|
302
366
|
{
|
|
303
367
|
get = function(self)
|
|
304
|
-
return
|
|
368
|
+
return getItemBooleanField(self.handle, ITEM_BF_PERISHABLE)
|
|
305
369
|
end,
|
|
306
370
|
set = function(self, v)
|
|
307
371
|
BlzSetItemBooleanField(self.handle, ITEM_BF_PERISHABLE, v)
|
|
@@ -557,10 +621,11 @@ __TS__SetDescriptor(
|
|
|
557
621
|
"charges",
|
|
558
622
|
{
|
|
559
623
|
get = function(self)
|
|
560
|
-
return
|
|
624
|
+
return getItemCharges(self.handle)
|
|
561
625
|
end,
|
|
562
626
|
set = function(self, v)
|
|
563
|
-
|
|
627
|
+
setItemCharges(self.handle, v)
|
|
628
|
+
invoke(itemChargesChangeEvent, self)
|
|
564
629
|
end
|
|
565
630
|
},
|
|
566
631
|
true
|
|
@@ -587,6 +652,7 @@ __TS__ObjectDefineProperty(
|
|
|
587
652
|
return self.onDestroyEvent
|
|
588
653
|
end}
|
|
589
654
|
)
|
|
655
|
+
Item.chargesChangedEvent = itemChargesChangeEvent
|
|
590
656
|
local getManipulatedItem = GetManipulatedItem
|
|
591
657
|
local trigger = CreateTrigger()
|
|
592
658
|
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_PICKUP_ITEM)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { CombatClassifications } from "../../object-data/auxiliary/combat-classification";
|
|
3
3
|
declare module "../unit" {
|
|
4
4
|
interface Unit {
|
|
5
|
-
isAllowedTarget(this: Unit, source: Unit, allowedTargetCombatClassifications
|
|
5
|
+
isAllowedTarget(this: Unit, source: Unit, allowedTargetCombatClassifications?: CombatClassifications): boolean;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
declare module "../unit" {
|
|
@@ -5,7 +5,15 @@ local initializeFilterTargetState = ____combat_2Dclassification.initializeFilter
|
|
|
5
5
|
local ____unit = require("engine.internal.unit")
|
|
6
6
|
local Unit = ____unit.Unit
|
|
7
7
|
Unit.prototype.isAllowedTarget = function(self, source, allowedTargetCombatClassifications)
|
|
8
|
-
|
|
8
|
+
if allowedTargetCombatClassifications ~= nil then
|
|
9
|
+
initializeFilterTargetState(source, allowedTargetCombatClassifications)
|
|
10
|
+
return filterTarget(self)
|
|
11
|
+
end
|
|
12
|
+
initializeFilterTargetState(source, source.firstWeapon.allowedTargetCombatClassifications)
|
|
13
|
+
if filterTarget(self) then
|
|
14
|
+
return true
|
|
15
|
+
end
|
|
16
|
+
initializeFilterTargetState(source, source.secondWeapon.allowedTargetCombatClassifications)
|
|
9
17
|
return filterTarget(self)
|
|
10
18
|
end
|
|
11
19
|
Unit.getAllowedTargetsInRange = function(source, allowedTargetCombatClassifications, x, y, range)
|
|
@@ -44,7 +44,7 @@ local function timerCallback(source, target)
|
|
|
44
44
|
Event.invoke(autoAttackFinishEvent, source, target)
|
|
45
45
|
end
|
|
46
46
|
Unit.autoAttackStartEvent:addListener(function(source, target)
|
|
47
|
-
local attackPoint = source.
|
|
47
|
+
local attackPoint = (source:chooseWeapon(target) or source.firstWeapon).impactDelay
|
|
48
48
|
local timer = Timer:simple(attackPoint, timerCallback, source, target)
|
|
49
49
|
eventTimerByUnit[source] = timer
|
|
50
50
|
end)
|
|
@@ -14,6 +14,7 @@ import { CombatClassification, CombatClassifications } from "../object-data/auxi
|
|
|
14
14
|
import { MovementType } from "../object-data/auxiliary/movement-type";
|
|
15
15
|
import { UnitAttribute } from "../object-data/auxiliary/unit-attribute";
|
|
16
16
|
import { AttackType } from "../object-data/auxiliary/attack-type";
|
|
17
|
+
import { AttributesHolder } from "../../attributes";
|
|
17
18
|
export type UnitClassification = junittype;
|
|
18
19
|
export declare namespace UnitClassification {
|
|
19
20
|
const STRUCTURE: junittype;
|
|
@@ -22,6 +23,7 @@ export declare namespace UnitClassification {
|
|
|
22
23
|
const GROUND: junittype;
|
|
23
24
|
const SUMMONED: junittype;
|
|
24
25
|
const MECHANICAL: junittype;
|
|
26
|
+
const WORKER: junittype;
|
|
25
27
|
const ANCIENT: junittype;
|
|
26
28
|
const SUICIDAL: junittype;
|
|
27
29
|
const TAUREN: junittype;
|
|
@@ -39,7 +41,7 @@ type AbilityDispatcherTable<T extends any[] = []> = {
|
|
|
39
41
|
readonly [id: number]: Event<[Unit, Ability, ...T]>;
|
|
40
42
|
};
|
|
41
43
|
type AbilityEventDispatcher<T extends any[] = []> = Event<[Unit, Ability, ...T]> & AbilityDispatcherTable<T>;
|
|
42
|
-
export interface DamagingEvent {
|
|
44
|
+
export interface DamagingEvent extends AttributesHolder {
|
|
43
45
|
amount: number;
|
|
44
46
|
attackType: AttackType;
|
|
45
47
|
damageType: jdamagetype;
|
|
@@ -48,8 +50,9 @@ export interface DamagingEvent {
|
|
|
48
50
|
readonly isAttack: boolean;
|
|
49
51
|
readonly originalAmount: number;
|
|
50
52
|
readonly originalMetadata: unknown;
|
|
53
|
+
preventRetaliation(this: DamagingEvent): void;
|
|
51
54
|
}
|
|
52
|
-
export type DamageEvent = DamagingEvent & {
|
|
55
|
+
export type DamageEvent = Omit<DamagingEvent, "preventRetaliation"> & {
|
|
53
56
|
preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
|
|
54
57
|
};
|
|
55
58
|
export type AttackDamageEvent = DamagingEvent & {
|
|
@@ -81,6 +84,8 @@ export declare class UnitWeapon {
|
|
|
81
84
|
set cooldown(cooldown: number);
|
|
82
85
|
get damage(): [minimumDamage: number, maximumDamage: number];
|
|
83
86
|
set damage([minimumDamage, maximumDamage]: [number, number]);
|
|
87
|
+
get allowedTargetCombatClassifications(): CombatClassifications;
|
|
88
|
+
set allowedTargetCombatClassifications(allowedTargetCombatClassifications: CombatClassifications);
|
|
84
89
|
get damageBase(): number;
|
|
85
90
|
set damageBase(damageBase: number);
|
|
86
91
|
get damageDiceCount(): number;
|
|
@@ -162,6 +167,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
162
167
|
get weapons(): [UnitWeapon, UnitWeapon];
|
|
163
168
|
get firstWeapon(): UnitWeapon;
|
|
164
169
|
get secondWeapon(): UnitWeapon;
|
|
170
|
+
chooseWeapon(target: Unit): UnitWeapon | undefined;
|
|
165
171
|
get level(): number;
|
|
166
172
|
set level(v: number);
|
|
167
173
|
get xp(): number;
|
|
@@ -294,6 +300,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
294
300
|
get onUnitInRange(): Record<number, Event<[Unit]>>;
|
|
295
301
|
get onManaEqual(): Record<number, Event<[Unit, number]>>;
|
|
296
302
|
get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
|
|
303
|
+
get targetAcquiredEvent(): Event;
|
|
297
304
|
get onSelect(): Event;
|
|
298
305
|
get onDeselect(): Event;
|
|
299
306
|
get onImmediateOrder(): Event<[number]>;
|
|
@@ -347,6 +354,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
347
354
|
static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
|
|
348
355
|
static itemUsedEvent: UnitTriggerEvent<[Item]>;
|
|
349
356
|
static itemStackedEvent: UnitTriggerEvent<[Item]>;
|
|
357
|
+
static get itemChargesChangedEvent(): Event<[unit: Unit, item: Item]>;
|
|
350
358
|
static get itemUseOrderEvent(): Event<[unit: Unit, item: Item]>;
|
|
351
359
|
static get itemMoveOrderEvent(): Event<[
|
|
352
360
|
unit: Unit,
|
package/engine/internal/unit.lua
CHANGED
|
@@ -58,13 +58,12 @@ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
|
|
|
58
58
|
local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
|
|
59
59
|
local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
|
|
60
60
|
local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
|
|
61
|
+
local ____attributes = require("attributes")
|
|
62
|
+
local isAttribute = ____attributes.isAttribute
|
|
61
63
|
local match = string.match
|
|
62
64
|
local ____tostring = _G.tostring
|
|
63
65
|
local setUnitAnimation = SetUnitAnimation
|
|
64
|
-
local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
|
|
65
66
|
local setUnitAnimationByIndex = SetUnitAnimationByIndex
|
|
66
|
-
local resetUnitAnimation = ResetUnitAnimation
|
|
67
|
-
local queueUnitAnimation = QueueUnitAnimation
|
|
68
67
|
local getUnitIntegerField = BlzGetUnitIntegerField
|
|
69
68
|
local getUnitRealField = BlzGetUnitRealField
|
|
70
69
|
local getHeroStr = GetHeroStr
|
|
@@ -140,6 +139,7 @@ do
|
|
|
140
139
|
UnitClassification.GROUND = UNIT_TYPE_GROUND
|
|
141
140
|
UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
|
|
142
141
|
UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
|
|
142
|
+
UnitClassification.WORKER = UNIT_TYPE_PEON
|
|
143
143
|
UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
|
|
144
144
|
UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
|
|
145
145
|
UnitClassification.TAUREN = UNIT_TYPE_TAUREN
|
|
@@ -347,6 +347,9 @@ local function dispatchAbility(event)
|
|
|
347
347
|
}
|
|
348
348
|
)
|
|
349
349
|
end
|
|
350
|
+
local function damagingEventPreventRetaliation(self)
|
|
351
|
+
self[0] = true
|
|
352
|
+
end
|
|
350
353
|
local function damageEventPreventDeath(self, callback, ...)
|
|
351
354
|
if self[0] ~= nil then
|
|
352
355
|
return
|
|
@@ -443,6 +446,19 @@ __TS__SetDescriptor(
|
|
|
443
446
|
},
|
|
444
447
|
true
|
|
445
448
|
)
|
|
449
|
+
__TS__SetDescriptor(
|
|
450
|
+
UnitWeapon.prototype,
|
|
451
|
+
"allowedTargetCombatClassifications",
|
|
452
|
+
{
|
|
453
|
+
get = function(self)
|
|
454
|
+
return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
|
|
455
|
+
end,
|
|
456
|
+
set = function(self, allowedTargetCombatClassifications)
|
|
457
|
+
BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
|
|
458
|
+
end
|
|
459
|
+
},
|
|
460
|
+
true
|
|
461
|
+
)
|
|
446
462
|
__TS__SetDescriptor(
|
|
447
463
|
UnitWeapon.prototype,
|
|
448
464
|
"damageBase",
|
|
@@ -801,16 +817,25 @@ function Unit.prototype.playAnimation(self, animation, rarity)
|
|
|
801
817
|
if type(animation) == "number" then
|
|
802
818
|
setUnitAnimationByIndex(self.handle, animation)
|
|
803
819
|
elseif rarity then
|
|
804
|
-
|
|
820
|
+
SetUnitAnimationWithRarity(self.handle, animation, rarity)
|
|
805
821
|
else
|
|
806
822
|
setUnitAnimation(self.handle, animation)
|
|
807
823
|
end
|
|
808
824
|
end
|
|
809
825
|
function Unit.prototype.resetAnimation(self)
|
|
810
|
-
|
|
826
|
+
ResetUnitAnimation(self.handle)
|
|
811
827
|
end
|
|
812
828
|
function Unit.prototype.queueAnimation(self, animation)
|
|
813
|
-
|
|
829
|
+
QueueUnitAnimation(self.handle, animation)
|
|
830
|
+
end
|
|
831
|
+
function Unit.prototype.chooseWeapon(self, target)
|
|
832
|
+
if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
|
|
833
|
+
return self.firstWeapon
|
|
834
|
+
end
|
|
835
|
+
if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
|
|
836
|
+
return self.secondWeapon
|
|
837
|
+
end
|
|
838
|
+
return nil
|
|
814
839
|
end
|
|
815
840
|
function Unit.prototype.delayHealthChecks(self)
|
|
816
841
|
self[103] = (self[103] or 0) + 1
|
|
@@ -2048,6 +2073,14 @@ __TS__SetDescriptor(
|
|
|
2048
2073
|
end},
|
|
2049
2074
|
true
|
|
2050
2075
|
)
|
|
2076
|
+
__TS__SetDescriptor(
|
|
2077
|
+
Unit.prototype,
|
|
2078
|
+
"targetAcquiredEvent",
|
|
2079
|
+
{get = function(self)
|
|
2080
|
+
return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
|
|
2081
|
+
end},
|
|
2082
|
+
true
|
|
2083
|
+
)
|
|
2051
2084
|
__TS__SetDescriptor(
|
|
2052
2085
|
Unit.prototype,
|
|
2053
2086
|
"onSelect",
|
|
@@ -2420,7 +2453,8 @@ Unit.onDamaging = (function()
|
|
|
2420
2453
|
metadata = metadata,
|
|
2421
2454
|
isAttack = BlzGetEventIsAttack(),
|
|
2422
2455
|
originalAmount = GetEventDamage(),
|
|
2423
|
-
originalMetadata = metadata
|
|
2456
|
+
originalMetadata = metadata,
|
|
2457
|
+
preventRetaliation = damagingEventPreventRetaliation
|
|
2424
2458
|
}
|
|
2425
2459
|
if data.isAttack and source then
|
|
2426
2460
|
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 +2483,20 @@ Unit.onDamaging = (function()
|
|
|
2449
2483
|
}
|
|
2450
2484
|
)
|
|
2451
2485
|
)
|
|
2486
|
+
if data[0] and source then
|
|
2487
|
+
local sourceOwner = source.owner.handle
|
|
2488
|
+
data[1] = sourceOwner
|
|
2489
|
+
local targetOwner = target.owner.handle
|
|
2490
|
+
data[2] = targetOwner
|
|
2491
|
+
if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
|
|
2492
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
|
|
2493
|
+
data[3] = true
|
|
2494
|
+
end
|
|
2495
|
+
if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
|
|
2496
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
|
|
2497
|
+
data[4] = true
|
|
2498
|
+
end
|
|
2499
|
+
end
|
|
2452
2500
|
damagingEventByTarget[target] = data
|
|
2453
2501
|
return
|
|
2454
2502
|
end
|
|
@@ -2526,12 +2574,32 @@ Unit.onDamage = __TS__New(
|
|
|
2526
2574
|
originalMetadata = damagingEvent and damagingEvent.originalMetadata,
|
|
2527
2575
|
preventDeath = damageEventPreventDeath
|
|
2528
2576
|
}
|
|
2577
|
+
if damagingEvent then
|
|
2578
|
+
for key, value in pairs(damagingEvent) do
|
|
2579
|
+
if isAttribute(key) then
|
|
2580
|
+
data[key] = value
|
|
2581
|
+
end
|
|
2582
|
+
end
|
|
2583
|
+
local sourceOwner = damagingEvent[1]
|
|
2584
|
+
if sourceOwner then
|
|
2585
|
+
local targetOwner = damagingEvent[2]
|
|
2586
|
+
if damagingEvent[3] then
|
|
2587
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
|
|
2588
|
+
end
|
|
2589
|
+
if damagingEvent[4] then
|
|
2590
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
|
|
2591
|
+
end
|
|
2592
|
+
end
|
|
2593
|
+
end
|
|
2529
2594
|
local evData = setmetatable(
|
|
2530
2595
|
{},
|
|
2531
2596
|
{
|
|
2532
2597
|
__index = data,
|
|
2533
2598
|
__newindex = function(self, key, value)
|
|
2534
|
-
damageSetters[key]
|
|
2599
|
+
local damageSetter = damageSetters[key]
|
|
2600
|
+
if damageSetter ~= nil then
|
|
2601
|
+
damageSetter(value)
|
|
2602
|
+
end
|
|
2535
2603
|
data[key] = value
|
|
2536
2604
|
end
|
|
2537
2605
|
}
|
|
@@ -2614,6 +2682,21 @@ Unit.itemStackedEvent = __TS__New(
|
|
|
2614
2682
|
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2615
2683
|
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2616
2684
|
)
|
|
2685
|
+
__TS__ObjectDefineProperty(
|
|
2686
|
+
Unit,
|
|
2687
|
+
"itemChargesChangedEvent",
|
|
2688
|
+
{get = function(self)
|
|
2689
|
+
local event = __TS__New(Event)
|
|
2690
|
+
Item.chargesChangedEvent:addListener(function(item)
|
|
2691
|
+
local unit = item.owner
|
|
2692
|
+
if unit ~= nil then
|
|
2693
|
+
invoke(event, unit, item)
|
|
2694
|
+
end
|
|
2695
|
+
end)
|
|
2696
|
+
rawset(self, "itemChargesChangedEvent", event)
|
|
2697
|
+
return event
|
|
2698
|
+
end}
|
|
2699
|
+
)
|
|
2617
2700
|
__TS__ObjectDefineProperty(
|
|
2618
2701
|
Unit,
|
|
2619
2702
|
"itemUseOrderEvent",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { AbilityType, AbilityTypeId } from "../ability-type";
|
|
3
|
+
import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
|
|
4
|
+
export declare class PermanentInvisibilityAbilityType extends AbilityType {
|
|
5
|
+
static readonly BASE_ID: AbilityTypeId;
|
|
6
|
+
get shouldAutoAcquireAttackTargets(): boolean[];
|
|
7
|
+
set shouldAutoAcquireAttackTargets(shouldAutoAcquireAttackTargets: ObjectDataEntryLevelFieldValueSupplier<boolean>);
|
|
8
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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.PermanentInvisibilityAbilityType = __TS__Class()
|
|
9
|
+
local PermanentInvisibilityAbilityType = ____exports.PermanentInvisibilityAbilityType
|
|
10
|
+
PermanentInvisibilityAbilityType.name = "PermanentInvisibilityAbilityType"
|
|
11
|
+
__TS__ClassExtends(PermanentInvisibilityAbilityType, AbilityType)
|
|
12
|
+
PermanentInvisibilityAbilityType.BASE_ID = fourCC("Apiv")
|
|
13
|
+
__TS__SetDescriptor(
|
|
14
|
+
PermanentInvisibilityAbilityType.prototype,
|
|
15
|
+
"shouldAutoAcquireAttackTargets",
|
|
16
|
+
{
|
|
17
|
+
get = function(self)
|
|
18
|
+
return self:getBooleanLevelField("Gho1")
|
|
19
|
+
end,
|
|
20
|
+
set = function(self, shouldAutoAcquireAttackTargets)
|
|
21
|
+
self:setBooleanLevelField("Gho1", shouldAutoAcquireAttackTargets)
|
|
22
|
+
end
|
|
23
|
+
},
|
|
24
|
+
true
|
|
25
|
+
)
|
|
26
|
+
return ____exports
|
package/package.json
CHANGED