feat(game): add area fallback logic for commands and helpers

This commit is contained in:
2025-10-05 19:44:54 -05:00
parent 66a984d74e
commit 0b7ec0ee32
4 changed files with 47 additions and 18 deletions

View File

@@ -1,7 +1,7 @@
import type { CommandMessage } from '../../../core/types/commands';
import type Amayo from '../../../core/client';
import { runMinigame } from '../../../game/minigames/service';
import { resolveArea, getDefaultLevel, findBestToolKey, parseGameArgs } from './_helpers';
import { getDefaultLevel, findBestToolKey, parseGameArgs, resolveGuildAreaWithFallback } from './_helpers';
import { updateStats } from '../../../game/stats/service';
import { updateQuestProgress } from '../../../game/quests/service';
import { checkAchievements } from '../../../game/achievements/service';
@@ -18,11 +18,14 @@ export const command: CommandMessage = {
const guildId = message.guild!.id;
const { areaKey, levelArg, providedTool } = parseGameArgs(args, 'fight.arena');
const area = await resolveArea(guildId, areaKey);
const { area, source } = await resolveGuildAreaWithFallback(guildId, areaKey);
if (!area) {
await message.reply(`⚠️ Área de arena no configurada. Crea \`gameArea\` con key \`${areaKey}\`.`);
await message.reply(`⚠️ Área de arena no configurada. Crea \`gameArea\` con key \`${areaKey}\` en este servidor.`);
return;
}
const globalNotice = source === 'global'
? ` Usando configuración global para \`${areaKey}\`. Puedes crear \`gameArea\` para personalizarla en este servidor.`
: null;
const level = levelArg ?? await getDefaultLevel(userId, guildId, area.id);
const toolKey = providedTool ?? await findBestToolKey(userId, guildId, 'sword');
@@ -47,10 +50,8 @@ export const command: CommandMessage = {
const mobs = result.mobs.length ? result.mobs.join(', ') : '—';
const toolInfo = result.tool?.key ? `🗡️ ${result.tool.key}${result.tool.broken ? ' (rota)' : ` (-${result.tool.durabilityDelta} dur.)`}` : '—';
let response = `⚔️ Arena (nivel ${level})
Recompensas: ${rewards}
Enemigos: ${mobs}
Arma: ${toolInfo}`;
let response = globalNotice ? `${globalNotice}\n\n` : '';
response += `⚔️ Arena (nivel ${level})\nRecompensas: ${rewards}\nEnemigos: ${mobs}\nArma: ${toolInfo}`;
if (newAchievements.length > 0) {
response += `\n\n🏆 ¡Logro desbloqueado!`;