From 97cc384a1c498ed8a33677709540ef047a5fecf1 Mon Sep 17 00:00:00 2001 From: shni Date: Sun, 5 Oct 2025 00:51:27 -0500 Subject: [PATCH] feat(economy): add types for minigame engine requirements and rewards --- src/game/minigames/types.ts | 51 +++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/game/minigames/types.ts diff --git a/src/game/minigames/types.ts b/src/game/minigames/types.ts new file mode 100644 index 0000000..257581b --- /dev/null +++ b/src/game/minigames/types.ts @@ -0,0 +1,51 @@ +// Tipos para motor de minijuegos (mina, pesca, pelea, plantar). +// JSON flexible: estos tipos solo guían el shape esperado en GameAreaLevel.requirements/rewards/mobs. + +export type ToolRequirement = { + required?: boolean; // si se requiere herramienta + toolType?: string; // 'pickaxe' | 'rod' | 'sword' | ... + minTier?: number; // nivel mínimo de herramienta + allowedKeys?: string[]; // lista blanca de item keys específicos +}; + +export type LevelRequirements = { + tool?: ToolRequirement; + // extensible: stamina, consumibles, roles requeridos, etc. + [k: string]: unknown; +}; + +export type WeightedReward = + | { type: 'coins'; amount: number; weight: number } + | { type: 'item'; itemKey: string; qty: number; weight: number }; + +export type RewardsTable = { + draws?: number; // cuántas extracciones realizar (default 1) + table: WeightedReward[]; +}; + +export type WeightedMob = { mobKey: string; weight: number }; + +export type MobsTable = { + draws?: number; // cuántos mobs intentar spawnear (default 0) + table: WeightedMob[]; +}; + +export type LevelConfig = { + requirements?: LevelRequirements; + rewards?: RewardsTable; + mobs?: MobsTable; + // extensible: multiplicadores, riesgos, etc. + [k: string]: unknown; +}; + +export type RunMinigameOptions = { + toolKey?: string; // herramienta elegida por el jugador +}; + +export type RunResult = { + success: boolean; + rewards: Array<{ type: 'coins' | 'item'; amount?: number; itemKey?: string; qty?: number }>; + mobs: string[]; // keys de mobs spawneados + tool?: { key?: string; durabilityDelta?: number; broken?: boolean }; +}; +