import { type ConsolationPolicy, type ContainerSnapshot, type DeliveryEntry, type DeliveryQueue, type InsurancePolicy, type ItemStack } from "../inventory/storageTier.js"; import { type ContestedChannel, type ContestedEvent } from "./contestedChannel.js"; import type { RingPoint } from "./ring.js"; export interface ExtractPoint { id: string; center: RingPoint; radius: number; holdSeconds: number; favorability?: Record; interruptOnDamage?: boolean; } export interface RaidSessionConfig { extracts: readonly ExtractPoint[]; insurance?: InsurancePolicy; consolation?: ConsolationPolicy; } export type RaidStatus = "in-raid" | "extracting" | "extracted" | "dead"; export interface ExtractionAttempt { extractId: string; channel: ContestedChannel; } export interface ExtractionResult { userId: string; extractId: string; banked: readonly ItemStack[]; } export interface DeathResult { userId: string; kept: readonly ItemStack[]; lost: readonly ItemStack[]; scheduled: DeliveryEntry | null; consolationLoadoutId: string | null; } export interface RaidPlayerSnapshot { status: RaidStatus; extractId: string | null; progress: number; remaining: number; } export interface RaidSession { beginExtract(userId: string, extractId: string, position: RingPoint, team?: string): ContestedEvent | null; tickExtract(userId: string, dt: number, occupants?: Record): ContestedEvent[]; damage(userId: string, reason?: string): ContestedEvent | null; cancelExtract(userId: string): void; resolveExtraction(userId: string, containers: readonly ContainerSnapshot[]): ExtractionResult | null; resolveDeath(userId: string, containers: readonly ContainerSnapshot[], now: number, rng?: () => number): DeathResult; claimDeliveries(now: number): readonly DeliveryEntry[]; pendingDeliveries(userId?: string): readonly DeliveryEntry[]; deliveries(): DeliveryQueue; extractPoint(extractId: string): ExtractPoint | undefined; status(userId: string): RaidStatus; playerSnapshot(userId: string): RaidPlayerSnapshot; } /** @internal */ export declare function createRaidSession(config: RaidSessionConfig): RaidSession;