From d2787ee3c8a4f6e701ec4e4212d6a2db836093b5 Mon Sep 17 00:00:00 2001 From: thzxx <1440196015@qq.com> Date: Sun, 23 Aug 2026 15:44:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(0.1.22):=20=E5=A7=93=E6=B0=8F=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=81=87=E5=8A=9F=E8=83=BD=E4=BF=AE=E5=A4=8D=E2=80=94?= =?UTF-8?q?=E2=80=94=E6=96=87=E6=A1=A3=E5=8C=96=E4=BC=A0=E9=80=92=E9=93=BE?= =?UTF-8?q?=E8=B4=AF=E9=80=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:GameEngine 构造硬编码 surname:'林'/familyName:'林氏', NewGame 输入的姓氏从未传入引擎(startNewGame 只传 seed) 修复:GameEngineOptions 增加 surname/familyName/motto/difficulty 透传; store.startNewGame 全参传递;createWorldState 按 opts 建档(缺省林氏兜底) 验证:慕容家/慕容临渊 贯通(tsx 实证)+ 新增 2 例防回归测试 测试:1020 全绿(43+1 套件);build 通过 --- src/renderer/game/engine/GameEngine.ts | 13 +++++++++---- src/renderer/ui/store.ts | 2 +- tests/gameengine.test.ts | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/renderer/game/engine/GameEngine.ts b/src/renderer/game/engine/GameEngine.ts index 2985d9c..ea3d8e8 100644 --- a/src/renderer/game/engine/GameEngine.ts +++ b/src/renderer/game/engine/GameEngine.ts @@ -13,6 +13,11 @@ export interface GameEngineOptions { seed?: string datapack?: Partial noAutoCreate?: boolean + /** 建档参数(NewGame 透传;缺省林氏兜底) */ + surname?: string + familyName?: string + motto?: string + difficulty?: 'easy' | 'normal' | 'hard' } export type EngineStatus = 'idle' | 'running' | 'gameover' @@ -39,10 +44,10 @@ export class GameEngine { // 组装World(内核注入→时钟/随机/总线单源) const state = opts.seed ? createWorldState({ seed: this._seed, - surname: '林', - familyName: '林氏', - motto: '耕读传家,术法继世', - difficulty: 'normal' + surname: opts.surname?.trim() || '林', + familyName: opts.familyName?.trim() || `${opts.surname?.trim() || '林'}氏`, + motto: opts.motto?.trim() || '耕读传家,术法继世', + difficulty: opts.difficulty ?? 'normal' }) : (globalThis as never as { __state?: GameState }).__state this.world = new World(state!, [], this.kernel) this.facade = new ApiFacade(this.world, 1) diff --git a/src/renderer/ui/store.ts b/src/renderer/ui/store.ts index 5610fa0..17fcaff 100644 --- a/src/renderer/ui/store.ts +++ b/src/renderer/ui/store.ts @@ -149,7 +149,7 @@ export const useGameStore = create((set, get) => ({ startNewGame: async (opts, slot) => { stopTimer() - const engine = new GameEngine({ seed: opts.seed }) + const engine = new GameEngine({ seed: opts.seed, surname: opts.surname, familyName: opts.familyName, motto: opts.motto, difficulty: opts.difficulty }) const world = engine.world set({ world, engine, slot, screen: 'game', panel: 'family', logFeed: [], battleView: undefined, pendingEventId: undefined, pendingEventDef: undefined, revision: 1, speed: 0, gameOverReason: undefined, paperReport: undefined, toast: undefined, selectedMemberId: undefined, selectedMissionDef: undefined }) const st = get() diff --git a/tests/gameengine.test.ts b/tests/gameengine.test.ts index 37f67de..edd5529 100644 --- a/tests/gameengine.test.ts +++ b/tests/gameengine.test.ts @@ -120,3 +120,18 @@ describe('Sim 与外层联动', () => { expect(before).toBeLessThan(1.4) }) }) + +describe('GameEngine 建档参数', () => { + it('姓氏透传:新档用玩家输入的姓氏/家号(0.1.22 修复)', () => { + const e = new GameEngine({ seed: 'name-fix', surname: '慕容', familyName: '慕容家', motto: '铁血丹心', difficulty: 'normal' }) + expect(e.world.state.family.name).toBe('慕容家') + const head = Object.values(e.world.state.members).find((c) => c.isHead) + expect(head?.name.startsWith('慕容')).toBe(true) + expect(e.world.state.family.motto ?? '').toBeTruthy() + }) + + it('缺省建档仍为林氏(兜底不破)', () => { + const e = new GameEngine({ seed: 'name-default' }) + expect(e.world.state.family.name).toBe('林氏') + }) +})