feat: agregar lógica de penalización por fatiga en recompensas; actualizar tipos de recompensa para incluir monedas base y monedas después de la penalización

This commit is contained in:
2025-10-09 01:57:58 -05:00
parent 0b0a73d114
commit 3a311c8bb6
4 changed files with 38 additions and 24 deletions

View File

@@ -103,14 +103,18 @@ export const command: CommandMessage = {
}) })
.join("\n") .join("\n")
: "• —"; : "• —";
if ( if (result.rewardModifiers?.baseCoinsAwarded != null) {
result.rewardModifiers?.fatigueCoinMultiplier != null && const { baseCoinsAwarded, coinsAfterPenalty, fatigueCoinMultiplier } =
result.rewardModifiers.fatigueCoinMultiplier < 1 result.rewardModifiers;
) { if (
const pct = Math.round( fatigueCoinMultiplier != null &&
(1 - result.rewardModifiers.fatigueCoinMultiplier) * 100 fatigueCoinMultiplier < 1 &&
); baseCoinsAwarded != null &&
rewardLines += `\n (⚠️ Fatiga -${pct}% monedas)`; coinsAfterPenalty != null
) {
const pct = Math.round((1 - fatigueCoinMultiplier) * 100);
rewardLines += `\n (⚠️ Fatiga: monedas base ${baseCoinsAwarded}${coinsAfterPenalty} (-${pct}%) )`;
}
} }
const mobsLines = result.mobs.length const mobsLines = result.mobs.length
? result.mobs.map((m) => `${m}`).join("\n") ? result.mobs.map((m) => `${m}`).join("\n")

View File

@@ -113,14 +113,18 @@ export const command: CommandMessage = {
}) })
.join("\n") .join("\n")
: "• —"; : "• —";
if ( if (result.rewardModifiers?.baseCoinsAwarded != null) {
result.rewardModifiers?.fatigueCoinMultiplier != null && const { baseCoinsAwarded, coinsAfterPenalty, fatigueCoinMultiplier } =
result.rewardModifiers.fatigueCoinMultiplier < 1 result.rewardModifiers;
) { if (
const pct = Math.round( fatigueCoinMultiplier != null &&
(1 - result.rewardModifiers.fatigueCoinMultiplier) * 100 fatigueCoinMultiplier < 1 &&
); baseCoinsAwarded != null &&
rewardLines += `\n (⚠️ Fatiga -${pct}% monedas)`; coinsAfterPenalty != null
) {
const pct = Math.round((1 - fatigueCoinMultiplier) * 100);
rewardLines += `\n (⚠️ Fatiga: monedas base ${baseCoinsAwarded}${coinsAfterPenalty} (-${pct}%) )`;
}
} }
const mobsLines = result.mobs.length const mobsLines = result.mobs.length
? result.mobs.map((m) => `${m}`).join("\n") ? result.mobs.map((m) => `${m}`).join("\n")

View File

@@ -99,14 +99,18 @@ export const command: CommandMessage = {
}) })
.join("\n") .join("\n")
: "• —"; : "• —";
if ( if (result.rewardModifiers?.baseCoinsAwarded != null) {
result.rewardModifiers?.fatigueCoinMultiplier != null && const { baseCoinsAwarded, coinsAfterPenalty, fatigueCoinMultiplier } =
result.rewardModifiers.fatigueCoinMultiplier < 1 result.rewardModifiers;
) { if (
const pct = Math.round( fatigueCoinMultiplier != null &&
(1 - result.rewardModifiers.fatigueCoinMultiplier) * 100 fatigueCoinMultiplier < 1 &&
); baseCoinsAwarded != null &&
rewardLines += `\n (⚠️ Fatiga -${pct}% monedas)`; coinsAfterPenalty != null
) {
const pct = Math.round((1 - fatigueCoinMultiplier) * 100);
rewardLines += `\n (⚠️ Fatiga: monedas base ${baseCoinsAwarded}${coinsAfterPenalty} (-${pct}%) )`;
}
} }
const mobsLines = result.mobs.length const mobsLines = result.mobs.length
? result.mobs.map((m) => `${m}`).join("\n") ? result.mobs.map((m) => `${m}`).join("\n")

View File

@@ -66,6 +66,8 @@ export type RunResult = {
rewardModifiers?: { rewardModifiers?: {
fatigueCoinMultiplier?: number; // 0.85 si hay -15% fatigueCoinMultiplier?: number; // 0.85 si hay -15%
fatigueMagnitude?: number; // magnitud original del efecto fatigueMagnitude?: number; // magnitud original del efecto
baseCoinsAwarded?: number; // suma antes de aplicar multiplicador de fatiga
coinsAfterPenalty?: number; // suma final depositada en wallet
}; };
}; };