import { type Vec3 } from '@quake2ts/shared'; import { type PowerArmorState, type RegularArmorState } from './armor.js'; import { EntityDamageFlags } from './damageFlags.js'; import { DamageMod } from './damageMods.js'; import type { EntitySystem } from '../entities/system.js'; import { ServerCommand } from '@quake2ts/shared'; import { MulticastType } from '../imports.js'; import type { ScriptHookRegistry } from '../scripting/hooks.js'; export interface DamageOptions { /** If true, check if attacker and target are on same team and apply rules. */ checkFriendlyFire?: boolean; /** If true (and checkFriendlyFire is on), damage is 0 for teammates. */ noFriendlyFire?: boolean; /** Hooks registry to trigger onDamage event */ hooks?: ScriptHookRegistry; } export interface DamageableCallbacks { pain?: (self: Damageable, attacker: Damageable | null, knockback: number, take: number, mod: DamageMod) => void; die?: (self: Damageable, inflictor: Damageable | null, attacker: Damageable | null, take: number, point: Vec3, mod: DamageMod) => void; } export interface Damageable extends DamageableCallbacks { readonly id?: string; takedamage: boolean; health: number; readonly maxHealth?: number; readonly mass?: number; velocity: Vec3; readonly origin: Vec3; readonly mins?: Vec3; readonly maxs?: Vec3; readonly flags?: EntityDamageFlags; readonly regularArmor?: RegularArmorState; readonly powerArmor?: PowerArmorState; } export { EntityDamageFlags }; export interface DamageApplicationResult { readonly take: number; readonly psave: number; readonly asave: number; readonly knocked: Vec3; readonly killed: boolean; readonly remainingArmor?: number; readonly remainingCells?: number; } export interface DamageSource { readonly origin: Vec3; readonly mins?: Vec3; readonly maxs?: Vec3; } export interface RadiusDamageHit { readonly target: Damageable; readonly result: DamageApplicationResult | null; readonly appliedDamage: number; } export interface RadiusDamageOptions extends DamageOptions { readonly canDamage?: (ent: Damageable, inflictor: DamageSource) => boolean; } export declare function T_Damage(targ: Damageable, inflictor: Damageable | null, attacker: Damageable | null, dir: Vec3, point: Vec3, normal: Vec3, damage: number, knockback: number, dflags: number, mod: DamageMod, time: number, multicast?: (origin: Vec3, type: MulticastType, event: ServerCommand, ...args: any[]) => void, options?: DamageOptions, sys?: EntitySystem): DamageApplicationResult | null; export declare function T_RadiusDamage(entities: readonly Damageable[], inflictor: DamageSource, attacker: Damageable | null, damage: number, ignore: Damageable | null, radius: number, dflags: number, mod: DamageMod, time: number, options?: RadiusDamageOptions, multicast?: (origin: Vec3, type: MulticastType, event: ServerCommand, ...args: any[]) => void): RadiusDamageHit[]; //# sourceMappingURL=damage.d.ts.map