70 lines
2.8 KiB
TypeScript
70 lines
2.8 KiB
TypeScript
import type { TraitModule } from '@sammo-ts/logic/triggers/special/types.js';
|
|
import type { ItemModule } from './types.js';
|
|
|
|
export const createEventBattleTraitItemModule = (
|
|
key: string,
|
|
traitModule: TraitModule,
|
|
overrides: Partial<
|
|
Pick<ItemModule, 'rawName' | 'name' | 'info' | 'cost' | 'buyable' | 'consumable' | 'reqSecu'>
|
|
> = {}
|
|
): ItemModule => {
|
|
const itemModule: ItemModule = {
|
|
key,
|
|
rawName: overrides.rawName ?? '비급',
|
|
name: overrides.name ?? `비급(${traitModule.name})`,
|
|
info: overrides.info ?? traitModule.info,
|
|
slot: 'item',
|
|
cost: overrides.cost ?? 100,
|
|
buyable: overrides.buyable ?? true,
|
|
consumable: overrides.consumable ?? false,
|
|
reqSecu: overrides.reqSecu ?? 3000,
|
|
unique: false,
|
|
};
|
|
if (traitModule.getPreTurnExecuteTriggerList) {
|
|
itemModule.getPreTurnExecuteTriggerList = traitModule.getPreTurnExecuteTriggerList;
|
|
}
|
|
if (traitModule.onCalcDomestic) {
|
|
itemModule.onCalcDomestic = traitModule.onCalcDomestic;
|
|
}
|
|
if (traitModule.onCalcStat) {
|
|
itemModule.onCalcStat = traitModule.onCalcStat;
|
|
}
|
|
if (traitModule.onCalcOpposeStat) {
|
|
itemModule.onCalcOpposeStat = traitModule.onCalcOpposeStat;
|
|
}
|
|
if (traitModule.onCalcStrategic) {
|
|
itemModule.onCalcStrategic = traitModule.onCalcStrategic;
|
|
}
|
|
if (traitModule.onCalcNationalIncome) {
|
|
itemModule.onCalcNationalIncome = traitModule.onCalcNationalIncome;
|
|
}
|
|
if (traitModule.onArbitraryAction) {
|
|
itemModule.onArbitraryAction = traitModule.onArbitraryAction;
|
|
}
|
|
if (traitModule.getBattleInitTriggerList) {
|
|
itemModule.getBattleInitTriggerList = traitModule.getBattleInitTriggerList;
|
|
}
|
|
if (traitModule.getBattlePhaseTriggerList) {
|
|
itemModule.getBattlePhaseTriggerList = traitModule.getBattlePhaseTriggerList;
|
|
}
|
|
if (traitModule.getWarPowerMultiplier) {
|
|
itemModule.getWarPowerMultiplier =
|
|
traitModule.key === 'che_무쌍'
|
|
? (context, unit, oppose) => {
|
|
const general =
|
|
'getGeneral' in unit && typeof (unit as { getGeneral?: unknown }).getGeneral === 'function'
|
|
? (
|
|
unit as typeof unit & {
|
|
getGeneral: () => { role: { specialWar: string | null } };
|
|
}
|
|
).getGeneral()
|
|
: null;
|
|
return general?.role.specialWar === traitModule.key
|
|
? [1, 1]
|
|
: traitModule.getWarPowerMultiplier!(context, unit, oppose);
|
|
}
|
|
: traitModule.getWarPowerMultiplier;
|
|
}
|
|
return itemModule;
|
|
};
|