export interface NpcDynamics { /** 宗主姓名快照(换代时更新) */ leaderName: string leaderRealmIdx: number leaderAge: number /** 演化旗标 */ lastEvent: string lastEventYear: number relationsWithOthers: Record } export interface SecretQi { qi: number peak: number } export interface WorldSimState { /** 世界库存池(资源循环) */ marketPool: Record /** NPC 动力学 */ npcDyn: Record /** 秘境灵气条 */ secretQi: Record /** 灵气潮汐(0-100 全局系数) */ tide: number tideDir: 1 | -1 tideTicks: number /** 灾年(当年灾因 id) */ calamity?: string calamityYear: number /** 天下快讯(滚动 N=120) */ newsFeed: { year: number; month: number; src: string; text: string }[] lastNewsMonth: number /** NPC 换代计数 */ npcSuccessions: number } export function makeWorldSimState(): WorldSimState { return { marketPool: { lingcao: 600, lingkuang: 300, beastcore: 80, 'pill-qiyuan': 90, 'pill-ningyuan': 40 }, npcDyn: {}, secretQi: {}, tide: 0.5, tideDir: 1, tideTicks: 0, calamityYear: -99, newsFeed: [], lastNewsMonth: -99, npcSuccessions: 0 } } /** 市场基准库存(单一权威:WorldSim 再平衡 / Market 行情 / brief 图标 三方共用) */ export const POOL_BASE: Record = { lingcao: 600, lingkuang: 300, beastcore: 80, 'pill-qiyuan': 90, 'pill-ningyuan': 40 } /** 世界演化参数表(全部可调) */ export const WORLDSIM = { marketDriftRate: 0.03, marketRebalance: 0.1, priceFloor: 0.55, priceCeil: 2.3, tideCycle: 72, // 月周期(6年) tideMin: 0.65, tideMax: 1.35, secretRecover: 4, secretConsume: 0, calamityChance: 0.18, calamities: ['旱灾', '涝灾', '蝗灾', '疫病', '兽潮', '寒潮'] as const, npcEventChance: 0.05, newsEvery: 24, // 月 newsKeep: 120 } export type CalamityName = (typeof WORLDSIM.calamities)[number] /** 灾因 → 资源方向 */ export const CALAMITY_EFFECT: Record>> = { 旱灾: { lingcao: -0.3 }, 涝灾: { lingcao: -0.2, lingkuang: -0.1 }, 蝗灾: { lingcao: -0.45 }, 疫病: { beastcore: -0.25 }, 兽潮: { beastcore: 0.3 }, 寒潮: { lingcao: -0.2, beastcore: -0.15 } }