warscript 0.0.1-dev.1b0add9 → 0.0.1-dev.1e33483
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/core/types/effect.d.ts +1 -0
- package/core/types/effect.lua +82 -32
- package/core/util.d.ts +1 -1
- package/core/util.lua +6 -0
- package/engine/behaviour/ability/always-enabled.d.ts +7 -0
- package/engine/behaviour/ability/always-enabled.lua +31 -0
- package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
- package/engine/behaviour/ability/emulate-impact.lua +29 -0
- package/engine/behaviour/ability/instant-impact.d.ts +2 -2
- package/engine/behaviour/ability/instant-impact.lua +4 -19
- package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
- package/engine/behaviour/ability/on-command-impact.lua +25 -0
- package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
- package/engine/behaviour/ability/remove-buffs.lua +28 -0
- package/engine/behaviour/ability.d.ts +9 -2
- package/engine/behaviour/ability.lua +47 -33
- package/engine/internal/ability.d.ts +13 -2
- package/engine/internal/ability.lua +76 -4
- package/engine/internal/item/ability.lua +68 -0
- package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
- package/engine/internal/misc/ability-disable-counter.lua +13 -0
- package/engine/internal/unit/ability.d.ts +10 -1
- package/engine/internal/unit/ability.lua +36 -0
- package/engine/internal/unit/item.lua +3 -8
- package/engine/internal/unit.d.ts +2 -1
- package/engine/internal/unit.lua +23 -2
- package/engine/internal/utility.lua +12 -0
- package/engine/object-data/entry/item-type.d.ts +2 -0
- package/engine/object-data/entry/item-type.lua +13 -0
- package/engine/object-field/ability.d.ts +4 -1
- package/engine/standard/fields/ability.d.ts +2 -0
- package/engine/standard/fields/ability.lua +2 -0
- package/package.json +1 -1
- package/utility/lazy.d.ts +2 -0
- package/utility/lazy.lua +14 -0
package/core/types/effect.d.ts
CHANGED
package/core/types/effect.lua
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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__InstanceOf = ____lualib.__TS__InstanceOf
|
|
5
4
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
|
+
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
6
6
|
local ____exports = {}
|
|
7
|
-
local dummyPlayer
|
|
7
|
+
local dummyPlayer, flash
|
|
8
8
|
local ____handle = require("core.types.handle")
|
|
9
9
|
local Handle = ____handle.Handle
|
|
10
10
|
local ____playerColor = require("core.types.playerColor")
|
|
@@ -41,10 +41,10 @@ local function setSpecialEffectPitchDegrees(effect, pitch)
|
|
|
41
41
|
-mathRad(pitch)
|
|
42
42
|
)
|
|
43
43
|
end
|
|
44
|
-
local function setSpecialEffectRollDegrees(effect,
|
|
44
|
+
local function setSpecialEffectRollDegrees(effect, roll)
|
|
45
45
|
setSpecialEffectRoll(
|
|
46
46
|
effect,
|
|
47
|
-
-mathRad(
|
|
47
|
+
-mathRad(roll)
|
|
48
48
|
)
|
|
49
49
|
end
|
|
50
50
|
local animTypeByAnimationName = {
|
|
@@ -123,6 +123,13 @@ dummyPlayer = Player.neutralExtra
|
|
|
123
123
|
local temporaryEffects = {}
|
|
124
124
|
local temporaryEffectsDurations = {}
|
|
125
125
|
local temporaryEffectsCount = 0
|
|
126
|
+
local delayedEffectsModelPath = {}
|
|
127
|
+
local delayedEffectsXOrWidget = {}
|
|
128
|
+
local delayedEffectsYOrAttachmentPoint = {}
|
|
129
|
+
local delayedEffectsDuration = {}
|
|
130
|
+
local delayedEffectsParameters = {}
|
|
131
|
+
local delayedEffectsDelay = {}
|
|
132
|
+
local delayedEffectsCount = 0
|
|
126
133
|
local period = 1 / 32
|
|
127
134
|
Timer.onPeriod[period]:addListener(function()
|
|
128
135
|
local i = 1
|
|
@@ -131,12 +138,36 @@ Timer.onPeriod[period]:addListener(function()
|
|
|
131
138
|
if duration <= 0 then
|
|
132
139
|
destroyEffect(temporaryEffects[i])
|
|
133
140
|
temporaryEffects[i] = temporaryEffects[temporaryEffectsCount]
|
|
141
|
+
temporaryEffectsDurations[i] = temporaryEffectsDurations[temporaryEffectsCount]
|
|
134
142
|
temporaryEffectsCount = temporaryEffectsCount - 1
|
|
135
143
|
else
|
|
136
144
|
temporaryEffectsDurations[i] = duration - period
|
|
137
145
|
i = i + 1
|
|
138
146
|
end
|
|
139
147
|
end
|
|
148
|
+
i = 1
|
|
149
|
+
while i <= delayedEffectsCount do
|
|
150
|
+
local delay = delayedEffectsDelay[i]
|
|
151
|
+
if delay <= 0 then
|
|
152
|
+
flash(
|
|
153
|
+
delayedEffectsModelPath[i],
|
|
154
|
+
delayedEffectsXOrWidget[i],
|
|
155
|
+
delayedEffectsYOrAttachmentPoint[i],
|
|
156
|
+
delayedEffectsDuration[i],
|
|
157
|
+
delayedEffectsParameters[i]
|
|
158
|
+
)
|
|
159
|
+
delayedEffectsModelPath[i] = delayedEffectsModelPath[delayedEffectsCount]
|
|
160
|
+
delayedEffectsXOrWidget[i] = delayedEffectsXOrWidget[delayedEffectsCount]
|
|
161
|
+
delayedEffectsYOrAttachmentPoint[i] = delayedEffectsYOrAttachmentPoint[delayedEffectsCount]
|
|
162
|
+
delayedEffectsDuration[i] = delayedEffectsDuration[delayedEffectsCount]
|
|
163
|
+
delayedEffectsParameters[i] = delayedEffectsParameters[delayedEffectsCount]
|
|
164
|
+
delayedEffectsDelay[i] = delayedEffectsDelay[delayedEffectsCount]
|
|
165
|
+
delayedEffectsCount = delayedEffectsCount - 1
|
|
166
|
+
else
|
|
167
|
+
delayedEffectsDelay[i] = delay - period
|
|
168
|
+
i = i + 1
|
|
169
|
+
end
|
|
170
|
+
end
|
|
140
171
|
end)
|
|
141
172
|
____exports.Effect = __TS__Class()
|
|
142
173
|
local Effect = ____exports.Effect
|
|
@@ -157,36 +188,23 @@ function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, paramete
|
|
|
157
188
|
parameters = parametersOrDuration
|
|
158
189
|
parametersOrDuration = nil
|
|
159
190
|
end
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if parameters ~= nil then
|
|
169
|
-
for key, value in ____pairs(parameters) do
|
|
170
|
-
if key ~= "zOffset" and key ~= "detached" and key ~= "scaleZOffset" then
|
|
171
|
-
setters[key](effect, value)
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
if isPositional and parameters.zOffset ~= nil then
|
|
175
|
-
moveLocation(location, x, y)
|
|
176
|
-
local z = __TS__InstanceOf(xOrWidget, Unit) and getLocationZ(location) + xOrWidget.flyHeight or getLocationZ(location)
|
|
177
|
-
BlzSetSpecialEffectZ(
|
|
178
|
-
effect,
|
|
179
|
-
z + parameters.zOffset * (parameters.scaleZOffset and getSpecialEffectScale(effect) or 1)
|
|
180
|
-
)
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
if parametersOrDuration ~= nil and parametersOrDuration > 0 then
|
|
184
|
-
temporaryEffectsCount = temporaryEffectsCount + 1
|
|
185
|
-
temporaryEffects[temporaryEffectsCount] = effect
|
|
186
|
-
temporaryEffectsDurations[temporaryEffectsCount] = parametersOrDuration
|
|
191
|
+
if parameters and (parameters.delay or 0) > 0 then
|
|
192
|
+
delayedEffectsCount = delayedEffectsCount + 1
|
|
193
|
+
delayedEffectsModelPath[delayedEffectsCount] = modelPath
|
|
194
|
+
delayedEffectsXOrWidget[delayedEffectsCount] = xOrWidget
|
|
195
|
+
delayedEffectsYOrAttachmentPoint[delayedEffectsCount] = yOrOrAttachmentPoint
|
|
196
|
+
delayedEffectsDuration[delayedEffectsCount] = parametersOrDuration
|
|
197
|
+
delayedEffectsParameters[delayedEffectsCount] = parameters
|
|
198
|
+
delayedEffectsDelay[delayedEffectsCount] = parameters.delay
|
|
187
199
|
return
|
|
188
200
|
end
|
|
189
|
-
|
|
201
|
+
flash(
|
|
202
|
+
modelPath,
|
|
203
|
+
xOrWidget,
|
|
204
|
+
yOrOrAttachmentPoint,
|
|
205
|
+
parametersOrDuration,
|
|
206
|
+
parameters
|
|
207
|
+
)
|
|
190
208
|
end
|
|
191
209
|
function Effect.flashTarget(self, model, target, attachPoint, duration)
|
|
192
210
|
local effect = addSpecialEffectTarget(model, target.handle, attachPoint)
|
|
@@ -255,4 +273,36 @@ __TS__SetDescriptor(
|
|
|
255
273
|
},
|
|
256
274
|
true
|
|
257
275
|
)
|
|
276
|
+
flash = function(modelPath, xOrWidget, yOrOrAttachmentPoint, duration, parameters)
|
|
277
|
+
local coordinatesProvided = type(xOrWidget) == "number"
|
|
278
|
+
local isPositional = coordinatesProvided or (parameters and parameters.detached) == true
|
|
279
|
+
local x = not isPositional and 0 or (coordinatesProvided and xOrWidget or xOrWidget.x)
|
|
280
|
+
local y = not isPositional and 0 or (coordinatesProvided and yOrOrAttachmentPoint or xOrWidget.y)
|
|
281
|
+
local effect = isPositional and addSpecialEffect(modelPath, x, y) or addSpecialEffectTarget(modelPath, xOrWidget.handle, yOrOrAttachmentPoint or "origin")
|
|
282
|
+
if isPositional and not coordinatesProvided and (parameters and parameters.scale) == nil and __TS__InstanceOf(xOrWidget, Unit) then
|
|
283
|
+
setSpecialEffectScale(effect, xOrWidget.scale)
|
|
284
|
+
end
|
|
285
|
+
if parameters ~= nil then
|
|
286
|
+
for key, value in ____pairs(parameters) do
|
|
287
|
+
if key ~= "zOffset" and key ~= "detached" and key ~= "scaleZOffset" and key ~= "delay" then
|
|
288
|
+
setters[key](effect, value)
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
if isPositional and parameters.zOffset ~= nil then
|
|
292
|
+
moveLocation(location, x, y)
|
|
293
|
+
local z = __TS__InstanceOf(xOrWidget, Unit) and getLocationZ(location) + xOrWidget.flyHeight or getLocationZ(location)
|
|
294
|
+
BlzSetSpecialEffectZ(
|
|
295
|
+
effect,
|
|
296
|
+
z + parameters.zOffset * (parameters.scaleZOffset and getSpecialEffectScale(effect) or 1)
|
|
297
|
+
)
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
if duration ~= nil and duration > 0 then
|
|
301
|
+
temporaryEffectsCount = temporaryEffectsCount + 1
|
|
302
|
+
temporaryEffects[temporaryEffectsCount] = effect
|
|
303
|
+
temporaryEffectsDurations[temporaryEffectsCount] = duration
|
|
304
|
+
return
|
|
305
|
+
end
|
|
306
|
+
destroyEffect(effect)
|
|
307
|
+
end
|
|
258
308
|
return ____exports
|
package/core/util.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ declare global {
|
|
|
54
54
|
function fourCC(id: string): number;
|
|
55
55
|
}
|
|
56
56
|
declare namespace inner {
|
|
57
|
-
const orderId: (id: "blink" | "stop" | "load" | "sleep" | "absorb" | "acidbomb" | "acolyteharvest" | "ambush" | "ancestralspirit" | "ancestralspirittarget" | "animatedead" | "antimagicshell" | "attack" | "attackground" | "attackonce" | "attributemodskill" | "auraunholy" | "auravampiric" | "autodispel" | "autodispeloff" | "autodispelon" | "autoentangle" | "autoentangleinstant" | "autoharvestgold" | "autoharvestlumber" | "avatar" | "avengerform" | "awaken" | "banish" | "barkskin" | "barkskinoff" | "barkskinon" | "battleroar" | "battlestations" | "bearform" | "berserk" | "blackarrow" | "blackarrowoff" | "blackarrowon" | "blight" | "blizzard" | "bloodlust" | "bloodlustoff" | "bloodluston" | "board" | "breathoffire" | "breathoffrost" | "build" | "burrow" | "cannibalize" | "carrionscarabs" | "carrionscarabsinstant" | "carrionscarabsoff" | "carrionscarabson" | "carrionswarm" | "chainlightning" | "channel" | "charm" | "chemicalrage" | "cloudoffog" | "clusterrockets" | "coldarrows" | "coldarrowstarg" | "controlmagic" | "corporealform" | "corrosivebreath" | "coupleinstant" | "coupletarget" | "creepanimatedead" | "creepdevour" | "creepheal" | "creephealoff" | "creephealon" | "creepthunderbolt" | "creepthunderclap" | "cripple" | "curse" | "curseoff" | "curseon" | "cyclone" | "darkconversion" | "darkportal" | "darkritual" | "darksummoning" | "deathanddecay" | "deathcoil" | "deathpact" | "decouple" | "defend" | "detectaoe" | "detonate" | "devour" | "devourmagic" | "disassociate" | "disenchant" | "dismount" | "dispel" | "divineshield" | "doom" | "drain" | "dreadlordinferno" | "dropitem" | "moveslot0" | "moveslot1" | "moveslot2" | "moveslot3" | "moveslot4" | "moveslot5" | "drunkenhaze" | "earthquake" | "eattree" | "elementalfury" | "ensnare" | "ensnareoff" | "ensnareon" | "entangle" | "entangleinstant" | "entanglingroots" | "etherealform" | "evileye" | "faeriefire" | "faeriefireoff" | "faeriefireon" | "fanofknives" | "farsight" | "fingerofdeath" | "firebolt" | "flamestrike" | "flamingarrows" | "flamingarrowstarg" | "flamingattack" | "flamingattacktarg" | "flare" | "forceboard" | "forceofnature" | "forkedlightning" | "freezingbreath" | "frenzy" | "frenzyoff" | "frenzyon" | "frostarmor" | "frostarmoroff" | "frostarmoron" | "frostnova" | "getitem" | "gold2lumber" | "grabtree" | "harvest" | "heal" | "healingspray" | "healingward" | "healingwave" | "healoff" | "healon" | "hex" | "holdposition" | "holybolt" | "howlofterror" | "humanbuild" | "immolation" | "impale" | "incineratearrow" | "incineratearrowoff" | "incineratearrowon" | "inferno" | "innerfire" | "innerfireoff" | "innerfireon" | "instant" | "invisibility" | "lavamonster" | "lightningshield" | "loadarcher" | "loadcorpse" | "loadcorpseinstant" | "locustswarm" | "lumber2gold" | "magicdefense" | "magicleash" | "magicundefense" | "manaburn" | "manaflareoff" | "manaflareon" | "manashieldoff" | "manashieldon" | "massteleport" | "mechanicalcritter" | "metamorphosis" | "militia" | "militiaconvert" | "militiaoff" | "militiaunconvert" | "mindrot" | "mirrorimage" | "monsoon" | "mount" | "mounthippogryph" | "move" | "moveAI" | "nagabuild" | "neutraldetectaoe" | "neutralinteract" | "neutralspell" | "nightelfbuild" | "orcbuild" | "parasite" | "parasiteoff" | "parasiteon" | "patrol" | "patrolAI" | "phaseshift" | "phaseshiftinstant" | "phaseshiftoff" | "phaseshifton" | "phoenixfire" | "phoenixmorph" | "poisonarrows" | "poisonarrowstarg" | "polymorph" | "possession" | "preservation" | "purge" | "rainofchaos" | "rainoffire" | "raisedead" | "raisedeadoff" | "raisedeadon" | "ravenform" | "recharge" | "rechargeoff" | "rechargeon" | "rejuvination" | "renew" | "renewoff" | "renewon" | "repair" | "repairoff" | "repairon" | "replenish" | "replenishlife" | "replenishlifeoff" | "replenishlifeon" | "replenishmana" | "replenishmanaoff" | "replenishmanaon" | "replenishoff" | "replenishon" | "request_hero" | "requestsacrifice" | "restoration" | "restorationoff" | "restorationon" | "resumebuild" | "resumeharvesting" | "resurrection" | "returnresources" | "revenge" | "revive" | "roar" | "robogoblin" | "root" | "sacrifice" | "sanctuary" | "scout" | "selfdestruct" | "selfdestructoff" | "selfdestructon" | "sentinel" | "follow" | "smart" | "setrally" | "shadowsight" | "shadowstrike" | "shockwave" | "silence" | "slow" | "slowoff" | "slowon" | "soulburn" | "soulpreservation" | "spellshield" | "spellshieldaoe" | "spellsteal" | "spellstealoff" | "spellstealon" | "spies" | "spiritlink" | "spiritofvengeance" | "spirittroll" | "spiritwolf" | "stampede" | "standdown" | "starfall" | "stasistrap" | "steal" | "stomp" | "stoneform" | "stunned" | "submerge" | "summonfactory" | "summongrizzly" | "summonphoenix" | "summonquillbeast" | "summonwareagle" | "tankdroppilot" | "tankloadpilot" | "tankpilot" | "taunt" | "thunderbolt" | "thunderclap" | "tornado" | "townbelloff" | "townbellon" | "tranquility" | "transmute" | "unavatar" | "unavengerform" | "unbearform" | "unburrow" | "uncoldarrows" | "uncorporealform" | "undeadbuild" | "undefend" | "undivineshield" | "unetherealform" | "unflamingarrows" | "unflamingattack" | "unholyfrenzy" | "unimmolation" | "unload" | "unloadall" | "unloadallcorpses" | "unloadallinstant" | "unpoisonarrows" | "unravenform" | "unrobogoblin" | "unroot" | "unstableconcoction" | "unstoneform" | "unsubmerge" | "unsummon" | "unwindwalk" | "vengeance" | "vengeanceinstant" | "vengeanceoff" | "vengeanceon" | "volcano" | "voodoo" | "ward" | "waterelemental" | "wateryminion" | "web" | "weboff" | "webon" | "whirlwind" | "windwalk" | "wispharvest") => number;
|
|
57
|
+
const orderId: (id: "blink" | "stop" | "load" | "sleep" | "absorb" | "acidbomb" | "acolyteharvest" | "ambush" | "ancestralspirit" | "ancestralspirittarget" | "animatedead" | "antimagicshell" | "attack" | "attackground" | "attackonce" | "attributemodskill" | "auraunholy" | "auravampiric" | "autodispel" | "autodispeloff" | "autodispelon" | "autoentangle" | "autoentangleinstant" | "autoharvestgold" | "autoharvestlumber" | "avatar" | "avengerform" | "awaken" | "banish" | "barkskin" | "barkskinoff" | "barkskinon" | "battleroar" | "battlestations" | "bearform" | "berserk" | "blackarrow" | "blackarrowoff" | "blackarrowon" | "blight" | "blizzard" | "bloodlust" | "bloodlustoff" | "bloodluston" | "board" | "breathoffire" | "breathoffrost" | "build" | "burrow" | "cannibalize" | "carrionscarabs" | "carrionscarabsinstant" | "carrionscarabsoff" | "carrionscarabson" | "carrionswarm" | "chainlightning" | "channel" | "charm" | "chemicalrage" | "cloudoffog" | "clusterrockets" | "coldarrows" | "coldarrowstarg" | "controlmagic" | "corporealform" | "corrosivebreath" | "coupleinstant" | "coupletarget" | "creepanimatedead" | "creepdevour" | "creepheal" | "creephealoff" | "creephealon" | "creepthunderbolt" | "creepthunderclap" | "cripple" | "curse" | "curseoff" | "curseon" | "cyclone" | "darkconversion" | "darkportal" | "darkritual" | "darksummoning" | "deathanddecay" | "deathcoil" | "deathpact" | "decouple" | "defend" | "detectaoe" | "detonate" | "devour" | "devourmagic" | "disassociate" | "disenchant" | "dismount" | "dispel" | "divineshield" | "doom" | "drain" | "dreadlordinferno" | "dropitem" | "moveslot0" | "moveslot1" | "moveslot2" | "moveslot3" | "moveslot4" | "moveslot5" | "useslot0" | "useslot1" | "useslot2" | "useslot3" | "useslot4" | "useslot5" | "drunkenhaze" | "earthquake" | "eattree" | "elementalfury" | "ensnare" | "ensnareoff" | "ensnareon" | "entangle" | "entangleinstant" | "entanglingroots" | "etherealform" | "evileye" | "faeriefire" | "faeriefireoff" | "faeriefireon" | "fanofknives" | "farsight" | "fingerofdeath" | "firebolt" | "flamestrike" | "flamingarrows" | "flamingarrowstarg" | "flamingattack" | "flamingattacktarg" | "flare" | "forceboard" | "forceofnature" | "forkedlightning" | "freezingbreath" | "frenzy" | "frenzyoff" | "frenzyon" | "frostarmor" | "frostarmoroff" | "frostarmoron" | "frostnova" | "getitem" | "gold2lumber" | "grabtree" | "harvest" | "heal" | "healingspray" | "healingward" | "healingwave" | "healoff" | "healon" | "hex" | "holdposition" | "holybolt" | "howlofterror" | "humanbuild" | "immolation" | "impale" | "incineratearrow" | "incineratearrowoff" | "incineratearrowon" | "inferno" | "innerfire" | "innerfireoff" | "innerfireon" | "instant" | "invisibility" | "lavamonster" | "lightningshield" | "loadarcher" | "loadcorpse" | "loadcorpseinstant" | "locustswarm" | "lumber2gold" | "magicdefense" | "magicleash" | "magicundefense" | "manaburn" | "manaflareoff" | "manaflareon" | "manashieldoff" | "manashieldon" | "massteleport" | "mechanicalcritter" | "metamorphosis" | "militia" | "militiaconvert" | "militiaoff" | "militiaunconvert" | "mindrot" | "mirrorimage" | "monsoon" | "mount" | "mounthippogryph" | "move" | "moveAI" | "nagabuild" | "neutraldetectaoe" | "neutralinteract" | "neutralspell" | "nightelfbuild" | "orcbuild" | "parasite" | "parasiteoff" | "parasiteon" | "patrol" | "patrolAI" | "phaseshift" | "phaseshiftinstant" | "phaseshiftoff" | "phaseshifton" | "phoenixfire" | "phoenixmorph" | "poisonarrows" | "poisonarrowstarg" | "polymorph" | "possession" | "preservation" | "purge" | "rainofchaos" | "rainoffire" | "raisedead" | "raisedeadoff" | "raisedeadon" | "ravenform" | "recharge" | "rechargeoff" | "rechargeon" | "rejuvination" | "renew" | "renewoff" | "renewon" | "repair" | "repairoff" | "repairon" | "replenish" | "replenishlife" | "replenishlifeoff" | "replenishlifeon" | "replenishmana" | "replenishmanaoff" | "replenishmanaon" | "replenishoff" | "replenishon" | "request_hero" | "requestsacrifice" | "restoration" | "restorationoff" | "restorationon" | "resumebuild" | "resumeharvesting" | "resurrection" | "returnresources" | "revenge" | "revive" | "roar" | "robogoblin" | "root" | "sacrifice" | "sanctuary" | "scout" | "selfdestruct" | "selfdestructoff" | "selfdestructon" | "sentinel" | "follow" | "smart" | "setrally" | "shadowsight" | "shadowstrike" | "shockwave" | "silence" | "slow" | "slowoff" | "slowon" | "soulburn" | "soulpreservation" | "spellshield" | "spellshieldaoe" | "spellsteal" | "spellstealoff" | "spellstealon" | "spies" | "spiritlink" | "spiritofvengeance" | "spirittroll" | "spiritwolf" | "stampede" | "standdown" | "starfall" | "stasistrap" | "steal" | "stomp" | "stoneform" | "stunned" | "submerge" | "summonfactory" | "summongrizzly" | "summonphoenix" | "summonquillbeast" | "summonwareagle" | "tankdroppilot" | "tankloadpilot" | "tankpilot" | "taunt" | "thunderbolt" | "thunderclap" | "tornado" | "townbelloff" | "townbellon" | "tranquility" | "transmute" | "unavatar" | "unavengerform" | "unbearform" | "unburrow" | "uncoldarrows" | "uncorporealform" | "undeadbuild" | "undefend" | "undivineshield" | "unetherealform" | "unflamingarrows" | "unflamingattack" | "unholyfrenzy" | "unimmolation" | "unload" | "unloadall" | "unloadallcorpses" | "unloadallinstant" | "unpoisonarrows" | "unravenform" | "unrobogoblin" | "unroot" | "unstableconcoction" | "unstoneform" | "unsubmerge" | "unsummon" | "unwindwalk" | "vengeance" | "vengeanceinstant" | "vengeanceoff" | "vengeanceon" | "volcano" | "voodoo" | "ward" | "waterelemental" | "wateryminion" | "web" | "weboff" | "webon" | "whirlwind" | "windwalk" | "wispharvest") => number;
|
|
58
58
|
}
|
|
59
59
|
declare global {
|
|
60
60
|
function orderId(...args: Parameters<typeof inner.orderId>): ReturnType<typeof inner.orderId>;
|
package/core/util.lua
CHANGED
|
@@ -202,6 +202,12 @@ do
|
|
|
202
202
|
moveslot3 = 852005,
|
|
203
203
|
moveslot4 = 852006,
|
|
204
204
|
moveslot5 = 852007,
|
|
205
|
+
useslot0 = 852008,
|
|
206
|
+
useslot1 = 852009,
|
|
207
|
+
useslot2 = 852010,
|
|
208
|
+
useslot3 = 852011,
|
|
209
|
+
useslot4 = 852012,
|
|
210
|
+
useslot5 = 852013,
|
|
205
211
|
drunkenhaze = 852585,
|
|
206
212
|
earthquake = 852121,
|
|
207
213
|
eattree = 852146,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { AbilityBehavior } from "../ability";
|
|
3
|
+
import { Destructor } from "../../../destroyable";
|
|
4
|
+
export declare class AlwaysEnabledAbilityBehavior extends AbilityBehavior {
|
|
5
|
+
protected onCreate(): void;
|
|
6
|
+
protected onDestroy(): Destructor;
|
|
7
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
5
|
+
local ____exports = {}
|
|
6
|
+
local ____ability = require("engine.behaviour.ability")
|
|
7
|
+
local AbilityBehavior = ____ability.AbilityBehavior
|
|
8
|
+
local ____ability = require("engine.internal.ability")
|
|
9
|
+
local UnitAbility = ____ability.UnitAbility
|
|
10
|
+
local ____ability_2Ddisable_2Dcounter = require("engine.internal.misc.ability-disable-counter")
|
|
11
|
+
local increaseAbilityDisableCounter = ____ability_2Ddisable_2Dcounter.increaseAbilityDisableCounter
|
|
12
|
+
____exports.AlwaysEnabledAbilityBehavior = __TS__Class()
|
|
13
|
+
local AlwaysEnabledAbilityBehavior = ____exports.AlwaysEnabledAbilityBehavior
|
|
14
|
+
AlwaysEnabledAbilityBehavior.name = "AlwaysEnabledAbilityBehavior"
|
|
15
|
+
__TS__ClassExtends(AlwaysEnabledAbilityBehavior, AbilityBehavior)
|
|
16
|
+
function AlwaysEnabledAbilityBehavior.prototype.onCreate(self)
|
|
17
|
+
local ability = self.ability
|
|
18
|
+
if not __TS__InstanceOf(ability, UnitAbility) then
|
|
19
|
+
return
|
|
20
|
+
end
|
|
21
|
+
increaseAbilityDisableCounter(ability.owner.handle, ability.typeId, -10)
|
|
22
|
+
end
|
|
23
|
+
function AlwaysEnabledAbilityBehavior.prototype.onDestroy(self)
|
|
24
|
+
local ability = self.ability
|
|
25
|
+
if not __TS__InstanceOf(ability, UnitAbility) then
|
|
26
|
+
return AbilityBehavior.prototype.onDestroy(self)
|
|
27
|
+
end
|
|
28
|
+
increaseAbilityDisableCounter(ability.owner.handle, ability.typeId, 10)
|
|
29
|
+
return AbilityBehavior.prototype.onDestroy(self)
|
|
30
|
+
end
|
|
31
|
+
return ____exports
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____ability = require("engine.behaviour.ability")
|
|
6
|
+
local AbilityBehavior = ____ability.AbilityBehavior
|
|
7
|
+
local ____ability = require("engine.standard.fields.ability")
|
|
8
|
+
local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
|
|
9
|
+
local MANA_COST_ABILITY_INTEGER_LEVEL_FIELD = ____ability.MANA_COST_ABILITY_INTEGER_LEVEL_FIELD
|
|
10
|
+
____exports.EmulateImpactAbilityBehavior = __TS__Class()
|
|
11
|
+
local EmulateImpactAbilityBehavior = ____exports.EmulateImpactAbilityBehavior
|
|
12
|
+
EmulateImpactAbilityBehavior.name = "EmulateImpactAbilityBehavior"
|
|
13
|
+
__TS__ClassExtends(EmulateImpactAbilityBehavior, AbilityBehavior)
|
|
14
|
+
function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
|
|
15
|
+
local manaCost = self:resolveCurrentAbilityDependentValue(MANA_COST_ABILITY_INTEGER_LEVEL_FIELD)
|
|
16
|
+
local cooldown = self:resolveCurrentAbilityDependentValue(COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD)
|
|
17
|
+
if self.ability.cooldownRemaining ~= 0 or caster.mana < manaCost then
|
|
18
|
+
return
|
|
19
|
+
end
|
|
20
|
+
caster.mana = caster.mana - manaCost
|
|
21
|
+
if cooldown == 0 then
|
|
22
|
+
self.ability:interruptCast()
|
|
23
|
+
else
|
|
24
|
+
self.ability.cooldownRemaining = cooldown
|
|
25
|
+
end
|
|
26
|
+
self:flashCasterEffect(caster)
|
|
27
|
+
AbilityBehavior:forAll(self.ability, "onImpact", caster)
|
|
28
|
+
end
|
|
29
|
+
return ____exports
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
-
import { AbilityBehavior } from "../ability";
|
|
3
2
|
import { Unit } from "../../internal/unit";
|
|
4
|
-
|
|
3
|
+
import { EmulateImpactAbilityBehavior } from "./emulate-impact";
|
|
4
|
+
export declare class InstantImpactAbilityBehavior extends EmulateImpactAbilityBehavior {
|
|
5
5
|
onCastingStart(caster: Unit): void;
|
|
6
6
|
}
|
|
@@ -2,28 +2,13 @@ local ____lualib = require("lualib_bundle")
|
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
4
|
local ____exports = {}
|
|
5
|
-
local
|
|
6
|
-
local
|
|
7
|
-
local ____ability = require("engine.standard.fields.ability")
|
|
8
|
-
local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
|
|
9
|
-
local MANA_COST_ABILITY_INTEGER_LEVEL_FIELD = ____ability.MANA_COST_ABILITY_INTEGER_LEVEL_FIELD
|
|
5
|
+
local ____emulate_2Dimpact = require("engine.behaviour.ability.emulate-impact")
|
|
6
|
+
local EmulateImpactAbilityBehavior = ____emulate_2Dimpact.EmulateImpactAbilityBehavior
|
|
10
7
|
____exports.InstantImpactAbilityBehavior = __TS__Class()
|
|
11
8
|
local InstantImpactAbilityBehavior = ____exports.InstantImpactAbilityBehavior
|
|
12
9
|
InstantImpactAbilityBehavior.name = "InstantImpactAbilityBehavior"
|
|
13
|
-
__TS__ClassExtends(InstantImpactAbilityBehavior,
|
|
10
|
+
__TS__ClassExtends(InstantImpactAbilityBehavior, EmulateImpactAbilityBehavior)
|
|
14
11
|
function InstantImpactAbilityBehavior.prototype.onCastingStart(self, caster)
|
|
15
|
-
|
|
16
|
-
local manaCost = self:resolveCurrentAbilityDependentValue(MANA_COST_ABILITY_INTEGER_LEVEL_FIELD)
|
|
17
|
-
local cooldown = self:resolveCurrentAbilityDependentValue(COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD)
|
|
18
|
-
if caster:getAbilityRemainingCooldown(abilityTypeId) ~= 0 or caster.mana < manaCost then
|
|
19
|
-
return
|
|
20
|
-
end
|
|
21
|
-
caster.mana = caster.mana - manaCost
|
|
22
|
-
if cooldown == 0 then
|
|
23
|
-
caster:interruptCast(self.ability.typeId)
|
|
24
|
-
else
|
|
25
|
-
caster:startAbilityCooldown(self.ability.typeId, cooldown)
|
|
26
|
-
end
|
|
27
|
-
AbilityBehavior:forAll(self.ability, "onImpact", caster)
|
|
12
|
+
self:emulateImpact(caster)
|
|
28
13
|
end
|
|
29
14
|
return ____exports
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { Unit } from "../../internal/unit";
|
|
3
|
+
import { EmulateImpactAbilityBehavior } from "./emulate-impact";
|
|
4
|
+
import { Ability } from "../../internal/ability";
|
|
5
|
+
export declare class OnCommandImpactAbilityBehavior extends EmulateImpactAbilityBehavior {
|
|
6
|
+
constructor(ability: Ability);
|
|
7
|
+
onCommand(caster: Unit): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____unit = require("engine.internal.unit")
|
|
6
|
+
local Unit = ____unit.Unit
|
|
7
|
+
local ____emulate_2Dimpact = require("engine.behaviour.ability.emulate-impact")
|
|
8
|
+
local EmulateImpactAbilityBehavior = ____emulate_2Dimpact.EmulateImpactAbilityBehavior
|
|
9
|
+
____exports.OnCommandImpactAbilityBehavior = __TS__Class()
|
|
10
|
+
local OnCommandImpactAbilityBehavior = ____exports.OnCommandImpactAbilityBehavior
|
|
11
|
+
OnCommandImpactAbilityBehavior.name = "OnCommandImpactAbilityBehavior"
|
|
12
|
+
__TS__ClassExtends(OnCommandImpactAbilityBehavior, EmulateImpactAbilityBehavior)
|
|
13
|
+
function OnCommandImpactAbilityBehavior.prototype.____constructor(self, ability)
|
|
14
|
+
EmulateImpactAbilityBehavior.prototype.____constructor(self, ability)
|
|
15
|
+
self:registerCommandEvent()
|
|
16
|
+
end
|
|
17
|
+
function OnCommandImpactAbilityBehavior.prototype.onCommand(self, caster)
|
|
18
|
+
self:emulateImpact(caster)
|
|
19
|
+
end
|
|
20
|
+
Unit.itemUseOrderEvent:addListener(function(unit, item)
|
|
21
|
+
for ____, ability in ipairs(item.abilities) do
|
|
22
|
+
____exports.OnCommandImpactAbilityBehavior:forAll(ability, "onCommand", unit)
|
|
23
|
+
end
|
|
24
|
+
end)
|
|
25
|
+
return ____exports
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { AbilityBehavior } from "../ability";
|
|
3
|
+
import { Unit } from "../../internal/unit";
|
|
4
|
+
import { Ability } from "../../internal/ability";
|
|
5
|
+
import { AbilityDependentValue } from "../../object-field/ability";
|
|
6
|
+
import { BuffPolarity } from "../../object-data/auxiliary/buff-polarity";
|
|
7
|
+
import { BuffResistanceType } from "../../object-data/auxiliary/buff-resistance-type";
|
|
8
|
+
export declare class RemoveBuffsSelfAbilityBehavior extends AbilityBehavior {
|
|
9
|
+
private readonly polarity?;
|
|
10
|
+
private readonly resistanceType?;
|
|
11
|
+
private readonly includeExpirationTimers?;
|
|
12
|
+
private readonly includeAuras?;
|
|
13
|
+
private readonly autoDispel?;
|
|
14
|
+
constructor(ability: Ability, polarity?: AbilityDependentValue<BuffPolarity> | undefined, resistanceType?: AbilityDependentValue<BuffResistanceType> | undefined, includeExpirationTimers?: AbilityDependentValue<boolean> | undefined, includeAuras?: AbilityDependentValue<boolean> | undefined, autoDispel?: AbilityDependentValue<boolean> | undefined);
|
|
15
|
+
onImpact(caster: Unit): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____ability = require("engine.behaviour.ability")
|
|
6
|
+
local AbilityBehavior = ____ability.AbilityBehavior
|
|
7
|
+
____exports.RemoveBuffsSelfAbilityBehavior = __TS__Class()
|
|
8
|
+
local RemoveBuffsSelfAbilityBehavior = ____exports.RemoveBuffsSelfAbilityBehavior
|
|
9
|
+
RemoveBuffsSelfAbilityBehavior.name = "RemoveBuffsSelfAbilityBehavior"
|
|
10
|
+
__TS__ClassExtends(RemoveBuffsSelfAbilityBehavior, AbilityBehavior)
|
|
11
|
+
function RemoveBuffsSelfAbilityBehavior.prototype.____constructor(self, ability, polarity, resistanceType, includeExpirationTimers, includeAuras, autoDispel)
|
|
12
|
+
AbilityBehavior.prototype.____constructor(self, ability)
|
|
13
|
+
self.polarity = polarity
|
|
14
|
+
self.resistanceType = resistanceType
|
|
15
|
+
self.includeExpirationTimers = includeExpirationTimers
|
|
16
|
+
self.includeAuras = includeAuras
|
|
17
|
+
self.autoDispel = autoDispel
|
|
18
|
+
end
|
|
19
|
+
function RemoveBuffsSelfAbilityBehavior.prototype.onImpact(self, caster)
|
|
20
|
+
caster:removeBuffs(
|
|
21
|
+
self:resolveCurrentAbilityDependentValue(self.polarity),
|
|
22
|
+
self:resolveCurrentAbilityDependentValue(self.resistanceType),
|
|
23
|
+
self:resolveCurrentAbilityDependentValue(self.includeExpirationTimers),
|
|
24
|
+
self:resolveCurrentAbilityDependentValue(self.includeAuras),
|
|
25
|
+
self:resolveCurrentAbilityDependentValue(self.autoDispel)
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
return ____exports
|
|
@@ -9,22 +9,29 @@ import { Destructable } from "../../core/types/destructable";
|
|
|
9
9
|
import { EffectParameters } from "../../core/types/effect";
|
|
10
10
|
import { AbilityDependentValue } from "../object-field/ability";
|
|
11
11
|
export type AbilityBehaviorConstructor<Args extends any[]> = new (ability: Ability, ...args: Args) => AbilityBehavior;
|
|
12
|
+
export type AbilityBehaviorParameters = {
|
|
13
|
+
isExclusiveOnImpactHandler?: boolean;
|
|
14
|
+
};
|
|
12
15
|
export declare abstract class AbilityBehavior<Parameters extends {
|
|
13
16
|
periodicActionParameters?: any[];
|
|
14
17
|
missileParameters?: any[];
|
|
15
18
|
} = {}> extends Behavior<Ability, NonNullable<Parameters["periodicActionParameters"]>> {
|
|
16
|
-
constructor(ability: Ability);
|
|
19
|
+
constructor(ability: Ability, parameters?: AbilityBehaviorParameters);
|
|
20
|
+
protected registerCommandEvent(orderTypeStringId?: string): void;
|
|
17
21
|
get ability(): Ability;
|
|
18
22
|
protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
|
|
23
|
+
protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
|
|
24
|
+
protected flashCasterEffect(widget: Widget): void;
|
|
19
25
|
protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
20
26
|
protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
21
27
|
protected flashSpecialEffect(...args: [...pointOrWidget: [x: number, y: number] | [widget: Widget], duration?: number]): void;
|
|
22
28
|
private static MissileLaunchConfig;
|
|
23
29
|
private get missileLaunchConfig();
|
|
24
|
-
protected
|
|
30
|
+
protected onCreate(): void;
|
|
25
31
|
onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
|
|
26
32
|
onUnitGainAbility(_unit: Unit): void;
|
|
27
33
|
onUnitLoseAbility(_unit: Unit): void;
|
|
34
|
+
onCommand(caster: Unit, orderTypeStringId: string): void;
|
|
28
35
|
onCastingStart(caster: Unit): void;
|
|
29
36
|
onCastingFinish(caster: Unit): void;
|
|
30
37
|
onChannelingStart(caster: Unit): void;
|
|
@@ -4,6 +4,7 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
|
4
4
|
local __TS__New = ____lualib.__TS__New
|
|
5
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
6
6
|
local ____exports = {}
|
|
7
|
+
local createUnitEventListener
|
|
7
8
|
local ____behavior = require("engine.behavior")
|
|
8
9
|
local Behavior = ____behavior.Behavior
|
|
9
10
|
local ____unit = require("engine.unit")
|
|
@@ -14,6 +15,8 @@ local ____effect = require("core.types.effect")
|
|
|
14
15
|
local Effect = ____effect.Effect
|
|
15
16
|
local ____ability = require("engine.standard.fields.ability")
|
|
16
17
|
local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
18
|
+
local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
|
|
19
|
+
local CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
17
20
|
local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
18
21
|
local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
|
|
19
22
|
local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
@@ -24,21 +27,27 @@ local ____ability = require("engine.object-field.ability")
|
|
|
24
27
|
local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
|
|
25
28
|
local ____timer = require("core.types.timer")
|
|
26
29
|
local Timer = ____timer.Timer
|
|
27
|
-
local ____missile = require("core.types.missile")
|
|
28
|
-
local Missile = ____missile.Missile
|
|
29
30
|
local createBehaviorFunctionsByAbilityTypeId = {}
|
|
30
|
-
local
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
|
|
32
|
+
local function createZeroTimerUnitEventListener(key)
|
|
33
|
+
local unitEventListener = createUnitEventListener(key)
|
|
34
|
+
return function(unit, ability, ...)
|
|
35
|
+
Timer:run(unitEventListener, unit, ability, ...)
|
|
33
36
|
end
|
|
34
37
|
end
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
createUnitEventListener = function(key)
|
|
39
|
+
return function(unit, ability, ...)
|
|
40
|
+
____exports.AbilityBehavior:forAll(ability, key, unit, ...)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
local registeredCommandEventIds = {}
|
|
44
|
+
local ____class_2 = __TS__Class()
|
|
45
|
+
____class_2.name = ""
|
|
46
|
+
function ____class_2.prototype.____constructor(self, abilityBehavior)
|
|
38
47
|
self.abilityBehavior = abilityBehavior
|
|
39
48
|
end
|
|
40
49
|
__TS__SetDescriptor(
|
|
41
|
-
|
|
50
|
+
____class_2.prototype,
|
|
42
51
|
"art",
|
|
43
52
|
{get = function(self)
|
|
44
53
|
return MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.abilityBehavior.ability, 0)
|
|
@@ -46,7 +55,7 @@ __TS__SetDescriptor(
|
|
|
46
55
|
true
|
|
47
56
|
)
|
|
48
57
|
__TS__SetDescriptor(
|
|
49
|
-
|
|
58
|
+
____class_2.prototype,
|
|
50
59
|
"arc",
|
|
51
60
|
{get = function(self)
|
|
52
61
|
return MISSILE_ARC_ABILITY_FLOAT_FIELD:getValue(self.abilityBehavior.ability)
|
|
@@ -54,7 +63,7 @@ __TS__SetDescriptor(
|
|
|
54
63
|
true
|
|
55
64
|
)
|
|
56
65
|
__TS__SetDescriptor(
|
|
57
|
-
|
|
66
|
+
____class_2.prototype,
|
|
58
67
|
"speed",
|
|
59
68
|
{get = function(self)
|
|
60
69
|
return MISSILE_SPEED_ABILITY_INTEGER_FIELD:getValue(self.abilityBehavior.ability)
|
|
@@ -65,12 +74,34 @@ ____exports.AbilityBehavior = __TS__Class()
|
|
|
65
74
|
local AbilityBehavior = ____exports.AbilityBehavior
|
|
66
75
|
AbilityBehavior.name = "AbilityBehavior"
|
|
67
76
|
__TS__ClassExtends(AbilityBehavior, Behavior)
|
|
68
|
-
function AbilityBehavior.prototype.____constructor(self, ability)
|
|
77
|
+
function AbilityBehavior.prototype.____constructor(self, ability, parameters)
|
|
69
78
|
Behavior.prototype.____constructor(self, ability)
|
|
79
|
+
if parameters and parameters.isExclusiveOnImpactHandler then
|
|
80
|
+
exclusiveOnImpactHandlerAbilityBehaviorByAbility[ability] = self
|
|
81
|
+
end
|
|
82
|
+
self:onCreate()
|
|
83
|
+
end
|
|
84
|
+
function AbilityBehavior.prototype.registerCommandEvent(self, orderTypeStringId)
|
|
85
|
+
if orderTypeStringId == nil then
|
|
86
|
+
orderTypeStringId = self.ability.orderTypeStringId
|
|
87
|
+
end
|
|
88
|
+
local commandEventId = (tostring(self.ability.typeId) .. "#") .. orderTypeStringId
|
|
89
|
+
if not (registeredCommandEventIds[commandEventId] ~= nil) then
|
|
90
|
+
registeredCommandEventIds[commandEventId] = true
|
|
91
|
+
Unit.abilityCommandEvent[self.ability.typeId][orderTypeStringId]:addListener(createUnitEventListener("onCommand"))
|
|
92
|
+
end
|
|
70
93
|
end
|
|
71
94
|
function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
|
|
72
95
|
return resolveCurrentAbilityDependentValue(self.ability, value)
|
|
73
96
|
end
|
|
97
|
+
function AbilityBehavior.prototype.flashCasterEffect(self, widget)
|
|
98
|
+
local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
|
|
99
|
+
Effect:flash(
|
|
100
|
+
CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
101
|
+
widget,
|
|
102
|
+
attachmentPoint ~= "" and attachmentPoint or "origin"
|
|
103
|
+
)
|
|
104
|
+
end
|
|
74
105
|
function AbilityBehavior.prototype.flashAreaEffect(self, x, y, ...)
|
|
75
106
|
Effect:flash(
|
|
76
107
|
AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
@@ -104,15 +135,7 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrDurati
|
|
|
104
135
|
)
|
|
105
136
|
end
|
|
106
137
|
end
|
|
107
|
-
function AbilityBehavior.prototype.
|
|
108
|
-
Missile:launch(
|
|
109
|
-
self.missileLaunchConfig,
|
|
110
|
-
source,
|
|
111
|
-
target,
|
|
112
|
-
invokeOnMissileArrival,
|
|
113
|
-
self,
|
|
114
|
-
...
|
|
115
|
-
)
|
|
138
|
+
function AbilityBehavior.prototype.onCreate(self)
|
|
116
139
|
end
|
|
117
140
|
function AbilityBehavior.prototype.onMissileArrival(self, ...)
|
|
118
141
|
end
|
|
@@ -120,6 +143,8 @@ function AbilityBehavior.prototype.onUnitGainAbility(self, _unit)
|
|
|
120
143
|
end
|
|
121
144
|
function AbilityBehavior.prototype.onUnitLoseAbility(self, _unit)
|
|
122
145
|
end
|
|
146
|
+
function AbilityBehavior.prototype.onCommand(self, caster, orderTypeStringId)
|
|
147
|
+
end
|
|
123
148
|
function AbilityBehavior.prototype.onCastingStart(self, caster)
|
|
124
149
|
end
|
|
125
150
|
function AbilityBehavior.prototype.onCastingFinish(self, caster)
|
|
@@ -179,7 +204,7 @@ __TS__SetDescriptor(
|
|
|
179
204
|
end},
|
|
180
205
|
true
|
|
181
206
|
)
|
|
182
|
-
AbilityBehavior.MissileLaunchConfig =
|
|
207
|
+
AbilityBehavior.MissileLaunchConfig = ____class_2
|
|
183
208
|
__TS__SetDescriptor(
|
|
184
209
|
AbilityBehavior.prototype,
|
|
185
210
|
"missileLaunchConfig",
|
|
@@ -191,17 +216,6 @@ __TS__SetDescriptor(
|
|
|
191
216
|
true
|
|
192
217
|
);
|
|
193
218
|
(function(self)
|
|
194
|
-
local function createUnitEventListener(key)
|
|
195
|
-
return function(unit, ability, ...)
|
|
196
|
-
____exports.AbilityBehavior:forAll(ability, key, unit, ...)
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
local function createZeroTimerUnitEventListener(key)
|
|
200
|
-
local unitEventListener = createUnitEventListener(key)
|
|
201
|
-
return function(unit, ability, ...)
|
|
202
|
-
Timer:run(unitEventListener, unit, ability, ...)
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
219
|
Unit.abilityGainedEvent:addListener(createUnitEventListener("onUnitGainAbility"))
|
|
206
220
|
Unit.abilityLostEvent:addListener(createUnitEventListener("onUnitLoseAbility"))
|
|
207
221
|
Unit.abilityCastingStartEvent:addListener(createUnitEventListener("onCastingStart"))
|
|
@@ -12,7 +12,8 @@ export declare abstract class Ability extends Handle<jability> {
|
|
|
12
12
|
protected constructor(handle: jability, typeId: number);
|
|
13
13
|
toString(): string;
|
|
14
14
|
get parentTypeId(): number;
|
|
15
|
-
get
|
|
15
|
+
get orderTypeStringId(): string;
|
|
16
|
+
get orderTypeId(): number;
|
|
16
17
|
abstract readonly owner: Unit | Item;
|
|
17
18
|
getSnapshot(): AbilitySnapshot;
|
|
18
19
|
hasField(field: jabilityfield | number): boolean;
|
|
@@ -34,6 +35,9 @@ export declare abstract class Ability extends Handle<jability> {
|
|
|
34
35
|
setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
|
|
35
36
|
get levelCount(): number;
|
|
36
37
|
abstract get level(): number;
|
|
38
|
+
abstract get cooldownRemaining(): number;
|
|
39
|
+
abstract set cooldownRemaining(cooldownRemaining: number);
|
|
40
|
+
abstract interruptCast(): void;
|
|
37
41
|
static get onCreate(): Event<[Ability]>;
|
|
38
42
|
static get destroyEvent(): Event<[Ability]>;
|
|
39
43
|
}
|
|
@@ -44,6 +48,9 @@ export declare class UnrecognizedAbility extends Ability {
|
|
|
44
48
|
readonly owner: Unit;
|
|
45
49
|
constructor(typeId: number, owner: Unit);
|
|
46
50
|
get level(): number;
|
|
51
|
+
get cooldownRemaining(): number;
|
|
52
|
+
set cooldownRemaining(_: number);
|
|
53
|
+
interruptCast(): void;
|
|
47
54
|
}
|
|
48
55
|
export declare class UnitAbility extends Ability {
|
|
49
56
|
readonly owner: Unit;
|
|
@@ -54,7 +61,8 @@ export declare class UnitAbility extends Ability {
|
|
|
54
61
|
get level(): number;
|
|
55
62
|
set level(v: number);
|
|
56
63
|
get cooldownRemaining(): number;
|
|
57
|
-
set cooldownRemaining(
|
|
64
|
+
set cooldownRemaining(cooldownRemaining: number);
|
|
65
|
+
interruptCast(): void;
|
|
58
66
|
static get onCreate(): Event<[UnitAbility]>;
|
|
59
67
|
static get onDestroy(): Event<[UnitAbility]>;
|
|
60
68
|
}
|
|
@@ -78,6 +86,9 @@ export declare class ItemAbility extends Ability {
|
|
|
78
86
|
setField(field: jabilitybooleanlevelfield, level: number, value: boolean): boolean;
|
|
79
87
|
setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
|
|
80
88
|
get level(): number;
|
|
89
|
+
get cooldownRemaining(): number;
|
|
90
|
+
set cooldownRemaining(cooldownRemaining: number);
|
|
91
|
+
interruptCast(): void;
|
|
81
92
|
static get onCreate(): Event<[ItemAbility]>;
|
|
82
93
|
static get onDestroy(): Event<[ItemAbility]>;
|
|
83
94
|
}
|
|
@@ -10,7 +10,10 @@ local ____exports = {}
|
|
|
10
10
|
local ____handle = require("core.types.handle")
|
|
11
11
|
local Handle = ____handle.Handle
|
|
12
12
|
local ____ability = require("engine.internal.item.ability")
|
|
13
|
+
local abilityActionDummy = ____ability.abilityActionDummy
|
|
13
14
|
local doAbilityAction = ____ability.doAbilityAction
|
|
15
|
+
local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
|
|
16
|
+
local startItemCooldown = ____ability.startItemCooldown
|
|
14
17
|
local getUnitAbilityLevel = GetUnitAbilityLevel
|
|
15
18
|
local setUnitAbilityLevel = SetUnitAbilityLevel
|
|
16
19
|
local setAbilityIntegerField = BlzSetAbilityIntegerField
|
|
@@ -296,10 +299,18 @@ __TS__SetDescriptor(
|
|
|
296
299
|
)
|
|
297
300
|
__TS__SetDescriptor(
|
|
298
301
|
Ability.prototype,
|
|
299
|
-
"
|
|
302
|
+
"orderTypeStringId",
|
|
300
303
|
{get = function(self)
|
|
301
304
|
local field = orderIdFieldByParentTypeId[self.parentTypeId]
|
|
302
|
-
return
|
|
305
|
+
return field ~= nil and getAbilityStringLevelField(self.handle, field, self.level) or (orders[self.parentTypeId] or "")
|
|
306
|
+
end},
|
|
307
|
+
true
|
|
308
|
+
)
|
|
309
|
+
__TS__SetDescriptor(
|
|
310
|
+
Ability.prototype,
|
|
311
|
+
"orderTypeId",
|
|
312
|
+
{get = function(self)
|
|
313
|
+
return order2orderId(self.orderTypeStringId)
|
|
303
314
|
end},
|
|
304
315
|
true
|
|
305
316
|
)
|
|
@@ -318,6 +329,17 @@ __TS__SetDescriptor(
|
|
|
318
329
|
end},
|
|
319
330
|
true
|
|
320
331
|
)
|
|
332
|
+
__TS__SetDescriptor(
|
|
333
|
+
Ability.prototype,
|
|
334
|
+
"cooldownRemaining",
|
|
335
|
+
{
|
|
336
|
+
get = function(self)
|
|
337
|
+
end,
|
|
338
|
+
set = function(self, cooldownRemaining)
|
|
339
|
+
end
|
|
340
|
+
},
|
|
341
|
+
true
|
|
342
|
+
)
|
|
321
343
|
__TS__ObjectDefineProperty(
|
|
322
344
|
Ability,
|
|
323
345
|
"onCreate",
|
|
@@ -341,6 +363,8 @@ function UnrecognizedAbility.prototype.____constructor(self, typeId, owner)
|
|
|
341
363
|
UnrecognizedAbility.____super.prototype.____constructor(self, nil, typeId)
|
|
342
364
|
self.owner = owner
|
|
343
365
|
end
|
|
366
|
+
function UnrecognizedAbility.prototype.interruptCast(self)
|
|
367
|
+
end
|
|
344
368
|
__TS__SetDescriptor(
|
|
345
369
|
UnrecognizedAbility.prototype,
|
|
346
370
|
"level",
|
|
@@ -349,6 +373,18 @@ __TS__SetDescriptor(
|
|
|
349
373
|
end},
|
|
350
374
|
true
|
|
351
375
|
)
|
|
376
|
+
__TS__SetDescriptor(
|
|
377
|
+
UnrecognizedAbility.prototype,
|
|
378
|
+
"cooldownRemaining",
|
|
379
|
+
{
|
|
380
|
+
get = function(self)
|
|
381
|
+
return 0
|
|
382
|
+
end,
|
|
383
|
+
set = function(self, _)
|
|
384
|
+
end
|
|
385
|
+
},
|
|
386
|
+
true
|
|
387
|
+
)
|
|
352
388
|
____exports.UnitAbility = __TS__Class()
|
|
353
389
|
local UnitAbility = ____exports.UnitAbility
|
|
354
390
|
UnitAbility.name = "UnitAbility"
|
|
@@ -364,6 +400,9 @@ end
|
|
|
364
400
|
function UnitAbility.prototype.decrementHideCounter(self)
|
|
365
401
|
unitHideAbility(self.u, self.typeId, false)
|
|
366
402
|
end
|
|
403
|
+
function UnitAbility.prototype.interruptCast(self)
|
|
404
|
+
self.owner:interruptCast(self.typeId)
|
|
405
|
+
end
|
|
367
406
|
__TS__SetDescriptor(
|
|
368
407
|
UnitAbility.prototype,
|
|
369
408
|
"level",
|
|
@@ -384,8 +423,8 @@ __TS__SetDescriptor(
|
|
|
384
423
|
get = function(self)
|
|
385
424
|
return getUnitAbilityCooldownRemaining(self.u, self.typeId)
|
|
386
425
|
end,
|
|
387
|
-
set = function(self,
|
|
388
|
-
startUnitAbilityCooldown(self.u, self.typeId,
|
|
426
|
+
set = function(self, cooldownRemaining)
|
|
427
|
+
startUnitAbilityCooldown(self.u, self.typeId, cooldownRemaining)
|
|
389
428
|
end
|
|
390
429
|
},
|
|
391
430
|
true
|
|
@@ -410,6 +449,11 @@ end
|
|
|
410
449
|
local function setAbilityField(_, ability, field, levelOrValue, value)
|
|
411
450
|
return ____exports.Ability.prototype.setField(ability, field, levelOrValue, value)
|
|
412
451
|
end
|
|
452
|
+
local function getAbilityCooldown(_, abilityTypeId)
|
|
453
|
+
return getUnitAbilityCooldownRemaining(abilityActionDummy, abilityTypeId)
|
|
454
|
+
end
|
|
455
|
+
local function doNothing()
|
|
456
|
+
end
|
|
413
457
|
____exports.ItemAbility = __TS__Class()
|
|
414
458
|
local ItemAbility = ____exports.ItemAbility
|
|
415
459
|
ItemAbility.name = "ItemAbility"
|
|
@@ -437,6 +481,13 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
|
|
|
437
481
|
value
|
|
438
482
|
)
|
|
439
483
|
end
|
|
484
|
+
function ItemAbility.prototype.interruptCast(self)
|
|
485
|
+
local item = self.owner
|
|
486
|
+
local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
|
|
487
|
+
local ____item_handle_3 = item.handle
|
|
488
|
+
local ____opt_1 = item.owner
|
|
489
|
+
____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, doNothing)
|
|
490
|
+
end
|
|
440
491
|
__TS__SetDescriptor(
|
|
441
492
|
ItemAbility.prototype,
|
|
442
493
|
"level",
|
|
@@ -445,6 +496,27 @@ __TS__SetDescriptor(
|
|
|
445
496
|
end},
|
|
446
497
|
true
|
|
447
498
|
)
|
|
499
|
+
__TS__SetDescriptor(
|
|
500
|
+
ItemAbility.prototype,
|
|
501
|
+
"cooldownRemaining",
|
|
502
|
+
{
|
|
503
|
+
get = function(self)
|
|
504
|
+
local item = self.owner
|
|
505
|
+
local ____doAbilityActionForceDummy_8 = doAbilityActionForceDummy
|
|
506
|
+
local ____item_handle_7 = item.handle
|
|
507
|
+
local ____opt_5 = item.owner
|
|
508
|
+
return ____doAbilityActionForceDummy_8(____item_handle_7, ____opt_5 and ____opt_5.handle, getAbilityCooldown, self.typeId)
|
|
509
|
+
end,
|
|
510
|
+
set = function(self, cooldownRemaining)
|
|
511
|
+
local item = self.owner
|
|
512
|
+
local ____startItemCooldown_12 = startItemCooldown
|
|
513
|
+
local ____item_handle_11 = item.handle
|
|
514
|
+
local ____opt_9 = item.owner
|
|
515
|
+
____startItemCooldown_12(____item_handle_11, ____opt_9 and ____opt_9.handle, cooldownRemaining)
|
|
516
|
+
end
|
|
517
|
+
},
|
|
518
|
+
true
|
|
519
|
+
)
|
|
448
520
|
__TS__ObjectDefineProperty(
|
|
449
521
|
ItemAbility,
|
|
450
522
|
"onCreate",
|
|
@@ -3,14 +3,38 @@ local ____player = require("core.types.player")
|
|
|
3
3
|
local Player = ____player.Player
|
|
4
4
|
local ____dummy = require("objutil.dummy")
|
|
5
5
|
local dummyUnitId = ____dummy.dummyUnitId
|
|
6
|
+
local ____utility = require("engine.internal.utility")
|
|
7
|
+
local findUnitItemSlot = ____utility.findUnitItemSlot
|
|
8
|
+
local ____berserk = require("engine.object-data.entry.ability-type.berserk")
|
|
9
|
+
local BerserkAbilityType = ____berserk.BerserkAbilityType
|
|
10
|
+
local ____blank = require("engine.object-data.entry.item-type.blank")
|
|
11
|
+
local BlankItemType = ____blank.BlankItemType
|
|
6
12
|
local isItemOwned = IsItemOwned
|
|
7
13
|
local isItemPowerup = IsItemPowerup
|
|
8
14
|
local getItemX = GetItemX
|
|
9
15
|
local getItemY = GetItemY
|
|
16
|
+
local setAbilityRealLevelField = BlzSetAbilityRealLevelField
|
|
17
|
+
local setItemIntegerField = BlzSetItemIntegerField
|
|
18
|
+
local getItemIntegerField = BlzGetItemIntegerField
|
|
10
19
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
11
20
|
local setItemPosition = SetItemPosition
|
|
12
21
|
local unitAddItem = UnitAddItem
|
|
22
|
+
local unitDropItemSlot = UnitDropItemSlot
|
|
13
23
|
local unitRemoveItem = UnitRemoveItem
|
|
24
|
+
local unitUseItem = UnitUseItem
|
|
25
|
+
local unitResetCooldown = UnitResetCooldown
|
|
26
|
+
local COOLDOWN_STARTER_ABILITY_TYPE_ID = compiletime(function()
|
|
27
|
+
local abilityType = BerserkAbilityType:create()
|
|
28
|
+
abilityType.manaCost = 0
|
|
29
|
+
return abilityType.id
|
|
30
|
+
end)
|
|
31
|
+
local COOLDOWN_STARTER_ITEM_TYPE_ID = compiletime(function()
|
|
32
|
+
local itemType = BlankItemType:create()
|
|
33
|
+
itemType.abilityTypeIds = {COOLDOWN_STARTER_ABILITY_TYPE_ID}
|
|
34
|
+
itemType.cooldownGroupId = COOLDOWN_STARTER_ABILITY_TYPE_ID
|
|
35
|
+
itemType.activelyUsed = true
|
|
36
|
+
return itemType.id
|
|
37
|
+
end)
|
|
14
38
|
local dummy = assert(CreateUnit(
|
|
15
39
|
Player.neutralVictim.handle,
|
|
16
40
|
dummyUnitId,
|
|
@@ -18,7 +42,25 @@ local dummy = assert(CreateUnit(
|
|
|
18
42
|
0,
|
|
19
43
|
270
|
|
20
44
|
))
|
|
45
|
+
local cooldownStarterItem = UnitAddItemById(dummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
|
|
46
|
+
local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
21
47
|
ShowUnit(dummy, false)
|
|
48
|
+
local function startItemCooldownInternal(handle, cooldown)
|
|
49
|
+
local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
|
|
50
|
+
setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
51
|
+
setAbilityRealLevelField(cooldownStarterAbility, ABILITY_RLF_COOLDOWN, 0, cooldown)
|
|
52
|
+
unitResetCooldown(dummy)
|
|
53
|
+
unitUseItem(dummy, cooldownStarterItem)
|
|
54
|
+
setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, cooldownGroup)
|
|
55
|
+
end
|
|
56
|
+
---
|
|
57
|
+
-- @internal For use by internal systems only.
|
|
58
|
+
____exports.startItemCooldown = function(handle, owner, cooldown)
|
|
59
|
+
____exports.doAbilityActionForceDummy(handle, owner, startItemCooldownInternal, cooldown)
|
|
60
|
+
end
|
|
61
|
+
---
|
|
62
|
+
-- @internal For use by internal systems only.
|
|
63
|
+
____exports.abilityActionDummy = dummy
|
|
22
64
|
---
|
|
23
65
|
-- @internal For use by internal systems only.
|
|
24
66
|
____exports.doAbilityAction = function(handle, action, ...)
|
|
@@ -45,4 +87,30 @@ ____exports.doAbilityAction = function(handle, action, ...)
|
|
|
45
87
|
end
|
|
46
88
|
return result
|
|
47
89
|
end
|
|
90
|
+
---
|
|
91
|
+
-- @internal For use by internal systems only.
|
|
92
|
+
____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
|
|
93
|
+
if owner == nil then
|
|
94
|
+
return ____exports.doAbilityAction(handle, action, ...)
|
|
95
|
+
end
|
|
96
|
+
local slot = findUnitItemSlot(owner, handle)
|
|
97
|
+
if slot == nil then
|
|
98
|
+
return ____exports.doAbilityAction(handle, action, ...)
|
|
99
|
+
end
|
|
100
|
+
local isPowerup
|
|
101
|
+
if isItemPowerup(handle) then
|
|
102
|
+
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
|
|
103
|
+
isPowerup = true
|
|
104
|
+
end
|
|
105
|
+
unitRemoveItem(owner, handle)
|
|
106
|
+
unitAddItem(dummy, handle)
|
|
107
|
+
local result = action(handle, ...)
|
|
108
|
+
unitRemoveItem(dummy, handle)
|
|
109
|
+
unitAddItem(owner, handle)
|
|
110
|
+
unitDropItemSlot(owner, handle, slot)
|
|
111
|
+
if isPowerup then
|
|
112
|
+
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
113
|
+
end
|
|
114
|
+
return result
|
|
115
|
+
end
|
|
48
116
|
return ____exports
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local disableAbility = BlzUnitDisableAbility
|
|
3
|
+
---
|
|
4
|
+
-- @internal For use by internal systems only.
|
|
5
|
+
____exports.increaseAbilityDisableCounter = function(unit, abilityTypeId, times)
|
|
6
|
+
for _ = 1, times do
|
|
7
|
+
disableAbility(unit, abilityTypeId, true, false)
|
|
8
|
+
end
|
|
9
|
+
for _ = times, -1 do
|
|
10
|
+
disableAbility(unit, abilityTypeId, false, false)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
return ____exports
|
|
@@ -3,7 +3,7 @@ import { Ability } from "../ability";
|
|
|
3
3
|
import { Destructable } from "../../../core/types/destructable";
|
|
4
4
|
import { Item } from "../item";
|
|
5
5
|
import { Widget } from "../../../core/types/widget";
|
|
6
|
-
import { DispatchingEvent } from "../../../event";
|
|
6
|
+
import { DispatchingEvent, Event } from "../../../event";
|
|
7
7
|
declare module "../unit" {
|
|
8
8
|
namespace Unit {
|
|
9
9
|
const abilityCastingStartEvent: DispatchingEvent<[Unit, Ability]>;
|
|
@@ -141,3 +141,12 @@ declare module "../unit" {
|
|
|
141
141
|
const abilityStopEvent: DispatchingEvent<[Unit, Ability]>;
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
|
+
declare module "../unit" {
|
|
145
|
+
namespace Unit {
|
|
146
|
+
const abilityCommandEvent: {
|
|
147
|
+
readonly [abilityTypeId: number]: {
|
|
148
|
+
readonly [orderTypeStringId: string]: Event<[Unit, Ability, string]>;
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -15,8 +15,15 @@ local UnitTriggerEvent = ____unit.UnitTriggerEvent
|
|
|
15
15
|
local ____event = require("event")
|
|
16
16
|
local createDispatchingEvent = ____event.createDispatchingEvent
|
|
17
17
|
local DependentInitializingEvent = ____event.DependentInitializingEvent
|
|
18
|
+
local Event = ____event.Event
|
|
19
|
+
local InitializingEvent = ____event.InitializingEvent
|
|
18
20
|
local ____preconditions = require("utility.preconditions")
|
|
19
21
|
local checkNotNull = ____preconditions.checkNotNull
|
|
22
|
+
local ____lazy = require("utility.lazy")
|
|
23
|
+
local lazyRecord = ____lazy.lazyRecord
|
|
24
|
+
local eventInvoke = Event.invoke
|
|
25
|
+
local condition = Condition
|
|
26
|
+
local createTrigger = CreateTrigger
|
|
20
27
|
local getItemAbility = BlzGetItemAbility
|
|
21
28
|
local getSpellAbility = GetSpellAbility
|
|
22
29
|
local getSpellAbilityId = GetSpellAbilityId
|
|
@@ -26,6 +33,8 @@ local getSpellTargetUnit = GetSpellTargetUnit
|
|
|
26
33
|
local getSpellTargetX = GetSpellTargetX
|
|
27
34
|
local getSpellTargetY = GetSpellTargetY
|
|
28
35
|
local getTriggerUnit = GetTriggerUnit
|
|
36
|
+
local triggerAddCondition = TriggerAddCondition
|
|
37
|
+
local triggerRegisterCommandEvent = TriggerRegisterCommandEvent
|
|
29
38
|
local unitInventorySize = UnitInventorySize
|
|
30
39
|
local unitItemInSlot = UnitItemInSlot
|
|
31
40
|
local function retrieveAbility(unit, ability, abilityId)
|
|
@@ -352,4 +361,31 @@ rawset(
|
|
|
352
361
|
extractAbilityTypeId
|
|
353
362
|
)
|
|
354
363
|
)
|
|
364
|
+
rawset(
|
|
365
|
+
Unit,
|
|
366
|
+
"abilityCommandEvent",
|
|
367
|
+
lazyRecord(function(abilityTypeId)
|
|
368
|
+
return lazyRecord(function(orderTypeStringId)
|
|
369
|
+
return __TS__New(
|
|
370
|
+
InitializingEvent,
|
|
371
|
+
function(event)
|
|
372
|
+
local trigger = createTrigger()
|
|
373
|
+
triggerRegisterCommandEvent(trigger, abilityTypeId, orderTypeStringId)
|
|
374
|
+
triggerAddCondition(
|
|
375
|
+
trigger,
|
|
376
|
+
condition(function()
|
|
377
|
+
local unit = Unit:of(getTriggerUnit())
|
|
378
|
+
if unit ~= nil then
|
|
379
|
+
local ability = unit:getAbilityById(abilityTypeId)
|
|
380
|
+
if ability ~= nil then
|
|
381
|
+
eventInvoke(event, unit, ability, orderTypeStringId)
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
end)
|
|
385
|
+
)
|
|
386
|
+
end
|
|
387
|
+
)
|
|
388
|
+
end)
|
|
389
|
+
end)
|
|
390
|
+
)
|
|
355
391
|
return ____exports
|
|
@@ -7,6 +7,8 @@ local ____item = require("engine.internal.item")
|
|
|
7
7
|
local Item = ____item.Item
|
|
8
8
|
local ____unit = require("engine.internal.unit")
|
|
9
9
|
local Unit = ____unit.Unit
|
|
10
|
+
local ____utility = require("engine.internal.utility")
|
|
11
|
+
local findUnitItemSlot = ____utility.findUnitItemSlot
|
|
10
12
|
local rawset = _G.rawset
|
|
11
13
|
local ____type = _G.type
|
|
12
14
|
local isItemPowerup = IsItemPowerup
|
|
@@ -31,14 +33,7 @@ function UnitItems.prototype.____constructor(self, handle)
|
|
|
31
33
|
handleByUnitItems[self] = handle
|
|
32
34
|
end
|
|
33
35
|
function UnitItems.prototype.findSlot(self, item)
|
|
34
|
-
|
|
35
|
-
local itemHandle = item.handle
|
|
36
|
-
for slot = 0, unitInventorySize(handle) - 1 do
|
|
37
|
-
if itemHandle == unitItemInSlot(handle, slot) then
|
|
38
|
-
return slot
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
return nil
|
|
36
|
+
return findUnitItemSlot(handleByUnitItems[self], item.handle)
|
|
42
37
|
end
|
|
43
38
|
function UnitItems.prototype.__newindex(self, slot, item)
|
|
44
39
|
local handle = handleByUnitItems[self]
|
|
@@ -332,7 +332,8 @@ export declare class Unit extends Handle<junit> {
|
|
|
332
332
|
static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
|
|
333
333
|
static itemUsedEvent: UnitTriggerEvent<[Item]>;
|
|
334
334
|
static itemStackedEvent: UnitTriggerEvent<[Item]>;
|
|
335
|
-
static get
|
|
335
|
+
static get itemUseOrderEvent(): Event<[unit: Unit, item: Item]>;
|
|
336
|
+
static get itemMoveOrderEvent(): Event<[
|
|
336
337
|
unit: Unit,
|
|
337
338
|
item: Item,
|
|
338
339
|
slotFrom: 0 | 1 | 2 | 3 | 4 | 5,
|
package/engine/internal/unit.lua
CHANGED
|
@@ -2538,7 +2538,28 @@ Unit.itemStackedEvent = __TS__New(
|
|
|
2538
2538
|
)
|
|
2539
2539
|
__TS__ObjectDefineProperty(
|
|
2540
2540
|
Unit,
|
|
2541
|
-
"
|
|
2541
|
+
"itemUseOrderEvent",
|
|
2542
|
+
{get = function(self)
|
|
2543
|
+
local event = __TS__New(Event)
|
|
2544
|
+
for order = orderId("useslot0"), orderId("useslot5") do
|
|
2545
|
+
local slot = order - orderId("useslot0")
|
|
2546
|
+
local function listener(unit)
|
|
2547
|
+
local item = unit.items[slot + 1]
|
|
2548
|
+
if item ~= nil then
|
|
2549
|
+
invoke(event, unit, item)
|
|
2550
|
+
end
|
|
2551
|
+
end
|
|
2552
|
+
self.onImmediateOrder[order]:addListener(listener)
|
|
2553
|
+
self.onTargetOrder[order]:addListener(listener)
|
|
2554
|
+
self.onPointOrder[order]:addListener(listener)
|
|
2555
|
+
end
|
|
2556
|
+
rawset(self, "itemUseOrderEvent", event)
|
|
2557
|
+
return event
|
|
2558
|
+
end}
|
|
2559
|
+
)
|
|
2560
|
+
__TS__ObjectDefineProperty(
|
|
2561
|
+
Unit,
|
|
2562
|
+
"itemMoveOrderEvent",
|
|
2542
2563
|
{get = function(self)
|
|
2543
2564
|
local event = __TS__New(Event)
|
|
2544
2565
|
for order = orderId("moveslot0"), orderId("moveslot5") do
|
|
@@ -2556,7 +2577,7 @@ __TS__ObjectDefineProperty(
|
|
|
2556
2577
|
end
|
|
2557
2578
|
end)
|
|
2558
2579
|
end
|
|
2559
|
-
rawset(self, "
|
|
2580
|
+
rawset(self, "itemMoveOrderEvent", event)
|
|
2560
2581
|
return event
|
|
2561
2582
|
end}
|
|
2562
2583
|
)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
2
|
local getUnitAbility = BlzGetUnitAbility
|
|
3
3
|
local unitAddAbility = UnitAddAbility
|
|
4
|
+
local unitInventorySize = UnitInventorySize
|
|
5
|
+
local unitItemInSlot = UnitItemInSlot
|
|
4
6
|
local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
|
|
5
7
|
---
|
|
6
8
|
-- @internal For use by internal systems only.
|
|
@@ -10,4 +12,14 @@ ____exports.addInternalAbility = function(unit, abilityTypeId)
|
|
|
10
12
|
end
|
|
11
13
|
return getUnitAbility(unit, abilityTypeId)
|
|
12
14
|
end
|
|
15
|
+
---
|
|
16
|
+
-- @internal For use by internal systems only.
|
|
17
|
+
____exports.findUnitItemSlot = function(unit, item)
|
|
18
|
+
for slot = 0, unitInventorySize(unit) - 1 do
|
|
19
|
+
if item == unitItemInSlot(unit, slot) then
|
|
20
|
+
return slot
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
return nil
|
|
24
|
+
end
|
|
13
25
|
return ____exports
|
|
@@ -45,6 +45,8 @@ export declare class ItemType extends ObjectDataEntry<ItemTypeId> {
|
|
|
45
45
|
set tooltipText(tooltipText: string);
|
|
46
46
|
get tooltipExtendedText(): string;
|
|
47
47
|
set tooltipExtendedText(tooltipText: string);
|
|
48
|
+
get cooldownGroupId(): number;
|
|
49
|
+
set cooldownGroupId(cooldownGroupId: number);
|
|
48
50
|
get goldCost(): number;
|
|
49
51
|
set goldCost(goldCost: number);
|
|
50
52
|
get lumberCost(): number;
|
|
@@ -256,6 +256,19 @@ __TS__SetDescriptor(
|
|
|
256
256
|
},
|
|
257
257
|
true
|
|
258
258
|
)
|
|
259
|
+
__TS__SetDescriptor(
|
|
260
|
+
ItemType.prototype,
|
|
261
|
+
"cooldownGroupId",
|
|
262
|
+
{
|
|
263
|
+
get = function(self)
|
|
264
|
+
return self:getObjectDataEntryIdField("icid")
|
|
265
|
+
end,
|
|
266
|
+
set = function(self, cooldownGroupId)
|
|
267
|
+
self:setObjectDataEntryIdField("icid", cooldownGroupId)
|
|
268
|
+
end
|
|
269
|
+
},
|
|
270
|
+
true
|
|
271
|
+
)
|
|
259
272
|
__TS__SetDescriptor(
|
|
260
273
|
ItemType.prototype,
|
|
261
274
|
"goldCost",
|
|
@@ -131,4 +131,7 @@ export declare class AbilityCombatClassificationsLevelField extends AbilityLevel
|
|
|
131
131
|
protected setNativeFieldValue(instance: Ability, level: number, value: CombatClassifications): boolean;
|
|
132
132
|
}
|
|
133
133
|
export type AbilityDependentValue<ValueType extends boolean | number | string> = ValueType | AbilityField<ValueType> | AbilityLevelField<ValueType> | ((ability: Ability) => ValueType);
|
|
134
|
-
export declare const resolveCurrentAbilityDependentValue:
|
|
134
|
+
export declare const resolveCurrentAbilityDependentValue: {
|
|
135
|
+
<ValueType extends boolean | number | string>(ability: Ability, value: AbilityDependentValue<ValueType>): ValueType;
|
|
136
|
+
<ValueType extends boolean | number | string>(ability: Ability, value?: AbilityDependentValue<ValueType>): ValueType | undefined;
|
|
137
|
+
};
|
|
@@ -687,6 +687,8 @@ export declare const DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD: Abilit
|
|
|
687
687
|
export declare const ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD: AbilityBooleanLevelField & symbol;
|
|
688
688
|
export declare const ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD: AbilityStringLevelField & symbol;
|
|
689
689
|
export declare const CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
|
|
690
|
+
export declare const CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
|
|
691
|
+
export declare const CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
|
|
690
692
|
export declare const TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
|
|
691
693
|
export declare const TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
|
|
692
694
|
export declare const TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
|
|
@@ -698,6 +698,8 @@ ____exports.DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBoolean
|
|
|
698
698
|
____exports.ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBooleanLevelField:create(fourCC("Ntm4"))
|
|
699
699
|
____exports.ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD = AbilityStringLevelField:create(fourCC("aart"))
|
|
700
700
|
____exports.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("acat"))
|
|
701
|
+
____exports.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("acap"))
|
|
702
|
+
____exports.CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("aca1"))
|
|
701
703
|
____exports.TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("atat"))
|
|
702
704
|
____exports.TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata0"))
|
|
703
705
|
____exports.TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata1"))
|
package/package.json
CHANGED
package/utility/lazy.lua
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local rawset = _G.rawset
|
|
3
|
+
local setmetatable = _G.setmetatable
|
|
4
|
+
____exports.lazyRecord = function(initializer)
|
|
5
|
+
return setmetatable(
|
|
6
|
+
{},
|
|
7
|
+
{__index = function(self, key)
|
|
8
|
+
local value = initializer(key)
|
|
9
|
+
rawset(self, key, value)
|
|
10
|
+
return value
|
|
11
|
+
end}
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
return ____exports
|