fix: 불가침 제의 기한을 20년으로 제한
This commit is contained in:
@@ -19,6 +19,7 @@ import type { NationTurnCommandSpec } from './index.js';
|
||||
import { z } from 'zod';
|
||||
import { parseArgsWithSchema } from '../parseArgs.js';
|
||||
import { resolveDiplomacyMessageValidMinutes } from '../../../diplomacy/messageValidity.js';
|
||||
import { NON_AGGRESSION_MIN_TERM_MONTHS, resolveNonAggressionMaxEndYear } from '../../../diplomacy/treatyTerm.js';
|
||||
import { resolveMessageTargetIcon } from '@sammo-ts/logic/messages/message.js';
|
||||
|
||||
const ARGS_SCHEMA = z.object({
|
||||
@@ -38,12 +39,11 @@ interface NonAggressionProposalContext<
|
||||
}
|
||||
|
||||
const ACTION_NAME = '불가침 제의';
|
||||
const MIN_TERM_MONTHS = 6;
|
||||
|
||||
const resolveMonthIndex = (year: number, month: number): number => year * 12 + month - 1;
|
||||
|
||||
const reqMinimumTreatyTerm = (minMonths: number): Constraint => ({
|
||||
name: 'reqMinimumTreatyTerm',
|
||||
const reqTreatyTermRange = (minMonths: number): Constraint => ({
|
||||
name: 'reqTreatyTermRange',
|
||||
requires: () => [
|
||||
{ kind: 'arg', key: 'year' },
|
||||
{ kind: 'arg', key: 'month' },
|
||||
@@ -100,6 +100,13 @@ const reqMinimumTreatyTerm = (minMonths: number): Constraint => ({
|
||||
reason: `기한은 ${minMonths}개월 이상이어야 합니다.`,
|
||||
};
|
||||
}
|
||||
const maxEndYear = resolveNonAggressionMaxEndYear(envYearValue);
|
||||
if (yearValue > maxEndYear) {
|
||||
return {
|
||||
kind: 'deny',
|
||||
reason: `기한은 ${maxEndYear}년 이하여야 합니다.`,
|
||||
};
|
||||
}
|
||||
return allow();
|
||||
},
|
||||
});
|
||||
@@ -120,7 +127,7 @@ export class ActionDefinition<
|
||||
}
|
||||
|
||||
buildPermissionConstraints(_ctx: ConstraintContext, _args: NonAggressionProposalArgs): Constraint[] {
|
||||
return [reqMinimumTreatyTerm(MIN_TERM_MONTHS)];
|
||||
return [reqTreatyTermRange(NON_AGGRESSION_MIN_TERM_MONTHS)];
|
||||
}
|
||||
|
||||
buildMinConstraints(_ctx: ConstraintContext, _args: NonAggressionProposalArgs): Constraint[] {
|
||||
@@ -133,7 +140,7 @@ export class ActionDefinition<
|
||||
notBeNeutral(),
|
||||
existsDestNation(),
|
||||
differentDestNation(),
|
||||
reqMinimumTreatyTerm(MIN_TERM_MONTHS),
|
||||
reqTreatyTermRange(NON_AGGRESSION_MIN_TERM_MONTHS),
|
||||
disallowDiplomacyBetweenStatus({
|
||||
0: '아국과 이미 교전중입니다.',
|
||||
1: '아국과 이미 선포중입니다.',
|
||||
|
||||
@@ -149,3 +149,4 @@ export const processDiplomacyMonth = (
|
||||
export * from './frontState.js';
|
||||
export * from './instantResponse.js';
|
||||
export * from './messageValidity.js';
|
||||
export * from './treatyTerm.js';
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
export const NON_AGGRESSION_MIN_TERM_MONTHS = 6;
|
||||
export const NON_AGGRESSION_MAX_END_YEAR_OFFSET = 20;
|
||||
|
||||
export const resolveNonAggressionMaxEndYear = (currentYear: number): number =>
|
||||
currentYear + NON_AGGRESSION_MAX_END_YEAR_OFFSET;
|
||||
Reference in New Issue
Block a user