/**
 * Tool / инвентарь — предметы в руках и на хотбаре.
 */
declare namespace game {
    /**
     * Phase 6.4: кастомный tool с собственным onActivated.
     * В отличие от game.player.giveTool() (готовое оружие из палитры),
     * tools.create() позволяет сделать СВОЙ инструмент с любой логикой
     * (удочка/лопата/фонарик/мегафон).
     */
    interface Tool {
        readonly id: string;
        readonly name: string;
        readonly modelTypeId: string | null;
        readonly kind: string;
        /** ЛКМ когда tool активен в hotbar. */
        onActivated(fn: (ctx: {
            tool: { kind: string; modelTypeId: string | null; name: string; customToolId?: string };
            point: game.Vector3 | null;
            target: { kind: string; ref?: any; id?: number } | null;
        }) => void): void;
        /** Игрок взял tool в руки (выбрал слот). */
        onEquipped(fn: (ctx: { tool: any }) => void): void;
        /** Игрок убрал tool из рук (сменил слот). */
        onUnequipped(fn: (ctx: { tool: any }) => void): void;
        /** Уронить tool на землю как pickup-объект. */
        dropAt(pos: game.Vector3): void;
    }

    interface ToolsApi {
        /**
         * Создать кастомный tool.
         * @example
         * const sword = game.tools.create('Меч огня', {
         *     model: 'weapon-sword',
         *     cooldown: 0.5,
         *     params: { damage: 50 },
         * });
         * sword.onActivated(({ target }) => {
         *     if (target) game.scene.killMob(target.ref);
         * });
         * game.player.giveTool(sword);
         */
        create(name: string, opts?: {
            model?: string;
            kind?: string;
            cooldown?: number;
            icon?: string;
            description?: string;
            grip?: game.Vector3;
            params?: Record<string, any>;
        }): Tool;
    }
    const tools: ToolsApi;

    interface InventoryApi {
        /** Добавить предмет в инвентарь. */
        add(item: string, count?: number): void;
        /** Удалить предмет. */
        remove(item: string, count?: number): void;
        /** Есть ли предмет (с указанным количеством). */
        has(item: string, count?: number): boolean;
        /** Список всех предметов в инвентаре. */
        list(): Array<{ item: string; count: number }>;
        /** Активный (выбранный) предмет в хотбаре. */
        active(): string | null;
        /** Очистить инвентарь. */
        clear(): void;
    }
    const inventory: InventoryApi;
}
