From 33ccf31d558c25d057d3742387332d726cb996a2 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Mon, 5 Jan 2026 19:53:19 +0000 Subject: [PATCH] Revert "wip" This reverts commit 13426394ddce6adf9aaaac8e197b1859fec65fab. --- packages/logic/src/items/base.ts | 8 +-- packages/logic/src/triggers/general-action.ts | 1 + packages/logic/src/triggers/special/types.ts | 42 +++++++++++++-- .../src/triggers/special/war/che_무쌍.ts | 31 +++++------ packages/logic/src/triggers/types.ts | 52 +++++++++++-------- 5 files changed, 89 insertions(+), 45 deletions(-) diff --git a/packages/logic/src/items/base.ts b/packages/logic/src/items/base.ts index fcb42bc..6837c67 100644 --- a/packages/logic/src/items/base.ts +++ b/packages/logic/src/items/base.ts @@ -34,10 +34,10 @@ export const createStatItemModule = (options: StatItemOptions): ItemModule => { const name = `${options.rawName}(+${options.statValue})`; const baseInfo = `${statLabel} +${options.statValue}`; const info = options.extraInfo ? `${baseInfo}
${options.extraInfo}` : baseInfo; - const onCalcStat = (( + const onCalcStat = ( _context: GeneralActionContext | WarActionContext, statName: GeneralStatName | WarStatName, - value: number | [number, number], + value: number | [number, number] ): number | [number, number] => { if (statName !== options.statName) { return value; @@ -46,7 +46,7 @@ export const createStatItemModule = (options: StatItemOptions): ItemModule => { return value + options.statValue; } return value; - }) as ItemModule['onCalcStat']; + }; return { key: options.key, @@ -59,6 +59,6 @@ export const createStatItemModule = (options: StatItemOptions): ItemModule => { consumable: false, reqSecu: options.reqSecu, unique: options.unique ?? false, - onCalcStat: onCalcStat!, + onCalcStat, }; }; diff --git a/packages/logic/src/triggers/general-action.ts b/packages/logic/src/triggers/general-action.ts index 676fb75..6fed42e 100644 --- a/packages/logic/src/triggers/general-action.ts +++ b/packages/logic/src/triggers/general-action.ts @@ -3,6 +3,7 @@ import { type GeneralActionContext, GeneralTriggerCaller } from './general.js'; import type { GeneralStatBundleMap, GeneralStatName, + WarStatBundleMap, TriggerActionPhase, TriggerActionType, TriggerDomesticActionType, diff --git a/packages/logic/src/triggers/special/types.ts b/packages/logic/src/triggers/special/types.ts index 931f272..f7f7a36 100644 --- a/packages/logic/src/triggers/special/types.ts +++ b/packages/logic/src/triggers/special/types.ts @@ -1,6 +1,8 @@ import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js'; import type { GeneralActionModule } from '@sammo-ts/logic/triggers/general-action.js'; -import type { WarActionModule } from '@sammo-ts/logic/war/actions.js'; +import type { WarActionModule, WarActionContext } 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'; @@ -11,8 +13,42 @@ export interface TraitSpec { kind: TraitKind; } -import type { TraitOnCalcStat, TraitOnCalcOpposeStat, OnCalcStatParams } from '../types.js'; -export type { TraitOnCalcStat, TraitOnCalcOpposeStat, OnCalcStatParams }; +import type { + GeneralStatName, + GeneralStatBundleMap, + WarStatName, + WarStatBundleMap, +} from '../types.js'; + +export interface TraitOnCalcStat { + ( + context: GeneralActionContext, + statName: T, + value: GeneralStatBundleMap[T]['value'], + aux?: GeneralStatBundleMap[T]['aux'] + ): GeneralStatBundleMap[T]['return']; + ( + context: WarActionContext, + statName: T, + value: WarStatBundleMap[T]['value'], + aux?: WarStatBundleMap[T]['aux'] + ): WarStatBundleMap[T]['return']; +} + +export interface TraitOnCalcOpposeStat { + ( + context: GeneralActionContext, + statName: T, + value: GeneralStatBundleMap[T]['value'], + aux?: GeneralStatBundleMap[T]['aux'] + ): GeneralStatBundleMap[T]['return']; + ( + context: WarActionContext, + statName: T, + value: WarStatBundleMap[T]['value'], + aux?: WarStatBundleMap[T]['aux'] + ): WarStatBundleMap[T]['return']; +} export type TraitModule = TraitSpec & Omit, 'onCalcStat' | 'onCalcOpposeStat'> & diff --git a/packages/logic/src/triggers/special/war/che_무쌍.ts b/packages/logic/src/triggers/special/war/che_무쌍.ts index 14d5e5d..a434492 100644 --- a/packages/logic/src/triggers/special/war/che_무쌍.ts +++ b/packages/logic/src/triggers/special/war/che_무쌍.ts @@ -1,5 +1,7 @@ -import type { TraitOnCalcStat, TraitModule, OnCalcStatParams } from '@sammo-ts/logic/triggers/special/types.js'; -import type { WarStatName, WarStatBundleMap } from '@sammo-ts/logic/triggers/types.js'; +import type { TraitOnCalcStat, TraitModule } from '@sammo-ts/logic/triggers/special/types.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 { getMetaNumber } from '@sammo-ts/logic/war/utils.js'; import { WarUnit } from '@sammo-ts/logic/war/units.js'; @@ -9,20 +11,19 @@ type WarUnitWithGeneral = WarUnit & { getGeneral: () => { meta: Record 'getGeneral' in unit && typeof (unit as { getGeneral?: unknown }).getGeneral === 'function'; -const onCalcStat: TraitOnCalcStat = ( - ...args: [ - context: any, - statName: T, - value: WarStatBundleMap[T]['value'], - aux: WarStatBundleMap[T]['aux'], - ] -) => { - const [_context, statName, value, aux] = args as OnCalcStatParams; - if (statName === 'warCriticalRatio' && aux.isAttacker) { - return (value + 0.1) as WarStatBundleMap[T]['return']; +const onCalcStat = (( + _context: GeneralActionContext | WarActionContext, + statName: GeneralStatName | WarStatName, + value: number | [number, number], + aux?: unknown +): number | [number, number] => { + const isAttacker = typeof aux === 'object' && aux !== null && (aux as { isAttacker?: unknown }).isAttacker === true; + + if (statName === 'warCriticalRatio' && isAttacker && typeof value === 'number') { + return value + 0.1; } - return value as WarStatBundleMap[T]['return']; -}; + return value; +}) as unknown as TraitOnCalcStat; export const traitModule: TraitModule = { key: 'che_무쌍', diff --git a/packages/logic/src/triggers/types.ts b/packages/logic/src/triggers/types.ts index a2aa0cd..088d365 100644 --- a/packages/logic/src/triggers/types.ts +++ b/packages/logic/src/triggers/types.ts @@ -1,6 +1,7 @@ import type { GeneralTriggerState } from '@sammo-ts/logic/domain/entities.js'; import type { GeneralActionContext } from './general.js'; import type { WarActionContext } from '../war/actions.js'; +export type TriggerActionType = '장비매매'; export type TriggerActionPhase = '판매' | '구매'; @@ -55,11 +56,11 @@ export type WarStatBundle = | { statName: 'warMagicTrialProb'; value: number; aux: undefined; return: number } | { statName: 'warMagicSuccessProb'; value: number; aux: undefined; return: number } | { - statName: `dex${number}`; - value: number; - aux: { isAttacker: boolean; opposeType: { armType: number } | null }; - return: number; - }; + statName: `dex${number}`; + value: number; + aux: { isAttacker: boolean; opposeType: { armType: number } | null }; + return: number; + }; export type WarStatBundleMap = { [T in WarStatBundle as T['statName']]: T; @@ -67,29 +68,34 @@ export type WarStatBundleMap = { export type WarStatName = WarStatBundle['statName']; -export type OnCalcStatParams = { - [T in WarStatName]: [ - context: T extends GeneralStatName - ? GeneralActionContext | WarActionContext - : WarActionContext, +export interface TraitOnCalcStat { + ( + context: GeneralActionContext, statName: T, - value: WarStatBundleMap[T]['value'], - aux: WarStatBundleMap[T]['aux'], - ]; -}[WarStatName]; - -export type TraitOnCalcStat = { + value: GeneralStatBundleMap[T]['value'], + aux?: GeneralStatBundleMap[T]['aux'] + ): GeneralStatBundleMap[T]['return']; ( - context: T extends GeneralStatName - ? GeneralActionContext | WarActionContext - : WarActionContext, + context: WarActionContext, statName: T, value: WarStatBundleMap[T]['value'], - aux: WarStatBundleMap[T]['aux'], + aux?: WarStatBundleMap[T]['aux'] ): WarStatBundleMap[T]['return']; -}; +} -export type TraitOnCalcOpposeStat = - TraitOnCalcStat; +export interface TraitOnCalcOpposeStat { + ( + context: GeneralActionContext, + statName: T, + value: GeneralStatBundleMap[T]['value'], + aux?: GeneralStatBundleMap[T]['aux'] + ): GeneralStatBundleMap[T]['return']; + ( + context: WarActionContext, + statName: T, + value: WarStatBundleMap[T]['value'], + aux?: WarStatBundleMap[T]['aux'] + ): WarStatBundleMap[T]['return']; +} export type TriggerActionType = '장비매매';