warscript 0.0.1-dev.c677d41 → 0.0.1-dev.c762beb

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 (52) hide show
  1. package/core/types/handle.lua +1 -1
  2. package/core/types/sound.lua +1 -1
  3. package/engine/behaviour/ability/damage.d.ts +3 -0
  4. package/engine/behaviour/ability/damage.lua +8 -2
  5. package/engine/behaviour/ability.d.ts +9 -5
  6. package/engine/behaviour/ability.lua +29 -0
  7. package/engine/buff.d.ts +49 -17
  8. package/engine/buff.lua +241 -118
  9. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  10. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  11. package/engine/internal/object-data/health-bonus.lua +16 -0
  12. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  13. package/engine/internal/object-data/mana-bonus.lua +16 -0
  14. package/engine/internal/unit/bonus.d.ts +4 -0
  15. package/engine/internal/unit/bonus.lua +23 -3
  16. package/engine/internal/unit/item.lua +1 -1
  17. package/engine/internal/unit/range-event.d.ts +12 -0
  18. package/engine/internal/unit/range-event.lua +90 -0
  19. package/engine/internal/unit+bonus.lua +3 -3
  20. package/engine/internal/unit.d.ts +1 -1
  21. package/engine/internal/unit.lua +9 -30
  22. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  23. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  24. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  25. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  26. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  27. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  28. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  29. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  30. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  31. package/engine/object-data/entry/ability-type.d.ts +2 -0
  32. package/engine/object-data/entry/ability-type.lua +84 -4
  33. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  34. package/engine/object-field/ability.lua +2 -2
  35. package/engine/object-field.d.ts +1 -1
  36. package/engine/object-field.lua +9 -7
  37. package/engine/random.d.ts +1 -0
  38. package/engine/random.lua +8 -0
  39. package/engine/unit.d.ts +1 -0
  40. package/engine/unit.lua +1 -0
  41. package/lualib_bundle.lua +118 -47
  42. package/objutil/object.lua +1 -1
  43. package/operation.lua +23 -17
  44. package/package.json +4 -4
  45. package/utility/linked-map.d.ts +9 -1
  46. package/utility/linked-map.lua +35 -0
  47. package/utility/linked-set.d.ts +2 -1
  48. package/utility/linked-set.lua +17 -0
  49. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  50. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  51. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  52. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -34,7 +34,7 @@ function Handle.prototype.____constructor(self, handle)
34
34
  self.handle = handle
35
35
  end
36
36
  function Handle.of(self, handle, ...)
37
- return handle and (getHandleId(handle) ~= 0 or nil) and (self.memoized[getHandleId(handle)] or self:createInternal(handle, ...))
37
+ return handle and (self.memoized[getHandleId(handle)] or self:createInternal(handle, ...))
38
38
  end
39
39
  function Handle.createInternal(self, handle, ...)
40
40
  local object = __TS__New(self, handle, ...)
@@ -22,7 +22,7 @@ local setSoundPlayPosition = SetSoundPlayPosition
22
22
  local stopSound = StopSound
23
23
  local attachSoundToUnit = AttachSoundToUnit
24
24
  local killSoundWhenDone = KillSoundWhenDone
25
- ____exports.SoundChannel = SoundChannel or ({})
25
+ ____exports.SoundChannel = ____exports.SoundChannel or ({})
26
26
  ____exports.SoundChannel.General = 0
27
27
  ____exports.SoundChannel[____exports.SoundChannel.General] = "General"
28
28
  ____exports.SoundChannel.UnitSelection = 1
@@ -25,8 +25,11 @@ export declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehav
25
25
  protected readonly damage: AbilityDependentValue<number>;
26
26
  protected readonly parameters?: T | undefined;
27
27
  protected constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: T | undefined);
28
+ protected precalculatedDamage?: number;
28
29
  protected calculateDamage(caster: Unit): number;
29
30
  protected damageTarget(caster: Unit, target: Widget, damage?: number): void;
31
+ onChannelingStart(caster: Unit): void;
32
+ onStop(): void;
30
33
  }
31
34
  export declare class DamageSelfAbilityBehavior extends DamageAbilityBehavior {
32
35
  constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAbilityBehaviorParameters);
@@ -39,7 +39,7 @@ function DamageAbilityBehavior.prototype.damageTarget(self, caster, target, dama
39
39
  local parameters = self.parameters
40
40
  caster:damageTarget(
41
41
  target,
42
- damage or self:calculateDamage(caster),
42
+ damage or self.precalculatedDamage or self:calculateDamage(caster),
43
43
  nil,
44
44
  nil,
45
45
  self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
@@ -48,6 +48,12 @@ function DamageAbilityBehavior.prototype.damageTarget(self, caster, target, dama
48
48
  self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
49
49
  )
50
50
  end
51
+ function DamageAbilityBehavior.prototype.onChannelingStart(self, caster)
52
+ self.precalculatedDamage = self:calculateDamage(caster)
53
+ end
54
+ function DamageAbilityBehavior.prototype.onStop(self)
55
+ self.precalculatedDamage = nil
56
+ end
51
57
  ____exports.DamageSelfAbilityBehavior = __TS__Class()
52
58
  local DamageSelfAbilityBehavior = ____exports.DamageSelfAbilityBehavior
53
59
  DamageSelfAbilityBehavior.name = "DamageSelfAbilityBehavior"
@@ -83,7 +89,7 @@ function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
83
89
  y,
84
90
  self:resolveCurrentAbilityDependentValue(parameters and parameters.areaOfEffect or AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD)
85
91
  )
86
- local damage = self:calculateDamage(caster)
92
+ local damage = self.precalculatedDamage or self:calculateDamage(caster)
87
93
  local maximumDamage = self:resolveCurrentAbilityDependentValue(parameters and parameters.maximumDamage or 0)
88
94
  if maximumDamage ~= 0 and damage > maximumDamage then
89
95
  damage = maximumDamage / #targets
@@ -26,16 +26,20 @@ export declare abstract class AbilityBehavior<Parameters extends {
26
26
  get unit(): Unit | undefined;
27
27
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
28
28
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
29
- protected flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
30
- protected flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
31
- protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
- protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
33
- protected flashSpecialEffect(...args: [
29
+ flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
30
+ flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
31
+ flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
+ flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
33
+ flashSpecialEffect(...args: [
34
34
  ...pointOrWidget: [x: number, y: number] | [widget: Widget],
35
35
  ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]
36
36
  ]): void;
37
37
  private static MissileLaunchConfig;
38
38
  private get missileLaunchConfig();
39
+ protected launchMissile(source: Unit, ...args: [
40
+ ...pointOrWidget: [x: number, y: number] | [widget: Unit /** TODO: support Widget */],
41
+ ...parameters: NonNullable<Parameters["missileParameters"]>
42
+ ]): void;
39
43
  protected onCreate(): void;
40
44
  onValueChange(_value: ReadonlySubscribableAbilityDependentValue<string | number | boolean>): void;
41
45
  onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
@@ -30,7 +30,14 @@ local ____ability = require("engine.object-field.ability")
30
30
  local AbilityField = ____ability.AbilityField
31
31
  local AbilityLevelField = ____ability.AbilityLevelField
32
32
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
33
+ local ____missile = require("core.types.missile")
34
+ local Missile = ____missile.Missile
33
35
  local createBehaviorFunctionsByAbilityTypeId = {}
36
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
37
+ if success then
38
+ abilityBehavior:onMissileArrival(...)
39
+ end
40
+ end
34
41
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
35
42
  local function createUnitEventListener(key)
36
43
  return function(unit, ability, ...)
@@ -160,6 +167,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
160
167
  )
161
168
  end
162
169
  end
170
+ function AbilityBehavior.prototype.launchMissile(self, source, xOrWidget, yOrParameter, ...)
171
+ if type(xOrWidget) ~= "number" then
172
+ Missile:launch(
173
+ self.missileLaunchConfig,
174
+ source,
175
+ xOrWidget,
176
+ invokeOnMissileArrival,
177
+ self,
178
+ yOrParameter,
179
+ ...
180
+ )
181
+ else
182
+ Missile:launch(
183
+ self.missileLaunchConfig,
184
+ source,
185
+ vec2(xOrWidget, yOrParameter),
186
+ invokeOnMissileArrival,
187
+ self,
188
+ ...
189
+ )
190
+ end
191
+ end
163
192
  function AbilityBehavior.prototype.onCreate(self)
164
193
  end
165
194
  function AbilityBehavior.prototype.onValueChange(self, _value)
package/engine/buff.d.ts CHANGED
@@ -56,7 +56,8 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
56
56
  damageIncrease?: NumberParameterValueType;
57
57
  damageIncreaseFactor?: NumberParameterValueType;
58
58
  armorIncrease?: NumberParameterValueType;
59
- armorIncreaseFactor?: NumberParameterValueType;
59
+ maxHealthIncrease?: NumberParameterValueType;
60
+ maxManaIncrease?: NumberParameterValueType;
60
61
  attackSpeedIncreaseFactor?: NumberParameterValueType;
61
62
  movementSpeedIncreaseFactor?: NumberParameterValueType;
62
63
  manaRegenerationRateIncreaseFactor?: NumberParameterValueType;
@@ -79,6 +80,9 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
79
80
  maximumAutoAttackCount?: IntegerParameterValueType;
80
81
  maximumDamageDealtEventCount?: IntegerParameterValueType;
81
82
  maximumDamageReceivedEventCount?: IntegerParameterValueType;
83
+ absorbedDamageFactor?: NumberParameterValueType;
84
+ maximumDamageAbsorbed?: NumberParameterValueType;
85
+ destroysOnMaximumDamageAbsorbed?: BooleanParameterValueType;
82
86
  damageOnExpiration?: NumberParameterValueType;
83
87
  healingOnExpiration?: NumberParameterValueType;
84
88
  killsOnExpiration?: BooleanParameterValueType;
@@ -122,22 +126,26 @@ declare const enum BuffPropertyKey {
122
126
  MAXIMUM_DAMAGE_DEALT_EVENT_COUNT = 132,
123
127
  DAMAGE_RECEIVED_EVENT_COUNT = 133,
124
128
  MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT = 134,
125
- TURNS_INTO_GHOST = 135,
126
- STUNS = 136,
127
- IGNORES_STUN_IMMUNITY = 137,
128
- DISABLES_AUTO_ATTACK = 138,
129
- PROVIDES_INVULNERABILITY = 139,
130
- KILLS_ON_EXPIRATION = 140,
131
- EXPLODES_ON_EXPIRATION = 141,
132
- MISS_PROBABILITY = 142,
133
- ABILITY_COOLDOWN_FACTOR = 143,
134
- ABILITY_COOLDOWN_MODIFIER = 144
129
+ ABSORBED_DAMAGE_FACTOR = 135,
130
+ MAXIMUM_DAMAGE_ABSORBED = 136,
131
+ DAMAGE_ABSORBED = 137,
132
+ DESTROYS_ON_MAXIMUM_DAMAGE_ABSORBED = 138,
133
+ TURNS_INTO_GHOST = 139,
134
+ STUNS = 140,
135
+ IGNORES_STUN_IMMUNITY = 141,
136
+ DISABLES_AUTO_ATTACK = 142,
137
+ PROVIDES_INVULNERABILITY = 143,
138
+ KILLS_ON_EXPIRATION = 144,
139
+ EXPLODES_ON_EXPIRATION = 145,
140
+ MISS_PROBABILITY = 146,
141
+ ABILITY_COOLDOWN_FACTOR = 147,
142
+ ABILITY_COOLDOWN_MODIFIER = 148
135
143
  }
136
144
  export declare const enum BuffTypeIdSelectionPolicy {
137
145
  LEAST_DURATION = 0
138
146
  }
139
147
  export type BuffAdditionalParameters = Prohibit<Record<string, any>, keyof BuffParameters>;
140
- export type BuffConstructorParameters<AdditionalParameters extends BuffAdditionalParameters> = [
148
+ export type BuffConstructorParameters<T extends Buff<BuffAdditionalParameters>> = T extends Buff<infer AdditionalParameters> ? [
141
149
  ...typeId: [ApplicableBuffTypeId] | [
142
150
  typeIds: ReadonlyNonEmptyArray<ApplicableBuffTypeId>,
143
151
  typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
@@ -147,8 +155,10 @@ export type BuffConstructorParameters<AdditionalParameters extends BuffAdditiona
147
155
  ...abilityOrParameters: [
148
156
  ability?: Ability | AbilityBehavior,
149
157
  parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
150
- ] | [parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>]
151
- ];
158
+ ] | [
159
+ parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
160
+ ]
161
+ ] : never;
152
162
  export declare class Buff<AdditionalParameters extends Prohibit<Record<string, any>, keyof BuffParameters> = object> extends UnitBehavior {
153
163
  private _unit;
154
164
  protected readonly __additionalParametersBrand?: AdditionalParameters;
@@ -187,6 +197,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
187
197
  private [BuffPropertyKey.DAMAGE_DEALT_EVENT_COUNT]?;
188
198
  private [BuffPropertyKey.MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT]?;
189
199
  private [BuffPropertyKey.DAMAGE_RECEIVED_EVENT_COUNT]?;
200
+ private [BuffPropertyKey.ABSORBED_DAMAGE_FACTOR]?;
201
+ private [BuffPropertyKey.MAXIMUM_DAMAGE_ABSORBED]?;
202
+ private [BuffPropertyKey.DAMAGE_ABSORBED]?;
203
+ private [BuffPropertyKey.DESTROYS_ON_MAXIMUM_DAMAGE_ABSORBED]?;
190
204
  private [BuffPropertyKey.TURNS_INTO_GHOST]?;
191
205
  private [BuffPropertyKey.STUNS]?;
192
206
  private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
@@ -201,10 +215,11 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
201
215
  readonly typeId: ApplicableBuffTypeId;
202
216
  readonly polarity: BuffPolarity;
203
217
  readonly resistanceType: BuffResistanceType;
204
- readonly parameters: IsExactlyAny<AdditionalParameters> extends true ? any : keyof AdditionalParameters extends never ? undefined : {
218
+ readonly parameters: IsExactlyAny<AdditionalParameters> extends true ? any : AdditionalParameters extends Record<PropertyKey, never> ? undefined : {
205
219
  [K in keyof Omit<AdditionalParameters, keyof BuffParameters>]: AdditionalParameters[K] extends AbilityDependentValue<infer T> ? T : AdditionalParameters[K];
206
220
  };
207
221
  private readonly handle;
222
+ readonly previousBuff?: Buff;
208
223
  private _timer?;
209
224
  private readonly _level?;
210
225
  private readonly _spellStealPriority?;
@@ -212,7 +227,7 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
212
227
  private readonly [BuffPropertyKey.MISS_PROBABILITY]?;
213
228
  private readonly _abilityTypeIds?;
214
229
  private _behaviors?;
215
- constructor(target: Unit, ...parameters: BuffConstructorParameters<AdditionalParameters>);
230
+ constructor(target: Unit, ...parameters: BuffConstructorParameters<Buff<AdditionalParameters>>);
216
231
  get level(): number;
217
232
  get remainingDamageOverDuration(): number;
218
233
  set remainingDamageOverDuration(remainingDamageOverDuration: number);
@@ -240,6 +255,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
240
255
  set receivedDamageFactor(receivedDamageFactor: number);
241
256
  get armorIncrease(): number;
242
257
  set armorIncrease(armorIncrease: number);
258
+ get maxHealthIncrease(): number;
259
+ set maxHealthIncrease(maxHealthIncrease: number);
260
+ get maxManaIncrease(): number;
261
+ set maxManaIncrease(maxManaIncrease: number);
243
262
  get turnsIntoGhost(): boolean;
244
263
  set turnsIntoGhost(turnsIntoGhost: boolean);
245
264
  get stuns(): boolean;
@@ -271,8 +290,16 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
271
290
  get manaRegenerationRateIncreaseFactor(): number;
272
291
  set manaRegenerationRateIncreaseFactor(manaRegenerationRateIncreaseFactor: number);
273
292
  get duration(): number;
293
+ set duration(duration: number);
274
294
  get remainingDuration(): number;
275
295
  set remainingDuration(remainingDuration: number);
296
+ get absorbedDamageFactor(): number;
297
+ set absorbedDamageFactor(absorbedDamageFactor: number);
298
+ get maximumDamageAbsorbed(): number;
299
+ set maximumDamageAbsorbed(maximumDamageAbsorbed: number);
300
+ get damageAbsorbed(): number;
301
+ get destroysOnMaximumDamageAbsorbed(): boolean;
302
+ set destroysOnMaximumDamageAbsorbed(destroysOnMaximumDamageAbsorbed: boolean);
276
303
  get abilityCooldownFactor(): number;
277
304
  set abilityCooldownFactor(abilityCooldownFactor: number);
278
305
  onAbilityGained(ability: Ability): void;
@@ -281,7 +308,12 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
281
308
  ...widgetOrXY: [] | [Widget] | [x: number, x: number],
282
309
  ...parametersOrDuration: [] | [EffectParameters] | [number]
283
310
  ]): void;
284
- flashSpecialEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
311
+ flashSpecialEffect(...parameters: [
312
+ ...widgetOrXY: [] | [Widget] | [x: number, x: number],
313
+ ...parametersOrDuration: [] | [EffectParameters] | [number]
314
+ ]): void;
315
+ private flash;
316
+ expire(): void;
285
317
  protected onCreate(): void;
286
318
  protected onDestroy(): Destructor;
287
319
  static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;