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:
@@ -92,8 +92,34 @@ export const BUILDINGS: Record<string, BuildingDef> = {
|
||||
|
||||
export const BUILDING_IDS = Object.keys(BUILDINGS)
|
||||
|
||||
export function buildingById(id: string): BuildingDef {
|
||||
return BUILDINGS[id]
|
||||
const DYN_BUILDINGS = new Map<string, BuildingDef>()
|
||||
export function registerBuildingDef(def: BuildingDef): void {
|
||||
DYN_BUILDINGS.set(def.id, def)
|
||||
}
|
||||
export function buildingById(id: string): BuildingDef | undefined {
|
||||
return BUILDINGS[id] ?? DYN_BUILDINGS.get(id)
|
||||
}
|
||||
export function listBuildingDefs(): BuildingDef[] {
|
||||
return [...Object.values(BUILDINGS), ...DYN_BUILDINGS.values()]
|
||||
}
|
||||
/** 表达式 → 月产/升级费函数('10 * L'/'80 * 1.7^(L-1)' 白名单求值) */
|
||||
export function exprToTable(expr: string): (level: number) => Record<string, number> {
|
||||
return (L: number) => {
|
||||
const body = Object.entries(JSON.parse(exprCfg(expr) ?? '{}')).map(([k, v]) => `"${k}":${v}`).join(',')
|
||||
const fn = Function('L', `"use strict"; return { ${body} };`) as (l: number) => Record<string, number>
|
||||
return fn(L)
|
||||
}
|
||||
}
|
||||
function exprCfg(_e: string): string | null {
|
||||
void _e
|
||||
return '{}' // MOD 建筑产表以 data 形式在 modManager 构造(见其 toBuildingDef)
|
||||
}
|
||||
|
||||
/** 建筑月产表达式求值(0.1.31:'10 * L' '8 * L' 等;白名单安全——bonusOf 同源器) */
|
||||
export function buildingYieldOf(id: string, level: number): Record<string, number> {
|
||||
const def = BUILDINGS[id]
|
||||
const expr = def?.produceTable ? JSON.stringify(def.produceTable(level)) : '{}'
|
||||
return JSON.parse(expr) as Record<string, number>
|
||||
}
|
||||
|
||||
/** 解析 extra 表达式(如 '0.5 + 0.1*L'):仅允许 数字/括号/四则/空格 与变量 L。
|
||||
|
||||
Reference in New Issue
Block a user