适用源码:
fd73c2ee0dac31c7b7a96560623207e15046cd1c。本页记录组织协议的持久化与履约实现。
数据
协议、确认、签署人、履约阶段、下一期时间、期数、和平期限、组织仓库和物资交接检查点全部保存到 SQLite organization_treaties。内部物资转移和任务推进同一快照原子提交;账本提交临时使用 synchronous=FULL,外部扣款/背包变动之前先持久化检查点,再恢复共享连接原有模式。服务器重启后续跑已签成合同,不重新执行完成的一次性条件。
执行顺序
- 签成时一次性物资先从双方可用仓库余额转入协议保留库存,避免签成后被取走。
- 后台先完成双方一次性金币扣款的持久化检查点。
- 再向任一方释放初始金币或保留物资。
- 定期条件在对应到期时分别执行;每次后台轮询最多处理每个定期任务的一期,不跳过欠付期数。
- 和平在初始交付后生效;转国排在和平之后。
外部系统间不存在数据库级原子事务,已完成部分不会自动撤回;失败会显示原因并暂停剩余履约。金币不足、物资不足或已知拒收记为“履约暂停/违约”,补足后只重试未完成任务;已扣款但已知尚未入账的任务仅重试入账。
协议仓库
库存以完整序列化物品的指纹区分,支持自定义装备及物品。条件中的样本不被消耗,实际交付来自仓库。物资存入时步骤是“从玩家手中移除”,取出时是“已发放给玩家”。
和平守卫
和平阻止 WarService.start(包括扩展 API)中的宣战,不只拦截命令。签成和和平执行时记录可由双方组织结束的当前战争 ID,按平局终止这些战争,原有方块复原流程继续。正数和平期会先发布宣战保护,再补查与宣战并发的新战争;到期后只重试已经列入的 ID。
异常核对
经济提供者没有幂等交易编号。扣款或入账进行中异常中断时,不自动猜测成功与否,而记为“待管理员核对”。flrv.treaty.admin 默认 OP,不能代签。
/treaty review
/treaty review money <任务ID> applied
/treaty review money <任务ID> not-applied
/treaty review inventory <交接ID> applied
/treaty review inventory <交接ID> not-applied
/treaty review town <协议ID>
/treaty review resume <协议ID>
applied 表示不确定的步骤确实已经完成,not-applied 表示确实未发生,不是重试按钮。核对操作记录操作者和参数到服务器日志。
与文字条款的边界
war/terms.yml 的模板仍仅生成文字记录;只有双方在结构化协议窗口确认的条件才会履约。文字条款不会自动导入成扣款指令,也不会因执行协议签成而自动替另一份文字协议签字。
来源
docs/organization-agreements.md;代码根 folia_plugin/src/main/java/com/flrv/:logic/treaty/、logic/war/negotiation/、infrastructure/persistence/war/TreatyRepository.java。