UNPKG

warscript

Version:

A typescript library for Warcraft III using Warpack.

222 lines (221 loc) 11.2 kB
/** @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 {};