import { RealmMajor } from '../types/domain' export interface NpcFamilyDef { id: string name: string region: string desc: string style: string leaderRealm: RealmMajor initialPower: number powerGrowth: [number, number] sells?: string[] buys?: string[] } export const NPCS: NpcFamilyDef[] = [ { id: 'n-xuanying', name: '玄影沈氏', region: '北岳玄影峰', style: '剑修世家', desc: '隐于北岳的剑修沈氏,剑意凛冽,最为孤傲。', leaderRealm: 'foundation', initialPower: 240, powerGrowth: [4, 10], sells: ['weapon-qi', 'weapon-ling'], buys: ['lingcao', 'lingkuang'] }, { id: 'n-danxin', name: '丹心木氏', region: '西川药谷', style: '丹道世家', desc: '悬壶济世的丹道世家,人脉广博,风格和缓。', leaderRealm: 'foundation', initialPower: 200, powerGrowth: [3, 9], sells: ['pill-qiyuan', 'pill-ningyuan', 'pill-pojing'], buys: ['lingcao', 'beastcore'] }, { id: 'n-sihai', name: '四海王氏', region: '南都连港', style: '商盟世族', desc: '商通四海,富可敌国,只认灵石不认人。', leaderRealm: 'foundation', initialPower: 160, powerGrowth: [5, 12], sells: ['lingcao', 'lingkuang'], buys: ['beastcore', 'lingkuang'] }, { id: 'n-nulei', name: '怒雷祝氏', region: '东丘雷泽', style: '兵修蛮门', desc: '雷泽蛮族的世仇,性情火爆,最易生衅。', leaderRealm: 'core', initialPower: 300, powerGrowth: [5, 13], sells: [], buys: ['lingkuang', 'beastcore'] } ] /** 运行时动态 NPC 注册表(0.1.23 新贵/覆灭;插件化入口) */ const DYNAMIC_NPCS = new Map() export function registerNpcDef(def: NpcFamilyDef): void { DYNAMIC_NPCS.set(def.id, def) } export function unregisterNpcDef(id: string): void { DYNAMIC_NPCS.delete(id) } /** 双源查询:静态 NPCS → 运行时动态表(新贵);缺失返回 undefined(调用方防御)。 * 注意:此函数拒绝 import registry(循环依赖),静态源直连 NPCS;数据包 npcs 覆写暂不走此路。 */ export function npcById(id: string): NpcFamilyDef | undefined { const stat = NPCS.find((x) => x.id === id) if (stat) return stat return DYNAMIC_NPCS.get(id) } export function getNpcDefs(): NpcFamilyDef[] { return [...NPCS, ...DYNAMIC_NPCS.values()] }