fix: 전투 이펙트와 차등 하네스 호환성을 복원한다
Ref 기준의 판정 순서, 난수 소비, 아이템·특기 이펙트와 로그 형식을 맞춘다. 전체 전투 결과와 이벤트·상태·난수 trace를 엄격 비교하고 fixture 및 출병 예약 회귀를 보강한다.
This commit is contained in:
@@ -12,6 +12,27 @@ import type {
|
||||
const ITEM_SLOTS: GeneralItemSlot[] = ['horse', 'weapon', 'book', 'item'];
|
||||
const INVENTORY_META_KEY = 'itemInventory';
|
||||
|
||||
export interface LegacyBattleItemIdentity {
|
||||
name: string;
|
||||
rawName: string;
|
||||
}
|
||||
|
||||
// Ref's BaseWarUnitTrigger::processConsumableItem() asks General::getItem()
|
||||
// for the *item-slot* display name even when a weapon trigger raised the
|
||||
// shared item flag. Keep that transient lookup out of persisted General meta.
|
||||
const legacyBattleItemIdentities = new WeakMap<object, LegacyBattleItemIdentity>();
|
||||
|
||||
export const registerLegacyBattleItemIdentity = <TriggerState extends GeneralTriggerState>(
|
||||
general: General<TriggerState>,
|
||||
identity: LegacyBattleItemIdentity
|
||||
): void => {
|
||||
legacyBattleItemIdentities.set(general, identity);
|
||||
};
|
||||
|
||||
export const getLegacyBattleItemIdentity = <TriggerState extends GeneralTriggerState>(
|
||||
general: General<TriggerState>
|
||||
): LegacyBattleItemIdentity => legacyBattleItemIdentities.get(general) ?? { name: '-', rawName: '-' };
|
||||
|
||||
const emptyState = (): GeneralItemInstanceState => ({ values: {} });
|
||||
|
||||
const cloneState = (state: GeneralItemInstanceState): GeneralItemInstanceState => ({
|
||||
@@ -57,9 +78,7 @@ const readState = (value: unknown): GeneralItemInstanceState | null => {
|
||||
return null;
|
||||
}
|
||||
const charges =
|
||||
typeof record['charges'] === 'number' && Number.isInteger(record['charges']) && record['charges'] >= 0
|
||||
? record['charges']
|
||||
: undefined;
|
||||
typeof record['charges'] === 'number' && Number.isInteger(record['charges']) ? record['charges'] : undefined;
|
||||
const valuesRecord = asRecord(record['values']) ?? {};
|
||||
const values: Record<string, TriggerValue> = {};
|
||||
for (const [key, entry] of Object.entries(valuesRecord)) {
|
||||
|
||||
Reference in New Issue
Block a user