fix(0.1.22): 姓氏选择假功能修复——文档化传递链贯通
根因:GameEngine 构造硬编码 surname:'林'/familyName:'林氏', NewGame 输入的姓氏从未传入引擎(startNewGame 只传 seed) 修复:GameEngineOptions 增加 surname/familyName/motto/difficulty 透传; store.startNewGame 全参传递;createWorldState 按 opts 建档(缺省林氏兜底) 验证:慕容家/慕容临渊 贯通(tsx 实证)+ 新增 2 例防回归测试 测试:1020 全绿(43+1 套件);build 通过
This commit is contained in:
@@ -13,6 +13,11 @@ export interface GameEngineOptions {
|
|||||||
seed?: string
|
seed?: string
|
||||||
datapack?: Partial<DataPack>
|
datapack?: Partial<DataPack>
|
||||||
noAutoCreate?: boolean
|
noAutoCreate?: boolean
|
||||||
|
/** 建档参数(NewGame 透传;缺省林氏兜底) */
|
||||||
|
surname?: string
|
||||||
|
familyName?: string
|
||||||
|
motto?: string
|
||||||
|
difficulty?: 'easy' | 'normal' | 'hard'
|
||||||
}
|
}
|
||||||
|
|
||||||
export type EngineStatus = 'idle' | 'running' | 'gameover'
|
export type EngineStatus = 'idle' | 'running' | 'gameover'
|
||||||
@@ -39,10 +44,10 @@ export class GameEngine {
|
|||||||
// 组装World(内核注入→时钟/随机/总线单源)
|
// 组装World(内核注入→时钟/随机/总线单源)
|
||||||
const state = opts.seed ? createWorldState({
|
const state = opts.seed ? createWorldState({
|
||||||
seed: this._seed,
|
seed: this._seed,
|
||||||
surname: '林',
|
surname: opts.surname?.trim() || '林',
|
||||||
familyName: '林氏',
|
familyName: opts.familyName?.trim() || `${opts.surname?.trim() || '林'}氏`,
|
||||||
motto: '耕读传家,术法继世',
|
motto: opts.motto?.trim() || '耕读传家,术法继世',
|
||||||
difficulty: 'normal'
|
difficulty: opts.difficulty ?? 'normal'
|
||||||
}) : (globalThis as never as { __state?: GameState }).__state
|
}) : (globalThis as never as { __state?: GameState }).__state
|
||||||
this.world = new World(state!, [], this.kernel)
|
this.world = new World(state!, [], this.kernel)
|
||||||
this.facade = new ApiFacade(this.world, 1)
|
this.facade = new ApiFacade(this.world, 1)
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ export const useGameStore = create<GameStore>((set, get) => ({
|
|||||||
|
|
||||||
startNewGame: async (opts, slot) => {
|
startNewGame: async (opts, slot) => {
|
||||||
stopTimer()
|
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
|
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 })
|
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()
|
const st = get()
|
||||||
|
|||||||
@@ -120,3 +120,18 @@ describe('Sim 与外层联动', () => {
|
|||||||
expect(before).toBeLessThan(1.4)
|
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('林氏')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user