Newer
Older
rpg / apps / game / src / data / quests.ts
import type { GameState, Inventory } from '@rpg/engine';
import { itemName } from './items';

/**
 * Квест «Три цветка» (docs/world.md, акт 1): Ирвин просит собрать
 * лунные колокольчики у Серых прудов и посадить их на лугу.
 * Прогресс — во флагах/варах GameState, сумка — в Inventory.
 */
export const QUEST_FLOWERS = 3;

/** Одна строка журнала квестов. */
export interface QuestEntry {
    done: boolean;
    text: string;
}

/** Журнал квестов по флагам GameState. */
export function questLog(state: GameState): QuestEntry[] {
    const entries: QuestEntry[] = [];
    if (state.hasFlag('quest_bells_taken')) {
        const n = Math.min(state.getNumber('flowers'), QUEST_FLOWERS);
        entries.push({
            done: state.hasFlag('quest_bells_done'),
            text: `Собрать лунные колокольчики у Серых прудов (${n}/${QUEST_FLOWERS})`
        });
    }
    if (state.hasFlag('quest_bells_done')) {
        entries.push({ done: true, text: 'Цветы посажены у тропы. Поляна гудит.' });
    }
    return entries;
}

/** Строки сумки из инвентаря: имя + ×N (у одиночных — без множителя). */
export function inventoryItems(inventory: Inventory): string[] {
    const items = inventory.all.map((slot) =>
        slot.count > 1 ? `${itemName(slot.id)} ×${slot.count}` : itemName(slot.id)
    );
    if (items.length === 0) items.push('— пусто —');
    return items;
}