feat: update stat handling by introducing specific types for GeneralStatName and WarStatName across various modules
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
||||||
|
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
||||||
import type { ItemModule, ItemSlot } from './types.js';
|
import type { ItemModule, ItemSlot } from './types.js';
|
||||||
|
|
||||||
const resolveStatLabel = (statName: string): string => {
|
const resolveStatLabel = (statName: GeneralStatName): string => {
|
||||||
switch (statName) {
|
switch (statName) {
|
||||||
case 'leadership':
|
case 'leadership':
|
||||||
return '통솔';
|
return '통솔';
|
||||||
@@ -37,19 +38,19 @@ export const createStatItemModule = (
|
|||||||
const info = options.extraInfo ? `${baseInfo}<br>${options.extraInfo}` : baseInfo;
|
const info = options.extraInfo ? `${baseInfo}<br>${options.extraInfo}` : baseInfo;
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: GeneralActionContext,
|
_context: GeneralActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
_aux?: unknown
|
_aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: WarActionContext,
|
_context: WarActionContext,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
_aux?: unknown
|
_aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: GeneralActionContext | WarActionContext,
|
_context: GeneralActionContext | WarActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName | WarStatName,
|
||||||
value: number | [number, number]
|
value: number | [number, number]
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
if (statName !== options.statName) {
|
if (statName !== options.statName) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { createStatItemModule } from './base.js';
|
import { createStatItemModule } from './base.js';
|
||||||
import type { ItemModule } from './types.js';
|
import type { ItemModule } from './types.js';
|
||||||
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
||||||
|
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
||||||
|
|
||||||
const STAT_VALUE = 3;
|
const STAT_VALUE = 3;
|
||||||
@@ -22,19 +23,19 @@ export const itemModule: ItemModule = {
|
|||||||
onCalcStat: (() => {
|
onCalcStat: (() => {
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: GeneralActionContext,
|
_context: GeneralActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
_aux?: unknown
|
_aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: WarActionContext,
|
_context: WarActionContext,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
_aux?: unknown
|
_aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: GeneralActionContext | WarActionContext,
|
_context: GeneralActionContext | WarActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName | WarStatName,
|
||||||
value: number | [number, number]
|
value: number | [number, number]
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
let base = value;
|
let base = value;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { createStatItemModule } from './base.js';
|
import { createStatItemModule } from './base.js';
|
||||||
import type { ItemModule } from './types.js';
|
import type { ItemModule } from './types.js';
|
||||||
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
||||||
|
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
||||||
|
|
||||||
const STAT_VALUE = 8;
|
const STAT_VALUE = 8;
|
||||||
@@ -23,19 +24,19 @@ export const itemModule: ItemModule = {
|
|||||||
onCalcStat: (() => {
|
onCalcStat: (() => {
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: GeneralActionContext,
|
_context: GeneralActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
_aux?: unknown
|
_aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: WarActionContext,
|
_context: WarActionContext,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
_aux?: unknown
|
_aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
_context: GeneralActionContext | WarActionContext,
|
_context: GeneralActionContext | WarActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName | WarStatName,
|
||||||
value: number | [number, number]
|
value: number | [number, number]
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
let base = value;
|
let base = value;
|
||||||
|
|||||||
@@ -4,6 +4,17 @@ import {
|
|||||||
GeneralTriggerCaller,
|
GeneralTriggerCaller,
|
||||||
type GeneralActionContext,
|
type GeneralActionContext,
|
||||||
} from '@sammo-ts/logic/triggers/general.js';
|
} from '@sammo-ts/logic/triggers/general.js';
|
||||||
|
import type {
|
||||||
|
GeneralStatName,
|
||||||
|
TriggerActionPhase,
|
||||||
|
TriggerActionType,
|
||||||
|
TriggerDomesticActionType,
|
||||||
|
TriggerDomesticVarType,
|
||||||
|
TriggerNationalIncomeType,
|
||||||
|
TriggerStrategicActionType,
|
||||||
|
TriggerStrategicVarType,
|
||||||
|
WarStatName,
|
||||||
|
} from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext, WarActionModule } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext, WarActionModule } from '@sammo-ts/logic/war/actions.js';
|
||||||
import { WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
|
import { 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';
|
||||||
@@ -138,8 +149,8 @@ class ItemGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcDomestic(
|
onCalcDomestic(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerDomesticActionType,
|
||||||
varType: string,
|
varType: TriggerDomesticVarType,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -155,7 +166,7 @@ class ItemGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcStat(
|
onCalcStat(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -171,7 +182,7 @@ class ItemGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcOpposeStat(
|
onCalcOpposeStat(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -187,8 +198,8 @@ class ItemGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcStrategic(
|
onCalcStrategic(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerStrategicActionType,
|
||||||
varType: string,
|
varType: TriggerStrategicVarType,
|
||||||
value: number
|
value: number
|
||||||
): number {
|
): number {
|
||||||
let current = value;
|
let current = value;
|
||||||
@@ -203,7 +214,7 @@ class ItemGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcNationalIncome(
|
onCalcNationalIncome(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
type: string,
|
type: TriggerNationalIncomeType,
|
||||||
amount: number
|
amount: number
|
||||||
): number {
|
): number {
|
||||||
let current = amount;
|
let current = amount;
|
||||||
@@ -218,8 +229,8 @@ class ItemGeneralActionRouter<
|
|||||||
|
|
||||||
onArbitraryAction(
|
onArbitraryAction(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
actionType: string,
|
actionType: TriggerActionType,
|
||||||
phase?: string | null,
|
phase?: TriggerActionPhase | null,
|
||||||
aux?: Record<string, unknown> | null
|
aux?: Record<string, unknown> | null
|
||||||
): Record<string, unknown> | null {
|
): Record<string, unknown> | null {
|
||||||
let current = aux ?? null;
|
let current = aux ?? null;
|
||||||
@@ -283,7 +294,7 @@ class ItemWarActionRouter<
|
|||||||
|
|
||||||
onCalcStat(
|
onCalcStat(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
@@ -299,7 +310,7 @@ class ItemWarActionRouter<
|
|||||||
|
|
||||||
onCalcOpposeStat(
|
onCalcOpposeStat(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
|
|||||||
@@ -3,6 +3,17 @@ import type {
|
|||||||
GeneralActionContext,
|
GeneralActionContext,
|
||||||
GeneralTriggerCaller,
|
GeneralTriggerCaller,
|
||||||
} from '@sammo-ts/logic/triggers/general.js';
|
} from '@sammo-ts/logic/triggers/general.js';
|
||||||
|
import type {
|
||||||
|
GeneralStatName,
|
||||||
|
TriggerActionPhase,
|
||||||
|
TriggerActionType,
|
||||||
|
TriggerDomesticActionType,
|
||||||
|
TriggerDomesticVarType,
|
||||||
|
TriggerNationalIncomeType,
|
||||||
|
TriggerStrategicActionType,
|
||||||
|
TriggerStrategicVarType,
|
||||||
|
WarStatName,
|
||||||
|
} from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
||||||
import type { WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
|
import type { 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';
|
||||||
@@ -29,8 +40,8 @@ export interface ItemModule<
|
|||||||
|
|
||||||
onCalcDomestic?(
|
onCalcDomestic?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerDomesticActionType,
|
||||||
varType: string,
|
varType: TriggerDomesticVarType,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
@@ -38,13 +49,13 @@ export interface ItemModule<
|
|||||||
onCalcStat?: {
|
onCalcStat?: {
|
||||||
(
|
(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
(
|
(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
@@ -53,13 +64,13 @@ export interface ItemModule<
|
|||||||
onCalcOpposeStat?: {
|
onCalcOpposeStat?: {
|
||||||
(
|
(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
(
|
(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
@@ -67,21 +78,21 @@ export interface ItemModule<
|
|||||||
|
|
||||||
onCalcStrategic?(
|
onCalcStrategic?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerStrategicActionType,
|
||||||
varType: string,
|
varType: TriggerStrategicVarType,
|
||||||
value: number
|
value: number
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onCalcNationalIncome?(
|
onCalcNationalIncome?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
type: string,
|
type: TriggerNationalIncomeType,
|
||||||
amount: number
|
amount: number
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onArbitraryAction?(
|
onArbitraryAction?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
actionType: string,
|
actionType: TriggerActionType,
|
||||||
phase?: string | null,
|
phase?: TriggerActionPhase | null,
|
||||||
aux?: Record<string, unknown> | null
|
aux?: Record<string, unknown> | null
|
||||||
): Record<string, unknown> | null;
|
): Record<string, unknown> | null;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js';
|
import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js';
|
||||||
import { type GeneralActionContext, GeneralTriggerCaller } from './general.js';
|
import { type GeneralActionContext, GeneralTriggerCaller } from './general.js';
|
||||||
|
import type {
|
||||||
|
GeneralStatName,
|
||||||
|
TriggerActionPhase,
|
||||||
|
TriggerActionType,
|
||||||
|
TriggerDomesticActionType,
|
||||||
|
TriggerDomesticVarType,
|
||||||
|
TriggerNationalIncomeType,
|
||||||
|
TriggerStrategicActionType,
|
||||||
|
TriggerStrategicVarType,
|
||||||
|
} from './types.js';
|
||||||
|
|
||||||
export interface GeneralActionModule<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
|
export interface GeneralActionModule<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
|
||||||
getName?(): string;
|
getName?(): string;
|
||||||
@@ -11,43 +21,43 @@ export interface GeneralActionModule<TriggerState extends GeneralTriggerState =
|
|||||||
|
|
||||||
onCalcDomestic?(
|
onCalcDomestic?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerDomesticActionType,
|
||||||
varType: string,
|
varType: TriggerDomesticVarType,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onCalcStat?(
|
onCalcStat?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onCalcOpposeStat?(
|
onCalcOpposeStat?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onCalcStrategic?(
|
onCalcStrategic?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerStrategicActionType,
|
||||||
varType: string,
|
varType: TriggerStrategicVarType,
|
||||||
value: number
|
value: number
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onCalcNationalIncome?(
|
onCalcNationalIncome?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
type: string,
|
type: TriggerNationalIncomeType,
|
||||||
amount: number
|
amount: number
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
onArbitraryAction?(
|
onArbitraryAction?(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
actionType: string,
|
actionType: TriggerActionType,
|
||||||
phase?: string | null,
|
phase?: TriggerActionPhase | null,
|
||||||
aux?: Record<string, unknown> | null
|
aux?: Record<string, unknown> | null
|
||||||
): Record<string, unknown> | null;
|
): Record<string, unknown> | null;
|
||||||
}
|
}
|
||||||
@@ -76,8 +86,8 @@ export class GeneralActionPipeline<TriggerState extends GeneralTriggerState = Ge
|
|||||||
|
|
||||||
onCalcDomestic(
|
onCalcDomestic(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerDomesticActionType,
|
||||||
varType: string,
|
varType: TriggerDomesticVarType,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -93,7 +103,7 @@ export class GeneralActionPipeline<TriggerState extends GeneralTriggerState = Ge
|
|||||||
|
|
||||||
onCalcStat(
|
onCalcStat(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -109,7 +119,7 @@ export class GeneralActionPipeline<TriggerState extends GeneralTriggerState = Ge
|
|||||||
|
|
||||||
onCalcOpposeStat(
|
onCalcOpposeStat(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -125,8 +135,8 @@ export class GeneralActionPipeline<TriggerState extends GeneralTriggerState = Ge
|
|||||||
|
|
||||||
onCalcStrategic(
|
onCalcStrategic(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerStrategicActionType,
|
||||||
varType: string,
|
varType: TriggerStrategicVarType,
|
||||||
value: number
|
value: number
|
||||||
): number {
|
): number {
|
||||||
let current = value;
|
let current = value;
|
||||||
@@ -141,7 +151,7 @@ export class GeneralActionPipeline<TriggerState extends GeneralTriggerState = Ge
|
|||||||
|
|
||||||
onCalcNationalIncome(
|
onCalcNationalIncome(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
type: string,
|
type: TriggerNationalIncomeType,
|
||||||
amount: number
|
amount: number
|
||||||
): number {
|
): number {
|
||||||
let current = amount;
|
let current = amount;
|
||||||
@@ -156,8 +166,8 @@ export class GeneralActionPipeline<TriggerState extends GeneralTriggerState = Ge
|
|||||||
|
|
||||||
onArbitraryAction(
|
onArbitraryAction(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
actionType: string,
|
actionType: TriggerActionType,
|
||||||
phase?: string | null,
|
phase?: TriggerActionPhase | null,
|
||||||
aux?: Record<string, unknown> | null
|
aux?: Record<string, unknown> | null
|
||||||
): Record<string, unknown> | null {
|
): Record<string, unknown> | null {
|
||||||
let current = aux ?? null;
|
let current = aux ?? null;
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js';
|
import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js';
|
||||||
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.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 {
|
||||||
|
GeneralStatName,
|
||||||
|
TriggerActionPhase,
|
||||||
|
TriggerActionType,
|
||||||
|
TriggerDomesticActionType,
|
||||||
|
TriggerDomesticVarType,
|
||||||
|
TriggerNationalIncomeType,
|
||||||
|
TriggerStrategicActionType,
|
||||||
|
TriggerStrategicVarType,
|
||||||
|
WarStatName,
|
||||||
|
} from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext, WarActionModule } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext, WarActionModule } from '@sammo-ts/logic/war/actions.js';
|
||||||
import type { WarUnit } from '@sammo-ts/logic/war/units.js';
|
import type { WarUnit } from '@sammo-ts/logic/war/units.js';
|
||||||
import type { WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
|
import type { WarTriggerCaller } from '@sammo-ts/logic/war/triggers.js';
|
||||||
@@ -57,8 +68,8 @@ export class SpecialGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcDomestic(
|
onCalcDomestic(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerDomesticActionType,
|
||||||
varType: string,
|
varType: TriggerDomesticVarType,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -68,7 +79,7 @@ export class SpecialGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcStat(
|
onCalcStat(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -78,7 +89,7 @@ export class SpecialGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcOpposeStat(
|
onCalcOpposeStat(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number {
|
): number {
|
||||||
@@ -90,8 +101,8 @@ export class SpecialGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcStrategic(
|
onCalcStrategic(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
turnType: string,
|
turnType: TriggerStrategicActionType,
|
||||||
varType: string,
|
varType: TriggerStrategicVarType,
|
||||||
value: number
|
value: number
|
||||||
): number {
|
): number {
|
||||||
const module = this.getModule(context);
|
const module = this.getModule(context);
|
||||||
@@ -100,7 +111,7 @@ export class SpecialGeneralActionRouter<
|
|||||||
|
|
||||||
onCalcNationalIncome(
|
onCalcNationalIncome(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
type: string,
|
type: TriggerNationalIncomeType,
|
||||||
amount: number
|
amount: number
|
||||||
): number {
|
): number {
|
||||||
const module = this.getModule(context);
|
const module = this.getModule(context);
|
||||||
@@ -109,8 +120,8 @@ export class SpecialGeneralActionRouter<
|
|||||||
|
|
||||||
onArbitraryAction(
|
onArbitraryAction(
|
||||||
context: GeneralActionContext<TriggerState>,
|
context: GeneralActionContext<TriggerState>,
|
||||||
actionType: string,
|
actionType: TriggerActionType,
|
||||||
phase?: string | null,
|
phase?: TriggerActionPhase | null,
|
||||||
aux?: Record<string, unknown> | null
|
aux?: Record<string, unknown> | null
|
||||||
): Record<string, unknown> | null {
|
): Record<string, unknown> | null {
|
||||||
const module = this.getModule(context);
|
const module = this.getModule(context);
|
||||||
@@ -156,7 +167,7 @@ export class SpecialWarActionRouter<
|
|||||||
|
|
||||||
onCalcStat(
|
onCalcStat(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
@@ -166,7 +177,7 @@ export class SpecialWarActionRouter<
|
|||||||
|
|
||||||
onCalcOpposeStat(
|
onCalcOpposeStat(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
import type { GeneralActionContext } from '@sammo-ts/logic/triggers/general.js';
|
||||||
|
import type { GeneralStatName, WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
import type { WarActionContext } from '@sammo-ts/logic/war/actions.js';
|
||||||
import type { SpecialActionModule } from '@sammo-ts/logic/triggers/special/types.js';
|
import type { SpecialActionModule } from '@sammo-ts/logic/triggers/special/types.js';
|
||||||
|
|
||||||
@@ -18,19 +19,19 @@ const resolveLeadershipBonus = (
|
|||||||
|
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
context: GeneralActionContext,
|
context: GeneralActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number;
|
): number;
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
context: WarActionContext,
|
context: WarActionContext,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
function onCalcStat(
|
function onCalcStat(
|
||||||
context: GeneralActionContext | WarActionContext,
|
context: GeneralActionContext | WarActionContext,
|
||||||
statName: string,
|
statName: GeneralStatName | WarStatName,
|
||||||
value: number | [number, number]
|
value: number | [number, number]
|
||||||
): number | [number, number] {
|
): number | [number, number] {
|
||||||
if (statName !== 'leadership') {
|
if (statName !== 'leadership') {
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
export type TriggerActionType = '장비매매';
|
||||||
|
|
||||||
|
export type TriggerActionPhase = '판매' | '구매';
|
||||||
|
|
||||||
|
export type TriggerDomesticActionType =
|
||||||
|
| '상업'
|
||||||
|
| '인재탐색'
|
||||||
|
| '징병'
|
||||||
|
| '징집인구'
|
||||||
|
| '계략'
|
||||||
|
| '민심'
|
||||||
|
| '인구'
|
||||||
|
| '기술'
|
||||||
|
| '모병';
|
||||||
|
|
||||||
|
export type TriggerDomesticVarType =
|
||||||
|
| 'cost'
|
||||||
|
| 'score'
|
||||||
|
| 'success'
|
||||||
|
| 'fail'
|
||||||
|
| 'train'
|
||||||
|
| 'atmos'
|
||||||
|
| 'rice'
|
||||||
|
| 'probability';
|
||||||
|
|
||||||
|
export type TriggerStrategicActionType = '의병모집';
|
||||||
|
|
||||||
|
export type TriggerStrategicVarType = 'delay' | 'globalDelay';
|
||||||
|
|
||||||
|
export type TriggerNationalIncomeType = 'gold' | 'rice';
|
||||||
|
|
||||||
|
export type GeneralStatName = 'leadership' | 'strength' | 'intelligence';
|
||||||
|
|
||||||
|
export type WarStatName =
|
||||||
|
| GeneralStatName
|
||||||
|
| 'cityBattleOrder'
|
||||||
|
| 'initWarPhase'
|
||||||
|
| 'bonusTrain'
|
||||||
|
| 'bonusAtmos'
|
||||||
|
| 'warCriticalRatio'
|
||||||
|
| 'warAvoidRatio'
|
||||||
|
| 'killRice'
|
||||||
|
| 'criticalDamageRange'
|
||||||
|
| 'warMagicSuccessDamage'
|
||||||
|
| 'warMagicTrialProb'
|
||||||
|
| `dex${number}`;
|
||||||
@@ -7,6 +7,7 @@ import type {
|
|||||||
Nation,
|
Nation,
|
||||||
} from '@sammo-ts/logic/domain/entities.js';
|
} from '@sammo-ts/logic/domain/entities.js';
|
||||||
import type { ActionLogger } from '@sammo-ts/logic/logging/actionLogger.js';
|
import type { ActionLogger } from '@sammo-ts/logic/logging/actionLogger.js';
|
||||||
|
import type { WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||||
import type { WarUnit } from './units.js';
|
import type { WarUnit } from './units.js';
|
||||||
import { WarTriggerCaller } from './triggers.js';
|
import { WarTriggerCaller } from './triggers.js';
|
||||||
|
|
||||||
@@ -33,14 +34,14 @@ export interface WarActionModule<TriggerState extends GeneralTriggerState = Gene
|
|||||||
|
|
||||||
onCalcStat?(
|
onCalcStat?(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
|
|
||||||
onCalcOpposeStat?(
|
onCalcOpposeStat?(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number | [number, number],
|
value: number | [number, number],
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): number | [number, number];
|
): number | [number, number];
|
||||||
@@ -90,7 +91,7 @@ export class WarActionPipeline<
|
|||||||
|
|
||||||
onCalcStat<T extends number | [number, number]>(
|
onCalcStat<T extends number | [number, number]>(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: T,
|
value: T,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): T {
|
): T {
|
||||||
@@ -106,7 +107,7 @@ export class WarActionPipeline<
|
|||||||
|
|
||||||
onCalcOpposeStat<T extends number | [number, number]>(
|
onCalcOpposeStat<T extends number | [number, number]>(
|
||||||
context: WarActionContext<TriggerState>,
|
context: WarActionContext<TriggerState>,
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: T,
|
value: T,
|
||||||
aux?: unknown
|
aux?: unknown
|
||||||
): T {
|
): T {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import type {
|
|||||||
} from '@sammo-ts/logic/domain/entities.js';
|
} from '@sammo-ts/logic/domain/entities.js';
|
||||||
import type { ActionLogger } from '@sammo-ts/logic/logging/actionLogger.js';
|
import type { ActionLogger } from '@sammo-ts/logic/logging/actionLogger.js';
|
||||||
import { LogFormat } from '@sammo-ts/logic/logging/types.js';
|
import { LogFormat } from '@sammo-ts/logic/logging/types.js';
|
||||||
|
import type { WarStatName } from '@sammo-ts/logic/triggers/types.js';
|
||||||
import { getTechAbility, getTechCost } from '@sammo-ts/logic/world/unitSet.js';
|
import { getTechAbility, getTechCost } from '@sammo-ts/logic/world/unitSet.js';
|
||||||
import { WarActionPipeline, type WarActionContext } from './actions.js';
|
import { WarActionPipeline, type WarActionContext } from './actions.js';
|
||||||
import type { WarEngineConfig } from './types.js';
|
import type { WarEngineConfig } from './types.js';
|
||||||
@@ -38,6 +39,9 @@ const META_LEADERSHIP_EXP = 'leadershipExp';
|
|||||||
|
|
||||||
const RANK_WARNUM = `${META_RANK_PREFIX}warnum`;
|
const RANK_WARNUM = `${META_RANK_PREFIX}warnum`;
|
||||||
const RANK_KILLNUM = `${META_RANK_PREFIX}killnum`;
|
const RANK_KILLNUM = `${META_RANK_PREFIX}killnum`;
|
||||||
|
|
||||||
|
const toDexStatName = (armType: number): WarStatName =>
|
||||||
|
`dex${armType}` as WarStatName;
|
||||||
const RANK_DEATHNUM = `${META_RANK_PREFIX}deathnum`;
|
const RANK_DEATHNUM = `${META_RANK_PREFIX}deathnum`;
|
||||||
const RANK_OCCUPIED = `${META_RANK_PREFIX}occupied`;
|
const RANK_OCCUPIED = `${META_RANK_PREFIX}occupied`;
|
||||||
const RANK_KILLCREW = `${META_RANK_PREFIX}killcrew`;
|
const RANK_KILLCREW = `${META_RANK_PREFIX}killcrew`;
|
||||||
@@ -526,7 +530,7 @@ export class WarUnitGeneral<
|
|||||||
}
|
}
|
||||||
|
|
||||||
private resolveOpposeStatValue(
|
private resolveOpposeStatValue(
|
||||||
statName: string,
|
statName: WarStatName,
|
||||||
value: number,
|
value: number,
|
||||||
aux?: Record<string, unknown>
|
aux?: Record<string, unknown>
|
||||||
): number {
|
): number {
|
||||||
@@ -549,13 +553,14 @@ export class WarUnitGeneral<
|
|||||||
isAttacker: this.isAttacker(),
|
isAttacker: this.isAttacker(),
|
||||||
opposeType: this.oppose?.getCrewType() ?? null,
|
opposeType: this.oppose?.getCrewType() ?? null,
|
||||||
};
|
};
|
||||||
|
const statName = toDexStatName(armType);
|
||||||
let dex = this.actionPipeline.onCalcStat(
|
let dex = this.actionPipeline.onCalcStat(
|
||||||
this.getActionContext(),
|
this.getActionContext(),
|
||||||
`dex${armType}`,
|
statName,
|
||||||
base,
|
base,
|
||||||
aux
|
aux
|
||||||
);
|
);
|
||||||
dex = this.resolveOpposeStatValue(`dex${armType}`, dex, aux);
|
dex = this.resolveOpposeStatValue(statName, dex, aux);
|
||||||
return dex;
|
return dex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user