warscript 0.0.1-dev.fd21394 → 0.0.1-dev.fe0aeea

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 (157) hide show
  1. package/binaryreader.d.ts +1 -0
  2. package/binaryreader.lua +3 -0
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +8 -0
  8. package/core/types/frame.lua +93 -1
  9. package/core/types/sound.d.ts +17 -24
  10. package/core/types/sound.lua +94 -24
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +18 -1
  13. package/engine/behavior.d.ts +2 -2
  14. package/engine/behavior.lua +6 -6
  15. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  16. package/engine/behaviour/ability/always-enabled.lua +31 -0
  17. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  18. package/engine/behaviour/ability/apply-buff.lua +32 -0
  19. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  20. package/engine/behaviour/ability/damage.d.ts +36 -11
  21. package/engine/behaviour/ability/damage.lua +90 -32
  22. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  23. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  24. package/engine/behaviour/ability/heal.d.ts +33 -6
  25. package/engine/behaviour/ability/heal.lua +89 -10
  26. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  27. package/engine/behaviour/ability/instant-impact.lua +4 -19
  28. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  29. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  30. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  31. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  32. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  33. package/engine/behaviour/ability/restore-mana.lua +29 -0
  34. package/engine/behaviour/ability.d.ts +20 -4
  35. package/engine/behaviour/ability.lua +111 -38
  36. package/engine/behaviour/unit.d.ts +7 -0
  37. package/engine/behaviour/unit.lua +20 -0
  38. package/engine/buff.d.ts +101 -39
  39. package/engine/buff.lua +458 -203
  40. package/engine/game-map.d.ts +7 -0
  41. package/engine/game-map.lua +32 -0
  42. package/engine/internal/ability.d.ts +16 -13
  43. package/engine/internal/ability.lua +80 -76
  44. package/engine/internal/item/ability.lua +106 -0
  45. package/engine/internal/item+owner.lua +2 -2
  46. package/engine/internal/item.d.ts +2 -2
  47. package/engine/internal/item.lua +56 -25
  48. package/engine/internal/mechanics/ability-duration.lua +1 -1
  49. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  50. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  51. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  52. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  53. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  54. package/engine/internal/object-data/evasion-probability.lua +16 -0
  55. package/engine/internal/unit/ability.d.ts +10 -1
  56. package/engine/internal/unit/ability.lua +36 -14
  57. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  58. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  59. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  60. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  61. package/engine/internal/unit/bonus.d.ts +6 -2
  62. package/engine/internal/unit/bonus.lua +23 -1
  63. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  64. package/engine/internal/unit/ignore-events-items.lua +5 -0
  65. package/engine/internal/unit/item.d.ts +24 -0
  66. package/engine/internal/unit/item.lua +78 -0
  67. package/engine/internal/unit/main-selected.d.ts +13 -0
  68. package/engine/internal/unit/main-selected.lua +51 -0
  69. package/engine/internal/unit+ability.lua +2 -2
  70. package/engine/internal/unit+transport.lua +4 -10
  71. package/engine/internal/unit-missile-launch.lua +24 -5
  72. package/engine/internal/unit.d.ts +31 -10
  73. package/engine/internal/unit.lua +170 -83
  74. package/engine/internal/utility.lua +12 -0
  75. package/engine/lightning.d.ts +12 -5
  76. package/engine/lightning.lua +48 -14
  77. package/engine/local-client.d.ts +7 -2
  78. package/engine/local-client.lua +82 -0
  79. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  80. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  81. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  82. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  83. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  84. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  85. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  86. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  87. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  88. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  89. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  90. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  91. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  92. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  93. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  94. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  95. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  96. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  97. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  98. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  99. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  100. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  101. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  102. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  103. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  104. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  105. package/engine/object-data/entry/ability-type/web.lua +52 -0
  106. package/engine/object-data/entry/ability-type.d.ts +19 -17
  107. package/engine/object-data/entry/ability-type.lua +82 -33
  108. package/engine/object-data/entry/buff-type/applicable.lua +13 -37
  109. package/engine/object-data/entry/buff-type.d.ts +1 -1
  110. package/engine/object-data/entry/buff-type.lua +2 -2
  111. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  112. package/engine/object-data/entry/item-type.d.ts +15 -1
  113. package/engine/object-data/entry/item-type.lua +93 -2
  114. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  115. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  116. package/engine/object-data/entry/sound-preset.lua +140 -0
  117. package/engine/object-data/entry/unit-type.d.ts +8 -1
  118. package/engine/object-data/entry/unit-type.lua +61 -8
  119. package/engine/object-data/entry/upgrade.d.ts +1 -1
  120. package/engine/object-data/entry/upgrade.lua +4 -4
  121. package/engine/object-data/entry.d.ts +16 -14
  122. package/engine/object-data/entry.lua +60 -32
  123. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  124. package/engine/object-field/ability.d.ts +26 -3
  125. package/engine/object-field/ability.lua +54 -1
  126. package/engine/object-field.d.ts +2 -2
  127. package/engine/object-field.lua +4 -0
  128. package/engine/standard/entries/sound-preset.d.ts +10 -0
  129. package/engine/standard/entries/sound-preset.lua +10 -0
  130. package/engine/standard/fields/ability.d.ts +2 -0
  131. package/engine/standard/fields/ability.lua +2 -0
  132. package/engine/unit.d.ts +3 -0
  133. package/engine/unit.lua +3 -0
  134. package/index.d.ts +1 -0
  135. package/index.lua +1 -0
  136. package/lualib_bundle.lua +7 -2
  137. package/net/socket.d.ts +7 -1
  138. package/net/socket.lua +45 -4
  139. package/network.d.ts +1 -0
  140. package/network.lua +3 -2
  141. package/objutil/buff.lua +1 -1
  142. package/objutil/unit.lua +8 -0
  143. package/package.json +2 -2
  144. package/patch-lua.d.ts +0 -0
  145. package/patch-lua.lua +10 -0
  146. package/property.d.ts +55 -0
  147. package/property.lua +374 -0
  148. package/utility/arrays.d.ts +8 -1
  149. package/utility/arrays.lua +34 -3
  150. package/utility/lazy.d.ts +2 -0
  151. package/utility/lazy.lua +14 -0
  152. package/utility/linked-set.d.ts +11 -2
  153. package/utility/linked-set.lua +5 -2
  154. package/utility/reflection.lua +11 -7
  155. package/utility/types.d.ts +1 -0
  156. package/core/mapbounds.d.ts +0 -8
  157. package/core/mapbounds.lua +0 -12
@@ -5,15 +5,18 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
5
  local ____exports = {}
6
6
  local ____handle = require("core.types.handle")
7
7
  local Handle = ____handle.Handle
8
+ local ____sound_2Dpreset = require("engine.object-data.entry.sound-preset")
9
+ local SoundPreset = ____sound_2Dpreset.SoundPreset
10
+ local ____random = require("engine.random")
11
+ local randomInteger = ____random.randomInteger
8
12
  local createSound = CreateSound
13
+ local createSoundFromLabel = CreateSoundFromLabel
9
14
  local setSoundPitch = SetSoundPitch
10
15
  local setSoundChannel = SetSoundChannel
11
16
  local setSoundPosition = SetSoundPosition
12
17
  local setSoundVolume = SetSoundVolume
13
18
  local setSoundDistances = SetSoundDistances
14
19
  local setSoundDistanceCutoff = SetSoundDistanceCutoff
15
- local setSoundConeAngles = SetSoundConeAngles
16
- local setSoundConeOrientation = SetSoundConeOrientation
17
20
  local startSound = StartSound
18
21
  local setSoundPlayPosition = SetSoundPlayPosition
19
22
  local stopSound = StopSound
@@ -50,29 +53,21 @@ ____exports.SoundChannel.Birth = 13
50
53
  ____exports.SoundChannel[____exports.SoundChannel.Birth] = "Birth"
51
54
  ____exports.SoundChannel.Fire = 14
52
55
  ____exports.SoundChannel[____exports.SoundChannel.Fire] = "Fire"
53
- ____exports.SoundEax = SoundEax or ({})
54
- ____exports.SoundEax.Default = "DefaultEAXON"
55
- ____exports.SoundEax.Acknowledgements = "HeroAcksEAX"
56
- ____exports.SoundEax.Environment = "DoodadsEAX"
57
- ____exports.SoundEax.Drums = "KotoDrumsEAX"
58
- ____exports.SoundEax.Attacks = "CombatSoundsEAX"
59
- ____exports.SoundEax.Abilities = "SpellsEAX"
60
- ____exports.SoundEax.Missiles = "MissilesEAX"
61
- ____exports.SoundPreset = {}
62
- local SoundPreset = ____exports.SoundPreset
56
+ ____exports.SoundSettings = {}
57
+ local SoundSettings = ____exports.SoundSettings
63
58
  do
64
- SoundPreset.UI = {channel = ____exports.SoundChannel.UI, eax = ____exports.SoundEax.Default, fadeInRate = 12700, fadeOutRate = 12700}
65
- SoundPreset.Music = {
59
+ SoundSettings.UI = {channel = ____exports.SoundChannel.UI, eax = "DefaultEAXON", fadeInRate = 12700, fadeOutRate = 12700}
60
+ SoundSettings.Music = {
66
61
  channel = ____exports.SoundChannel.Music,
67
- eax = ____exports.SoundEax.Default,
62
+ eax = "DefaultEAXON",
68
63
  fadeInRate = 12700,
69
64
  fadeOutRate = 12700,
70
65
  looping = true
71
66
  }
72
- SoundPreset.Attack = {channel = ____exports.SoundChannel.Combat, eax = ____exports.SoundEax.Attacks, fadeInRate = 10, fadeOutRate = 10}
73
- SoundPreset.Ability = {
67
+ SoundSettings.Attack = {channel = ____exports.SoundChannel.Combat, eax = "CombatSoundsEAX", fadeInRate = 10, fadeOutRate = 10}
68
+ SoundSettings.Ability = {
74
69
  channel = ____exports.SoundChannel.Animations,
75
- eax = ____exports.SoundEax.Abilities,
70
+ eax = "SpellsEAX",
76
71
  stopWhenOutOfRange = true,
77
72
  volume = 127,
78
73
  fadeInRate = 1,
@@ -82,9 +77,9 @@ do
82
77
  maxDistance = 3500,
83
78
  distanceCutoff = 3000
84
79
  }
85
- SoundPreset.AbilityLooping = {
80
+ SoundSettings.AbilityLooping = {
86
81
  channel = ____exports.SoundChannel.Birth,
87
- eax = ____exports.SoundEax.Abilities,
82
+ eax = "SpellsEAX",
88
83
  looping = true,
89
84
  stopWhenOutOfRange = true,
90
85
  volume = 127,
@@ -95,9 +90,9 @@ do
95
90
  maxDistance = 3000,
96
91
  distanceCutoff = 3000
97
92
  }
98
- SoundPreset.Missile = {
93
+ SoundSettings.Missile = {
99
94
  channel = ____exports.SoundChannel.Animations,
100
- eax = ____exports.SoundEax.Missiles,
95
+ eax = "MissilesEAX",
101
96
  stopWhenOutOfRange = true,
102
97
  volume = 127,
103
98
  fadeInRate = 1,
@@ -108,6 +103,24 @@ do
108
103
  distanceCutoff = 3000
109
104
  }
110
105
  end
106
+ local customSoundPresetDataByLabel = postcompile(function()
107
+ local customSoundPresetDataByLabel = {}
108
+ for ____, soundPreset in ipairs(SoundPreset:getAll()) do
109
+ if soundPreset.isCustom then
110
+ customSoundPresetDataByLabel[soundPreset.id] = {
111
+ filePaths = soundPreset.filePaths,
112
+ volume = soundPreset.volume,
113
+ pitch = soundPreset.pitch,
114
+ channel = soundPreset.channel,
115
+ minimumDistance = soundPreset.minimumDistance,
116
+ maximumDistance = soundPreset.maximumDistance,
117
+ distanceCutoff = soundPreset.distanceCutoff,
118
+ eax = soundPreset.eax
119
+ }
120
+ end
121
+ end
122
+ return customSoundPresetDataByLabel
123
+ end)
111
124
  local function createPresetSound(fileName, preset)
112
125
  local ____fileName_1 = fileName
113
126
  local ____preset_looping_0 = preset.looping
@@ -121,7 +134,7 @@ local function createPresetSound(fileName, preset)
121
134
  true,
122
135
  preset.fadeInRate or 12700,
123
136
  preset.fadeOutRate or 12700,
124
- preset.eax or ____exports.SoundEax.Default
137
+ preset.eax or "DefaultEAXON"
125
138
  )
126
139
  setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
127
140
  setSoundVolume(sound, preset.volume or 127)
@@ -144,7 +157,7 @@ local function createPreset3DSound(fileName, preset)
144
157
  ____preset_stopWhenOutOfRange_3,
145
158
  preset.fadeInRate or 12700,
146
159
  preset.fadeOutRate or 12700,
147
- preset.eax or ____exports.SoundEax.Default
160
+ preset.eax or "DefaultEAXON"
148
161
  )
149
162
  setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
150
163
  setSoundVolume(sound, preset.volume or 127)
@@ -153,6 +166,53 @@ local function createPreset3DSound(fileName, preset)
153
166
  setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
154
167
  return sound
155
168
  end
169
+ local function createPreset3DSoundFromLabel(label, preset)
170
+ local customSoundPresetData = customSoundPresetDataByLabel[label]
171
+ if customSoundPresetData == nil then
172
+ local ____label_7 = label
173
+ local ____preset_looping_5 = preset.looping
174
+ if ____preset_looping_5 == nil then
175
+ ____preset_looping_5 = false
176
+ end
177
+ local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
178
+ if ____preset_stopWhenOutOfRange_6 == nil then
179
+ ____preset_stopWhenOutOfRange_6 = true
180
+ end
181
+ return createSoundFromLabel(
182
+ ____label_7,
183
+ ____preset_looping_5,
184
+ true,
185
+ ____preset_stopWhenOutOfRange_6,
186
+ preset.fadeInRate or 12700,
187
+ preset.fadeOutRate or 12700
188
+ )
189
+ else
190
+ local ____customSoundPresetData_filePaths_index_10 = customSoundPresetData.filePaths[randomInteger(#customSoundPresetData.filePaths - 1) + 1]
191
+ local ____preset_looping_8 = preset.looping
192
+ if ____preset_looping_8 == nil then
193
+ ____preset_looping_8 = false
194
+ end
195
+ local ____preset_stopWhenOutOfRange_9 = preset.stopWhenOutOfRange
196
+ if ____preset_stopWhenOutOfRange_9 == nil then
197
+ ____preset_stopWhenOutOfRange_9 = true
198
+ end
199
+ local sound = createSound(
200
+ ____customSoundPresetData_filePaths_index_10,
201
+ ____preset_looping_8,
202
+ true,
203
+ ____preset_stopWhenOutOfRange_9,
204
+ preset.fadeInRate or 12700,
205
+ preset.fadeOutRate or 12700,
206
+ customSoundPresetData.eax
207
+ )
208
+ setSoundChannel(sound, customSoundPresetData.channel)
209
+ setSoundVolume(sound, customSoundPresetData.volume)
210
+ setSoundPitch(sound, customSoundPresetData.pitch)
211
+ setSoundDistances(sound, customSoundPresetData.minimumDistance, customSoundPresetData.maximumDistance)
212
+ setSoundDistanceCutoff(sound, customSoundPresetData.distanceCutoff)
213
+ return sound
214
+ end
215
+ end
156
216
  ____exports.Sound = __TS__Class()
157
217
  local Sound = ____exports.Sound
158
218
  Sound.name = "Sound"
@@ -225,6 +285,16 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
225
285
  startSound(sound)
226
286
  killSoundWhenDone(sound)
227
287
  end
288
+ function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
289
+ local sound = createPreset3DSoundFromLabel(label, preset)
290
+ if type(unitOrX) ~= "number" then
291
+ attachSoundToUnit(sound, unitOrX.handle)
292
+ else
293
+ setSoundPosition(sound, unitOrX, y or 0, z or 0)
294
+ end
295
+ startSound(sound)
296
+ killSoundWhenDone(sound)
297
+ end
228
298
  function Sound3D.createAtPosition(self, fileName, preset, x, y, z)
229
299
  if x == nil then
230
300
  x = 0
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" | "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
@@ -1,3 +1,5 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__StringPadEnd = ____lualib.__TS__StringPadEnd
1
3
  local ____exports = {}
2
4
  local ns = {}
3
5
  do
@@ -14,7 +16,10 @@ do
14
16
  if type(id) == "number" then
15
17
  return id
16
18
  else
17
- local numid = string.unpack(">I4", id)
19
+ local numid = string.unpack(
20
+ ">I4",
21
+ __TS__StringPadEnd(id, 4, "\0")
22
+ )
18
23
  return numid
19
24
  end
20
25
  end
@@ -196,6 +201,18 @@ do
196
201
  drain = 852487,
197
202
  dreadlordinferno = 852224,
198
203
  dropitem = 852001,
204
+ moveslot0 = 852002,
205
+ moveslot1 = 852003,
206
+ moveslot2 = 852004,
207
+ moveslot3 = 852005,
208
+ moveslot4 = 852006,
209
+ moveslot5 = 852007,
210
+ useslot0 = 852008,
211
+ useslot1 = 852009,
212
+ useslot2 = 852010,
213
+ useslot3 = 852011,
214
+ useslot4 = 852012,
215
+ useslot5 = 852013,
199
216
  drunkenhaze = 852585,
200
217
  earthquake = 852121,
201
218
  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
@@ -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
@@ -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
  }
@@ -35,4 +33,9 @@ export declare class ApplyBuffTargetAreaAbilityBehavior<T extends BuffConstructo
35
33
  onPointTargetImpact(caster: Unit, x: number, y: number): void;
36
34
  onWidgetTargetImpact(caster: Unit, target: Widget): void;
37
35
  }
36
+ export declare class ApplyBuffChannelingTargetAbilityBehavior<T extends BuffConstructor = typeof Buff> extends ApplyBuffAbilityBehavior<T> {
37
+ private buff?;
38
+ onUnitTargetChannelingStart(caster: Unit, target: Unit): void;
39
+ onStop(): void;
40
+ }
38
41
  export {};
@@ -123,4 +123,36 @@ function ApplyBuffTargetAreaAbilityBehavior.prototype.onWidgetTargetImpact(self,
123
123
  self.applyBuff(unit)
124
124
  end
125
125
  end
126
+ local behaviorByBuff = {}
127
+ ____exports.ApplyBuffChannelingTargetAbilityBehavior = __TS__Class()
128
+ local ApplyBuffChannelingTargetAbilityBehavior = ____exports.ApplyBuffChannelingTargetAbilityBehavior
129
+ ApplyBuffChannelingTargetAbilityBehavior.name = "ApplyBuffChannelingTargetAbilityBehavior"
130
+ __TS__ClassExtends(ApplyBuffChannelingTargetAbilityBehavior, ____exports.ApplyBuffAbilityBehavior)
131
+ function ApplyBuffChannelingTargetAbilityBehavior.prototype.onUnitTargetChannelingStart(self, caster, target)
132
+ local previousBuff = self.buff
133
+ if previousBuff ~= nil then
134
+ behaviorByBuff[previousBuff] = nil
135
+ previousBuff:destroy()
136
+ end
137
+ local buff = self.applyBuff(target)
138
+ if buff ~= nil then
139
+ behaviorByBuff[buff] = self
140
+ end
141
+ self.buff = buff
142
+ end
143
+ function ApplyBuffChannelingTargetAbilityBehavior.prototype.onStop(self)
144
+ local buff = self.buff
145
+ if buff ~= nil then
146
+ behaviorByBuff[buff] = nil
147
+ buff:destroy()
148
+ self.buff = nil
149
+ end
150
+ end
151
+ Buff.destroyEvent:addListener(function(buff)
152
+ local behavior = behaviorByBuff[buff]
153
+ if behavior ~= nil then
154
+ behaviorByBuff[buff] = nil
155
+ behavior.ability:interruptCast()
156
+ end
157
+ end)
126
158
  return ____exports
@@ -41,6 +41,7 @@ function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitGainAbility(self, unit
41
41
  ____opt_0:destroy()
42
42
  end
43
43
  self.unitBehavior = __TS__New(self.unitBehaviorConstructor, unit)
44
+ self.unitBehavior.sourceAbilityBehavior = self
44
45
  self:update()
45
46
  end
46
47
  function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitLoseAbility(self)
@@ -4,22 +4,47 @@ import { Ability } from "../../internal/ability";
4
4
  import { Unit } from "../../internal/unit";
5
5
  import { AbilityDependentValue } from "../../object-field/ability";
6
6
  import { Widget } from "../../../core/types/widget";
7
- export declare class DamageSelfAbilityBehavior extends AbilityBehavior {
8
- private readonly damage;
9
- constructor(ability: Ability, damage: AbilityDependentValue<number>);
7
+ import { AttackType, DamageType, WeaponType } from "../../internal/unit+damage";
8
+ import { CombatClassifications } from "../../object-data/auxiliary/combat-classification";
9
+ export type DamageAbilityBehaviorParameters = {
10
+ damagePerStrength?: AbilityDependentValue<number>;
11
+ damagePerAgility?: AbilityDependentValue<number>;
12
+ damagePerIntelligence?: AbilityDependentValue<number>;
13
+ attackType?: AttackType;
14
+ damageType?: DamageType;
15
+ weaponType?: WeaponType;
16
+ };
17
+ export type DamageAreaAbilityBehaviorParameters = DamageAbilityBehaviorParameters & {
18
+ maximumDamage?: AbilityDependentValue<number>;
19
+ areaOfEffect?: AbilityDependentValue<number>;
20
+ allowedTargetCombatClassifications?: AbilityDependentValue<CombatClassifications>;
21
+ };
22
+ declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehaviorParameters = DamageAbilityBehaviorParameters> extends AbilityBehavior {
23
+ protected readonly damage: AbilityDependentValue<number>;
24
+ protected readonly parameters?: T | undefined;
25
+ protected constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: T | undefined);
26
+ protected calculateDamage(caster: Unit): number;
27
+ }
28
+ export declare class DamageSelfAbilityBehavior extends DamageAbilityBehavior {
29
+ constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAbilityBehaviorParameters);
10
30
  onImpact(caster: Unit): void;
11
31
  }
12
- export declare class DamageTargetAbilityBehavior extends AbilityBehavior {
13
- private readonly damage;
14
- constructor(ability: Ability, damage: AbilityDependentValue<number>);
32
+ export declare class DamageTargetAbilityBehavior extends DamageAbilityBehavior {
33
+ constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAbilityBehaviorParameters);
15
34
  onWidgetTargetImpact(caster: Unit, target: Widget): void;
16
35
  }
17
- export declare class DamageTargetAreaAbilityBehavior extends AbilityBehavior {
18
- private readonly damage;
19
- private readonly maximumDamage?;
20
- constructor(ability: Ability, damage: AbilityDependentValue<number>, maximumDamage?: AbilityDependentValue<number> | undefined);
36
+ declare abstract class DamageAreaAbilityBehavior extends DamageAbilityBehavior<DamageAreaAbilityBehaviorParameters> {
37
+ protected constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAreaAbilityBehaviorParameters);
38
+ protected damageArea(caster: Unit, x: number, y: number): void;
39
+ }
40
+ export declare class DamageSelfAreaAbilityBehavior extends DamageAreaAbilityBehavior {
41
+ constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAreaAbilityBehaviorParameters);
42
+ onImpact(caster: Unit): void;
43
+ }
44
+ export declare class DamageTargetAreaAbilityBehavior extends DamageAreaAbilityBehavior {
45
+ constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAreaAbilityBehaviorParameters);
21
46
  onNoTargetImpact(caster: Unit): void;
22
47
  onWidgetTargetImpact(caster: Unit, target: Widget): void;
23
48
  onPointTargetImpact(caster: Unit, x: number, y: number): void;
24
- private damageArea;
25
49
  }
50
+ export {};