Revert "refactor: Introduce dedicated interfaces for trait stat calculation and update TraitModule to use them."

This reverts commit 27f7b8e894.
This commit is contained in:
2026-01-05 19:53:25 +00:00
parent da6a095151
commit 19851c6e08
30 changed files with 553 additions and 328 deletions
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -10,20 +10,34 @@ export const traitModule: TraitModule = {
kind: 'personality', kind: 'personality',
getName: () => '대의', getName: () => '대의',
getInfo: () => '명성 +10%, 훈련 -5', getInfo: () => '명성 +10%, 훈련 -5',
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 1.1; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'bonusTrain') { value: number | [number, number],
return value - 5; _aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (typeof value === 'number') {
if (statName === 'experience') {
return value * 1.1;
}
if (statName === 'bonusTrain') {
return value - 5;
}
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,15 +16,29 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (statName === 'bonusAtmos' && typeof value === 'number') { ): number;
return value - 5; function onCalcStat(
_context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName === 'bonusAtmos' && typeof value === 'number') {
return value - 5;
}
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -10,20 +10,34 @@ export const traitModule: TraitModule = {
kind: 'personality', kind: 'personality',
getName: () => '왕좌', getName: () => '왕좌',
getInfo: () => '명성 +10%, 사기 -5', getInfo: () => '명성 +10%, 사기 -5',
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 1.1; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'bonusAtmos') { value: number | [number, number],
return value - 5; _aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (typeof value === 'number') {
if (statName === 'experience') {
return value * 1.1;
}
if (statName === 'bonusAtmos') {
return value - 5;
}
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,15 +16,29 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (statName === 'bonusTrain' && typeof value === 'number') { ): number;
return value - 5; function onCalcStat(
_context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName === 'bonusTrain' && typeof value === 'number') {
return value - 5;
}
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,26 +16,40 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 0.9; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'dedication') { value: number | [number, number],
return value * 0.9; _aux?: unknown
} ): number | [number, number];
if (statName === 'bonusAtmos') { function onCalcStat(
return value - 5; _context: GeneralActionContext | WarActionContext,
} statName: GeneralStatName | WarStatName,
if (statName === 'bonusTrain') { value: number | [number, number]
return value - 5; ): number | [number, number] {
if (typeof value === 'number') {
if (statName === 'experience') {
return value * 0.9;
}
if (statName === 'dedication') {
return value * 0.9;
}
if (statName === 'bonusAtmos') {
return value - 5;
}
if (statName === 'bonusTrain') {
return value - 5;
}
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,20 +16,29 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 0.9; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'bonusAtmos') { value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName === 'bonusAtmos' && typeof value === 'number') {
return value + 5; return value + 5;
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,15 +16,29 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (statName === 'experience' && typeof value === 'number') { ): number;
return value * 0.9; function onCalcStat(
_context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName === 'experience' && typeof value === 'number') {
return value * 0.9;
}
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -10,20 +10,34 @@ export const traitModule: TraitModule = {
kind: 'personality', kind: 'personality',
getName: () => '정복', getName: () => '정복',
getInfo: () => '명성 -10%, 사기 +5', getInfo: () => '명성 -10%, 사기 +5',
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 0.9; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'bonusAtmos') { value: number | [number, number],
return value + 5; _aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (typeof value === 'number') {
if (statName === 'experience') {
return value * 0.9;
}
if (statName === 'bonusAtmos') {
return value + 5;
}
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,20 +16,29 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
_context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName === 'experience' && typeof value === 'number') {
return value * 1.1; return value * 1.1;
} }
if (statName === 'bonusTrain') { return value;
return value + 5;
}
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -16,20 +16,29 @@ export const traitModule: TraitModule = {
} }
return value; return value;
}, },
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 1.1; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'bonusAtmos') { value: number | [number, number],
return value - 5; _aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (statName === 'bonusTrain' && typeof value === 'number') {
return value + 5;
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
@@ -1,4 +1,4 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js'; import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
@@ -10,20 +10,34 @@ export const traitModule: TraitModule = {
kind: 'personality', kind: 'personality',
getName: () => '할거', getName: () => '할거',
getInfo: () => '명성 -10%, 훈련 +5', getInfo: () => '명성 -10%, 훈련 +5',
onCalcStat: (( onCalcStat: (() => {
_context: GeneralActionContext | WarActionContext, function onCalcStat(
statName: GeneralStatName | WarStatName, _context: GeneralActionContext,
value: number | [number, number], statName: GeneralStatName,
_aux?: unknown value: number,
): number | [number, number] => { _aux?: unknown
if (typeof value === 'number') { ): number;
if (statName === 'experience') { function onCalcStat(
return value * 0.9; _context: WarActionContext,
} statName: WarStatName,
if (statName === 'bonusTrain') { value: number | [number, number],
return value + 5; _aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number]
): number | [number, number] {
if (typeof value === 'number') {
if (statName === 'experience') {
return value * 0.9;
}
if (statName === 'bonusTrain') {
return value + 5;
}
} }
return value;
} }
return value; return onCalcStat;
}) as unknown as TraitOnCalcStat, })() as Exclude<TraitModule['onCalcStat'], undefined>,
}; };
+3 -28
View File
@@ -1,8 +1,6 @@
import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js'; import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js';
import type { GeneralActionModule } from '@sammo-ts/logic/triggers/general-action.js'; import type { GeneralActionModule } from '@sammo-ts/logic/triggers/general-action.js';
import type { WarActionModule, WarActionContext } from '@sammo-ts/logic/war/actions.js'; import type { WarActionModule } from '@sammo-ts/logic/war/actions.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
export type TraitKind = 'domestic' | 'war' | 'personality'; export type TraitKind = 'domestic' | 'war' | 'personality';
@@ -13,32 +11,9 @@ export interface TraitSpec {
kind: TraitKind; kind: TraitKind;
} }
export interface TraitOnCalcStat<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
(context: GeneralActionContext<TriggerState>, statName: GeneralStatName, value: number, aux?: unknown): number;
(
context: WarActionContext<TriggerState>,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
}
export interface TraitOnCalcOpposeStat<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
(context: GeneralActionContext<TriggerState>, statName: GeneralStatName, value: number, aux?: unknown): number;
(
context: WarActionContext<TriggerState>,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
}
export type TraitModule<TriggerState extends GeneralTriggerState = GeneralTriggerState> = TraitSpec & export type TraitModule<TriggerState extends GeneralTriggerState = GeneralTriggerState> = TraitSpec &
Omit<GeneralActionModule<TriggerState>, 'onCalcStat' | 'onCalcOpposeStat'> & GeneralActionModule<TriggerState> &
Omit<WarActionModule<TriggerState>, 'onCalcStat' | 'onCalcOpposeStat'> & { WarActionModule<TriggerState>;
onCalcStat?: TraitOnCalcStat<TriggerState> | undefined;
onCalcOpposeStat?: TraitOnCalcOpposeStat<TriggerState> | undefined;
};
export interface TraitModuleExport<TriggerState extends GeneralTriggerState = GeneralTriggerState> { export interface TraitModuleExport<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
traitModule: TraitModule<TriggerState>; traitModule: TraitModule<TriggerState>;
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
import { LogFormat } from '@sammo-ts/logic/logging/types.js'; import { LogFormat } from '@sammo-ts/logic/logging/types.js';
@@ -74,14 +74,21 @@ class che_격노발동 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
_statName: GeneralStatName | WarStatName, _statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_격노', key: 'che_격노',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitOnCalcOpposeStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
@@ -21,29 +21,21 @@ class che_부상무효 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
_statName: GeneralStatName | WarStatName, _statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
return value; return value;
}) as unknown as TraitOnCalcStat; }
const onCalcOpposeStat = ((
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number] => {
if (statName === 'warMagicSuccessProb' && typeof value === 'number') {
return value - 0.1;
}
if (statName === 'warCriticalRatio' && typeof value === 'number') {
return value - 0.2;
}
return value;
}) as unknown as TraitOnCalcOpposeStat;
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_견고', key: 'che_견고',
@@ -52,7 +44,15 @@ export const traitModule: TraitModule = {
kind: 'war', kind: 'war',
getName: () => '견고', getName: () => '견고',
getInfo: () => '[전투] 상대 필살 확률 -20%p, 상대 계략 시도시 성공 확률 -10%p, 부상 없음, 아군 피해 -10%', getInfo: () => '[전투] 상대 필살 확률 -20%p, 상대 계략 시도시 성공 확률 -10%p, 부상 없음, 아군 피해 -10%',
onCalcOpposeStat, onCalcOpposeStat: ((_context, statName, value, _aux) => {
if (statName === 'warMagicSuccessProb' && typeof value === 'number') {
return value - 0.1;
}
if (statName === 'warCriticalRatio' && typeof value === 'number') {
return value - 0.2;
}
return value;
}) as TraitModule['onCalcOpposeStat'],
getBattleInitTriggerList: (_context) => { getBattleInitTriggerList: (_context) => {
if (!_context.unit) return null; if (!_context.unit) return null;
return new WarTriggerCaller(new che_부상무효(_context.unit)); return new WarTriggerCaller(new che_부상무효(_context.unit));
@@ -1,17 +1,24 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { getMetaNumber } from '@sammo-ts/logic/war/utils.js'; import { getMetaNumber } from '@sammo-ts/logic/war/utils.js';
import { WarUnitCity } from '@sammo-ts/logic/war/units.js'; import { WarUnitCity } from '@sammo-ts/logic/war/units.js';
import { getAuxArmType, parseWarDexAux } from './aux.js'; import { getAuxArmType, parseWarDexAux } from './aux.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
context: GeneralActionContext | WarActionContext, context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
aux?: unknown aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (!('unit' in context) || !context.unit) { if (!('unit' in context) || !context.unit) {
return value; return value;
} }
@@ -34,7 +41,7 @@ const onCalcStat = ((
} }
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
// 전투 특기: 공성 // 전투 특기: 공성
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
@@ -1,18 +1,25 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { getMetaNumber } from '@sammo-ts/logic/war/utils.js'; import { getMetaNumber } from '@sammo-ts/logic/war/utils.js';
import { getAuxArmType, parseWarDexAux } from './aux.js'; import { getAuxArmType, parseWarDexAux } from './aux.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
context: GeneralActionContext | WarActionContext, context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
aux?: unknown aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warAvoidRatio' && typeof value === 'number') { if (statName === 'warAvoidRatio') {
return value + 0.2; return (value as number) + 0.2;
} }
if (!('unit' in context) || !context.unit) { if (!('unit' in context) || !context.unit) {
@@ -37,7 +44,7 @@ const onCalcStat = ((
} }
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
// 전투 특기: 궁병 // 전투 특기: 궁병
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
@@ -1,16 +1,23 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { getMetaNumber } from '@sammo-ts/logic/war/utils.js'; import { getMetaNumber } from '@sammo-ts/logic/war/utils.js';
import { getAuxArmType, parseWarDexAux } from './aux.js'; import { getAuxArmType, parseWarDexAux } from './aux.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
context: GeneralActionContext | WarActionContext, context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
aux?: unknown aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (!('unit' in context) || !context.unit) { if (!('unit' in context) || !context.unit) {
return value; return value;
} }
@@ -33,7 +40,7 @@ const onCalcStat = ((
} }
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
// 전투 특기: 기병 // 전투 특기: 기병
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
@@ -37,17 +37,24 @@ class che_돌격지속 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'initWarPhase' && typeof value === 'number') { if (statName === 'initWarPhase') {
return value + 2; return (value as number) + 2;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_돌격', key: 'che_돌격',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { getMetaNumber } from '@sammo-ts/logic/war/utils.js'; import { getMetaNumber } from '@sammo-ts/logic/war/utils.js';
import { WarUnit } from '@sammo-ts/logic/war/units.js'; import { WarUnit } from '@sammo-ts/logic/war/units.js';
@@ -11,19 +11,26 @@ type WarUnitWithGeneral = WarUnit & { getGeneral: () => { meta: Record<string, u
const hasGeneral = (unit: WarUnit): unit is WarUnitWithGeneral => const hasGeneral = (unit: WarUnit): unit is WarUnitWithGeneral =>
'getGeneral' in unit && typeof (unit as { getGeneral?: unknown }).getGeneral === 'function'; 'getGeneral' in unit && typeof (unit as { getGeneral?: unknown }).getGeneral === 'function';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
aux?: unknown aux?: unknown
): number | [number, number] => { ): number | [number, number] {
const isAttacker = typeof aux === 'object' && aux !== null && (aux as { isAttacker?: unknown }).isAttacker === true; const isAttacker = typeof aux === 'object' && aux !== null && (aux as { isAttacker?: unknown }).isAttacker === true;
if (statName === 'warCriticalRatio' && isAttacker && typeof value === 'number') { if (statName === 'warCriticalRatio' && isAttacker && typeof value === 'number') {
return value + 0.1; return value + 0.1;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_무쌍', key: 'che_무쌍',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitOnCalcOpposeStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
import { LogFormat } from '@sammo-ts/logic/logging/types.js'; import { LogFormat } from '@sammo-ts/logic/logging/types.js';
@@ -72,29 +72,24 @@ class che_반계발동 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
aux?: unknown aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warMagicSuccessDamage' && aux === '반목' && typeof value === 'number') { if (statName === 'warMagicSuccessDamage' && aux === '반목') {
return value + 0.9; return (value as number) + 0.9;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
const onCalcOpposeStat = ((
_context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName,
value: number | [number, number],
_aux?: unknown
): number | [number, number] => {
if (statName === 'warMagicSuccessProb' && typeof value === 'number') {
return value - 0.1;
}
return value;
}) as unknown as TraitOnCalcOpposeStat;
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_반계', key: 'che_반계',
@@ -104,7 +99,12 @@ export const traitModule: TraitModule = {
getName: () => '반계', getName: () => '반계',
getInfo: () => getInfo: () =>
'[전투] 상대의 계략 성공 확률 -10%p, 상대의 계략을 40% 확률로 되돌림, 반목 성공시 대미지 추가(+60% → +150%)', '[전투] 상대의 계략 성공 확률 -10%p, 상대의 계략을 40% 확률로 되돌림, 반목 성공시 대미지 추가(+60% → +150%)',
onCalcOpposeStat, onCalcOpposeStat: ((_context, statName, value, _aux) => {
if (statName === 'warMagicSuccessProb' && typeof value === 'number') {
return value - 0.1;
}
return value;
}) as TraitModule['onCalcOpposeStat'],
getBattlePhaseTriggerList: (_context) => { getBattlePhaseTriggerList: (_context) => {
if (!_context.unit) return null; if (!_context.unit) return null;
return new WarTriggerCaller(new che_반계시도(_context.unit), new che_반계발동(_context.unit)); return new WarTriggerCaller(new che_반계시도(_context.unit), new che_반계발동(_context.unit));
@@ -1,16 +1,23 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { getMetaNumber } from '@sammo-ts/logic/war/utils.js'; import { getMetaNumber } from '@sammo-ts/logic/war/utils.js';
import { getAuxArmType, parseWarDexAux } from './aux.js'; import { getAuxArmType, parseWarDexAux } from './aux.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
context: GeneralActionContext | WarActionContext, context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
aux?: unknown aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (!('unit' in context) || !context.unit) { if (!('unit' in context) || !context.unit) {
return value; return value;
} }
@@ -33,7 +40,7 @@ const onCalcStat = ((
} }
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
// 전투 특기: 보병 // 전투 특기: 보병
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
@@ -1,22 +1,29 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warMagicTrialProb' && typeof value === 'number') { if (statName === 'warMagicTrialProb') {
return value + 0.2; return (value as number) + 0.2;
} }
if (statName === 'warMagicSuccessProb' && typeof value === 'number') { if (statName === 'warMagicSuccessProb') {
return value + 0.2; return (value as number) + 0.2;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_신산', key: 'che_신산',
@@ -1,19 +1,26 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warMagicSuccessProb' && typeof value === 'number') { if (statName === 'warMagicSuccessProb') {
return value + 1; return (value as number) + 1;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_신중', key: 'che_신중',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
import { LogFormat } from '@sammo-ts/logic/logging/types.js'; import { LogFormat } from '@sammo-ts/logic/logging/types.js';
@@ -61,14 +61,21 @@ class che_위압발동 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
_statName: GeneralStatName | WarStatName, _statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_위압', key: 'che_위압',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
import { LogFormat } from '@sammo-ts/logic/logging/types.js'; import { LogFormat } from '@sammo-ts/logic/logging/types.js';
@@ -99,14 +99,21 @@ class che_저격발동 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
_statName: GeneralStatName | WarStatName, _statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_저격', key: 'che_저격',
@@ -1,19 +1,26 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warMagicSuccessDamage' && typeof value === 'number') { if (statName === 'warMagicSuccessDamage') {
return value * 1.5; return (value as number) * 1.5;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_집중', key: 'che_집중',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
const RECRUIT_TRAIN = 70; const RECRUIT_TRAIN = 70;
const CONSCRIPT_TRAIN = 84; const CONSCRIPT_TRAIN = 84;
@@ -17,17 +17,23 @@ const resolveLeadershipBonus = (
return value + base * 0.25; return value + base * 0.25;
}; };
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
context: GeneralActionContext | WarActionContext, context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number]
_aux?: unknown ): number | [number, number] {
): number | [number, number] => {
if (statName !== 'leadership') { if (statName !== 'leadership') {
return value; return value;
} }
return resolveLeadershipBonus(context, value); return resolveLeadershipBonus(context, value);
}) as unknown as TraitOnCalcStat; }
// 전투 특기: 징병 // 전투 특기: 징병
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
@@ -1,16 +1,23 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
_statName: GeneralStatName | WarStatName, _statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_척사', key: 'che_척사',
@@ -1,7 +1,7 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js'; import { BaseWarUnitTrigger, WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
import type { WarUnit } from '@sammo-ts/logic/war/units.js'; import type { WarUnit } from '@sammo-ts/logic/war/units.js';
@@ -25,21 +25,28 @@ class che_필살강화_회피불가 extends BaseWarUnitTrigger {
} }
} }
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warCriticalRatio' && typeof value === 'number') { if (statName === 'warCriticalRatio') {
return value + 0.3; return (value as number) + 0.3;
} }
if (statName === 'criticalDamageRange' && Array.isArray(value)) { if (statName === 'criticalDamageRange') {
const [rangeMin, rangeMax] = value; const [rangeMin, rangeMax] = value as [number, number];
return [(rangeMin + rangeMax) / 2, rangeMax]; return [(rangeMin + rangeMax) / 2, rangeMax];
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_필살', key: 'che_필살',
@@ -1,22 +1,29 @@
import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js'; import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js'; import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
const onCalcStat = (( function onCalcStat(context: GeneralActionContext, statName: GeneralStatName, value: number, aux?: unknown): number;
function onCalcStat(
context: WarActionContext,
statName: WarStatName,
value: number | [number, number],
aux?: unknown
): number | [number, number];
function onCalcStat(
_context: GeneralActionContext | WarActionContext, _context: GeneralActionContext | WarActionContext,
statName: GeneralStatName | WarStatName, statName: GeneralStatName | WarStatName,
value: number | [number, number], value: number | [number, number],
_aux?: unknown _aux?: unknown
): number | [number, number] => { ): number | [number, number] {
if (statName === 'warMagicSuccessProb' && typeof value === 'number') { if (statName === 'warMagicSuccessProb') {
return value + 0.1; return (value as number) + 0.1;
} }
if (statName === 'warMagicSuccessDamage' && typeof value === 'number') { if (statName === 'warMagicSuccessDamage') {
return value * 1.3; return (value as number) * 1.3;
} }
return value; return value;
}) as unknown as TraitOnCalcStat; }
export const traitModule: TraitModule = { export const traitModule: TraitModule = {
key: 'che_환술', key: 'che_환술',