warscript
Version:
A typescript library for Warcraft III using Warpack.
222 lines (221 loc) • 11.2 kB
TypeScript
/** @noSelfInFile */
import { DamageEvent, Unit } from "./internal/unit";
import { ApplicableBuffTypeId } from "./object-data/entry/buff-type/applicable";
import { Ability } from "./internal/ability";
import { AbilityTypeId } from "./object-data/entry/ability-type";
import { BuffPolarity } from "./object-data/auxiliary/buff-polarity";
import { BuffResistanceType } from "./object-data/auxiliary/buff-resistance-type";
import { AbilityBooleanField, AbilityBooleanLevelField, AbilityCombatClassificationsLevelField, AbilityDependentValue, AbilityIntegerField, AbilityIntegerLevelField, AbilityNumberField, AbilityNumberLevelField } from "./object-field/ability";
import { CombatClassifications } from "./object-data/auxiliary/combat-classification";
import { IsExactlyAny, NonEmptyArray, Prohibit } from "../utility/types";
import { UnitBehavior } from "./behaviour/unit";
import type { Widget } from "../core/types/widget";
import { Destructor } from "../destroyable";
export type BuffConstructor<T extends Buff<any> = Buff<any>, Args extends any[] = any> = OmitConstructor<typeof Buff<any>> & (new (...args: Args) => T);
type NumberParameterValueType = number | AbilityNumberField | AbilityNumberLevelField;
type IntegerParameterValueType = number | AbilityIntegerField | AbilityIntegerLevelField;
type BooleanParameterValueType = boolean | AbilityBooleanField | AbilityBooleanLevelField;
export declare class BuffUniqueGroup {
}
export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
spellStealPriority?: number;
level?: number;
duration?: number;
learnLevelMinimum?: number;
source?: Unit;
behaviorConstructors?: (new (unit: Unit) => UnitBehavior)[];
abilityTypeIds?: Record<AbilityTypeId, {
[numberField: (AbilityNumberField | AbilityNumberLevelField) & symbol]: NumberParameterValueType;
} & {
/** Default `true`. */
readonly isButtonVisible?: boolean;
/** Default is the level of the source ability or 0 if it is absent. */
readonly level?: number;
}>;
damageUponDeathAllowedTargetCombatClassifications?: CombatClassifications | AbilityCombatClassificationsLevelField;
damageUponDeath?: NumberParameterValueType;
damageUponDeathRange?: NumberParameterValueType;
mediumDamageUponDeath?: NumberParameterValueType;
mediumDamageUponDeathRange?: NumberParameterValueType;
smallDamageUponDeath?: NumberParameterValueType;
smallDamageUponDeathRange?: NumberParameterValueType;
damageOverDuration?: NumberParameterValueType;
damagePerInterval?: NumberParameterValueType;
damageInterval?: NumberParameterValueType;
healingOverDuration?: NumberParameterValueType;
healingPerInterval?: NumberParameterValueType;
healingInterval?: NumberParameterValueType;
damageIncrease?: NumberParameterValueType;
damageIncreaseFactor?: NumberParameterValueType;
armorIncrease?: NumberParameterValueType;
armorIncreaseFactor?: NumberParameterValueType;
attackSpeedIncreaseFactor?: NumberParameterValueType;
movementSpeedIncreaseFactor?: NumberParameterValueType;
receivedDamageFactor?: NumberParameterValueType;
receivedMagicDamageFactor?: NumberParameterValueType;
durationIncreaseOnAutoAttack?: NumberParameterValueType;
maximumRemainingDuration?: NumberParameterValueType;
maximumDuration?: NumberParameterValueType;
stuns?: BooleanParameterValueType;
ignoresStunImmunity?: BooleanParameterValueType;
providesStunImmunity?: BooleanParameterValueType;
providesSpellImmunity?: BooleanParameterValueType;
providesInvulnerability?: BooleanParameterValueType;
disablesAutoAttack?: BooleanParameterValueType;
destroysOnDamage?: BooleanParameterValueType;
maximumAutoAttackCount?: IntegerParameterValueType;
uniqueGroup?: BuffUniqueGroup;
} : BuffParameters & (T extends Buff<infer AdditionalParameters> ? AdditionalParameters : {});
declare const enum BuffPropertyKey {
UNIT = 100,
SOURCE = 101,
DURATION = 102,
UNIQUE_GROUP = 103,
EFFECT_MODEL_PATH = 104,
SPECIAL_EFFECT_MODEL_PATH = 105,
DURATION_INCREASE_ON_AUTO_ATTACK = 106,
MAXIMUM_DURATION = 107,
MAXIMUM_REMAINING_DURATION = 108,
DAMAGE_OVER_DURATION = 109,
DAMAGE_PER_INTERVAL = 110,
DAMAGE_INTERVAL = 111,
REMAINING_DAMAGE_OVER_DURATION = 112,
DAMAGE_INTERVAL_TIMER = 113,
HEALING_OVER_DURATION = 114,
HEALING_PER_INTERVAL = 115,
HEALING_INTERVAL = 116,
REMAINING_HEALING_OVER_DURATION = 117,
HEALING_INTERVAL_TIMER = 118,
DAMAGE_UPON_DEATH_ALLOWED_TARGET_CLASSIFICATIONS = 119,
DAMAGE_UPON_DEATH = 120,
DAMAGE_UPON_DEATH_RANGE = 121,
MEDIUM_DAMAGE_UPON_DEATH = 122,
MEDIUM_DAMAGE_UPON_DEATH_RANGE = 123,
SMALL_DAMAGE_UPON_DEATH = 124,
SMALL_DAMAGE_UPON_DEATH_RANGE = 125,
AUTO_ATTACK_COUNT = 126,
MAXIMUM_AUTO_ATTACK_COUNT = 127,
STUNS = 128,
IGNORES_STUN_IMMUNITY = 129,
DISABLES_AUTO_ATTACK = 130,
PROVIDES_INVULNERABILITY = 131
}
export declare const enum BuffTypeIdSelectionPolicy {
LEAST_DURATION = 0
}
export type BuffAdditionalParameters = Prohibit<Record<string, any>, keyof BuffParameters>;
export type BuffConstructorParameters<AdditionalParameters extends BuffAdditionalParameters> = [
...typeId: [ApplicableBuffTypeId] | [
typeIds: NonEmptyArray<ApplicableBuffTypeId>,
typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
],
polarity: BuffPolarity,
resistanceType: BuffResistanceType,
...abilityOrParameters: [
ability: Ability,
parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
] | [parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>]
];
export declare class Buff<AdditionalParameters extends Prohibit<Record<string, any>, keyof BuffParameters> = {}> extends UnitBehavior {
private _unit;
protected readonly __additionalParametersBrand?: AdditionalParameters;
private [BuffPropertyKey.UNIT];
private [BuffPropertyKey.SOURCE]?;
private [BuffPropertyKey.DURATION];
private [BuffPropertyKey.UNIQUE_GROUP]?;
private [BuffPropertyKey.EFFECT_MODEL_PATH];
private [BuffPropertyKey.SPECIAL_EFFECT_MODEL_PATH];
private [BuffPropertyKey.DURATION_INCREASE_ON_AUTO_ATTACK]?;
private [BuffPropertyKey.MAXIMUM_DURATION]?;
private [BuffPropertyKey.MAXIMUM_REMAINING_DURATION]?;
private [BuffPropertyKey.DAMAGE_OVER_DURATION]?;
private [BuffPropertyKey.DAMAGE_PER_INTERVAL]?;
private [BuffPropertyKey.DAMAGE_INTERVAL]?;
private [BuffPropertyKey.REMAINING_DAMAGE_OVER_DURATION]?;
private [BuffPropertyKey.DAMAGE_INTERVAL_TIMER]?;
private [BuffPropertyKey.HEALING_OVER_DURATION]?;
private [BuffPropertyKey.HEALING_PER_INTERVAL]?;
private [BuffPropertyKey.HEALING_INTERVAL]?;
private [BuffPropertyKey.REMAINING_HEALING_OVER_DURATION]?;
private [BuffPropertyKey.HEALING_INTERVAL_TIMER]?;
private [BuffPropertyKey.DAMAGE_UPON_DEATH_ALLOWED_TARGET_CLASSIFICATIONS]?;
private [BuffPropertyKey.DAMAGE_UPON_DEATH]?;
private [BuffPropertyKey.DAMAGE_UPON_DEATH_RANGE]?;
private [BuffPropertyKey.MEDIUM_DAMAGE_UPON_DEATH]?;
private [BuffPropertyKey.MEDIUM_DAMAGE_UPON_DEATH_RANGE]?;
private [BuffPropertyKey.SMALL_DAMAGE_UPON_DEATH]?;
private [BuffPropertyKey.SMALL_DAMAGE_UPON_DEATH_RANGE]?;
private [BuffPropertyKey.MAXIMUM_AUTO_ATTACK_COUNT]?;
private [BuffPropertyKey.AUTO_ATTACK_COUNT]?;
private [BuffPropertyKey.STUNS]?;
private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
private [BuffPropertyKey.DISABLES_AUTO_ATTACK]?;
private [BuffPropertyKey.PROVIDES_INVULNERABILITY]?;
protected static readonly defaultParameters: BuffParameters;
get source(): Unit;
readonly typeId: ApplicableBuffTypeId;
readonly polarity: BuffPolarity;
readonly resistanceType: BuffResistanceType;
readonly parameters: IsExactlyAny<AdditionalParameters> extends true ? any : keyof AdditionalParameters extends never ? undefined : {
[K in keyof Omit<AdditionalParameters, keyof BuffParameters>]: AdditionalParameters[K] extends AbilityDependentValue<infer T> ? T : AdditionalParameters[K];
};
private readonly handle;
private _timer?;
private readonly _level?;
private readonly _spellStealPriority?;
private readonly _learnLevelMinimum?;
private _bonusIdByBonusType?;
private readonly _abilityTypeIds?;
private _behaviors?;
private getUnitBonus;
private addOrUpdateOrRemoveUnitBonus;
constructor(target: Unit, ...parameters: BuffConstructorParameters<AdditionalParameters>);
get level(): number;
get remainingDamageOverDuration(): number;
set remainingDamageOverDuration(remainingDamageOverDuration: number);
get damageOverDuration(): number;
set damageOverDuration(damageOverDuration: number);
get damagePerInterval(): number;
set damagePerInterval(damagePerInterval: number);
get damageInterval(): number;
set damageInterval(damageInterval: number);
get remainingHealingOverDuration(): number;
set remainingHealingOverDuration(remainingHealingOverDuration: number);
get healingOverDuration(): number;
set healingOverDuration(healingOverDuration: number);
get healingPerInterval(): number;
set healingPerInterval(healingPerInterval: number);
get healingInterval(): number;
set healingInterval(healingInterval: number);
get receivedDamageFactor(): number;
set receivedDamageFactor(receivedDamageFactor: number);
get armorIncrease(): number;
set armorIncrease(armorIncrease: number);
get stuns(): boolean;
set stuns(stuns: boolean);
get ignoresStunImmunity(): boolean;
set ignoresStunImmunity(ignoresStunImmunity: boolean);
get disablesAutoAttack(): boolean;
set disablesAutoAttack(disablesAutoAttack: boolean);
get providesInvulnerability(): boolean;
set providesInvulnerability(providesInvulnerability: boolean);
get maximumAutoAttackCount(): number;
set maximumAutoAttackCount(maximumAutoAttackCount: number);
get durationIncreaseOnAutoAttack(): number;
set durationIncreaseOnAutoAttack(durationIncreaseOnAutoAttack: number);
get attackSpeedIncreaseFactor(): number;
set attackSpeedIncreaseFactor(attackSpeedIncreaseFactor: number);
get movementSpeedIncreaseFactor(): number;
set movementSpeedIncreaseFactor(movementSpeedIncreaseFactor: number);
get duration(): number;
get remainingDuration(): number;
set remainingDuration(remainingDuration: number);
flashEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
flashSpecialEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
protected onDestroy(): Destructor;
static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;
static getByTypeId<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, unit: Unit, typeId: ApplicableBuffTypeId): T | undefined;
onDeath(source: Unit | undefined): void;
onDamageDealt(target: Unit, event: DamageEvent): void;
}
export {};