同一次游戏事件可能因重试而多次送达。若每次都再次改变积分,结果就会随重复次数改变;用稳定事件编号区分首次处理与重复通知,可以明确结算范围。
下面是一组独立的虚构游戏输入与逐步结果。先记录单位、编号和端点是否包含,再尝试自己推算,最后对照第一处差异。所有结论都以本例规则为前提;其他作品采用不同约定时,应按它自己的说明重新计算。
本例规则与数据
每条事件含编号与整数积分变化,积分允许负数。同一编号首次出现时应用变化并记住内容;相同内容再次出现则跳过,不同内容重复使用同一编号则拒绝冲突。已经记录的编号不在本例中淘汰。
初始积分26,允许负值 [[1, 2], [1, 2], [1, 3], [0, 7], [0, -3], [2, 5], [2, 2], [1, -2], [1, 6], [2, -4], [9, 7], [9, 3], [0, 7], [7, -3], [5, 0], [6, 3], [2, 6], [8, 7], [6, -2], [6, -3]]
过程记录
事件编号1,变化2,处理结果首次应用;该编号首次记录为2,累计积分28。
事件编号1,变化2,处理结果重复跳过;该编号首次记录为2,累计积分28。
事件编号1,变化3,处理结果冲突拒绝;该编号首次记录为2,累计积分28。
事件编号0,变化7,处理结果首次应用;该编号首次记录为7,累计积分35。
事件编号0,变化-3,处理结果冲突拒绝;该编号首次记录为7,累计积分35。
事件编号2,变化5,处理结果首次应用;该编号首次记录为5,累计积分40。
事件编号2,变化2,处理结果冲突拒绝;该编号首次记录为5,累计积分40。
事件编号1,变化-2,处理结果冲突拒绝;该编号首次记录为2,累计积分40。
事件编号1,变化6,处理结果冲突拒绝;该编号首次记录为2,累计积分40。
事件编号2,变化-4,处理结果冲突拒绝;该编号首次记录为5,累计积分40。
事件编号9,变化7,处理结果首次应用;该编号首次记录为7,累计积分47。
事件编号9,变化3,处理结果冲突拒绝;该编号首次记录为7,累计积分47。
事件编号0,变化7,处理结果重复跳过;该编号首次记录为7,累计积分47。
事件编号7,变化-3,处理结果首次应用;该编号首次记录为-3,累计积分44。
事件编号5,变化0,处理结果首次应用;该编号首次记录为0,累计积分44。
事件编号6,变化3,处理结果首次应用;该编号首次记录为3,累计积分47。
事件编号2,变化6,处理结果冲突拒绝;该编号首次记录为5,累计积分47。
事件编号8,变化7,处理结果首次应用;该编号首次记录为7,累计积分54。
事件编号6,变化-2,处理结果冲突拒绝;该编号首次记录为3,累计积分54。
事件编号6,变化-3,处理结果冲突拒绝;该编号首次记录为3,累计积分54。
共接纳8个不同编号,最后积分54;重复和冲突均未再次结算。
独立核对与实际应用
对每个编号只取最早一条记录,总积分等于初始值加这些首次变化。再逐项判断后续记录与首次内容是否相同,区分重复和冲突,两者都不能改变积分。
这只是虚构本地事件日志的规则,不替代多人游戏的权限和反作弊校验。真实系统还要决定编号的来源、保存期限及事务范围。本例始终保留首条记录,冲突不会把旧内容悄悄覆盖。
测试时先保留输入和中间状态,再只改变一个条件。空状态、正好相等、重复出现和最后一步都值得单独检查。若最终结果不符,应从第一处偏差查起,而不是在末尾随意增加补偿让数字表面一致。
