export interface CosmeticLoadoutDef { slots: Record; } export interface CosmeticsChangedEvent { userId: string; slots: Record; } export interface CosmeticsEvents { emit(name: "cosmetics.changed", payload: CosmeticsChangedEvent): void; } export interface CosmeticsDeps { events?: CosmeticsEvents; } export interface Cosmetics { register(defs: Record): void; has(loadoutId: string): boolean; apply(userId: string, loadoutId: string): { reason: string; } | null; equip(userId: string, slot: string, cosmeticId: string | null): void; get(userId: string): Readonly>; snapshot(userId: string): Record; hydrate(userId: string, state: Record): void; /** Snapshot every user's equipped slots for a whole-world save. */ snapshotAll(): Record>; /** Restore every user's equipped slots from a {@link snapshotAll} payload. */ hydrateAll(state: Record>): void; } /** * Equip cosmetic skins and customizations by slot, independent of gameplay stats. * * @capability cosmetics equip cosmetic skins and customizations by slot */ export declare function createCosmetics(deps?: CosmeticsDeps): Cosmetics;