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:
@@ -1,5 +1,6 @@
|
||||
import { useState } from 'react'
|
||||
import { useGameStore } from '../store'
|
||||
import { BUILTIN_MODS } from '../../game/data/builtin-mods'
|
||||
import { examplePlugin } from '../../game/engine/runtime/demo-plugins'
|
||||
import { ensureFx } from '../fx'
|
||||
import { SYSTEM_DEFS } from '../../game/engine/runtime/capabilities'
|
||||
@@ -57,6 +58,20 @@ export default function SettingsPanel() {
|
||||
>导出当前MOD集</button>
|
||||
<span className="dim2">发现 {modsList.length} 个候选包</span>
|
||||
</div>
|
||||
<div style={{ margin: '8px 0 4px' }}>
|
||||
<span className="dim">内置仓库(官方示范包):</span>
|
||||
{BUILTIN_MODS.map((m) => (
|
||||
<button
|
||||
key={m.id}
|
||||
className="btn btn-sm"
|
||||
style={{ marginLeft: 6 }}
|
||||
title={m.description}
|
||||
onClick={() => {
|
||||
void useGameStore.getState().installModText(JSON.stringify(m))
|
||||
}}
|
||||
>{m.name} v{m.version}</button>
|
||||
))}
|
||||
</div>
|
||||
{modsList.length > 0 && (
|
||||
<div className="plugin-grid">
|
||||
{modsList.map((name) => (
|
||||
@@ -93,6 +108,8 @@ export default function SettingsPanel() {
|
||||
<b>{p.name}</b>
|
||||
<span className="dim2" style={{ fontSize: '0.8rem' }}>
|
||||
v{p.version}{p.author ? ` · ${p.author}` : ''} · {p.kind} · {p.description}
|
||||
{p.dependencies?.length ? `(依赖:${p.dependencies.join('、')})` : ''}
|
||||
{p.conflicts?.length ? `(冲突:${p.conflicts.join('、')})` : ''}
|
||||
</span>
|
||||
</div>
|
||||
<div className="plugin-actions">
|
||||
@@ -269,7 +286,7 @@ export default function SettingsPanel() {
|
||||
· 「外交」与四邻结好联姻;仇雠之族隔岁来犯,打得赢名望大涨,打不赢蚀钱伤丁。<br />
|
||||
· 「史书」自动记述繁华与凋零——百年之后,后人翻开这一卷家族志,见代代薪火、历历雪泥。
|
||||
</div>
|
||||
<div className="dim2" style={{ marginTop: 8 }}>版本 0.1.29 · Chronicle of the Immortal Clan</div>
|
||||
<div className="dim2" style={{ marginTop: 8 }}>版本 0.1.30 · Chronicle of the Immortal Clan</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -10,6 +10,8 @@ export default function NewGame() {
|
||||
const [familyName, setFamilyName] = useState('林家')
|
||||
const [motto, setMotto] = useState('耕读传家,术法继世')
|
||||
const [difficulty, setDifficulty] = useState<'easy' | 'normal' | 'hard'>('normal')
|
||||
const activeMods = (useGameStore((s) => s.world?.pluginList?.()) ?? [])
|
||||
.filter((p) => (p as { id?: string })?.id?.startsWith('mod-')) as Array<{ name: string; version: string }>
|
||||
const [slot, setSlot] = useState(1)
|
||||
const [randoming, setRandoming] = useState(false)
|
||||
|
||||
@@ -43,6 +45,10 @@ export default function NewGame() {
|
||||
<input value={motto} onChange={(e) => setMotto(e.target.value)} maxLength={20} />
|
||||
</div>
|
||||
<div className="field">
|
||||
<label>已装入 MOD(影响本局世界生成):</label>
|
||||
<div className="dim2" style={{ fontSize: '0.8rem', marginBottom: 8 }}>
|
||||
{activeMods.length > 0 ? activeMods.map((m) => m.name).join('、') : '(无 —— 纯粹天下)'}
|
||||
</div>
|
||||
<label>难度</label>
|
||||
<div className="diff-grid">
|
||||
{(
|
||||
|
||||
Reference in New Issue
Block a user