P0实现说明
状态:2026-10-07 首版接入江夏,规则参数仍待试玩调优。P1 朝廷玩法、多边盟战和招安不在本次范围。
已接入
- 江夏
DiplomacyManager下的场景化DiplomacyCoordinator负责争端日推进、月收入快照及战损事件。 - 外交总览内提供发起争端、免费防守反诉、撤回、接受通牒、提出/接受/拒绝和约与延长僵局操作。
- 争辩 30 天、最终通牒 10 天;每方单主目标;无理由战争扣 10 威望,治理权宣称消耗 10 影响力。威望惩罚最低保留 1。
- 白和、治理权转移、一次性赔款及和平解决后 24 月/战后 36 月停战;提案带版本号,接受时重新验证资源和权属。
- 战争占领保留原控制状态。白和仅恢复本战争仍持有的占领,不能覆盖第三方后续控制;战争中不能提前固化占领。
- 和约提交集中执行,失败恢复受影响的控制状态、余额和账本;执行记录随条约保存,防止读档重复执行。
- 战争计分、基本议和 AI、全败持续 30 天判定、24 月僵局及一次 6 月延期。攻下目标不再直接结束战争。
- 操作通过
GameWorld.perform_action()排队,与日/月结算串行;镜头和面板不等待队列。
数据与接口
外交存档升级至 schema_version: 3,新增 p0 字段。战争保存 p0 战时快照,条约保存 execution,治理控制状态保存 source_war_id。旧双边战争可迁入议和流程;旧多边战争保留原接口,不转换成新的双边玩法。
游戏调用入口为 initiate_dispute(actor, target, goal)、respond_dispute(id, actor, operation, goal)、propose_peace(id, actor, terms) 和 accept_peace(id, actor, version)。调用方须经操作队列提交,并捕获稳定 ID 和复制后的参数。
剧本可在外交 JSON 的 p0.claims 中配置宣称,以宣称 ID 为键,值包含 holder、target、right_type: "governance"、cities、end_date、disputed。目标必须属于对方且在宣称范围内;过期、争议和收益权宣称不能使用。江夏默认未虚构任何历史宣称,所以初始只显示无理由战争。
p0.initial_income 可配置初始月收入:势力 ID 对应势力私产净收入,city:<city_id> 对应城邑税收。未配置且无结算历史时按零收入处理,赔款不开放;之后使用最近三个月结算记录,开战时冻结。赔款只动用势力私产,不自动挪用公库。转地不自动获得满额治理效率。
验证记录
所有 Godot 验证通过配置的 godot-ai MCP 运行。
- 新增
tests/test_diplomacy_p0.gd:26/26 通过,覆盖费用、期限、目标锁定、失败回滚、重复接受、读档、占领恢复、战分、停战、AI 与旧档迁移。 - 回归:占领 6/6、行动队列 3/3、战略行为 2/2、宏观军事 6/6;治理财政 12/13、江夏剧本 5/6。
- 后两组各有一个非本次外交改动的失败:角色头像资源在编辑器测试中为非工具脚本占位实例;西川领土连通性断言失败。未扩展修改这两个模块。
- 旧外交系统、外交编辑器、外交总览 UI 三个运行场景均输出通过标记。
- 江夏运行验证完成争端升级、战时占领、拒绝提前固化、外交数据往返、白和归还与和平转地;外交运行日志无新增错误。
- 排队等待时验证镜头位置和缩放持续更新、面板关闭有效、场景树未暂停;1920×1080 和 1280×800 检查外交面板布局。
此记录不等同于长期 AI 平衡或大规模性能验收。现有事件管理器的测试触发器配置警告仍存在。