fix: Ref 게임 로직과 시나리오 풀 호환을 보정

월 경계, 전투 기술 상한, 연감과 베팅·설문·경매 정산 순서를 Ref 계약에 맞춘다.\n\n시나리오 일반 풀을 ENGINE mutation과 logical tick 기반으로 직렬화하고 914·915 catalog 및 조건부 100기 pool 실행 경계를 추가한다.\n\n경매 worker는 세대별 durable event만 만들고 ENGINE이 row lock 후 상태 전이와 정산을 단일 transaction으로 소유한다.
This commit is contained in:
2026-08-23 16:26:14 +00:00
parent bf6b7be7b0
commit 85591c68ad
114 changed files with 13327 additions and 901 deletions
+27 -1
View File
@@ -37,6 +37,12 @@ const fail = (reason: string): TurnDaemonCommandResult => ({
reason,
});
export const buildInitialUniqueAuctionBidMeta = (obfuscatedName: string, amount: number) => ({
obfuscatedName,
tryExtendCloseDate: false,
inheritSpentTrackedAmount: amount,
});
const openResourceAuction = async (
command: AuctionOpenCommand,
world: InMemoryTurnWorld,
@@ -257,7 +263,7 @@ const openUniqueAuction = async (
amount: command.amount,
eventId,
eventAt: now,
meta: { obfuscatedName: alias, tryExtendCloseDate: false },
meta: buildInitialUniqueAuctionBidMeta(alias, command.amount),
},
},
},
@@ -266,6 +272,26 @@ const openUniqueAuction = async (
where: { userId_key: { userId, key: 'previous' } },
data: { value: currentPoint - command.amount },
});
await db.$executeRaw(
GamePrisma.sql`
INSERT INTO rank_data (nation_id, general_id, type, value)
VALUES (${general.nationId}, ${general.id}, 'inherit_spent_dyn', ${command.amount})
ON CONFLICT (general_id, type)
DO UPDATE SET
nation_id = EXCLUDED.nation_id,
value = rank_data.value + EXCLUDED.value
`
);
world.updateGeneral(general.id, {
inheritancePoints: {
...general.inheritancePoints,
previous: currentPoint - command.amount,
},
meta: {
...general.meta,
inherit_spent_dyn: readNumber(asRecord(general.meta), 'inherit_spent_dyn', 0) + command.amount,
},
});
const logger = new ActionLogger();
const rawNameJosa = JosaUtil.pick(item.rawName, '라');