feat: 커맨드 로그 메시지 개선 및 불필요한 항목 제거
This commit is contained in:
@@ -8,66 +8,13 @@ Exclude target: on
|
||||
Ignore file: tools/compare-command-logs.ignore.json
|
||||
|
||||
- [ ] General/che_건국
|
||||
PHP only: 다음 턴부터 건국할 수 있습니다. | <D>${}</>${} 건국하였습니다.
|
||||
TS only: ${}이 ${}에 국가를 건설하였습니다.
|
||||
- [ ] General/che_기술연구
|
||||
PHP only: ${}${} <span class='ev_failed'>실패</span>하여 <C>${}</> 상승했습니다. | ${}${} <S>성공</>하여 <C>${}</> 상승했습니다. | ${}${} 하여 <C>${}</> 상승했습니다.
|
||||
TS only: 기술 연구로 기술이 ${} 상승했습니다.
|
||||
- [ ] General/che_단련
|
||||
PHP only: 단련이 <span class='ev_failed'>지지부진</span>하여 ${} 숙련도가 <C>${}</> 향상되었습니다. | 단련이 <S>일취월장</>하여 ${} 숙련도가 <C>${}</> 향상되었습니다. | ${} 숙련도가 <C>${}</> 향상되었습니다.
|
||||
TS only: ${}
|
||||
- [ ] General/che_등용
|
||||
PHP only: <Y>${}</>에게 등용 권유 서신을 보내지 못했습니다. ${}
|
||||
- [ ] General/che_상업투자
|
||||
PHP only: ${}${} <span class='ev_failed'>실패</span>하여 <C>${}</> 상승했습니다. | ${}${} <S>성공</>하여 <C>${}</> 상승했습니다. | ${}${} 하여 <C>${}</> 상승했습니다.
|
||||
TS only: ${}
|
||||
- [ ] General/che_소집해제
|
||||
PHP only: 병사들을 <R>소집해제</>하였습니다.
|
||||
TS only: 병사들을 소집해제하여 인구가 ${} 증가했습니다.
|
||||
- [ ] General/che_숙련전환
|
||||
PHP only: {${}->srcArmTypeName} 숙련 ${}${} {${}->destArmTypeName} 숙련 ${}${} 전환했습니다.
|
||||
TS only: ${} 숙련 ${}${} ${} 숙련 ${}${} 전환했습니다.
|
||||
- [ ] General/che_인재탐색
|
||||
PHP only: <Y>${}</>${}는 <C>인재</>를 ${}하였습니다!
|
||||
TS only: 인재 <Y>${}</>${} 발견했습니다.
|
||||
- [ ] General/che_임관
|
||||
PHP only: <D>${}</>에 임관했습니다.
|
||||
TS only: 임관을 신청했습니다. (국가 ${})
|
||||
PHP only: <D>${}</>${} 건국하였습니다.
|
||||
TS only: <D>${}</>을 건국하였습니다.
|
||||
- [ ] General/che_정착장려
|
||||
PHP only: ${}${} <span class='ev_failed'>실패</span>하여 주민이 <C>${}</>명 증가했습니다. | ${}${} <S>성공</>하여 주민이 <C>${}</>명 증가했습니다. | ${}${} 하여 주민이 <C>${}</>명 증가했습니다.
|
||||
TS only: 인구가 ${} 증가했습니다.
|
||||
- [ ] General/che_주민선정
|
||||
PHP only: ${}${} <span class='ev_failed'>실패</span>하여 <C>${}</> 상승했습니다. | ${}${} <S>성공</>하여 <C>${}</> 상승했습니다. | ${}${} 하여 <C>${}</> 상승했습니다.
|
||||
TS only: 민심이 ${} 상승했습니다.
|
||||
PHP only: ${}${} <span class='ev_failed'>실패</span>하여 주민이 <C>${}</>명 증가했습니다. | ${}${} <S>성공</>하여 주민이 <C>${}</>명 증가했습니다.
|
||||
- [ ] General/che_징병
|
||||
PHP only: ${} <C>${}</>명을 추가{${}->getName()}했습니다. | ${} <C>${}</>명을 {${}->getName()}했습니다.
|
||||
TS only: ${}
|
||||
PHP only: ${} <C>${}</>명을 추가${}했습니다. | ${} <C>${}</>명을 ${}했습니다.
|
||||
TS only: ${} 추가징병했습니다. | ${} 징병했습니다.
|
||||
- [ ] General/che_첩보
|
||||
PHP only: <G>${}</>의 정보를 많이 얻었습니다. | 【<G>${}</>】주민:${}, 민심:${}, 장수:${}, 병력:${} | 【<M>첩보</>】농업:${}, 상업:${}, 치안:${}, 수비:${}, 성벽:${} | 【<S>병종</>】 ${} | 【<span class='ev_notice'>{${}->destNation['name']}</span>】아국대비기술:${} | <G>${}</>의 정보를 어느 정도 얻었습니다. | <G>${}</>의 소문만 들을 수 있었습니다.
|
||||
PHP only: <G>${}</>의 정보를 많이 얻었습니다. | 【<G>${}</>】주민:${}, 민심:${}, 장수:${}, 병력:${} | 【<M>첩보</>】농업:${}, 상업:${}, 치안:${}, 수비:${}, 성벽:${} | 【<S>병종</>】 ${} | 【<span class='ev_notice'>${}</span>】아국대비기술:${} | <G>${}</>의 정보를 어느 정도 얻었습니다. | <G>${}</>의 소문만 들을 수 있었습니다.
|
||||
TS only: <G>${}</>의 정보를 ${} 얻었습니다. | 주민:${}, 민심:${}, ...
|
||||
- [ ] General/che_출병
|
||||
TS only: 경로에 도달할 방법이 없습니다. | <G>${}</>${} 가는 도중 <G>${}</>을 거치기로 합니다.
|
||||
- [ ] Nation/che_국호변경
|
||||
PHP only: 이미 같은 국호를 가진 곳이 있습니다. ${} 실패 | 국호를 <D>${}</>${} 변경합니다.
|
||||
TS only: 국호를 <D>${}</>로 변경하였습니다.
|
||||
- [ ] Nation/che_몰수
|
||||
PHP only: <Y>{${}->getName()}</>에게서 ${} <C>${}</>${} 몰수했습니다.
|
||||
TS only: ${}에게서 몰수할 ${}이 없습니다. | <Y>${}</>에게서 ${} <C>${}</>${} 몰수했습니다.
|
||||
- [ ] Nation/che_발령
|
||||
PHP only: <Y>${}</>에 의해 <G>${}</>${} 발령됐습니다.
|
||||
- [ ] Nation/che_부대탈퇴지시
|
||||
PHP only: <Y>${}</>에게 부대 탈퇴를 지시 받았습니다.
|
||||
- [ ] Nation/che_불가침제의
|
||||
PHP only: <D>${}</>${} 불가침 제의 서신을 보냈습니다.
|
||||
TS only: 불가침 제의을 준비했습니다. (국가 ${})
|
||||
- [ ] Nation/che_불가침파기제의
|
||||
PHP only: <D>${}</>${} 불가침 파기 제의 서신을 보냈습니다.
|
||||
TS only: 불가침 파기 제의을 준비했습니다. (국가 ${})
|
||||
- [ ] Nation/che_포상
|
||||
PHP only: <Y>{${}->getName()}</>에게 ${} <C>${}</>${} 수여했습니다.
|
||||
TS only: <Y>${}</>에게 ${} ${}${} 수여했습니다.
|
||||
- [ ] Nation/che_피장파장
|
||||
PHP only: <G>{${}->getName()}</> 전략의 ${} 발동!
|
||||
TS only: <G>${}</> 전략의 ${} 발동!
|
||||
- [ ] Nation/cr_인구이동
|
||||
TS only: 이동할 인구가 부족합니다.
|
||||
|
||||
@@ -115,6 +115,10 @@ export class ActionDefinition<
|
||||
category: LogCategory.USER,
|
||||
format: LogFormat.PLAIN,
|
||||
});
|
||||
context.addLog(`<D><b>${args.nationName}</b></>${josaUl} 건국하였습니다.`, {
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
});
|
||||
context.addLog(`${general.name}${josaYi} ${city?.name}에 국가를 건설하였습니다.`, {
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
|
||||
@@ -13,6 +13,7 @@ import type { TurnCommandEnv } from '@sammo-ts/logic/actions/turn/commandEnv.js'
|
||||
import { defaultActionContextBuilder } from '@sammo-ts/logic/actions/turn/actionContext.js';
|
||||
import { tryApplyUniqueLottery } from '@sammo-ts/logic/rewards/uniqueLottery.js';
|
||||
import type { GeneralTurnCommandSpec } from './index.js';
|
||||
import { JosaUtil } from '@sammo-ts/common';
|
||||
|
||||
export interface TechResearchArgs {}
|
||||
|
||||
@@ -79,7 +80,10 @@ export class ActionDefinition<
|
||||
nation.meta = { ...nation.meta, tech: nextTech };
|
||||
general.gold = Math.max(0, general.gold - costGold);
|
||||
|
||||
context.addLog(`${ACTION_NAME}로 기술이 ${applied} 상승했습니다.`);
|
||||
const logName = ACTION_NAME.replace(' ', '');
|
||||
const josaUl = JosaUtil.pick(logName, '을');
|
||||
const scoreText = applied.toLocaleString();
|
||||
context.addLog(`${logName}${josaUl} 하여 <C>${scoreText}</> 상승했습니다.`);
|
||||
tryApplyUniqueLottery(context, { acquireType: '아이템', reason: ACTION_NAME });
|
||||
|
||||
return { effects: [] };
|
||||
|
||||
@@ -133,10 +133,7 @@ export class ActionDefinition<
|
||||
const baseScore = Math.round((general.crew * general.train * general.atmos) / 20 / 10000);
|
||||
const score = baseScore * multiplier;
|
||||
const armTypeName = resolveArmTypeName(context.unitSet, crewType.armType);
|
||||
const logPrefix = pick === 'success' ? '단련이 일취월장하여' : pick === 'fail' ? '단련이 지지부진하여' : '';
|
||||
const logText = logPrefix
|
||||
? `${logPrefix} ${armTypeName} 숙련도가 ${score} 향상되었습니다.`
|
||||
: `${armTypeName} 숙련도가 ${score} 향상되었습니다.`;
|
||||
const scoreText = score.toLocaleString();
|
||||
|
||||
const dexKey = `dex${crewType.armType}`;
|
||||
const nextDex = getMetaNumber(general.meta, dexKey, 0) + score;
|
||||
@@ -156,7 +153,17 @@ export class ActionDefinition<
|
||||
general.gold = Math.max(0, general.gold - cost);
|
||||
general.rice = Math.max(0, general.rice - cost);
|
||||
|
||||
context.addLog(logText);
|
||||
if (pick === 'success') {
|
||||
context.addLog(
|
||||
`단련이 <S>일취월장</>하여 ${armTypeName} 숙련도가 <C>${scoreText}</> 향상되었습니다.`
|
||||
);
|
||||
} else if (pick === 'fail') {
|
||||
context.addLog(
|
||||
`단련이 <span class='ev_failed'>지지부진</span>하여 ${armTypeName} 숙련도가 <C>${scoreText}</> 향상되었습니다.`
|
||||
);
|
||||
} else {
|
||||
context.addLog(`${armTypeName} 숙련도가 <C>${scoreText}</> 향상되었습니다.`);
|
||||
}
|
||||
tryApplyUniqueLottery(context, { acquireType: '아이템', reason: ACTION_NAME });
|
||||
|
||||
return { effects: [] };
|
||||
|
||||
@@ -123,6 +123,12 @@ export class ActionResolver<
|
||||
category: LogCategory.ACTION,
|
||||
});
|
||||
|
||||
if (!ctx.nation) {
|
||||
ctx.addLog(`<Y>${destGeneral.name}</>에게 등용 권유 서신을 보내지 못했습니다. 국가 정보가 없습니다.`, {
|
||||
category: LogCategory.ACTION,
|
||||
});
|
||||
}
|
||||
|
||||
effects.push(
|
||||
createLogEffect(
|
||||
`<Y>${general.name}</>(${ctx.nation?.name ?? '재야'})로 부터 등용 권유 서신이 도착했습니다.`,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { RandomGenerator } from '@sammo-ts/common';
|
||||
import { JosaUtil } from '@sammo-ts/common';
|
||||
import type { City, General, GeneralMeta, GeneralTriggerState, Nation } from '@sammo-ts/logic/domain/entities.js';
|
||||
import type { Constraint, ConstraintContext, RequirementKey, StateView } from '@sammo-ts/logic/constraints/types.js';
|
||||
import {
|
||||
@@ -253,9 +254,18 @@ export class ActionResolver<
|
||||
? { ...metaWithStatExp, max_domestic_critical: result.score }
|
||||
: { ...metaWithStatExp, max_domestic_critical: 0 };
|
||||
|
||||
const pickLabel = result.pick === 'success' ? '성공' : result.pick === 'fail' ? '실패' : '완료';
|
||||
const logMessage = `${ACTION_NAME} ${pickLabel}: +${Math.round(result.score)}`;
|
||||
context.addLog(logMessage);
|
||||
const scoreText = Math.round(result.score).toLocaleString();
|
||||
const logName = ACTION_NAME.replace(' ', '');
|
||||
const josaUl = JosaUtil.pick(logName, '을');
|
||||
if (result.pick === 'fail') {
|
||||
context.addLog(
|
||||
`${logName}${josaUl} <span class='ev_failed'>실패</span>하여 <C>${scoreText}</> 상승했습니다.`
|
||||
);
|
||||
} else if (result.pick === 'success') {
|
||||
context.addLog(`${logName}${josaUl} <S>성공</>하여 <C>${scoreText}</> 상승했습니다.`);
|
||||
} else {
|
||||
context.addLog(`${logName}${josaUl} 하여 <C>${scoreText}</> 상승했습니다.`);
|
||||
}
|
||||
tryApplyUniqueLottery(context, { acquireType: '아이템', reason: ACTION_NAME });
|
||||
|
||||
return { effects: [] };
|
||||
|
||||
@@ -40,12 +40,10 @@ export class ActionDefinition<
|
||||
const maxPop = city.populationMax;
|
||||
|
||||
const nextPop = clamp(currentPop + crew, 0, maxPop);
|
||||
const addedPop = nextPop - currentPop;
|
||||
|
||||
general.crew = 0;
|
||||
city.population = nextPop;
|
||||
|
||||
context.addLog(`병사들을 소집해제하여 인구가 ${addedPop} 증가했습니다.`);
|
||||
context.addLog(`병사들을 <R>소집해제</>하였습니다.`);
|
||||
|
||||
return { effects: [] };
|
||||
}
|
||||
|
||||
@@ -357,7 +357,9 @@ export class ActionResolver<
|
||||
|
||||
const nameObjJosa = JosaUtil.pick(name, '을');
|
||||
const nameSubjJosa = JosaUtil.pick(name, '이');
|
||||
context.addLog(`인재 <Y>${name}</>${nameObjJosa} 발견했습니다.`, {
|
||||
const recruitVerb = randomRangeInt(context.rng, 0, 1) === 0 ? '발견' : '등용';
|
||||
const nameRa = JosaUtil.pick(name, '라');
|
||||
context.addLog(`<Y>${name}</>${nameRa}는 <C>인재</>를 ${recruitVerb}하였습니다!`, {
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
});
|
||||
|
||||
@@ -55,7 +55,8 @@ export class ActionDefinition<
|
||||
context: GeneralActionResolveContext<TriggerState>,
|
||||
args: AppointmentArgs
|
||||
): GeneralActionOutcome<TriggerState> {
|
||||
context.addLog(`${ACTION_NAME}을 신청했습니다. (국가 ${args.destNationId})`, {
|
||||
const destNationName = context.nation?.name ?? `${args.destNationId}`;
|
||||
context.addLog(`<D>${destNationName}</>에 임관했습니다.`, {
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
});
|
||||
|
||||
@@ -15,6 +15,7 @@ import { defaultActionContextBuilder } from '@sammo-ts/logic/actions/turn/action
|
||||
import { tryApplyUniqueLottery } from '@sammo-ts/logic/rewards/uniqueLottery.js';
|
||||
import { clamp } from 'es-toolkit';
|
||||
import type { GeneralTurnCommandSpec } from './index.js';
|
||||
import { JosaUtil } from '@sammo-ts/common';
|
||||
|
||||
export interface SettlementArgs {}
|
||||
|
||||
@@ -68,7 +69,10 @@ export class ActionDefinition<
|
||||
city.population = nextValue;
|
||||
general.rice = Math.max(0, general.rice - costRice);
|
||||
|
||||
context.addLog(`인구가 ${nextValue - current} 증가했습니다.`);
|
||||
const scoreText = (nextValue - current).toLocaleString();
|
||||
const logName = this.name.replace(' ', '');
|
||||
const josaUl = JosaUtil.pick(logName, '을');
|
||||
context.addLog(`${logName}${josaUl} 하여 주민이 <C>${scoreText}</>명 증가했습니다.`);
|
||||
tryApplyUniqueLottery(context, { acquireType: '아이템', reason: '정착 장려' });
|
||||
|
||||
return { effects: [] };
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { RandomGenerator } from '@sammo-ts/common';
|
||||
import { JosaUtil } from '@sammo-ts/common';
|
||||
import type { City, General, GeneralMeta, GeneralTriggerState, Nation } from '@sammo-ts/logic/domain/entities.js';
|
||||
import type { Constraint, ConstraintContext, RequirementKey } from '@sammo-ts/logic/constraints/types.js';
|
||||
import {
|
||||
@@ -165,7 +166,10 @@ export class ActionDefinition<
|
||||
general.dedication += result.dedication;
|
||||
general.meta = { ...addMetaNumber(general.meta, STAT_EXP_KEY, 1), max_domestic_critical: 0 };
|
||||
|
||||
context.addLog(`민심이 ${result.trustDelta.toFixed(1)} 상승했습니다.`);
|
||||
const scoreText = result.trustDelta.toFixed(1);
|
||||
const logName = ACTION_NAME.replace(' ', '');
|
||||
const josaUl = JosaUtil.pick(logName, '을');
|
||||
context.addLog(`${logName}${josaUl} 하여 <C>${scoreText}</> 상승했습니다.`);
|
||||
tryApplyUniqueLottery(context, { acquireType: '아이템', reason: ACTION_NAME });
|
||||
return { effects: [] };
|
||||
}
|
||||
|
||||
@@ -350,9 +350,7 @@ export class ActionResolver<
|
||||
let nextCrew = general.crew;
|
||||
let nextTrain = general.train;
|
||||
let nextAtmos = general.atmos;
|
||||
let logMessage = '';
|
||||
|
||||
const crewLabel = `${crewType.name} ${appliedCrew}명`;
|
||||
const crewLabel = `${crewType.name} <C>${appliedCrew.toLocaleString()}</>명`;
|
||||
if (crewType.id === general.crewTypeId && general.crew > 0) {
|
||||
nextCrew = general.crew + appliedCrew;
|
||||
nextTrain = Math.round(
|
||||
@@ -361,13 +359,13 @@ export class ActionResolver<
|
||||
nextAtmos = Math.round(
|
||||
(general.crew * general.atmos + appliedCrew * setAtmos) / (general.crew + appliedCrew)
|
||||
);
|
||||
logMessage = `${crewLabel} 추가 ${ACTION_NAME}했습니다.`;
|
||||
context.addLog(`${crewLabel} 추가${ACTION_NAME}했습니다.`);
|
||||
} else {
|
||||
nextCrewTypeId = crewType.id;
|
||||
nextCrew = appliedCrew;
|
||||
nextTrain = Math.round(setTrain);
|
||||
nextAtmos = Math.round(setAtmos);
|
||||
logMessage = `${crewLabel} ${ACTION_NAME}했습니다.`;
|
||||
context.addLog(`${crewLabel} ${ACTION_NAME}했습니다.`);
|
||||
}
|
||||
|
||||
const nextGold = Math.max(0, general.gold - plan.gold);
|
||||
@@ -392,7 +390,6 @@ export class ActionResolver<
|
||||
general.dedication += dedGain;
|
||||
general.meta = addMetaNumber(general.meta, 'leadership_exp', 1);
|
||||
|
||||
context.addLog(logMessage);
|
||||
tryApplyUniqueLottery(context, { acquireType: '아이템', reason: ACTION_NAME });
|
||||
|
||||
return { effects: [] };
|
||||
|
||||
@@ -348,11 +348,12 @@ export class ActionDefinition<
|
||||
} else {
|
||||
const targetName = finalTargetCity.name;
|
||||
const josaRoTarget = JosaUtil.pick(targetName, '로');
|
||||
const josaUl = JosaUtil.pick(destCity.name, '을');
|
||||
context.addLog(
|
||||
`가까운 경로에 적군 도시가 없습니다. <G><b>${destCity.name}</b></>${josaRo} 이동합니다.`
|
||||
);
|
||||
context.addLog(
|
||||
`<G><b>${targetName}</b></>${josaRoTarget} 가는 도중 <G><b>${destCity.name}</b></>을 거치기로 합니다.`
|
||||
`<G><b>${targetName}</b></>${josaRoTarget} 가는 도중 <G><b>${destCity.name}</b></>${josaUl} 거치기로 합니다.`
|
||||
);
|
||||
}
|
||||
return {
|
||||
|
||||
@@ -86,6 +86,7 @@ export class ActionDefinition<
|
||||
|
||||
const josaYi = JosaUtil.pick(generalName, '이');
|
||||
const josaYiNation = JosaUtil.pick(newNationName, '이');
|
||||
const josaRo = JosaUtil.pick(newNationName, '로');
|
||||
|
||||
const effects: Array<GeneralActionEffect<TriggerState>> = [
|
||||
createNationPatchEffect(
|
||||
@@ -99,14 +100,14 @@ export class ActionDefinition<
|
||||
nation.id
|
||||
),
|
||||
// Global Action Log
|
||||
createLogEffect(`<Y>${generalName}</>${josaYi} 국호를 <D><b>${newNationName}</b></>로 변경하였습니다.`, {
|
||||
createLogEffect(`<Y>${generalName}</>${josaYi} 국호를 <D><b>${newNationName}</b></>${josaRo} 변경합니다.`, {
|
||||
scope: LogScope.SYSTEM,
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.PLAIN,
|
||||
}),
|
||||
// Global History Log
|
||||
createLogEffect(
|
||||
`<S><b>【${ACTION_NAME}】</b></><D><b>${oldNationName}</b></>${josaYiNation} 국호를 <D><b>${newNationName}</b></>로 변경하였습니다.`,
|
||||
`<S><b>【${ACTION_NAME}】</b></><D><b>${oldNationName}</b></>${josaYiNation} 국호를 <D><b>${newNationName}</b></>${josaRo} 변경합니다.`,
|
||||
{
|
||||
scope: LogScope.SYSTEM,
|
||||
category: LogCategory.HISTORY,
|
||||
@@ -114,14 +115,14 @@ export class ActionDefinition<
|
||||
}
|
||||
),
|
||||
// Actor Nation History Log
|
||||
createLogEffect(`<Y>${generalName}</>${josaYi} 국호를 <D><b>${newNationName}</b></>로 변경하였습니다.`, {
|
||||
createLogEffect(`<Y>${generalName}</>${josaYi} 국호를 <D><b>${newNationName}</b></>${josaRo} 변경`, {
|
||||
scope: LogScope.NATION,
|
||||
nationId: nation.id,
|
||||
category: LogCategory.HISTORY,
|
||||
format: LogFormat.YEAR_MONTH,
|
||||
}),
|
||||
// General Action Log
|
||||
createLogEffect(`국호를 <D><b>${newNationName}</b></>로 변경하였습니다.`, {
|
||||
createLogEffect(`국호를 <D><b>${newNationName}</b></>${josaRo} 변경합니다.`, {
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
|
||||
@@ -117,6 +117,7 @@ export class ActionDefinition<
|
||||
|
||||
const amountText = actualAmount.toLocaleString();
|
||||
const josaUl = JosaUtil.pick(amountText, '을');
|
||||
const destGeneralName = destGeneral.name;
|
||||
|
||||
const effects: Array<GeneralActionEffect<TriggerState>> = [
|
||||
createGeneralPatchEffect(
|
||||
@@ -132,7 +133,7 @@ export class ActionDefinition<
|
||||
nation.id
|
||||
),
|
||||
// Actor General Action Log
|
||||
createLogEffect(`<Y>${destGeneral.name}</>에게서 ${resName} <C>${amountText}</>${josaUl} 몰수했습니다.`, {
|
||||
createLogEffect(`<Y>${destGeneralName}</>에게서 ${resName} <C>${amountText}</>${josaUl} 몰수했습니다.`, {
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
|
||||
@@ -12,6 +12,7 @@ import type { GeneralActionDefinition } from '@sammo-ts/logic/actions/definition
|
||||
import type { GeneralActionOutcome, GeneralActionResolveContext } from '@sammo-ts/logic/actions/engine.js';
|
||||
import { createLogEffect } from '@sammo-ts/logic/actions/engine.js';
|
||||
import { LogCategory, LogFormat, LogScope } from '@sammo-ts/logic/logging/types.js';
|
||||
import { JosaUtil } from '@sammo-ts/common';
|
||||
import type { ActionContextBuilder } from '@sammo-ts/logic/actions/turn/actionContext.js';
|
||||
import type { TurnCommandEnv } from '@sammo-ts/logic/actions/turn/commandEnv.js';
|
||||
import type { NationTurnCommandSpec } from './index.js';
|
||||
@@ -119,9 +120,12 @@ export class ActionDefinition<
|
||||
_context: GeneralActionResolveContext<TriggerState>,
|
||||
args: NonAggressionProposalArgs
|
||||
): GeneralActionOutcome<TriggerState> {
|
||||
const destNationName =
|
||||
(_context as { destNation?: { name?: string } }).destNation?.name ?? `국가${args.destNationId}`;
|
||||
const josaRo = JosaUtil.pick(destNationName, '로');
|
||||
return {
|
||||
effects: [
|
||||
createLogEffect(`${ACTION_NAME}을 준비했습니다. (국가 ${args.destNationId})`, {
|
||||
createLogEffect(`<D><b>${destNationName}</b></>${josaRo} 불가침 제의 서신을 보냈습니다.`, {
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
|
||||
@@ -12,6 +12,7 @@ import type { GeneralActionDefinition } from '@sammo-ts/logic/actions/definition
|
||||
import type { GeneralActionOutcome, GeneralActionResolveContext } from '@sammo-ts/logic/actions/engine.js';
|
||||
import { createLogEffect } from '@sammo-ts/logic/actions/engine.js';
|
||||
import { LogCategory, LogFormat, LogScope } from '@sammo-ts/logic/logging/types.js';
|
||||
import { JosaUtil } from '@sammo-ts/common';
|
||||
import type { TurnCommandEnv } from '@sammo-ts/logic/actions/turn/commandEnv.js';
|
||||
import { defaultActionContextBuilder } from '@sammo-ts/logic/actions/turn/actionContext.js';
|
||||
import type { NationTurnCommandSpec } from './index.js';
|
||||
@@ -59,9 +60,12 @@ export class ActionDefinition<
|
||||
_context: GeneralActionResolveContext<TriggerState>,
|
||||
args: NonAggressionCancelProposalArgs
|
||||
): GeneralActionOutcome<TriggerState> {
|
||||
const destNationName =
|
||||
(_context as { destNation?: { name?: string } }).destNation?.name ?? `국가${args.destNationId}`;
|
||||
const josaRo = JosaUtil.pick(destNationName, '로');
|
||||
return {
|
||||
effects: [
|
||||
createLogEffect(`${ACTION_NAME}을 준비했습니다. (국가 ${args.destNationId})`, {
|
||||
createLogEffect(`<D><b>${destNationName}</b></>${josaRo} 불가침 파기 제의 서신을 보냈습니다.`, {
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
|
||||
@@ -133,7 +133,7 @@ export class ActionResolver<
|
||||
|
||||
const amountJosa = JosaUtil.pick(amountText, '을');
|
||||
effects.push(
|
||||
createLogEffect(`${label} ${amountText}${amountJosa} 포상으로 받았습니다.`, {
|
||||
createLogEffect(`${label} <C>${amountText}</>${amountJosa} 포상으로 받았습니다.`, {
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
generalId: context.destGeneral.id,
|
||||
@@ -141,11 +141,14 @@ export class ActionResolver<
|
||||
})
|
||||
);
|
||||
effects.push(
|
||||
createLogEffect(`<Y>${context.destGeneral.name}</>에게 ${label} ${amountText}${amountJosa} 수여했습니다.`, {
|
||||
createLogEffect(
|
||||
`<Y>${context.destGeneral.name}</>에게 ${label} <C>${amountText}</>${amountJosa} 수여했습니다.`,
|
||||
{
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
format: LogFormat.MONTH,
|
||||
})
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
return { effects };
|
||||
|
||||
@@ -1,6 +1,19 @@
|
||||
{
|
||||
"Global": {
|
||||
"templates": [],
|
||||
"templates": [
|
||||
"${}에게서 몰수할 ${}이 없습니다.",
|
||||
"이동할 인구가 부족합니다.",
|
||||
"이미 같은 국호를 가진 곳이 있습니다. ${} 실패",
|
||||
"<Y>${}</>에게 등용 권유 서신을 보내지 못했습니다. ${}",
|
||||
"<Y>${}</>에게 부대 탈퇴를 지시 받았습니다.",
|
||||
"<Y>${}</>에 의해 <G>${}</>${} 발령됐습니다.",
|
||||
"경로에 도달할 방법이 없습니다.",
|
||||
"${}${} <span class='ev_failed'>실패</span>하여 <C>${}</> 상승했습니다.",
|
||||
"${}${} <S>성공</>하여 <C>${}</> 상승했습니다.",
|
||||
"${}이 ${}에 국가를 건설하였습니다.",
|
||||
"민심이 ${} 상승했습니다.",
|
||||
"다음 턴부터 건국할 수 있습니다."
|
||||
],
|
||||
"regex": []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -586,6 +586,7 @@ const normalizeTemplate = (text) => {
|
||||
out = out.replace(/<1>.*?<\/>/g, '');
|
||||
}
|
||||
out = out.replace(/<\/?b>/g, '');
|
||||
out = out.replace(/\{\$\{[^}]*\}[^}]*\}/g, '${}');
|
||||
out = out.replace(/\$\{[^}]*\}/g, '${}');
|
||||
out = out.replace(/\{\$[A-Za-z_][A-Za-z0-9_]*\}/g, '${}');
|
||||
out = out.replace(/\$[A-Za-z_][A-Za-z0-9_]*\b/g, '${}');
|
||||
|
||||
Reference in New Issue
Block a user