fix: 은퇴 명예 기록과 유산 수명주기 정합성을 복원한다
은퇴·사망·통일의 저장 순서와 명예의 전당 및 명장일람 판정을 Ref 흐름에 맞춘다. 유산 행동을 인증된 daemon transaction으로 통합하고 중복 지급·고유 아이템·로그·오류 경계를 회귀 테스트한다.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import {
|
||||
REBIRTH_INHERITANCE_COEFFICIENTS,
|
||||
type MergedInheritanceKey,
|
||||
} from '@sammo-ts/logic/inheritance/pointCalculation.js';
|
||||
|
||||
const LEGACY_KEY_ORDER = [
|
||||
'lived_month',
|
||||
'max_belong',
|
||||
'max_domestic_critical',
|
||||
'active_action',
|
||||
'combat',
|
||||
'sabotage',
|
||||
'unifier',
|
||||
'dex',
|
||||
'tournament',
|
||||
'betting',
|
||||
] as const satisfies readonly MergedInheritanceKey[];
|
||||
|
||||
const LEGACY_CALCULATED_KEYS = new Set<MergedInheritanceKey>(['max_belong', 'combat', 'sabotage', 'dex', 'betting']);
|
||||
|
||||
const LEGACY_KEY_LABEL: Readonly<Record<'previous' | MergedInheritanceKey, string>> = {
|
||||
previous: '기존 보유',
|
||||
lived_month: '생존',
|
||||
max_belong: '최대 임관년 수',
|
||||
max_domestic_critical: '최대 연속 내정 성공',
|
||||
active_action: '능동 행동 수',
|
||||
combat: '전투 횟수',
|
||||
sabotage: '계략 성공 횟수',
|
||||
unifier: '천통 기여',
|
||||
dex: '숙련도',
|
||||
tournament: '토너먼트',
|
||||
betting: '베팅 당첨',
|
||||
};
|
||||
|
||||
const formatLegacyPoint = (value: number): string => {
|
||||
if (!Number.isFinite(value)) {
|
||||
return '0';
|
||||
}
|
||||
return String(Object.is(value, -0) ? 0 : value);
|
||||
};
|
||||
|
||||
export const buildInheritanceSettlementLogTexts = (input: {
|
||||
previous: number;
|
||||
points: Readonly<Partial<Record<MergedInheritanceKey, number>>>;
|
||||
storedKeys: ReadonlySet<string>;
|
||||
total: number;
|
||||
isRebirth: boolean;
|
||||
}): string[] => {
|
||||
const texts = input.storedKeys.has('previous')
|
||||
? [`${LEGACY_KEY_LABEL.previous} 포인트 ${formatLegacyPoint(input.previous)} 증가`]
|
||||
: [];
|
||||
for (const key of LEGACY_KEY_ORDER) {
|
||||
if (!LEGACY_CALCULATED_KEYS.has(key) && !input.storedKeys.has(key)) {
|
||||
continue;
|
||||
}
|
||||
if (input.isRebirth && REBIRTH_INHERITANCE_COEFFICIENTS[key] === null) {
|
||||
continue;
|
||||
}
|
||||
texts.push(`${LEGACY_KEY_LABEL[key]} 포인트 ${formatLegacyPoint(input.points[key] ?? 0)} 증가`);
|
||||
}
|
||||
texts.push(`포인트 ${formatLegacyPoint(input.previous)} => ${formatLegacyPoint(input.total)}`);
|
||||
return texts;
|
||||
};
|
||||
Reference in New Issue
Block a user