warscript 0.0.1-dev.f48f7bb → 0.0.1-dev.f70428f
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 +6 -0
- package/attributes.lua +17 -1
- package/config.d.ts +5 -0
- package/config.lua +10 -0
- package/core/types/effect.d.ts +1 -3
- package/core/types/effect.lua +26 -29
- package/core/types/frame.lua +24 -21
- package/core/types/player.d.ts +15 -0
- package/core/types/player.lua +56 -14
- package/core/types/playerCamera.d.ts +2 -0
- package/core/types/playerCamera.lua +123 -5
- package/core/types/sound.d.ts +17 -24
- package/core/types/sound.lua +99 -24
- package/core/types/tileCell.d.ts +11 -1
- package/core/types/tileCell.lua +97 -0
- package/core/types/timer.d.ts +9 -8
- package/core/types/timer.lua +45 -23
- package/core/util.lua +6 -1
- package/decl/native.d.ts +846 -790
- package/engine/behavior.d.ts +12 -1
- package/engine/behavior.lua +172 -70
- package/engine/behaviour/ability/apply-buff.d.ts +5 -0
- package/engine/behaviour/ability/apply-buff.lua +32 -0
- package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
- package/engine/behaviour/ability/damage.d.ts +9 -3
- package/engine/behaviour/ability/damage.lua +26 -38
- package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
- package/engine/behaviour/ability/emulate-impact.lua +18 -3
- package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
- package/engine/behaviour/ability/remove-buffs.lua +21 -0
- package/engine/behaviour/ability/restore-mana.d.ts +1 -1
- package/engine/behaviour/ability/restore-mana.lua +6 -6
- package/engine/behaviour/ability.d.ts +7 -2
- package/engine/behaviour/ability.lua +42 -24
- package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
- package/engine/behaviour/unit/stun-immunity.lua +53 -28
- package/engine/behaviour/unit.d.ts +36 -2
- package/engine/behaviour/unit.lua +192 -6
- package/engine/buff.d.ts +66 -44
- package/engine/buff.lua +330 -225
- package/engine/internal/ability.d.ts +7 -1
- package/engine/internal/ability.lua +49 -11
- package/engine/internal/item/ability.lua +66 -14
- package/engine/internal/item+owner.lua +12 -6
- package/engine/internal/item.d.ts +20 -19
- package/engine/internal/item.lua +191 -74
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
- package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
- package/engine/internal/misc/frame-coordinates.d.ts +2 -0
- package/engine/internal/misc/frame-coordinates.lua +21 -0
- package/engine/internal/misc/get-terrain-z.d.ts +2 -0
- package/engine/internal/misc/get-terrain-z.lua +11 -0
- package/engine/internal/misc/player-local-handle.d.ts +2 -0
- package/engine/internal/misc/player-local-handle.lua +5 -0
- package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
- package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
- package/engine/internal/object-data/evasion-probability.d.ts +2 -0
- package/engine/internal/object-data/evasion-probability.lua +16 -0
- package/engine/internal/unit/ability.d.ts +35 -0
- package/engine/internal/unit/ability.lua +98 -9
- package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
- package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot.lua +52 -0
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit/bonus.d.ts +2 -0
- package/engine/internal/unit/bonus.lua +17 -0
- package/engine/internal/unit/fly-height.d.ts +7 -0
- package/engine/internal/unit/fly-height.lua +20 -0
- package/engine/internal/unit/item.lua +3 -48
- package/engine/internal/unit/main-selected.lua +12 -27
- package/engine/internal/unit/order.d.ts +20 -0
- package/engine/internal/unit/order.lua +136 -0
- package/engine/internal/unit/scale.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit+ability.lua +10 -1
- package/engine/internal/unit+damage.d.ts +2 -11
- package/engine/internal/unit+damage.lua +10 -14
- package/engine/internal/unit+spellSteal.lua +1 -2
- package/engine/internal/unit-missile-launch.lua +45 -14
- package/engine/internal/unit.d.ts +43 -17
- package/engine/internal/unit.lua +340 -165
- package/engine/lightning.d.ts +12 -5
- package/engine/lightning.lua +48 -14
- package/engine/local-client.d.ts +2 -0
- package/engine/local-client.lua +30 -0
- package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
- package/engine/object-data/auxiliary/animation-name.lua +16 -0
- package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
- package/engine/object-data/auxiliary/armor-type.lua +46 -0
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
- package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
- package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
- package/engine/object-data/auxiliary/attack-type.lua +42 -0
- package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
- package/engine/object-data/auxiliary/movement-type.lua +22 -0
- package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
- package/engine/object-data/auxiliary/sound-eax.lua +2 -0
- package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
- package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
- package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
- package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
- package/engine/object-data/entry/ability-type/berserk.lua +13 -0
- package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
- package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
- package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
- package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
- package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
- package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
- package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
- package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
- 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/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
- package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
- package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
- package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
- package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
- package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
- package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
- package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
- package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
- package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
- package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
- package/engine/object-data/entry/ability-type/web.d.ts +12 -0
- package/engine/object-data/entry/ability-type/web.lua +52 -0
- package/engine/object-data/entry/ability-type.d.ts +19 -17
- package/engine/object-data/entry/ability-type.lua +85 -24
- package/engine/object-data/entry/buff-type/applicable.lua +18 -37
- package/engine/object-data/entry/buff-type.d.ts +6 -12
- package/engine/object-data/entry/buff-type.lua +13 -29
- package/engine/object-data/entry/destructible-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.lua +4 -4
- package/engine/object-data/entry/lightning-type.d.ts +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +33 -0
- package/engine/object-data/entry/sound-preset.lua +140 -0
- package/engine/object-data/entry/unit-type.d.ts +21 -5
- package/engine/object-data/entry/unit-type.lua +214 -93
- package/engine/object-data/entry/upgrade.d.ts +1 -1
- package/engine/object-data/entry/upgrade.lua +4 -4
- package/engine/object-data/entry.d.ts +16 -14
- package/engine/object-data/entry.lua +60 -32
- package/engine/object-field/ability.d.ts +4 -4
- package/engine/object-field/ability.lua +7 -6
- package/engine/object-field/unit.d.ts +69 -3
- package/engine/object-field/unit.lua +264 -7
- package/engine/object-field.d.ts +23 -6
- package/engine/object-field.lua +309 -126
- package/engine/random.d.ts +9 -0
- package/engine/random.lua +13 -0
- package/engine/standard/entries/buff-type.d.ts +3 -0
- package/engine/standard/entries/buff-type.lua +3 -0
- package/engine/standard/entries/sound-preset.d.ts +10 -0
- package/engine/standard/entries/sound-preset.lua +10 -0
- package/engine/standard/fields/unit.d.ts +6 -0
- package/engine/standard/fields/unit.lua +11 -0
- package/engine/synchronization.d.ts +11 -0
- package/engine/synchronization.lua +77 -0
- package/engine/text-tag.d.ts +36 -2
- package/engine/text-tag.lua +250 -10
- package/engine/unit.d.ts +4 -0
- package/engine/unit.lua +4 -0
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +2 -3
- package/objutil/unit.lua +8 -0
- package/package.json +2 -2
- package/patch-lualib.lua +1 -1
- package/utility/arrays.d.ts +2 -0
- package/utility/arrays.lua +11 -0
- package/utility/callback-array.d.ts +17 -0
- package/utility/callback-array.lua +61 -0
- package/utility/functions.d.ts +8 -0
- package/utility/functions.lua +13 -0
- package/utility/linked-set.d.ts +2 -0
- package/utility/linked-set.lua +22 -1
- package/utility/lua-maps.d.ts +15 -2
- package/utility/lua-maps.lua +53 -2
- package/utility/lua-sets.d.ts +2 -0
- package/utility/lua-sets.lua +7 -0
- package/utility/reflection.lua +11 -7
- package/utility/types.d.ts +3 -0
- package/core/types/order.d.ts +0 -25
- package/core/types/order.lua +0 -55
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__New = ____lualib.__TS__New
|
|
3
|
+
local __TS__Promise = ____lualib.__TS__Promise
|
|
4
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
5
|
+
local ____exports = {}
|
|
6
|
+
local ____player = require("core.types.player")
|
|
7
|
+
local Player = ____player.Player
|
|
8
|
+
local ____math = require("math")
|
|
9
|
+
local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
|
|
10
|
+
local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
|
|
11
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
12
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
13
|
+
local ____event = require("event")
|
|
14
|
+
local Event = ____event.Event
|
|
15
|
+
local eventInvoke = Event.invoke
|
|
16
|
+
local createFrameByType = BlzCreateFrameByType
|
|
17
|
+
local createTrigger = CreateTrigger
|
|
18
|
+
local getOriginFrame = BlzGetOriginFrame
|
|
19
|
+
local getTriggerFrameValue = BlzGetTriggerFrameValue
|
|
20
|
+
local getTriggerPlayer = GetTriggerPlayer
|
|
21
|
+
local frameSetMinMaxValue = BlzFrameSetMinMaxValue
|
|
22
|
+
local frameSetValue = BlzFrameSetValue
|
|
23
|
+
local triggerAddAction = TriggerAddAction
|
|
24
|
+
local triggerRegisterFrameEvent = BlzTriggerRegisterFrameEvent
|
|
25
|
+
____exports.synchronizer = function(getSyncId, getObject)
|
|
26
|
+
local queue = __TS__New(LinkedSet)
|
|
27
|
+
local socket = __TS__New(____exports.ObjectBus, getSyncId, getObject)
|
|
28
|
+
socket.event:addListener(function(_, object)
|
|
29
|
+
local ____opt_0 = queue:pop()
|
|
30
|
+
if ____opt_0 ~= nil then
|
|
31
|
+
____opt_0(object)
|
|
32
|
+
end
|
|
33
|
+
end)
|
|
34
|
+
local function executor(____, resolve)
|
|
35
|
+
queue:add(resolve)
|
|
36
|
+
end
|
|
37
|
+
return function(player, object)
|
|
38
|
+
if player.isLocal then
|
|
39
|
+
socket:send(object)
|
|
40
|
+
end
|
|
41
|
+
return __TS__New(__TS__Promise, executor)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
____exports.ObjectBus = __TS__Class()
|
|
45
|
+
local ObjectBus = ____exports.ObjectBus
|
|
46
|
+
ObjectBus.name = "ObjectBus"
|
|
47
|
+
function ObjectBus.prototype.____constructor(self, getSyncId, getObject)
|
|
48
|
+
self.getSyncId = getSyncId
|
|
49
|
+
local syncSlider = createFrameByType(
|
|
50
|
+
"SLIDER",
|
|
51
|
+
"Synchronizer",
|
|
52
|
+
getOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
|
|
53
|
+
"",
|
|
54
|
+
0
|
|
55
|
+
)
|
|
56
|
+
frameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
|
|
57
|
+
self.syncSlider = syncSlider
|
|
58
|
+
local event = __TS__New(Event)
|
|
59
|
+
local trigger = createTrigger()
|
|
60
|
+
triggerRegisterFrameEvent(trigger, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
|
|
61
|
+
triggerAddAction(
|
|
62
|
+
trigger,
|
|
63
|
+
function()
|
|
64
|
+
eventInvoke(
|
|
65
|
+
event,
|
|
66
|
+
Player:of(getTriggerPlayer()),
|
|
67
|
+
getObject(getTriggerFrameValue())
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
)
|
|
71
|
+
self.event = event
|
|
72
|
+
end
|
|
73
|
+
function ObjectBus.prototype.send(self, object)
|
|
74
|
+
local syncId = object ~= nil and self.getSyncId(object) or 0
|
|
75
|
+
frameSetValue(self.syncSlider, syncId)
|
|
76
|
+
end
|
|
77
|
+
return ____exports
|
package/engine/text-tag.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { Color } from "../core/types/color";
|
|
3
|
+
import { Unit } from "./internal/unit";
|
|
4
|
+
import { AbstractDestroyable, Destructor } from "../destroyable";
|
|
3
5
|
export type TextTagPreset = {
|
|
4
6
|
fadepoint: number;
|
|
5
7
|
lifespan: number;
|
|
@@ -10,9 +12,39 @@ export type TextTagPreset = {
|
|
|
10
12
|
velocityY: number;
|
|
11
13
|
color: Color;
|
|
12
14
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
declare const enum TextTagPropertyKey {
|
|
16
|
+
UNIT = 100,
|
|
17
|
+
HANDLE = 101,
|
|
18
|
+
CONFIGURATION = 102,
|
|
19
|
+
TEXT = 103,
|
|
20
|
+
FONT_SIZE = 104,
|
|
21
|
+
COLOR = 105,
|
|
22
|
+
X = 106,
|
|
23
|
+
Y = 107
|
|
24
|
+
}
|
|
25
|
+
export declare class TextTag extends AbstractDestroyable {
|
|
26
|
+
private [TextTagPropertyKey.HANDLE]?;
|
|
27
|
+
private [TextTagPropertyKey.CONFIGURATION]?;
|
|
28
|
+
private [TextTagPropertyKey.TEXT]?;
|
|
29
|
+
private [TextTagPropertyKey.FONT_SIZE]?;
|
|
30
|
+
private [TextTagPropertyKey.COLOR]?;
|
|
31
|
+
private [TextTagPropertyKey.UNIT]?;
|
|
32
|
+
private [TextTagPropertyKey.X]?;
|
|
33
|
+
private [TextTagPropertyKey.Y]?;
|
|
15
34
|
private constructor();
|
|
35
|
+
protected onDestroy(): Destructor;
|
|
36
|
+
get text(): string;
|
|
37
|
+
set text(text: string);
|
|
38
|
+
get fontSize(): number;
|
|
39
|
+
set fontSize(fontSize: number);
|
|
40
|
+
get color(): Color;
|
|
41
|
+
set color(color: Color);
|
|
42
|
+
get unit(): Unit | undefined;
|
|
43
|
+
set unit(unit: Unit | undefined);
|
|
44
|
+
get x(): number;
|
|
45
|
+
set x(x: number);
|
|
46
|
+
get y(): number;
|
|
47
|
+
set y(y: number);
|
|
16
48
|
static BASE: Readonly<TextTagPreset>;
|
|
17
49
|
static BASH: Readonly<TextTagPreset>;
|
|
18
50
|
static CRITICAL_STRIKE: Readonly<TextTagPreset>;
|
|
@@ -22,4 +54,6 @@ export declare class TextTag {
|
|
|
22
54
|
static MISS: Readonly<TextTagPreset>;
|
|
23
55
|
static SHADOW_STRIKE: Readonly<TextTagPreset>;
|
|
24
56
|
static flash(configuration: Readonly<TextTagPreset>, text: string, x: number, y: number, z?: number): void;
|
|
57
|
+
static create(configuration: Readonly<TextTagPreset>, text: string, unit: Unit): TextTag;
|
|
25
58
|
}
|
|
59
|
+
export {};
|
package/engine/text-tag.lua
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__New = ____lualib.__TS__New
|
|
5
|
+
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
3
6
|
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
|
|
4
7
|
local ____exports = {}
|
|
5
8
|
local ____color = require("core.types.color")
|
|
6
9
|
local Color = ____color.Color
|
|
10
|
+
local ____timer = require("core.types.timer")
|
|
11
|
+
local Timer = ____timer.Timer
|
|
12
|
+
local ____destroyable = require("destroyable")
|
|
13
|
+
local AbstractDestroyable = ____destroyable.AbstractDestroyable
|
|
14
|
+
local ____playerCamera = require("core.types.playerCamera")
|
|
15
|
+
local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
|
|
16
|
+
local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
|
|
17
|
+
local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
|
|
18
|
+
local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
|
|
19
|
+
local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
|
|
7
20
|
local createTextTag = CreateTextTag
|
|
8
21
|
local destroyTextTag = DestroyTextTag
|
|
9
22
|
local setTextTagText = SetTextTagText
|
|
@@ -17,17 +30,15 @@ local setTextTagPermanent = SetTextTagPermanent
|
|
|
17
30
|
local setTextTagAge = SetTextTagAge
|
|
18
31
|
local setTextTagLifespan = SetTextTagLifespan
|
|
19
32
|
local setTextTagFadepoint = SetTextTagFadepoint
|
|
33
|
+
local isUnitHidden = IsUnitHidden
|
|
34
|
+
local isUnitLoaded = IsUnitLoaded
|
|
35
|
+
local isUnitVisible = IsUnitVisible
|
|
36
|
+
local getUnitFlyHeight = GetUnitFlyHeight
|
|
37
|
+
local getUnitX = GetUnitX
|
|
38
|
+
local getUnitY = GetUnitY
|
|
39
|
+
local unitAlive = UnitAlive
|
|
20
40
|
local DEFAULT_FONT_SIZE = 0.024
|
|
21
|
-
|
|
22
|
-
local TextTag = ____exports.TextTag
|
|
23
|
-
TextTag.name = "TextTag"
|
|
24
|
-
function TextTag.prototype.____constructor(self, handle)
|
|
25
|
-
self.handle = handle
|
|
26
|
-
end
|
|
27
|
-
function TextTag.flash(self, configuration, text, x, y, z)
|
|
28
|
-
local textTag = createTextTag()
|
|
29
|
-
setTextTagText(textTag, text, DEFAULT_FONT_SIZE)
|
|
30
|
-
setTextTagPos(textTag, x + configuration.offsetX, y + configuration.offsetY, (z or 0) + configuration.offsetZ)
|
|
41
|
+
local function applyConfiguration(textTag, configuration)
|
|
31
42
|
setTextTagFadepoint(textTag, configuration.fadepoint)
|
|
32
43
|
setTextTagLifespan(textTag, configuration.lifespan)
|
|
33
44
|
local color = configuration.color
|
|
@@ -42,6 +53,213 @@ function TextTag.flash(self, configuration, text, x, y, z)
|
|
|
42
53
|
setTextTagPermanent(textTag, false)
|
|
43
54
|
setTextTagVisibility(textTag, true)
|
|
44
55
|
end
|
|
56
|
+
local unitTextTags = setmetatable({}, {__mode = "k"})
|
|
57
|
+
local function ensureHandle(textTag)
|
|
58
|
+
local handle = textTag[101]
|
|
59
|
+
if handle == nil then
|
|
60
|
+
handle = createTextTag()
|
|
61
|
+
applyConfiguration(handle, textTag[102])
|
|
62
|
+
setTextTagPermanent(handle, true)
|
|
63
|
+
setTextTagText(handle, textTag[103] or "", textTag[104] or DEFAULT_FONT_SIZE)
|
|
64
|
+
local color = textTag[105]
|
|
65
|
+
if color ~= nil then
|
|
66
|
+
setTextTagColor(
|
|
67
|
+
handle,
|
|
68
|
+
color.r,
|
|
69
|
+
color.g,
|
|
70
|
+
color.b,
|
|
71
|
+
color.a
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
local unit = textTag[100]
|
|
75
|
+
if unit ~= nil then
|
|
76
|
+
setTextTagPosUnit(handle, unit.handle, textTag[102].offsetZ)
|
|
77
|
+
else
|
|
78
|
+
setTextTagPos(handle, textTag[106] or 0, textTag[107] or 0, 0)
|
|
79
|
+
end
|
|
80
|
+
textTag[101] = handle
|
|
81
|
+
end
|
|
82
|
+
return handle
|
|
83
|
+
end
|
|
84
|
+
____exports.TextTag = __TS__Class()
|
|
85
|
+
local TextTag = ____exports.TextTag
|
|
86
|
+
TextTag.name = "TextTag"
|
|
87
|
+
__TS__ClassExtends(TextTag, AbstractDestroyable)
|
|
88
|
+
function TextTag.prototype.____constructor(self, handle)
|
|
89
|
+
AbstractDestroyable.prototype.____constructor(self)
|
|
90
|
+
self[101] = handle
|
|
91
|
+
end
|
|
92
|
+
function TextTag.prototype.onDestroy(self)
|
|
93
|
+
local handle = self[101]
|
|
94
|
+
if handle ~= nil then
|
|
95
|
+
destroyTextTag(handle)
|
|
96
|
+
self[101] = nil
|
|
97
|
+
end
|
|
98
|
+
unitTextTags[self] = nil
|
|
99
|
+
return AbstractDestroyable.prototype.onDestroy(self)
|
|
100
|
+
end
|
|
101
|
+
function TextTag.flash(self, configuration, text, x, y, z)
|
|
102
|
+
local textTag = createTextTag()
|
|
103
|
+
setTextTagText(textTag, text, DEFAULT_FONT_SIZE)
|
|
104
|
+
setTextTagPos(textTag, x + configuration.offsetX, y + configuration.offsetY, (z or 0) + configuration.offsetZ)
|
|
105
|
+
applyConfiguration(textTag, configuration)
|
|
106
|
+
end
|
|
107
|
+
function TextTag.create(self, configuration, text, unit)
|
|
108
|
+
local textTag = __TS__New(____exports.TextTag)
|
|
109
|
+
textTag[103] = text
|
|
110
|
+
textTag[100] = unit
|
|
111
|
+
textTag[102] = configuration
|
|
112
|
+
ensureHandle(textTag)
|
|
113
|
+
unitTextTags[textTag] = true
|
|
114
|
+
return textTag
|
|
115
|
+
end
|
|
116
|
+
__TS__SetDescriptor(
|
|
117
|
+
TextTag.prototype,
|
|
118
|
+
"text",
|
|
119
|
+
{
|
|
120
|
+
get = function(self)
|
|
121
|
+
return self[103] or ""
|
|
122
|
+
end,
|
|
123
|
+
set = function(self, text)
|
|
124
|
+
setTextTagText(
|
|
125
|
+
ensureHandle(self),
|
|
126
|
+
text,
|
|
127
|
+
self[104] or DEFAULT_FONT_SIZE
|
|
128
|
+
)
|
|
129
|
+
self[103] = text
|
|
130
|
+
end
|
|
131
|
+
},
|
|
132
|
+
true
|
|
133
|
+
)
|
|
134
|
+
__TS__SetDescriptor(
|
|
135
|
+
TextTag.prototype,
|
|
136
|
+
"fontSize",
|
|
137
|
+
{
|
|
138
|
+
get = function(self)
|
|
139
|
+
return self[104] or DEFAULT_FONT_SIZE
|
|
140
|
+
end,
|
|
141
|
+
set = function(self, fontSize)
|
|
142
|
+
setTextTagText(
|
|
143
|
+
ensureHandle(self),
|
|
144
|
+
self[103] or "",
|
|
145
|
+
fontSize
|
|
146
|
+
)
|
|
147
|
+
self[104] = fontSize
|
|
148
|
+
end
|
|
149
|
+
},
|
|
150
|
+
true
|
|
151
|
+
)
|
|
152
|
+
__TS__SetDescriptor(
|
|
153
|
+
TextTag.prototype,
|
|
154
|
+
"color",
|
|
155
|
+
{
|
|
156
|
+
get = function(self)
|
|
157
|
+
return self[105] or Color.white
|
|
158
|
+
end,
|
|
159
|
+
set = function(self, color)
|
|
160
|
+
setTextTagColor(
|
|
161
|
+
ensureHandle(self),
|
|
162
|
+
color.r,
|
|
163
|
+
color.g,
|
|
164
|
+
color.b,
|
|
165
|
+
color.a
|
|
166
|
+
)
|
|
167
|
+
self[105] = color
|
|
168
|
+
end
|
|
169
|
+
},
|
|
170
|
+
true
|
|
171
|
+
)
|
|
172
|
+
__TS__SetDescriptor(
|
|
173
|
+
TextTag.prototype,
|
|
174
|
+
"unit",
|
|
175
|
+
{
|
|
176
|
+
get = function(self)
|
|
177
|
+
return self[100]
|
|
178
|
+
end,
|
|
179
|
+
set = function(self, unit)
|
|
180
|
+
if unit ~= nil then
|
|
181
|
+
setTextTagPosUnit(
|
|
182
|
+
ensureHandle(self),
|
|
183
|
+
unit.handle,
|
|
184
|
+
0
|
|
185
|
+
)
|
|
186
|
+
self[106] = nil
|
|
187
|
+
self[107] = nil
|
|
188
|
+
unitTextTags[self] = true
|
|
189
|
+
elseif self[100] ~= nil then
|
|
190
|
+
local unit = self[100]
|
|
191
|
+
local x = unit.x
|
|
192
|
+
local y = unit.y
|
|
193
|
+
setTextTagPos(
|
|
194
|
+
ensureHandle(self),
|
|
195
|
+
x,
|
|
196
|
+
y,
|
|
197
|
+
0
|
|
198
|
+
)
|
|
199
|
+
self[106] = x
|
|
200
|
+
self[107] = y
|
|
201
|
+
unitTextTags[self] = nil
|
|
202
|
+
end
|
|
203
|
+
self[100] = unit
|
|
204
|
+
end
|
|
205
|
+
},
|
|
206
|
+
true
|
|
207
|
+
)
|
|
208
|
+
__TS__SetDescriptor(
|
|
209
|
+
TextTag.prototype,
|
|
210
|
+
"x",
|
|
211
|
+
{
|
|
212
|
+
get = function(self)
|
|
213
|
+
local ____self__106_2 = self[106]
|
|
214
|
+
if ____self__106_2 == nil then
|
|
215
|
+
local ____opt_0 = self[100]
|
|
216
|
+
____self__106_2 = ____opt_0 and ____opt_0.x
|
|
217
|
+
end
|
|
218
|
+
return ____self__106_2 or 0
|
|
219
|
+
end,
|
|
220
|
+
set = function(self, x)
|
|
221
|
+
local ____ensureHandle_result_6 = ensureHandle(self)
|
|
222
|
+
local ____x_7 = x
|
|
223
|
+
local ____self__107_5 = self[107]
|
|
224
|
+
if ____self__107_5 == nil then
|
|
225
|
+
local ____opt_3 = self[100]
|
|
226
|
+
____self__107_5 = ____opt_3 and ____opt_3.y
|
|
227
|
+
end
|
|
228
|
+
setTextTagPos(____ensureHandle_result_6, ____x_7, ____self__107_5 or 0, 0)
|
|
229
|
+
self[106] = x
|
|
230
|
+
self[100] = nil
|
|
231
|
+
unitTextTags[self] = nil
|
|
232
|
+
end
|
|
233
|
+
},
|
|
234
|
+
true
|
|
235
|
+
)
|
|
236
|
+
__TS__SetDescriptor(
|
|
237
|
+
TextTag.prototype,
|
|
238
|
+
"y",
|
|
239
|
+
{
|
|
240
|
+
get = function(self)
|
|
241
|
+
local ____self__107_10 = self[107]
|
|
242
|
+
if ____self__107_10 == nil then
|
|
243
|
+
local ____opt_8 = self[100]
|
|
244
|
+
____self__107_10 = ____opt_8 and ____opt_8.y
|
|
245
|
+
end
|
|
246
|
+
return ____self__107_10 or 0
|
|
247
|
+
end,
|
|
248
|
+
set = function(self, y)
|
|
249
|
+
local ____ensureHandle_result_14 = ensureHandle(self)
|
|
250
|
+
local ____self__106_13 = self[106]
|
|
251
|
+
if ____self__106_13 == nil then
|
|
252
|
+
local ____opt_11 = self[100]
|
|
253
|
+
____self__106_13 = ____opt_11 and ____opt_11.x
|
|
254
|
+
end
|
|
255
|
+
setTextTagPos(____ensureHandle_result_14, ____self__106_13 or 0, y, 0)
|
|
256
|
+
self[107] = y
|
|
257
|
+
self[100] = nil
|
|
258
|
+
unitTextTags[self] = nil
|
|
259
|
+
end
|
|
260
|
+
},
|
|
261
|
+
true
|
|
262
|
+
)
|
|
45
263
|
TextTag.BASE = {
|
|
46
264
|
fadepoint = 2,
|
|
47
265
|
lifespan = 3,
|
|
@@ -106,4 +324,26 @@ TextTag.SHADOW_STRIKE = __TS__ObjectAssign(
|
|
|
106
324
|
lifespan = 5
|
|
107
325
|
}
|
|
108
326
|
)
|
|
327
|
+
Timer.onPeriod[1 / 64]:addListener(function()
|
|
328
|
+
for textTag in pairs(unitTextTags) do
|
|
329
|
+
local unit = textTag[100].handle
|
|
330
|
+
local x = getUnitX(unit)
|
|
331
|
+
local y = getUnitY(unit)
|
|
332
|
+
local ____, ____, isInView = worldCoordinatesToFrame(
|
|
333
|
+
x,
|
|
334
|
+
y,
|
|
335
|
+
getUnitFlyHeight(unit) + getTerrainZ(x, y)
|
|
336
|
+
)
|
|
337
|
+
if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) and unitAlive(unit) then
|
|
338
|
+
setTextTagPosUnit(
|
|
339
|
+
ensureHandle(textTag),
|
|
340
|
+
unit,
|
|
341
|
+
textTag[102].offsetZ
|
|
342
|
+
)
|
|
343
|
+
elseif textTag[101] ~= nil then
|
|
344
|
+
destroyTextTag(textTag[101])
|
|
345
|
+
textTag[101] = nil
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
end)
|
|
109
349
|
return ____exports
|
package/engine/unit.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import "./internal/unit";
|
|
3
|
+
import "./internal/unit/order";
|
|
3
4
|
import "./internal/unit/ability";
|
|
4
5
|
import "./internal/unit/allowed-targets";
|
|
5
6
|
import "./internal/unit/buff";
|
|
@@ -17,6 +18,9 @@ import "./internal/unit/ghost-counter";
|
|
|
17
18
|
import "./internal/unit/invulnerability-counter";
|
|
18
19
|
import "./internal/unit/detach-missiles";
|
|
19
20
|
import "./internal/unit/main-selected";
|
|
21
|
+
import "./internal/unit/add-item-to-slot-init";
|
|
22
|
+
import "./internal/unit/fly-height";
|
|
23
|
+
import "./internal/unit/scale";
|
|
20
24
|
import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
|
|
21
25
|
export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
|
|
22
26
|
export * from "./internal/unit+damage";
|
package/engine/unit.lua
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
2
|
require("engine.internal.unit")
|
|
3
|
+
require("engine.internal.unit.order")
|
|
3
4
|
require("engine.internal.unit.ability")
|
|
4
5
|
require("engine.internal.unit.allowed-targets")
|
|
5
6
|
require("engine.internal.unit.buff")
|
|
@@ -17,6 +18,9 @@ require("engine.internal.unit.ghost-counter")
|
|
|
17
18
|
require("engine.internal.unit.invulnerability-counter")
|
|
18
19
|
require("engine.internal.unit.detach-missiles")
|
|
19
20
|
require("engine.internal.unit.main-selected")
|
|
21
|
+
require("engine.internal.unit.add-item-to-slot-init")
|
|
22
|
+
require("engine.internal.unit.fly-height")
|
|
23
|
+
require("engine.internal.unit.scale")
|
|
20
24
|
require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
|
|
21
25
|
do
|
|
22
26
|
local ____unit = require("engine.internal.unit")
|
package/net/socket.lua
CHANGED
|
@@ -28,13 +28,13 @@ function Socket.prototype.____constructor(self)
|
|
|
28
28
|
onReceive[self[0]]:addListener(function(sender, data)
|
|
29
29
|
local chunks = chunksByPlayer[sender]
|
|
30
30
|
if chunks ~= nil then
|
|
31
|
+
chunksByPlayer[sender] = nil
|
|
31
32
|
chunks[#chunks + 1] = data
|
|
32
33
|
Event.invoke(
|
|
33
34
|
self.onMessage,
|
|
34
35
|
sender,
|
|
35
36
|
tableConcat(chunks)
|
|
36
37
|
)
|
|
37
|
-
chunksByPlayer[sender] = nil
|
|
38
38
|
else
|
|
39
39
|
Event.invoke(self.onMessage, sender, data)
|
|
40
40
|
end
|
package/objutil/buff.lua
CHANGED
|
@@ -20,7 +20,6 @@ local AbilityDefinitionInnerFire = ____ability.AbilityDefinitionInnerFire
|
|
|
20
20
|
local AbilityDefinitionSearingArrows = ____ability.AbilityDefinitionSearingArrows
|
|
21
21
|
local AbilityDefinitionSlowPoison = ____ability.AbilityDefinitionSlowPoison
|
|
22
22
|
local ____unit = require("core.types.unit")
|
|
23
|
-
local AttackType = ____unit.AttackType
|
|
24
23
|
local DamageType = ____unit.DamageType
|
|
25
24
|
local Unit = ____unit.Unit
|
|
26
25
|
local ____dummy = require("core.dummy")
|
|
@@ -756,14 +755,14 @@ for ____, pointDispelAbilityId in ipairs(pointDispelAbilityIds) do
|
|
|
756
755
|
end)
|
|
757
756
|
end
|
|
758
757
|
Unit.onDamaging:addListener(function(source, target, event)
|
|
759
|
-
if event.amount == 0 and event.attackType ==
|
|
758
|
+
if event.amount == 0 and event.attackType == 0 and event.damageType == DamageType.NORMAL and not event.isAttack then
|
|
760
759
|
Timer:run(function()
|
|
761
760
|
checkBuffs(target, true, source)
|
|
762
761
|
end)
|
|
763
762
|
end
|
|
764
763
|
end)
|
|
765
764
|
Unit.itemPickedUpEvent:addListener(function(unit, item)
|
|
766
|
-
if item.
|
|
765
|
+
if item.isPowerUp and item:hasAbility(fourCC("APdi")) then
|
|
767
766
|
end
|
|
768
767
|
end)
|
|
769
768
|
return ____exports
|
package/objutil/unit.lua
CHANGED
|
@@ -11,6 +11,8 @@ local ____exports = {}
|
|
|
11
11
|
local ____object = require("objutil.object")
|
|
12
12
|
local ObjectDefinition = ____object.ObjectDefinition
|
|
13
13
|
local idgen = require("objutil.idgen")
|
|
14
|
+
local ____config = require("config")
|
|
15
|
+
local WarscriptConfig = ____config.WarscriptConfig
|
|
14
16
|
local attackTypes = setmetatable(
|
|
15
17
|
{
|
|
16
18
|
normal = "normal",
|
|
@@ -593,6 +595,9 @@ __TS__SetDescriptor(
|
|
|
593
595
|
end,
|
|
594
596
|
set = function(self, v)
|
|
595
597
|
self:setStringField("umdl", v)
|
|
598
|
+
if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
|
|
599
|
+
self:setStringField("upor", "")
|
|
600
|
+
end
|
|
596
601
|
end
|
|
597
602
|
},
|
|
598
603
|
true
|
|
@@ -606,6 +611,9 @@ __TS__SetDescriptor(
|
|
|
606
611
|
end,
|
|
607
612
|
set = function(self, v)
|
|
608
613
|
self.object:setField("umdl:hd", v)
|
|
614
|
+
if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
|
|
615
|
+
self.object:setField("upor:hd", "")
|
|
616
|
+
end
|
|
609
617
|
end
|
|
610
618
|
},
|
|
611
619
|
true
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "warscript",
|
|
4
|
-
"version": "0.0.1-dev.
|
|
4
|
+
"version": "0.0.1-dev.f70428f",
|
|
5
5
|
"description": "A typescript library for Warcraft III using Warpack.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"warcraft",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@warscript/language-extensions": "^0.0.1",
|
|
25
25
|
"@warscript/tstl-plugin": "^0.0.4",
|
|
26
26
|
"lua-types": "^2.13.1",
|
|
27
|
-
"warpack": "0.0.1-dev.
|
|
27
|
+
"warpack": "0.0.1-dev.251db08"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@typescript-eslint/eslint-plugin": "^8.13.0",
|
package/patch-lualib.lua
CHANGED
|
@@ -3,7 +3,7 @@ local lualib = _G.require("lualib_bundle")
|
|
|
3
3
|
local next = _G.next
|
|
4
4
|
local ____type = _G.type
|
|
5
5
|
lualib.__TS__ArrayIsArray = function(value)
|
|
6
|
-
return ____type(value) == "table" and (value[1] ~= nil or (
|
|
6
|
+
return ____type(value) == "table" and (value[1] ~= nil or (next(value)) == nil) and value.constructor == nil
|
|
7
7
|
end
|
|
8
8
|
local __TS__SetDescriptor = lualib.__TS__SetDescriptor
|
|
9
9
|
lualib.__TS__ObjectDefineProperty = function(target, key, desc)
|
package/utility/arrays.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const joinToString: <T>(array: readonly T[], separator: string, t
|
|
|
5
5
|
export declare const arrayOfNotNull: <T>(...elements: readonly (T | undefined | null)[]) => T[];
|
|
6
6
|
export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
|
|
7
7
|
export declare const toLuaSet: <T extends AnyNotNil>(array: readonly T[]) => LuaSet<T>;
|
|
8
|
+
export declare const contains: <T>(array: readonly T[], element: T) => boolean;
|
|
8
9
|
export declare const forEach: <T, Args extends any[]>(array: readonly T[], consumerOrKey: ((value: T, ...args: Args) => void) | KeysOfType<T, (this: T, ...args: Args) => void>, ...args: Args) => void;
|
|
9
10
|
export declare const all: {
|
|
10
11
|
<T>(array: readonly T[], transform: (value: T) => boolean): boolean;
|
|
@@ -22,6 +23,7 @@ export declare const mapToLuaSet: {
|
|
|
22
23
|
<T, R extends AnyNotNil>(array: readonly T[], transform: (value: T) => R): LuaSet<R>;
|
|
23
24
|
<T, K extends KeysOfType<T, AnyNotNil>>(array: readonly T[], key: K): LuaSet<T[K] extends AnyNotNil ? T[K] : never>;
|
|
24
25
|
};
|
|
26
|
+
export declare const flatten: <T>(array: readonly (readonly T[])[]) => T[];
|
|
25
27
|
export declare const flatMap: {
|
|
26
28
|
<T, R>(array: readonly T[], transform: (value: T) => readonly R[]): R[];
|
|
27
29
|
<T, K extends KeysOfType<T, readonly any[]>>(array: readonly T[], key: K): (T[K] extends readonly (infer R)[] ? R : never)[];
|
package/utility/arrays.lua
CHANGED
|
@@ -3,6 +3,8 @@ local __TS__New = ____lualib.__TS__New
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____exception = require("exception")
|
|
5
5
|
local IllegalArgumentException = ____exception.IllegalArgumentException
|
|
6
|
+
local ____functions = require("utility.functions")
|
|
7
|
+
local identity = ____functions.identity
|
|
6
8
|
local mathMax = math.max
|
|
7
9
|
local mathMin = math.min
|
|
8
10
|
local select = _G.select
|
|
@@ -47,6 +49,14 @@ ____exports.toLuaSet = function(array)
|
|
|
47
49
|
end
|
|
48
50
|
return result
|
|
49
51
|
end
|
|
52
|
+
____exports.contains = function(array, element)
|
|
53
|
+
for i = 1, #array do
|
|
54
|
+
if array[i] == element then
|
|
55
|
+
return true
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
return false
|
|
59
|
+
end
|
|
50
60
|
____exports.forEach = function(array, consumerOrKey, ...)
|
|
51
61
|
if type(consumerOrKey) == "function" then
|
|
52
62
|
for i = 1, #array do
|
|
@@ -120,6 +130,7 @@ ____exports.mapToLuaSet = function(array, transform)
|
|
|
120
130
|
end
|
|
121
131
|
return result
|
|
122
132
|
end
|
|
133
|
+
____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
|
|
123
134
|
____exports.flatMap = function(array, transform)
|
|
124
135
|
local result = {}
|
|
125
136
|
local k = 1
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
type Callback = {
|
|
3
|
+
readonly __callback: unique symbol;
|
|
4
|
+
};
|
|
5
|
+
export type CallbackId = number & {
|
|
6
|
+
readonly __callbackId: unique symbol;
|
|
7
|
+
};
|
|
8
|
+
export type CallbackArray = {
|
|
9
|
+
readonly __callbackArray: unique symbol;
|
|
10
|
+
} & Callback[];
|
|
11
|
+
export declare const callbackArray: () => CallbackArray;
|
|
12
|
+
export declare function addCallback<Args extends any[]>(this: void, array: CallbackArray, callback: (...args: Args) => unknown, ...args: Args): CallbackId;
|
|
13
|
+
export declare function clearCallbacks(this: void, array: CallbackArray): void;
|
|
14
|
+
export declare function consumeCallback(this: void, array: CallbackArray, id: CallbackId): void;
|
|
15
|
+
export declare function consumeCallbacks(this: void, array: CallbackArray): void;
|
|
16
|
+
export declare function invokeCallbacks(this: void, array: CallbackArray): void;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local safeCall, tableUnpack
|
|
3
|
+
function ____exports.invokeCallbacks(array)
|
|
4
|
+
local length = array[1] or 2
|
|
5
|
+
local i = 2
|
|
6
|
+
while i ~= length do
|
|
7
|
+
local callback = array[i]
|
|
8
|
+
i = i + 1
|
|
9
|
+
local argsCount = array[i]
|
|
10
|
+
i = i + 1
|
|
11
|
+
safeCall(
|
|
12
|
+
callback,
|
|
13
|
+
tableUnpack(array, i, i + argsCount - 1)
|
|
14
|
+
)
|
|
15
|
+
i = i + argsCount
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
safeCall = warpack.safeCall
|
|
19
|
+
local select = _G.select
|
|
20
|
+
local tableMove = table.move
|
|
21
|
+
tableUnpack = table.unpack
|
|
22
|
+
____exports.callbackArray = function() return {} end
|
|
23
|
+
local function doNothing()
|
|
24
|
+
end
|
|
25
|
+
function ____exports.addCallback(array, callback, ...)
|
|
26
|
+
local id = array[1] or 2
|
|
27
|
+
local i = id
|
|
28
|
+
array[i] = callback
|
|
29
|
+
local argsCount = select("#", ...)
|
|
30
|
+
i = i + 1
|
|
31
|
+
array[i] = argsCount
|
|
32
|
+
for j = 1, argsCount do
|
|
33
|
+
i = i + 1
|
|
34
|
+
array[i] = (select(j, ...))
|
|
35
|
+
end
|
|
36
|
+
array[1] = i + 1
|
|
37
|
+
return id
|
|
38
|
+
end
|
|
39
|
+
function ____exports.clearCallbacks(array)
|
|
40
|
+
local length = array[1] or 2
|
|
41
|
+
tableMove(array, length, length + length - 2, 1)
|
|
42
|
+
end
|
|
43
|
+
function ____exports.consumeCallback(array, id)
|
|
44
|
+
local callback = array[id]
|
|
45
|
+
array[id] = doNothing
|
|
46
|
+
id = id + 1
|
|
47
|
+
local argsCount = array[id]
|
|
48
|
+
id = id + 1
|
|
49
|
+
safeCall(
|
|
50
|
+
callback,
|
|
51
|
+
tableUnpack(array, id, id + argsCount - 1)
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
function ____exports.consumeCallbacks(array)
|
|
55
|
+
local length = array[1] or 2
|
|
56
|
+
____exports.invokeCallbacks(array)
|
|
57
|
+
local newLength = array[1] or 2
|
|
58
|
+
tableMove(array, length, length + newLength - 3, 2)
|
|
59
|
+
array[1] = newLength - length + 2
|
|
60
|
+
end
|
|
61
|
+
return ____exports
|