fix: 빙의 전용 화면과 가오픈 갱신을 보정한다

This commit is contained in:
2026-09-01 02:38:02 +00:00
parent dd84e6d6b3
commit 9c82eb0cf5
16 changed files with 243 additions and 73 deletions
+4 -4
View File
@@ -1022,10 +1022,10 @@ export const generalRouter = router({
loadCurrentGameTime(ctx.db, now),
]);
// vote_poll timestamps are logical game-wall values. During PREOPEN the
// logical clock is held at the future open anchor, so comparing them with
// JavaScript wall time inside a timestamp-without-time-zone predicate can
// hide an otherwise active poll. Resolve the same tick-first clock contract
// used by voting instead; hasVoted only affects the notice, not activity.
// logical clock advances through negative ticks before the opening anchor,
// so comparing them with JavaScript wall time inside a timestamp-without-time-zone
// predicate can hide an otherwise active poll. Resolve the same tick-first
// clock contract used by voting; hasVoted only affects the notice, not activity.
const latestVote = openPolls.find((poll) => isFrontStatusPollActive(poll, gameTime)) ?? null;
const onlineGeneralIds = onlineAccess.map((entry) => entry.generalId);
+3 -1
View File
@@ -302,6 +302,7 @@ export const joinRouter = router({
}
const config = asRecord(worldState.config);
const blockGeneralCreate = Math.floor(asNumber(config.blockGeneralCreate, 0));
const configConst = asRecord(config.const);
const availableSpecialWar = asStringArray(configConst.availableSpecialWar);
const warKeys = availableSpecialWar.length > 0 ? availableSpecialWar : [...WAR_TRAIT_KEYS];
@@ -348,7 +349,8 @@ export const joinRouter = router({
return {
rules: {
stat: resolveJoinStat(worldState),
allowCustomName: (Math.floor(asNumber(config.blockGeneralCreate, 0)) & 2) === 0,
allowDirectCreation: (blockGeneralCreate & 1) === 0,
allowCustomName: (blockGeneralCreate & 2) === 0,
},
user: {
id: ctx.auth?.user.id ?? '',
+1
View File
@@ -87,6 +87,7 @@ export const lobbyRouter = router({
: null,
isUnited: worldState.meta.isunited ?? worldState.meta.isUnited ?? 0,
selectionPoolEnabled: isSelectionPoolWorld(rawWorldState),
directGeneralCreationEnabled: (Math.floor(asNumber(rawConfig.blockGeneralCreate, 0)) & 1) === 0,
npcPossessionEnabled: worldState.config.npcMode === 1,
scenarioTitle: typeof scenarioTitle === 'string' ? scenarioTitle : '',
myGeneral,