fix: NPC 불가침 제의 수명주기를 보정
원조 기반 제의의 서신 만료 tick을 영속화하고 거절 상대를 영구 제외한다. 불가침 월별 감소와 만료 전후 선전포고 경계를 통합 회귀로 검증한다.
This commit is contained in:
@@ -18,6 +18,7 @@ import type { TurnCommandEnv } from '@sammo-ts/logic/actions/turn/commandEnv.js'
|
||||
import type { NationTurnCommandSpec } from './index.js';
|
||||
import { z } from 'zod';
|
||||
import { parseArgsWithSchema } from '../parseArgs.js';
|
||||
import { resolveDiplomacyMessageValidMinutes } from '../../../diplomacy/messageValidity.js';
|
||||
|
||||
const ARGS_SCHEMA = z.object({
|
||||
destNationId: z.number().int().positive(),
|
||||
@@ -195,7 +196,7 @@ export const actionContextBuilder: ActionContextBuilder<NonAggressionProposalArg
|
||||
...base,
|
||||
destNation,
|
||||
messageTime: base.general.turnTime,
|
||||
messageValidMinutes: Math.max(30, Math.floor((options.world.tickSeconds / 60) * 3)),
|
||||
messageValidMinutes: resolveDiplomacyMessageValidMinutes(options.world.tickSeconds),
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -138,3 +138,4 @@ export const processDiplomacyMonth = (
|
||||
|
||||
export * from './frontState.js';
|
||||
export * from './instantResponse.js';
|
||||
export * from './messageValidity.js';
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import { GAME_TICKS_PER_TURN } from '@sammo-ts/common';
|
||||
|
||||
const MIN_DIPLOMACY_MESSAGE_VALID_MINUTES = 30;
|
||||
const DIPLOMACY_MESSAGE_VALID_TURNS = 3;
|
||||
|
||||
export const resolveDiplomacyMessageValidMinutes = (tickSeconds: number): number =>
|
||||
Math.max(MIN_DIPLOMACY_MESSAGE_VALID_MINUTES, Math.floor((tickSeconds / 60) * DIPLOMACY_MESSAGE_VALID_TURNS));
|
||||
|
||||
export const resolveDiplomacyMessageValidUntilTick = (turnTick: number, tickSeconds: number): number | null => {
|
||||
if (!Number.isFinite(turnTick) || !Number.isInteger(tickSeconds) || tickSeconds <= 0) {
|
||||
return null;
|
||||
}
|
||||
const ticksPerSecond = GAME_TICKS_PER_TURN / tickSeconds;
|
||||
if (!Number.isInteger(ticksPerSecond)) {
|
||||
return null;
|
||||
}
|
||||
return turnTick + resolveDiplomacyMessageValidMinutes(tickSeconds) * 60 * ticksPerSecond;
|
||||
};
|
||||
Reference in New Issue
Block a user