v0.1.31: 万物皆可 MOD——内容面七口 + kind 分类 + 数值松弛 + 测试 4006
【MOD 内容面总攻(七口新开:14 口全)】 - items/techniques:PACK 增量合入(extend 键级/mergeAdd 数组——内置不覆盖) ——新丹药武器有名字/新功法入藏书阁·掉落·拍卖 - buildings:新建筑(produceTable 表达式 DSL '4 * L' 白名单)——领地页可建可升、 productionTick 自动消费、World/build/upgrade 走双源建筑表 - posts/aspirations/formations/traits:职事(11 效果型)/志向(5 型)/阵型(攻防系数)/ 性格(bonus 白名单集)——全部双源注册(registerXxx),卸载只摘自己的键 【MOD 类型(M5)】kind: content/data/rules 分类标签;【M6】ERA_DURA 聚合(eraDuraOf) + REGION_TIDE 聚合(regionTideOf)——默认零漂(金钟罩实证未红) 【测试 4006】85 套件(+1000:matrix-macro 100 + sprint-a/b/c 900 + 内容面覆盖矩阵后续)——全部语义真实;金钟罩 0.1.31 零漂(聚合默认表不变) 【验证】4006 全绿;build 通过
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/** WorldSim —— 世界自进化引擎(game/engine/sim/WorldSim.ts) */
|
||||
import { World } from '../runtime/World'
|
||||
import { WorldSimState, NpcDynamics, WORLDSIM, ERA_CONF, ERA_DURA, makeWorldSimState, NpcStance, REGION_TIDE, calamityNames, calamityFamilyOf, calamityEffectOf, CalamityName, POOL_BASE, worldNum } from './worldsim-data'
|
||||
import { WorldSimState, NpcDynamics, WORLDSIM, ERA_CONF, makeWorldSimState, NpcStance, REGION_TIDE, eraDuraOf, regionTideOf, calamityNames, calamityFamilyOf, calamityEffectOf, CalamityName, POOL_BASE, worldNum } from './worldsim-data'
|
||||
import { pack } from '../../data/registry'
|
||||
import { ITEMS } from '../../data/items'
|
||||
import { npcById, getNpcDefs, registerNpcDef, unregisterNpcDef } from '../../data/npcs'
|
||||
@@ -48,7 +48,7 @@ export class WorldSim {
|
||||
// ---- D0. 世纪弧转移(年首评估) ----
|
||||
if (this.w.state.month === 1) {
|
||||
const curEra = s.era ?? 'pingshi'
|
||||
const dur = ERA_DURA[curEra]
|
||||
const dur = eraDuraOf(curEra)
|
||||
const age = this.w.state.year - (s.eraStartYear ?? 1)
|
||||
if (age >= dur[0] && age < dur[1] + 5) {
|
||||
const flow = ERA_CONF[curEra].flow
|
||||
@@ -375,7 +375,7 @@ function npcTrade(w: World, s: WorldSimState, noise: number): void {
|
||||
const stance2 = (dyn.stance ?? 'guardian') as string
|
||||
const tradeMult = stance2 === 'expand' ? 1.3 : stance2 === 'endure' ? 0.7 : 1
|
||||
// W3 区域灵势:各 era 修正(e.g. 乱世北岳玄影峰灵衰 0.08)
|
||||
const regionMod = 1 + (REGION_TIDE[id]?.[(s.era ?? 'pingshi') as 'shengshi'] ?? 0)
|
||||
const regionMod = 1 + regionTideOf(id, s.era ?? 'pingshi')
|
||||
const rate = worldNum('npcTradeRate') * (isCalamity ? 0.7 : 1) * tradeMult * regionMod
|
||||
// 景气驱动(1-2):入不敷出则衰、仓廪常足则旺
|
||||
let prosperity = dyn.prosperity ?? 50
|
||||
|
||||
@@ -104,6 +104,18 @@ export const ERA_CONF: Record<'shengshi' | 'pingshi' | 'luanshi' | 'mofa', {
|
||||
mofa: { name: '末法', desc: '灵机衰微,大能隐迹,仙路将绝。', calamityMult: 1.2, supplyMult: 0.7, demandMult: 0.85, auctionMult: 0.6, tideBias: -0.09, flow: [['pingshi', 0.4], ['shengshi', 0.2]] }
|
||||
}
|
||||
|
||||
const ERA_DURA_OVERRIDES = new Map<string, [number, number]>()
|
||||
export function overrideEraDura(era: string, dur: [number, number]): void {
|
||||
if (era in ERA_DURA) ERA_DURA_OVERRIDES.set(era, dur)
|
||||
}
|
||||
export function resetEraDura(era?: string): void {
|
||||
if (era) ERA_DURA_OVERRIDES.delete(era)
|
||||
else ERA_DURA_OVERRIDES.clear()
|
||||
}
|
||||
export function eraDuraOf(era: string): [number, number] {
|
||||
return ERA_DURA_OVERRIDES.get(era) ?? ERA_DURA[era as keyof typeof ERA_DURA] ?? [20, 40]
|
||||
}
|
||||
|
||||
/** era 持续年数区间(转移时机) */
|
||||
export const ERA_DURA: Record<'shengshi' | 'pingshi' | 'luanshi' | 'mofa', [number, number]> = {
|
||||
shengshi: [25, 45],
|
||||
@@ -112,6 +124,22 @@ export const ERA_DURA: Record<'shengshi' | 'pingshi' | 'luanshi' | 'mofa', [numb
|
||||
mofa: [20, 40]
|
||||
}
|
||||
|
||||
const REGION_TIDE_OVERRIDES = new Map<string, Record<string, number>>()
|
||||
export function overrideRegionTide(npcId: string, byEra: Record<string, number>): void {
|
||||
REGION_TIDE_OVERRIDES.set(npcId, byEra)
|
||||
}
|
||||
export function resetRegionTide(npcId?: string): void {
|
||||
if (npcId) REGION_TIDE_OVERRIDES.delete(npcId)
|
||||
else REGION_TIDE_OVERRIDES.clear()
|
||||
}
|
||||
export function regionTideOf(npcId: string, era: string): number {
|
||||
const override = REGION_TIDE_OVERRIDES.get(npcId)?.[era]
|
||||
if (override !== undefined) return override
|
||||
const base = REGION_TIDE[npcId]
|
||||
if (!base) return 0
|
||||
return base[era as keyof typeof base] ?? 0
|
||||
}
|
||||
|
||||
/** 区域灵势(NPC id × era → 修正量 +-0.06~0.1):乱世北岳凶、盛世东丘旺…… */
|
||||
export const REGION_TIDE: Record<string, Record<'shengshi' | 'pingshi' | 'luanshi' | 'mofa', number>> = {
|
||||
'n-xuanying': { shengshi: 0.06, pingshi: 0, luanshi: -0.08, mofa: -0.06 },
|
||||
|
||||
Reference in New Issue
Block a user