下载 App
开发日志 · 第 4 篇
/本期进展
这一周的主线是把系统铺开:经济、政治、军事、时代依次落地,最后做了一次全局审计,把「设计里有、代码里没有」的东西找出来。
1. 贸易系统深化
- 市场按城池分区,不是全图单一市场 —— 只有这样,「运输成本」才有意义。
- 运费按跳数而非固定金:固定金会让廉价大宗货永远运不动。
- 商路博弈:价格预测、战火波及、第三方截断、外交联动,商路收益带趋势与事件标记。
- 市场 UI 约 950 行,新增 ui/LineChart.lua(NanoVG 折线图,支持标记与点击)。
- 地图上画出商路并按风险着色;线条比格子细,点击命中必须先判线条再判格子。
- 拆分 MainUI:原 2155 行 → 约 800 行,拆出 7 个视图,并引入 ui/views/Registry.lua 作为唯一共享点断开循环依赖。
2. 政治深化
原来议会席位是纯静态的,写死在配置里 —— 打下一片地、虔诚翻倍都不会改变议会格局,派系是死的。本轮把它做成活的:
- 派系影响力动态化:贵族=领地×财富、教会=虔诚×教区、市民=城市×贸易额、农民=Pop、廷臣=任职,再乘政体偏好归一化到 100 席。
- 压力后果链:此前 reform_pending / civil_war_risk / coup_risk 三个标志位没有任何消费者 —— 压力涨到 100 什么都不发生。现在压力 ≥50 可主动改革、≥70 集团讨价还价(条款打折)、≥70 有概率起兵。
- 内战复用征服结算:叛军单独进 rebel_factions,不进 world.factions;胜负分支优先分流内战。
- 拉票三手段:金钱贿赂 / 威望承诺 / 职位交易,加成一次性、表决后清空 —— 否则等于「贿赂一次永久买断」。
- 顺手修了一个长期算反的问题:EraMatch 拿按 id 字母序排的列表当下标,导致时代越晚、期望的政体越原始。
3. 军事深化
- 新增 systems/Combat.lua 与兵种四维(hp / shield / atk / def):征召兵 10/0/4/2、骑士 48/18/22/14、战舰 80/26/30/16。
- 减伤用 伤害 = 攻击 × K/(K+防御)(K=60)—— 单调递减但有正下界,避免「堆防御 = 无敌」。
- 宏观胜负(war_score)与微观减员(Combat)分成两个口径,不混在一起。
- 堡垒加建造上限,统计含在建 —— 否则可以「并行开工 N 座」绕过。
- 地图缩放栏新增「自动 / 手选」路线切换,手选与自动寻路同口径校验。
4. 一次真机崩溃:%d 遇到浮点数
用户点敌国城池必崩:
bad argument #2 to '_orig_string_format' (number has no integer representation)根因很典型:月 → 旬改造时,我改了格式串里的「月」字,却没改参数 ——
luastring.format("行军 %d 旬(%s)· %d 格", months, label, hops) -- ^^^^^^ 仍是浮点月数
修法是「标签写什么单位,参数就用那个单位的整数」。随后把全库所有经过「月→旬」改造的时间格式化逐处复查,只有这一处是真实 bug。新增 verify_fmt.lua 覆盖边界(浮点天数也能安全格式化)。
5. 时代推进:从「拍脑袋」到「真实年表」
之前的时代推进是「AI 按自身发展累积进度、达门槛进阶」,速度靠一个系数反复调参 —— 但没有客观标准,怎么调都是拍的。用户反馈「十五年也太快」。
改为真实历史年表 + 比例压缩:
| 时代 | 真实起始年 | 游戏年 |
|---|---|---|
| 封建 | 1000 | 第 1 年 |
| 文艺复兴 | 1400 | 第 133 年 |
| 宗教改革 | 1517 | 第 171 年 |
| 启蒙 | 1700 | 第 232 年 |
| 大革命·工业萌芽 | 1789 | 第 261 年 |
把 789 个真实年压缩进 260 个游戏年。文艺复兴从原来的第 45 年推到第 133 年 —— 慢了近 3 倍,而且有了客观依据,不再靠调系数。AI 改为跟随时间表 + 由 id 散列决定的稳定小延迟(不用随机数,否则延迟会变成无法解释的噪声)。


问题与风险
🔴 风险 1:构建成功 ≠ 不崩溃
%d 那个崩溃,LSP 0 error、构建成功,但玩家一点就崩。这类「格式串与参数单位不一致」的问题,静态检查看不出来,只有真机点进去才会暴露。之后每轮都补了对应的格式化探针。


下期计划
- 数值与稳定性 —— 长程探针跑起来,看长期局会不会崩。
- 粮食系统 —— 这是策划案里最重的一块,需要单独开专项。


附:开发过程记录
本期配图 —— 从贸易到审计的六天:

当日状态:
代码规模 : scripts/ 约 29000 行 / 83 个 .lua(10-09 记录)
LSP : 0 error
构建 : 成功(10-09 为 1.0.83)
真机验证 : 出现过 1 次点击即崩(%d 遇浮点),已修并补探针




