This commit is contained in:
2026-04-28 19:36:39 +08:00
parent a9febe7678
commit f0471a4f8d
206 changed files with 18456 additions and 10133 deletions
@@ -17,6 +17,7 @@ import {
NPC_PREVIEW_TALK_FUNCTION,
shouldNpcRecruitOpenModal,
} from './index';
import { RPG_FUNCTION_RUNTIME_OVERVIEW } from './runtimeIndex';
import type { Encounter, GameState, InventoryItem } from '../../types';
function createEncounter(overrides: Partial<Encounter> = {}): Encounter {
@@ -87,6 +88,12 @@ describe('functionCatalog', () => {
});
});
it('keeps runtime overview aligned with the main function documentation list', () => {
expect(RPG_FUNCTION_RUNTIME_OVERVIEW.allDocumentation).toEqual(
ALL_FUNCTION_DOCUMENTATION,
);
});
it('builds flow helper options with the expected function ids', () => {
const continueOption = buildContinueAdventureOption();
const campTravelOption = buildCampTravelHomeOption('竹林古道');
@@ -110,16 +117,12 @@ describe('functionCatalog', () => {
const state = createModalState();
const encounter = createEncounter();
const tradeModal = buildNpcTradeModalState(
state,
encounter,
'先看看货',
[
createInventoryItem('npc-herb', '止血草'),
createInventoryItem('npc-ore', '陨铁碎片'),
],
'npc-herb',
'player-potion',
);
const giftModal = buildNpcGiftModalState(
state,
encounter,
'送你一样东西',
'player-charm',
@@ -138,18 +141,13 @@ describe('functionCatalog', () => {
expect(shouldNpcRecruitOpenModal(1, 2)).toBe(false);
});
it('prefers the first tradable player item when zero-quantity items exist', () => {
it('keeps server-selected trade item ids when opening the trade modal', () => {
const encounter = createEncounter();
const tradeModal = buildNpcTradeModalState(
createModalState({
playerInventory: [
createInventoryItem('empty-slot', '空槽位', { quantity: 0 }),
createInventoryItem('usable-item', '可售草药', { quantity: 2 }),
],
}),
encounter,
'交易',
[createInventoryItem('npc-herb', '止血草')],
'npc-herb',
'usable-item',
);
expect(tradeModal.selectedPlayerItemId).toBe('usable-item');