# 06 · 世界模拟引擎与事件、战斗
世界在玩家不看时也要真实运转。本章定义模拟层的运行规则、事件库结构,以及文字版战斗方案。 本章偏工程与内容结构,模拟核心必须为纯 TS 可单测层(见 10-tech-architecture.md)。 状态:M0 设定已拍板(2026-09-23);战斗为抉择制自动演算,见 §6 与 15。
1. 时间驱动:行动结算制 + 惰性补跑(2026-09-23 用户定稿:时间不自然流动)
- 没有实时流逝的时钟:世界时间只在玩家确认行动时推进。玩家停留,世界停留(不挂机、不自动涨修为);
- 玩家提交"耗时行动"(吐纳一时辰/行路半日/闭关一旬/等候到清明)→ 模拟引擎按目标时刻一次性补跑所需的各层 tick,产出事件流与"此间简报",再把世界交还给玩家;
- Tick 仍分层(决定补跑时结算什么):
| 层级 | 触发粒度 | 结算内容 |
|---|---|---|
| 时辰 tick | 每 2 小时游戏时间 | 行动结算、NPC 当值位置、天气小变、伤势、灵气恢复 |
| 日 tick | 每日 | 饥寒、商铺开集、对话冷却、传闻再传播一轮、民生微动、玩家行踪被谁看到 |
| 节气/旬 tick | 每 ~10 日 | 粮价、资源恢复、事件链推进、NPC 年龄推进(按年折算) |
| 年 tick | 每年 | 生老病死、任免更替、势力积怨、长期工程(山门新建/围城)、年成总判 |
| 旅途 tick | 移动中按里程 | 路途事件抽样、遭遇、到达 |
- 补跑采用惰性降频:远离玩家的地域只结算人口/物价/势力等聚合数值,具名 NPC 用年龄/状态快照压缩;低配手机可承载数千格世界;
- 补跑结果按 07 知识过滤后才呈现(你闭关出来听到的世界,是别人愿意让你听到的世界)。
2. 事件总线(Event Bus)
- 一切发生的事都是带结构的
GameEvent:
GameEvent {
id, time(年/节气/日/时辰), type, severity
location?(格/聚落/势力范围)
actors[](涉事人/势力/妖物)
cause?(因果链:由哪个事件引起)
visibility:公开 / 势力内 / 私密 / 仅亲历者 / 绝不可知
rumorSeeds[](此事若被传开,生成的说法模板,带失真参数)
effects(对民生数值/关系/资源的写入)
chain?(后续事件挂点:几日后、何种条件下触发)
}
- 事件写入**编年史(公开大事)与传闻网络(可失真传播)**两个去向,玩家是否能看到由信息系统裁决(见 07)。
- 内容作者只需在事件数据文件里填模板与权重,不写引擎代码。
3. 事件库(继承旧设 + 文字化扩展)
3.1 世界/民生类
- 兽袭聚落(继承 raid):妖物袭村,提前有征兆(犬吠、失踪鸡犬、猎户见迹),玩家可在时间窗内驰援;功成 → 善因/谢礼/生祠;坐视 → 人口、稳定大跌,县志记恨;
- 年成:丰/平/灾(旱、涝、蝗、雪),联动粮价、流民、粮商囤积、官府赈粜;
- 瘟疫/瘴疫:封村、药铺涨价、走方郎中成名、患者被疑成"中邪"(道心/魔修冤案事件);
- 婚嫁丧葬/社戏庙会/春祈秋报:人情往来高发场景;
- 流民与匪患:灾年流民→落草→剿匪→招安链条,control 低的格子逐步滋生山寨;
- 商路事件:镖队失踪、码头封冻、漕帮争地盘、牙人哄抬物价。
3.2 修仙界类
- 破境异象:他人破境的劫相可见可闻(按距离与异象烈度),魔丹引魔修、正道丹引来贺客;
- 宗门动静:开山门收徒(近期履历、荐书、根骨测试)、讲经法会、掌门坐化、长老争位、封禁后山、通缉叛徒;
- 夺宝/夺地:灵眼之争、遗迹出土、两宗摩擦→逐格冲突(§5);
- 坊市风波:鉴宝大会、拍卖会、有人卖假丹吃死人、魔道潜入;
- 朝廷:缉妖司招募、加封国师、镇邪卫调动、灭一门"妖邪"的罗织案。
3.3 天象/时令(继承血月/雷劫/日循环)
- 血月:妖兽活跃上限提高、魔事高发、破魔/成魔双向窗口;
- 雷暴雨/雪暴/彗星/日食:影响移动、破境"时"维、世人恐慌与舆情;
- 节气固定事件:冬至祭、上巳、中元(鬼节,与死后事/执念线强联动)、除夕。
3.4 个人类(玩家或 NPC 发起)
- 传书邀约、红白请柬、寻仇、寻恩、拜师考验、师门考核、闭关之约;
- 炉鼎/双修诱惑(明确做成危险的因果/道心抉择,不做风月消费);
- 托孤、托付后事、借债、担保人违约连坐。
3.5 志怪/真相类
3.6 事件链与"不读档也合理"
- 事件可有前后手(兽袭后:孤儿→收养/送人/流浪,十年后成为猎户或匪;救下的人可能在关键时辰出现);
- 玩家不在线/已死亡,链继续走;世界不需要玩家也成立。
4. 事件抽样原则(内容设计约束)
- 权重不只是随机:地域 danger、control、时节、血月、玩家因果、势力关系、传闻热度共同决定;
- 密度克制:宁少勿滥。寻常日子要允许"无事发生"(日志写平淡的好事:集市热闹、新醅上市),大事才砸得响;
- 事件文案必须给可行动的尾巴(可查、可问、可追、可装不知道),不能只是播报。
5. 势力战争的文字化呈现
- 战争以格为推进单位:摩擦→封路→夺格→围城→破城/议和,每步产生战报事件;
- 玩家视角按信息渠道分级:本城告急(亲历)/败兵传言(失真:人数越传越离谱)/朝廷邸报(官方口径,可能粉饰);
- 玩家可选角色:守城、带信、护送家眷、发国难财、开门说降、趁乱取一物——不必做英雄,世界允许小人物的活法。
6. 战斗:抉择制自动实时演算(2026-09-23 用户定稿)
- 三段式:① 遭遇抉择(动手/逃跑/理论/威慑/贿赂/欺骗/劝降/求援/避开…,按情境动态出现)→ ② 自动实时演算(底层实时,玩家战中不操作,只可观战/快进/看结果)→ ③ 战后处置(胜而敌活:放走/索取/逼问/抓捕/劝降/废修/处决/医治…;敌死:搜身/埋尸/曝尸/分尸取材/火化/毁迹/割首/献祭/报官…;敌逃/己败另有分支);
- 特殊情境分支:野外妖兽、主动求战、好友同门切磋(点到即止)、擂台大比、入门大逃杀、秘境黑吃黑、军阵执法、血月妖潮——规则与处置各不相同;
- 完整规则(三气、对峙面板、打法基调与物用许可、心魔照见、妖兽参数、平衡红线)全部见 15-combat-shenshen.md;
- 与模拟层接口:战斗是输入种子可回放的实时子循环;战后事件(名声、战报版本、死亡/被俘、掉落、情报)回流事件总线。
7. 妖兽(继承五类,按 hex 地形出没)
| 妖 | 地形 | 识别剪影(转文字:第一句描写的任务) | 特性 |
|---|---|---|---|
| 铁背蛟 | 高山 | 覆瓦背甲、长吻独角 | 甲厚血重 |
| 赤鬃狼 | 平野 | 瘦长跑手、九根红鬃 | 成群、速快 |
| 玄石魈 | 高岭 | 叠岩巨猿、背嵌妖晶 | 最重最伤 |
| 百足蜈 | 湿地 | 贴地节身、毒钩尾 | 剧毒 |
| 火妖狐 | 平野 | 三尾白梢、额焰印 | 最速、善惑(与道心线联动) |
- 血月上限提高(继承);妖有妖丹与材料,杀/放/驯(灵宠)三选都是因果;
- 妖兽种类需持续扩充(二期),但每只必须"一句话能认出",不要色块怪。
8. 模拟层测试要求
- 抽样分布、经济波动、人口更替、势力推格、传闻失真、五维合丹等全部写 Vitest 单测(给定 seed 断言结果与边界);
- 提供"百年快进"调试命令:无玩家世界跑 100 年,断言不崩、人口/势力不失控(平衡回归基线)。