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' import { buildBiography } from '../../game/engine/narrative/biography' export default function SettingsPanel() { const world = useGameStore((s) => s.world) const bump = useGameStore((s) => s.bump) const slot = useGameStore((s) => s.slot) const saveNow = useGameStore((s) => s.saveNow) const modsList = useGameStore((s) => s.modsList) const exportSave = useGameStore((s) => s.exportSave) const importSave = useGameStore((s) => s.importSave) const refreshSlots = useGameStore((s) => s.refreshSlots) const refreshSnapshots = useGameStore((s) => s.refreshSnapshots) const restoreSnapshot = useGameStore((s) => s.restoreSnapshot) const snapshots = useGameStore((s) => s.snapshots) const go = useGameStore((s) => s.go) const setSpeed = useGameStore((s) => s.setSpeed) const soundOn = useGameStore((s) => s.soundOn) const toggleSound = useGameStore((s) => s.toggleSound) const setNextToast = useGameStore((s) => s.setNextToast) const [fxMode, setFxModeState] = useState('std') const setFxMode = (m: 'soft' | 'std' | 'full') => { setFxModeState(m) ensureFx().setMode(m) } if (!world) return null const hasDemo = world.pluginList().some((p) => p.id === 'demo-peaks') return (
{/* ===== MOD 层:外部内容包(userData/mods/*.cotymod|json)===== */}
MOD 层(外部内容包)
MOD 放置于 userData/mods/(*.cotymod / *.json,一个文件一个包)。 安装后于新开档的世界生成中生效(事件/模板/词库/配方);与插件同管线:可启停、随档持久化、卸载自动回滚。
发现 {modsList.length} 个候选包
内置仓库(官方示范包): {BUILTIN_MODS.map((m) => ( ))}
{modsList.length > 0 && (
{modsList.map((name) => (
{name}
候选文件——点击安装为内容插件
))}
)}
{/* ===== 插件层:万物皆是插件的实证窗口 ===== */}
插件层(manifest 清单)
「万物皆是插件」:系统 / 数据包 / 事件池统一走 CotycPlugin 协议。核心三插件受保护常驻, 第三方插件可随时安装/卸载(卸载即全摘钩子)。点击下方体验按钮,立刻注入一个真实插件—— 事件「山鬼怒吼」将在消息池中定期浮现,同时年首添『护山之力』。
{world.pluginList().map((p) => (
{p.id}
{p.name} v{p.version}{p.author ? ` · ${p.author}` : ''} · {p.kind} · {p.description} {p.dependencies?.length ? `(依赖:${p.dependencies.join('、')})` : ''} {p.conflicts?.length ? `(冲突:${p.conflicts.join('、')})` : ''}
{p.protected ? '核心' : p.enabled ? '已启用' : '已停用'} {!p.protected && ( <> )}
))}
{!hasDemo && ( )}
{/* ===== 系统仪表盘:12 能力卡启停 ===== */}
系统仪表盘(能力卡 · 12 张启停)
{SYSTEM_DEFS.map((s) => { const enabled = world.sysEnabled(s.id) return (
{s.name} {s.id} v{s.version}
{s.desc}
) })}
{/* ===== 存档与导出 ===== */}
存档与导出
{snapshots.slice(0, 12).map((sn, i) => ( ))}
手动存点(当前第 {slot} 档)
回档时间轴(每季自动快照,最近12份)
{sn.year}年{sn.month}月{sn.label !== '自动' ? ` · ${sn.label}` : ''} {sn.year === world.state.year && sn.month === world.state.month ? '(当前)' : ''}
导出存档(JSON 文件)
导入存档到当前位置
音效(合成音:鼓点·钟鸣·纸韵)
动效档位(灵雾/金砂粒子) {(['soft', 'std', 'full'] as const).map((m) => ( ))}
暂停时间
回到主菜单(会先自动保存)
玩法说明
· 日常以「月」流转:成员修炼、建筑产出、往事兴替、事件沓来。
· 「宗」字牌成员可闭关、服丹、冲击瓶颈;瓶颈即修为满百者,成功率看灵气、丹药与家主督学。
· 「探秘」选人结队远行,途中见战报;凯旋带回灵石、法帖、法器诸宝。
· 「外交」与四邻结好联姻;仇雠之族隔岁来犯,打得赢名望大涨,打不赢蚀钱伤丁。
· 「史书」自动记述繁华与凋零——百年之后,后人翻开这一卷家族志,见代代薪火、历历雪泥。
版本 0.1.33 · Chronicle of the Immortal Clan
) }