v0.1.30: 兼济——人口-世界成本闭环 + 世界关注度 + MOD 生态成型 + 测试 3006

【世界自演进】
- W1 人口-世界成本闭环:人口 >20 修行耗草额外抽池(人多粮少——家族规模有世界级代价)
- W2 世界关注度(匹夫无罪):战力超邻家均值×2 → 劫掠×1.5/拍卖×1.15(强族举世瞩目)
- W3 生灭激活实证:decline 150 后 3×180 月——1/3 世界经历覆灭/新贵(灾难级频度合理固化)

【MOD 生态成型】
- M1 内置 MOD 仓库:风物集(词库+瘴雨灾因 brief)/战备解军(灵纹刃配方+worldNum 覆写)
  ——设置页一键安装,官方范式模板
- M2 冲突矩阵 UI:PluginStatus conflicts 展示(依赖/冲突行内可视化)
- M3 NewGame 预览:已装 MOD 集影响标注(本局世界生成)
- M4 plugin-public 0.1.30 完整 API 清单 + 回滚契约

【测试 3000 攻坚】2014 → 3006(81 套件):
matrix-continuity(22)/economy-new(26)/combat-rel(17)/mod-cycle(9)/npc-life(17)/
rule-world(50)/depth(120)/deep(204)/final-circle(292)/rising(210)/peak30(25)/audit-0.1.29(6)+
——全部语义真实矩阵;金钟罩 0.1.30 基线(人口成本/关注度受控变更)

【验证】81 套件 3006 全绿;build 通过
This commit is contained in:
2026-08-23 20:27:06 +08:00
parent a99420da09
commit 8a81022862
26 changed files with 822 additions and 20 deletions
@@ -89,7 +89,10 @@ export function cultivationTick(w: World): void {
const used = Math.min(supply, demand)
inv.lingcao = supply - used
// 0.1.27 修为↔市场回环:修行耗草同时抽走世界池(池浅→价涨→温度→era 全链)
if (w.state.worldSim) new WorldSim(w).tradeSettle('lingcao', -used)
// W10.1.30)人口-世界成本:人口 >20 时家族体量使世界灵草需求额外上行(人多粮少)
const pop = Object.values(w.state.members).filter((c) => c.alive).length
const crowdMult = pop > 20 ? (pop - 20) / 15 : 0
if (w.state.worldSim) new WorldSim(w).tradeSettle('lingcao', -(used + Math.max(0, Math.round(used * crowdMult))))
const ratio = supply >= demand ? 1 : supply / demand
herbFactor = 0.6 + 0.4 * ratio
if (ratio < 0.5 && w.state.family.flag['herbWarnYear'] !== w.state.year) {
@@ -16,6 +16,13 @@ export function diplomacyTick(w: World): void {
// 姿态调制:扩张好勇、隐忍避战、结盟之势休兵
const stance = (w.state.worldSim?.npcDyn?.[npc.id] as { stance?: string } | undefined)?.stance
let raidP = 0.03 * (stance === 'expand' ? 2 : stance === 'endure' ? 0.4 : stance === 'ally' ? 0 : 1)
// W2 世界关注度(匹夫无罪):本族战力 > 邻家均值 ×2 → 强族怀璧,仇家加觊
const myPow = w.familyPower()
const npcsAll = Object.values(s.npcFamilies)
if (npcsAll.length > 0) {
const npcAvg = npcsAll.reduce((a, n) => a + n.power, 0) / npcsAll.length
if (myPow > npcAvg * 2 && myPow > 300) raidP *= 1.5
}
// 0.1.20 盟约连坐(加性):与我结盟各家的世仇,更易扣边——不再×2×盟数叠爆
const dyns = (w.state.worldSim?.npcDyn ?? {}) as Record<string, { relationsWithOthers?: Record<string, number> }>
for (const ally of Object.values(s.npcFamilies)) {
@@ -349,7 +349,12 @@ export function eventRoll(w: World): void {
// 仙门拍卖(每年十月掷币;时代调制:盛世频仍/末法难逢)
if (s.month === 10 && w.sysEnabled('production')) {
const key = `auction-${s.year}`
const eraChance = w.state.worldSim ? Math.min(0.85, 0.55 * worldSimOf(w).eraAuctionMult()) : 0.55
// W2 关注度:强的家族遭世价抬杠(拍卖概率 ×1.5 表示“盯上你”的通胀)——简化:仅概率上调
const famPow = w.familyPower()
const npcsAll = Object.values(s.npcFamilies)
const npcAvg = npcsAll.length > 0 ? npcsAll.reduce((a, n) => a + n.power, 0) / npcsAll.length : 1
const notoriety = famPow > npcAvg * 2 && famPow > 300 ? 1.15 : 1
const eraChance = w.state.worldSim ? Math.min(0.9, 0.55 * worldSimOf(w).eraAuctionMult() * notoriety) : 0.55
if (!s.family.flag[key] && w.rng.chance(eraChance)) {
s.family.flag[key] = true
fire(w, 'ev-auction')