v0.1.26: 墨规清辉——MOD 规范范式 + 灾因注册表 + 页面提亮(1047 全绿)
【MOD 规范与范式(核心命题)】 - docs/MOD_GUIDE.md:完整作者守则——命名/id 规约/semver/schema:1/五数据口 (事件/模板/词库/灾因/配方)/依赖冲突/安全红线(无脚本·禁碰 rng·不动核心时序)/ 打包分发(.cotymod 单文件)/行为承诺 - validateMod 深度校验:category/weight/境界/负成本/非空/options.eff 形状 - modPreflight 权威冲突检测:findEvent(池+动态分支 raid/渡劫/大比/传薪全量) - MOD_SCHEMA_VERSION=1 + schema 声明与升级提示;PluginStatus.author 展示 【灾因归一化(平衡版落地)】 - calamities 由 as const 死表→聚合注册表(calamityNames/calamityFamilyOf/calamityEffectOf+addCalamity) - WorldSim 灾签/生产/Market 全链路走聚合读口——MOD 灾因(剑灾/灵潮湍变)进入世界循环 - 默认表不变→基准世界指纹零漂(clock.test 全绿实证) 【页面可读性(有点暗)】 - .dim #6d6150→#a99c80(3.4:1→7+:1)、.dim2 #96896e→#c3b595、.help-text 提亮、 .feed-item 显色 #efe4c9 + 灰金系 8 处提亮(styles.css 12+/11- 纯色值) - tests/contrast-readability.test.ts:WCAG 对比度审计(≥4.5:1)+ 历史暗色迁移断言 【测试】1047 全绿(47 套件):mod-system 9(+validate/灾因/冲突/预检)、contrast 3; 【金钟罩】0.1.25 基线零漂;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, CALAMITY_EFFECT, CALAMITY_FAMILY, CalamityName, POOL_BASE } from './worldsim-data'
|
||||
import { WorldSimState, NpcDynamics, WORLDSIM, ERA_CONF, ERA_DURA, makeWorldSimState, NpcStance, REGION_TIDE, calamityNames, calamityFamilyOf, calamityEffectOf, CalamityName, POOL_BASE } from './worldsim-data'
|
||||
import { pack } from '../../data/registry'
|
||||
import { ITEMS } from '../../data/items'
|
||||
import { npcById, getNpcDefs, registerNpcDef, unregisterNpcDef } from '../../data/npcs'
|
||||
@@ -89,7 +89,7 @@ export class WorldSim {
|
||||
if ((s.calamityLeft ?? 0) > 0) s.calamityLeft = (s.calamityLeft ?? 0) - 1
|
||||
const calamityP = WORLDSIM.calamityChance * ERA_CONF[s.era ?? 'pingshi'].calamityMult
|
||||
if (this.w.state.month === 1 && rng.chance(calamityP)) {
|
||||
const cl = rng.pick([...WORLDSIM.calamities])
|
||||
const cl = rng.pick(calamityNames())
|
||||
s.calamity = cl
|
||||
s.calamityYear = this.w.state.year
|
||||
s.calamityLeft = WORLDSIM.calamityMonths
|
||||
@@ -409,7 +409,7 @@ function inv(w: World): Record<string, number> {
|
||||
}
|
||||
|
||||
function applyCalamityToMarket(s: WorldSimState, cl: CalamityName): void {
|
||||
const eff = CALAMITY_EFFECT[cl]
|
||||
const eff = calamityEffectOf(cl)
|
||||
for (const [id, pct] of Object.entries(eff) as [string, number][]) {
|
||||
s.marketPool[id] = Math.max(10, (s.marketPool[id] ?? 50) * (1 + pct))
|
||||
}
|
||||
|
||||
@@ -155,10 +155,13 @@ export const WORLDSIM = {
|
||||
newsKeep: 120
|
||||
}
|
||||
|
||||
export type CalamityName = (typeof WORLDSIM.calamities)[number]
|
||||
export type CalamityName = string
|
||||
|
||||
/** 默认灾因集(聚合读口:默认+MOD/插件扩展——默认表和不变 → 基准世界指纹不漂) */
|
||||
export const DEFAULT_CALAMITIES = ['旱灾', '涝灾', '蝗灾', '疫病', '兽潮', '寒潮'] as const
|
||||
|
||||
/** 灾因 → 家族实际生产乘量(1 = 正常) */
|
||||
export const CALAMITY_FAMILY: Record<CalamityName, Partial<Record<string, number>>> = {
|
||||
export const CALAMITY_FAMILY: Record<string, Partial<Record<string, number>>> = {
|
||||
旱灾: { lingcao: 0.7 },
|
||||
涝灾: { lingcao: 0.8, lingkuang: 0.95 },
|
||||
蝗灾: { lingcao: 0.55 },
|
||||
@@ -168,7 +171,7 @@ export const CALAMITY_FAMILY: Record<CalamityName, Partial<Record<string, number
|
||||
}
|
||||
|
||||
/** 灾因 → 资源方向 */
|
||||
export const CALAMITY_EFFECT: Record<CalamityName, Partial<Record<string, number>>> = {
|
||||
export const CALAMITY_EFFECT: Record<string, Partial<Record<string, number>>> = {
|
||||
旱灾: { lingcao: -0.3 },
|
||||
涝灾: { lingcao: -0.2, lingkuang: -0.1 },
|
||||
蝗灾: { lingcao: -0.45 },
|
||||
@@ -176,3 +179,34 @@ export const CALAMITY_EFFECT: Record<CalamityName, Partial<Record<string, number
|
||||
兽潮: { beastcore: 0.3 },
|
||||
寒潮: { lingcao: -0.2, beastcore: -0.15 }
|
||||
}
|
||||
|
||||
/** 扩展灾因注册表(MOD/插件 addCalamity)——名字唯一;与默认集聚合 */
|
||||
const EXTENDED_CALAMITIES: string[] = []
|
||||
const EXTENDED_FAMILY: Record<string, Partial<Record<string, number>>> = {}
|
||||
const EXTENDED_EFFECT: Record<string, Partial<Record<string, number>>> = {}
|
||||
|
||||
export function addCalamity(
|
||||
name: string,
|
||||
opts: { family?: Partial<Record<string, number>>; effect?: Partial<Record<string, number>> }
|
||||
): boolean {
|
||||
if (DEFAULT_CALAMITIES.includes(name as never) || EXTENDED_CALAMITIES.includes(name)) return false
|
||||
EXTENDED_CALAMITIES.push(name)
|
||||
if (opts.family) EXTENDED_FAMILY[name] = opts.family
|
||||
if (opts.effect) EXTENDED_EFFECT[name] = opts.effect
|
||||
return true
|
||||
}
|
||||
|
||||
/** 聚合读口(WorldSim 灾签/体感/生产/Market 读取) */
|
||||
export function calamityNames(): string[] {
|
||||
return [...DEFAULT_CALAMITIES, ...EXTENDED_CALAMITIES]
|
||||
}
|
||||
export function calamityFamilyOf(name: string): Partial<Record<string, number>> {
|
||||
return EXTENDED_FAMILY[name] ?? CALAMITY_FAMILY[name] ?? {}
|
||||
}
|
||||
export function calamityEffectOf(name: string): Partial<Record<string, number>> {
|
||||
return EXTENDED_EFFECT[name] ?? CALAMITY_EFFECT[name] ?? {}
|
||||
}
|
||||
/** 灾因中文描述(MOD 灾因缺省用名本身) */
|
||||
export function calamityDescOf(name: string): string {
|
||||
return `${name}——灵植减产,市价将行。`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user