warscript 0.0.1-dev.ec4cf89 → 0.0.1-dev.f967846

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.
Files changed (45) hide show
  1. package/core/types/frame.d.ts +6 -0
  2. package/core/types/frame.lua +91 -1
  3. package/core/util.d.ts +1 -1
  4. package/core/util.lua +6 -0
  5. package/engine/behavior.d.ts +2 -2
  6. package/engine/behavior.lua +6 -6
  7. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  8. package/engine/behaviour/unit.d.ts +5 -0
  9. package/engine/behaviour/unit.lua +20 -0
  10. package/engine/buff.d.ts +32 -11
  11. package/engine/buff.lua +142 -61
  12. package/engine/internal/ability.d.ts +3 -11
  13. package/engine/internal/ability.lua +9 -78
  14. package/engine/internal/item+owner.lua +2 -2
  15. package/engine/internal/unit/bonus.d.ts +4 -2
  16. package/engine/internal/unit/bonus.lua +6 -1
  17. package/engine/internal/unit/item.d.ts +24 -0
  18. package/engine/internal/unit/item.lua +84 -0
  19. package/engine/internal/unit/main-selected.d.ts +7 -0
  20. package/engine/internal/unit/main-selected.lua +40 -0
  21. package/engine/internal/unit+ability.lua +2 -2
  22. package/engine/internal/unit-missile-launch.lua +24 -5
  23. package/engine/internal/unit.d.ts +24 -10
  24. package/engine/internal/unit.lua +106 -60
  25. package/engine/local-client.d.ts +7 -2
  26. package/engine/local-client.lua +82 -0
  27. package/engine/object-data/entry/item-type.d.ts +12 -0
  28. package/engine/object-data/entry/item-type.lua +78 -0
  29. package/engine/object-field/ability.d.ts +17 -0
  30. package/engine/object-field/ability.lua +51 -1
  31. package/engine/unit.d.ts +2 -0
  32. package/engine/unit.lua +2 -0
  33. package/index.d.ts +1 -0
  34. package/index.lua +1 -0
  35. package/net/socket.d.ts +7 -1
  36. package/net/socket.lua +45 -4
  37. package/network.d.ts +1 -0
  38. package/network.lua +3 -2
  39. package/objutil/buff.lua +1 -1
  40. package/package.json +2 -2
  41. package/patch-lua.d.ts +0 -0
  42. package/patch-lua.lua +10 -0
  43. package/utility/linked-set.d.ts +11 -2
  44. package/utility/linked-set.lua +5 -2
  45. package/utility/types.d.ts +1 -0
@@ -25,11 +25,14 @@ export declare class Frame extends Handle<jframehandle> {
25
25
  static readonly GAME_UI: Frame;
26
26
  static readonly CONSOLE_UI: Frame;
27
27
  static readonly CONSOLE_UI_BACKDROP: Frame;
28
+ private static readonly CONSOLE_UI_BACKDROP_UI_SCALE_HELPER_CHILD;
28
29
  static readonly CONSOLE_TOP_BAR: Frame;
29
30
  static readonly CONSOLE_BOTTOM_BAR: Frame;
30
31
  static readonly WORLD: Frame;
31
32
  static readonly CHAT: Frame;
32
33
  static readonly TIME_OF_DAY_CLOCK: Frame;
34
+ private static readonly SIMPLE_FRAME_TEST_CHILD;
35
+ static get uiScale(): number;
33
36
  static get leftBorder(): Frame;
34
37
  static get rightBorder(): Frame;
35
38
  static get minX(): number;
@@ -77,6 +80,8 @@ export declare class Frame extends Handle<jframehandle> {
77
80
  get onMouseLeave(): FrameEvent;
78
81
  get onMouseUp(): FrameEvent;
79
82
  get onMouseWheel(): FrameEvent<[number]>;
83
+ get mouseEnterLocalEvent(): Event;
84
+ get mouseLeaveLocalEvent(): Event;
80
85
  get popupMenuItemChangeEvent(): FrameEvent<[
81
86
  popupMenu: Frame,
82
87
  previousValue: number,
@@ -106,6 +111,7 @@ export declare class Frame extends Handle<jframehandle> {
106
111
  enable(): void;
107
112
  addText(text: string): void;
108
113
  clearAllPoints(): void;
114
+ get children(): Frame[];
109
115
  getChild(index: number): Frame;
110
116
  getChildrenCount(): number;
111
117
  setSize(width: number, height: number): void;
@@ -62,8 +62,10 @@ local function updateBorders()
62
62
  local width4by3 = (w - h / 600 * 800) / 2
63
63
  local pxtodpi = 0.6 / h
64
64
  BlzFrameSetAbsPoint(leftBorder, FRAMEPOINT_TOPLEFT, -width4by3 * pxtodpi, 0.6)
65
+ BlzFrameSetScale(leftBorder, 1)
65
66
  BlzFrameSetSize(leftBorder, 0.001, 0.6)
66
67
  BlzFrameSetAbsPoint(rightBorder, FRAMEPOINT_TOPRIGHT, (-width4by3 + w) * pxtodpi, 0.6)
68
+ BlzFrameSetScale(rightBorder, 1)
67
69
  BlzFrameSetSize(rightBorder, 0.001, 0.6)
68
70
  end
69
71
  local worldFrame = BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0)
@@ -120,6 +122,7 @@ do
120
122
  FramePoint.BOTTOM = FRAMEPOINT_BOTTOM
121
123
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
122
124
  end
125
+ local tooltipByFrame = setmetatable({}, {__mode = "k"})
123
126
  ____exports.Frame = __TS__Class()
124
127
  local Frame = ____exports.Frame
125
128
  Frame.name = "Frame"
@@ -240,6 +243,7 @@ function Frame.prototype.setTextColor(self, color)
240
243
  end
241
244
  function Frame.prototype.setTooltip(self, tooltip)
242
245
  BlzFrameSetTooltip(self.handle, tooltip.handle)
246
+ tooltipByFrame[self] = tooltip
243
247
  end
244
248
  function Frame.prototype.setMinMaxValue(self, minValue, maxValue)
245
249
  BlzFrameSetMinMaxValue(self.handle, minValue, maxValue)
@@ -267,7 +271,16 @@ function Frame.createSimple(self, name, parent, createContext)
267
271
  ))
268
272
  end
269
273
  function Frame.create(self, name, parent, priority, createContext)
270
- return self:of(BlzCreateFrame(name, parent.handle, priority or 0, createContext or 0))
274
+ if parent == ____exports.Frame.CONSOLE_UI_BACKDROP then
275
+ local helper = ____exports.Frame.CONSOLE_UI_BACKDROP_UI_SCALE_HELPER_CHILD.handle
276
+ BlzFrameSetScale(helper, 1)
277
+ local frame = BlzCreateFrame(name, helper, priority or 0, createContext or 0)
278
+ BlzFrameSetScale(helper, ____exports.Frame.uiScale)
279
+ BlzFrameSetParent(frame, ____exports.Frame.CONSOLE_UI_BACKDROP.handle)
280
+ return self:of(frame)
281
+ else
282
+ return self:of(BlzCreateFrame(name, parent.handle, priority or 0, createContext or 0))
283
+ end
271
284
  end
272
285
  function Frame.createByType(self, typeName, name, parent, inherits, createContext)
273
286
  return self:of(BlzCreateFrameByType(
@@ -293,11 +306,20 @@ end
293
306
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
294
307
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
295
308
  Frame.CONSOLE_UI_BACKDROP = ____exports.Frame:byName("ConsoleUIBackdrop")
309
+ Frame.CONSOLE_UI_BACKDROP_UI_SCALE_HELPER_CHILD = ____exports.Frame:createByType("FRAME", "ConsoleUIBackdropUIScaleHelperChild", ____exports.Frame.CONSOLE_UI_BACKDROP)
296
310
  Frame.CONSOLE_TOP_BAR = ____exports.Frame:byName("ConsoleTopBar")
297
311
  Frame.CONSOLE_BOTTOM_BAR = ____exports.Frame:byName("ConsoleBottomBar")
298
312
  Frame.WORLD = ____exports.Frame:byOrigin(ORIGIN_FRAME_WORLD_FRAME)
299
313
  Frame.CHAT = ____exports.Frame:byOrigin(ORIGIN_FRAME_CHAT_MSG)
300
314
  Frame.TIME_OF_DAY_CLOCK = ____exports.Frame.GAME_UI:getChild(5):getChild(0)
315
+ Frame.SIMPLE_FRAME_TEST_CHILD = ____exports.Frame:createByType("SIMPLEFRAME", "SimpleFrameTestParent", ____exports.Frame.CONSOLE_UI)
316
+ __TS__ObjectDefineProperty(
317
+ Frame,
318
+ "uiScale",
319
+ {get = function(self)
320
+ return ____exports.Frame.CONSOLE_BOTTOM_BAR.width / 0.8
321
+ end}
322
+ )
301
323
  __TS__ObjectDefineProperty(
302
324
  Frame,
303
325
  "leftBorder",
@@ -599,6 +621,62 @@ __TS__SetDescriptor(
599
621
  end},
600
622
  true
601
623
  )
624
+ __TS__SetDescriptor(
625
+ Frame.prototype,
626
+ "mouseEnterLocalEvent",
627
+ {get = function(self)
628
+ local event = __TS__New(Event)
629
+ if not (tooltipByFrame[self] ~= nil) then
630
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
631
+ local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
632
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
633
+ self:setTooltip(tooltip)
634
+ end
635
+ local isMouseInside = false
636
+ Timer.onPeriod[1 / 64]:addListener(function()
637
+ local tooltip = tooltipByFrame[self]
638
+ if tooltip and tooltip.visible then
639
+ if not isMouseInside then
640
+ isMouseInside = true
641
+ Event.invoke(event)
642
+ end
643
+ else
644
+ isMouseInside = false
645
+ end
646
+ end)
647
+ rawset(self, "mouseEnterLocalEvent", event)
648
+ return event
649
+ end},
650
+ true
651
+ )
652
+ __TS__SetDescriptor(
653
+ Frame.prototype,
654
+ "mouseLeaveLocalEvent",
655
+ {get = function(self)
656
+ local event = __TS__New(Event)
657
+ if not (tooltipByFrame[self] ~= nil) then
658
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
659
+ local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
660
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
661
+ self:setTooltip(tooltip)
662
+ end
663
+ local isMouseInside = false
664
+ Timer.onPeriod[1 / 64]:addListener(function()
665
+ local tooltip = tooltipByFrame[self]
666
+ if tooltip and tooltip.visible then
667
+ isMouseInside = true
668
+ else
669
+ if isMouseInside then
670
+ isMouseInside = false
671
+ Event.invoke(event)
672
+ end
673
+ end
674
+ end)
675
+ rawset(self, "mouseLeaveLocalEvent", event)
676
+ return event
677
+ end},
678
+ true
679
+ )
602
680
  __TS__SetDescriptor(
603
681
  Frame.prototype,
604
682
  "popupMenuItemChangeEvent",
@@ -701,6 +779,18 @@ __TS__SetDescriptor(
701
779
  end},
702
780
  true
703
781
  )
782
+ __TS__SetDescriptor(
783
+ Frame.prototype,
784
+ "children",
785
+ {get = function(self)
786
+ local children = {}
787
+ for i = 0, self:getChildrenCount() - 1 do
788
+ children[i + 1] = self:getChild(i)
789
+ end
790
+ return children
791
+ end},
792
+ true
793
+ )
704
794
  __TS__ObjectDefineProperty(
705
795
  Frame,
706
796
  "onKeyPress",
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" | "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" | "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
@@ -196,6 +196,12 @@ do
196
196
  drain = 852487,
197
197
  dreadlordinferno = 852224,
198
198
  dropitem = 852001,
199
+ moveslot0 = 852002,
200
+ moveslot1 = 852003,
201
+ moveslot2 = 852004,
202
+ moveslot3 = 852005,
203
+ moveslot4 = 852006,
204
+ moveslot5 = 852007,
199
205
  drunkenhaze = 852585,
200
206
  earthquake = 852121,
201
207
  eattree = 852146,
@@ -17,9 +17,9 @@ export declare abstract class Behavior<T extends AnyNotNil, PeriodicActionParame
17
17
  protected startPeriodicAction(interval: number, ...parameters: PeriodicActionParameters): void;
18
18
  protected stopPeriodicAction(): void;
19
19
  static count<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, limit?: number): number;
20
- static getFirst<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[], Count extends [number] | []>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, ...[count]: Count): Count extends [number] ? T[] : T | undefined;
20
+ static getFirst<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[], CountOrPredicate extends [number] | [] | [(behavior: T, ...args: PredicateArgs) => boolean, ...PredicateArgs], PredicateArgs extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, ...[countOrPredicate]: CountOrPredicate): CountOrPredicate extends [number] ? T[] : T | undefined;
21
21
  static getLast<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never): T | undefined;
22
- static getAll<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never): T[];
22
+ static getAll<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[], PredicateArgs extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, predicate?: (this: void, behavior: T, ...args: PredicateArgs) => boolean, ...predicateArgs: PredicateArgs): T[];
23
23
  static forFirst<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[], ConsumerParameters extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, count: number, consumer: (this: void, behavior: T, ...parameters: ConsumerParameters) => any, ...parameters: ConsumerParameters): number;
24
24
  static forFirst<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[], K extends KeysOfType<T, (this: T, ...args: any) => any>>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, count: number, key: K, ...parameters: T[K] extends (this: T, ...args: any) => any ? Parameters<T[K]> : never): number;
25
25
  static forAll<T extends Behavior<AnyNotNil>, ConstructorParameters extends any[], ConsumerParameters extends any[]>(this: BehaviorConstructor<T, ConstructorParameters>, object: T extends Behavior<infer Object> ? Object : never, consumer: (this: void, behavior: T, ...parameters: ConsumerParameters) => unknown, ...parameters: ConsumerParameters): number;
@@ -83,11 +83,11 @@ function Behavior.count(self, object, limit)
83
83
  end
84
84
  return behaviorsCount
85
85
  end
86
- function Behavior.getFirst(self, object, count)
86
+ function Behavior.getFirst(self, object, countOrPredicate, ...)
87
87
  local behavior = firstBehaviorByObject[object]
88
- if count == nil then
88
+ if type(countOrPredicate) ~= "number" then
89
89
  while behavior ~= nil do
90
- if __TS__InstanceOf(behavior, self) then
90
+ if __TS__InstanceOf(behavior, self) and (countOrPredicate == nil or countOrPredicate(behavior, ...)) then
91
91
  return behavior
92
92
  end
93
93
  behavior = behavior[1]
@@ -96,7 +96,7 @@ function Behavior.getFirst(self, object, count)
96
96
  end
97
97
  local behaviors = {}
98
98
  local behaviorsCount = 0
99
- while behavior ~= nil and behaviorsCount < count do
99
+ while behavior ~= nil and behaviorsCount < countOrPredicate do
100
100
  if __TS__InstanceOf(behavior, self) then
101
101
  behaviorsCount = behaviorsCount + 1
102
102
  behaviors[behaviorsCount] = behavior
@@ -115,12 +115,12 @@ function Behavior.getLast(self, object)
115
115
  end
116
116
  return nil
117
117
  end
118
- function Behavior.getAll(self, object)
118
+ function Behavior.getAll(self, object, predicate, ...)
119
119
  local behaviors = {}
120
120
  local behaviorsCount = 0
121
121
  local behavior = firstBehaviorByObject[object]
122
122
  while behavior ~= nil do
123
- if __TS__InstanceOf(behavior, self) then
123
+ if __TS__InstanceOf(behavior, self) and (predicate == nil or predicate(behavior, ...)) then
124
124
  behaviorsCount = behaviorsCount + 1
125
125
  behaviors[behaviorsCount] = behavior
126
126
  end
@@ -1,11 +1,9 @@
1
1
  /** @noSelfInFile */
2
2
  import { AbilityBehavior } from "../ability";
3
3
  import { Ability } from "../../internal/ability";
4
- import { Buff, BuffConstructor, BuffParameters, BuffTypeIdSelectionPolicy } from "../../buff";
4
+ import { Buff, BuffConstructor, BuffParameters, BuffPolarityParameterType, BuffResistanceTypeParameterType, BuffTypeIdSelectionPolicy } from "../../buff";
5
5
  import { Unit } from "../../internal/unit";
6
6
  import { ApplicableBuffTypeId } from "../../object-data/entry/buff-type/applicable";
7
- import { BuffResistanceType } from "../../object-data/auxiliary/buff-resistance-type";
8
- import { BuffPolarity } from "../../object-data/auxiliary/buff-polarity";
9
7
  import { Widget } from "../../../core/types/widget";
10
8
  type BuffParametersType<T extends BuffConstructor> = BuffParameters & Omit<BuffAdditionalParametersType<T>, keyof BuffParameters>;
11
9
  type BuffAdditionalParametersType<T extends BuffConstructor> = T extends BuffConstructor<Buff<infer AdditionalParameters>> ? AdditionalParameters : never;
@@ -17,8 +15,8 @@ export declare abstract class ApplyBuffAbilityBehavior<T extends BuffConstructor
17
15
  typeIds: [ApplicableBuffTypeId, ...ApplicableBuffTypeId[]],
18
16
  typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
19
17
  ],
20
- polarity: BuffPolarity,
21
- resistanceType: BuffResistanceType,
18
+ polarity: BuffPolarityParameterType,
19
+ resistanceType: BuffResistanceTypeParameterType,
22
20
  parameters?: BuffParametersType<T>
23
21
  ]);
24
22
  }
@@ -4,6 +4,7 @@ import { Ability } from "../internal/ability";
4
4
  import { DamageEvent, DamagingEvent, Unit } from "../internal/unit";
5
5
  import "../internal/unit+ability";
6
6
  import "../internal/unit-missile-launch";
7
+ import { Item } from "../internal/item";
7
8
  export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
8
9
  export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
9
10
  constructor(unit: Unit);
@@ -16,6 +17,10 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
16
17
  onDamageReceived(source: Unit | undefined, event: DamageEvent): void;
17
18
  onAbilityGained(ability: Ability): void;
18
19
  onAbilityLost(ability: Ability): void;
20
+ onItemDropped(item: Item): void;
21
+ onItemPickedUp(item: Item): void;
22
+ onItemUsed(item: Item): void;
23
+ onItemStacked(item: Item): void;
19
24
  onKill(target: Unit): void;
20
25
  onDeath(source: Unit | undefined): void;
21
26
  }
@@ -32,6 +32,14 @@ function UnitBehavior.prototype.onAbilityGained(self, ability)
32
32
  end
33
33
  function UnitBehavior.prototype.onAbilityLost(self, ability)
34
34
  end
35
+ function UnitBehavior.prototype.onItemDropped(self, item)
36
+ end
37
+ function UnitBehavior.prototype.onItemPickedUp(self, item)
38
+ end
39
+ function UnitBehavior.prototype.onItemUsed(self, item)
40
+ end
41
+ function UnitBehavior.prototype.onItemStacked(self, item)
42
+ end
35
43
  function UnitBehavior.prototype.onKill(self, target)
36
44
  end
37
45
  function UnitBehavior.prototype.onDeath(self, source)
@@ -75,6 +83,18 @@ __TS__SetDescriptor(
75
83
  end
76
84
  ____exports.UnitBehavior:forAll(target, "onDeath", source)
77
85
  end)
86
+ Unit.itemDroppedEvent:addListener(function(unit, item)
87
+ ____exports.UnitBehavior:forAll(unit, "onItemDropped", item)
88
+ end)
89
+ Unit.itemPickedUpEvent:addListener(function(unit, item)
90
+ ____exports.UnitBehavior:forAll(unit, "onItemPickedUp", item)
91
+ end)
92
+ Unit.itemUsedEvent:addListener(function(unit, item)
93
+ ____exports.UnitBehavior:forAll(unit, "onItemUsed", item)
94
+ end)
95
+ Unit.itemStackedEvent:addListener(function(unit, item)
96
+ ____exports.UnitBehavior:forAll(unit, "onItemStacked", item)
97
+ end)
78
98
  end)(UnitBehavior)
79
99
  Unit.destroyEvent:addListener(function(unit)
80
100
  ____exports.UnitBehavior:forAll(unit, "destroy")
package/engine/buff.d.ts CHANGED
@@ -5,16 +5,19 @@ import { Ability } from "./internal/ability";
5
5
  import { AbilityTypeId } from "./object-data/entry/ability-type";
6
6
  import { BuffPolarity } from "./object-data/auxiliary/buff-polarity";
7
7
  import { BuffResistanceType } from "./object-data/auxiliary/buff-resistance-type";
8
- import { AbilityBooleanField, AbilityBooleanLevelField, AbilityCombatClassificationsLevelField, AbilityDependentValue, AbilityIntegerField, AbilityIntegerLevelField, AbilityNumberField, AbilityNumberLevelField } from "./object-field/ability";
8
+ import { AbilityBooleanField, AbilityBooleanLevelField, AbilityCombatClassificationsLevelField, AbilityDependentValue, AbilityEnumLevelField, AbilityIntegerField, AbilityIntegerLevelField, AbilityNumberField, AbilityNumberLevelField } from "./object-field/ability";
9
9
  import { CombatClassifications } from "./object-data/auxiliary/combat-classification";
10
- import { IsExactlyAny, NonEmptyArray, Prohibit } from "../utility/types";
10
+ import { IsExactlyAny, Prohibit, ReadonlyNonEmptyArray } from "../utility/types";
11
11
  import { UnitBehavior } from "./behaviour/unit";
12
12
  import type { Widget } from "../core/types/widget";
13
13
  import { Destructor } from "../destroyable";
14
14
  export type BuffConstructor<T extends Buff<any> = Buff<any>, Args extends any[] = any> = OmitConstructor<typeof Buff<any>> & (new (...args: Args) => T);
15
+ type EnumParameterValueType<T extends number> = T | AbilityEnumLevelField<T>;
15
16
  type NumberParameterValueType = number | AbilityNumberField | AbilityNumberLevelField;
16
17
  type IntegerParameterValueType = number | AbilityIntegerField | AbilityIntegerLevelField;
17
18
  type BooleanParameterValueType = boolean | AbilityBooleanField | AbilityBooleanLevelField;
19
+ export type BuffPolarityParameterType = EnumParameterValueType<BuffPolarity>;
20
+ export type BuffResistanceTypeParameterType = EnumParameterValueType<BuffResistanceType>;
18
21
  export declare class BuffUniqueGroup {
19
22
  }
20
23
  export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
@@ -51,6 +54,7 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
51
54
  armorIncreaseFactor?: NumberParameterValueType;
52
55
  attackSpeedIncreaseFactor?: NumberParameterValueType;
53
56
  movementSpeedIncreaseFactor?: NumberParameterValueType;
57
+ damageFactor?: NumberParameterValueType;
54
58
  receivedDamageFactor?: NumberParameterValueType;
55
59
  receivedMagicDamageFactor?: NumberParameterValueType;
56
60
  durationIncreaseOnAutoAttack?: NumberParameterValueType;
@@ -64,6 +68,8 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
64
68
  disablesAutoAttack?: BooleanParameterValueType;
65
69
  destroysOnDamage?: BooleanParameterValueType;
66
70
  maximumAutoAttackCount?: IntegerParameterValueType;
71
+ maximumDamageDealtEventCount?: IntegerParameterValueType;
72
+ maximumDamageReceivedEventCount?: IntegerParameterValueType;
67
73
  damageOnExpiration?: NumberParameterValueType;
68
74
  healingOnExpiration?: NumberParameterValueType;
69
75
  killsOnExpiration?: BooleanParameterValueType;
@@ -101,12 +107,16 @@ declare const enum BuffPropertyKey {
101
107
  SMALL_DAMAGE_UPON_DEATH_RANGE = 127,
102
108
  AUTO_ATTACK_COUNT = 128,
103
109
  MAXIMUM_AUTO_ATTACK_COUNT = 129,
104
- STUNS = 130,
105
- IGNORES_STUN_IMMUNITY = 131,
106
- DISABLES_AUTO_ATTACK = 132,
107
- PROVIDES_INVULNERABILITY = 133,
108
- KILLS_ON_EXPIRATION = 134,
109
- EXPLODES_ON_EXPIRATION = 135
110
+ DAMAGE_DEALT_EVENT_COUNT = 130,
111
+ MAXIMUM_DAMAGE_DEALT_EVENT_COUNT = 131,
112
+ DAMAGE_RECEIVED_EVENT_COUNT = 132,
113
+ MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT = 133,
114
+ STUNS = 134,
115
+ IGNORES_STUN_IMMUNITY = 135,
116
+ DISABLES_AUTO_ATTACK = 136,
117
+ PROVIDES_INVULNERABILITY = 137,
118
+ KILLS_ON_EXPIRATION = 138,
119
+ EXPLODES_ON_EXPIRATION = 139
110
120
  }
111
121
  export declare const enum BuffTypeIdSelectionPolicy {
112
122
  LEAST_DURATION = 0
@@ -114,11 +124,11 @@ export declare const enum BuffTypeIdSelectionPolicy {
114
124
  export type BuffAdditionalParameters = Prohibit<Record<string, any>, keyof BuffParameters>;
115
125
  export type BuffConstructorParameters<AdditionalParameters extends BuffAdditionalParameters> = [
116
126
  ...typeId: [ApplicableBuffTypeId] | [
117
- typeIds: NonEmptyArray<ApplicableBuffTypeId>,
127
+ typeIds: ReadonlyNonEmptyArray<ApplicableBuffTypeId>,
118
128
  typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
119
129
  ],
120
- polarity: BuffPolarity,
121
- resistanceType: BuffResistanceType,
130
+ polarity: BuffPolarityParameterType,
131
+ resistanceType: BuffResistanceTypeParameterType,
122
132
  ...abilityOrParameters: [
123
133
  ability: Ability,
124
134
  parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
@@ -157,6 +167,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
157
167
  private [BuffPropertyKey.SMALL_DAMAGE_UPON_DEATH_RANGE]?;
158
168
  private [BuffPropertyKey.MAXIMUM_AUTO_ATTACK_COUNT]?;
159
169
  private [BuffPropertyKey.AUTO_ATTACK_COUNT]?;
170
+ private [BuffPropertyKey.MAXIMUM_DAMAGE_DEALT_EVENT_COUNT]?;
171
+ private [BuffPropertyKey.DAMAGE_DEALT_EVENT_COUNT]?;
172
+ private [BuffPropertyKey.MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT]?;
173
+ private [BuffPropertyKey.DAMAGE_RECEIVED_EVENT_COUNT]?;
160
174
  private [BuffPropertyKey.STUNS]?;
161
175
  private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
162
176
  private [BuffPropertyKey.DISABLES_AUTO_ATTACK]?;
@@ -203,6 +217,8 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
203
217
  set damageOnExpiration(damageOnExpiration: number);
204
218
  get healingOnExpiration(): number;
205
219
  set healingOnExpiration(healingOnExpiration: number);
220
+ get damageFactor(): number;
221
+ set damageFactor(damageFactor: number);
206
222
  get receivedDamageFactor(): number;
207
223
  set receivedDamageFactor(receivedDamageFactor: number);
208
224
  get armorIncrease(): number;
@@ -219,6 +235,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
219
235
  set killsOnExpiration(killsOnExpiration: boolean);
220
236
  get explodesOnExpiration(): boolean;
221
237
  set explodesOnExpiration(killsOnExpiration: boolean);
238
+ get maximumDamageDealtEventCount(): number;
239
+ set maximumDamageDealtEventCount(maximumDamageDealtEventCount: number);
240
+ get maximumDamageReceivedEventCount(): number;
241
+ set maximumDamageReceivedEventCount(maximumDamageReceivedEventCount: number);
222
242
  get maximumAutoAttackCount(): number;
223
243
  set maximumAutoAttackCount(maximumAutoAttackCount: number);
224
244
  get durationIncreaseOnAutoAttack(): number;
@@ -238,5 +258,6 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
238
258
  onExpiration(): void;
239
259
  onDeath(source: Unit | undefined): void;
240
260
  onDamageDealt(target: Unit, event: DamageEvent): void;
261
+ onDamageReceived(source: Unit | undefined, event: DamageEvent): void;
241
262
  }
242
263
  export {};