• CBV_RESET_TIME的更新机制
从前面的叙述可以知道,CBV_RESET_TIME同时是外贸出口载具清单和UFO天数的唯一决定因素,而它却依照一种古怪的模式来判定是否需要更新,所以成为了所有问题的根源。相关代码如下。
图中,currentyear/month/day/hour(年/月/日/时,下同)由当前的现实UTC时间换算而来,statyear/month/day/hour由CBV_RESET_TIME储存的时刻换算而来。该段return 1意味着需要更新CBV_RESET_TIME,return 0则意味着无需更新CBV_RESET_TIME。从图中可以看出,要更新CBV_RESET_TIME,有两种可能的途径。
1.当前时间与CBV_RESET_TIME是同一天,且CBV_RESET_TIME换算得到的小时数stathour是0点(含)到6点(不含)之间,且当前时间是6点(含)到24点(不含)之间。
2.当前时间与CBV_RESET_TIME不是同一天,且当前时间是7点(含)到24点(不含)之间。
仍用前面的例子,现在尝试弄清一个问题:这个在10月19日15:30(UTC时间7:30)刷新了外贸的角色,下一次刷新外贸是什么时候?
由CBV_RESET_TIME换算可以得到stathour=7,所以途径1不可能成立,只有途径2有可能成立。于是不难得到答案:从10月20日起,该角色首次在7点到24点之间上线就可以刷新下一次外贸。
现在追问,下下次刷新外贸是什么时候?已知下次刷新必定位于7点到24点,所以途径1还是不可能成立,下下次刷新还是只能依靠途径2。
可以进一步地下结论,该角色永远都只有在新一天的7点到24点才可以刷新外贸。
即使假设该角色在某天因特定原因竟然在0点到6点之间更新了外贸,从而导致stathour≤6,根据代码中的判断流程,只需要再经过1到2次刷新,刷新时刻就会被重新限定到7点到24点之间。具体过程在此略过。
UTC时间7点到24点,对应的就是北京时间15点到次日8点。