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