merge: complete tournament betting parity

This commit is contained in:
2026-07-26 04:32:56 +00:00
26 changed files with 2475 additions and 1446 deletions
@@ -198,6 +198,7 @@ const zAdjustGeneralResources = z.object({
generalId: zFiniteNumber,
goldDelta: zFiniteNumber.optional(),
riceDelta: zFiniteNumber.optional(),
minGoldAfter: zFiniteNumber.optional(),
})
.refine((value) => value.goldDelta !== undefined || value.riceDelta !== undefined)
)
@@ -148,7 +148,8 @@ async function handleAdjustGeneralResources(
}
const nextGold = general.gold + (adjustment.goldDelta ?? 0);
const nextRice = general.rice + (adjustment.riceDelta ?? 0);
if (nextGold < 0 || nextRice < 0) {
const minGoldAfter = adjustment.minGoldAfter ?? 0;
if (nextGold < minGoldAfter || nextRice < 0) {
return { type: 'adjustGeneralResources', ok: false, reason: '자원이 부족합니다.' };
}
}
@@ -261,7 +262,7 @@ async function handleTournamentMatchResult(
};
}
const rankKey = (suffix: string): string => `rank_${prefix}${suffix}`;
const rankKey = (suffix: string): string => `${prefix}${suffix}`;
const getRankNumber = (general: TurnGeneral | null, key: string): number =>
general && typeof general.meta[key] === 'number' ? Number(general.meta[key]) : 0;
@@ -1075,8 +1076,8 @@ async function handleTournamentBettingPayout(
continue;
}
const nextMeta = { ...general.meta } as TurnGeneral['meta'];
const betwinKey = 'rank_betwin';
const betwingoldKey = 'rank_betwingold';
const betwinKey = 'betwin';
const betwingoldKey = 'betwingold';
const currentBetwin = typeof nextMeta[betwinKey] === 'number' ? Number(nextMeta[betwinKey]) : 0;
const currentBetwingold = typeof nextMeta[betwingoldKey] === 'number' ? Number(nextMeta[betwingoldKey]) : 0;
nextMeta[betwinKey] = currentBetwin + delta.betwin;