Skip to content

活动是怎么识别的

《Shakes & Fidget》有两类活动,Mercy SF 对它们的处理并不相同。

服务器活动是周末的修正项:经验活动、金币活动、收紧或放宽的史诗掉率。它们改变 的是普通模块应当优先做什么,而且只要开着,就能在游戏状态里看到。

大型限时活动则是自成一块的游戏内容,有自己的界面、自己的货币和自己的进度: 世界 Boss地狱电梯传说地下城。它们出现一两周,然后消失。

活动

为什么「它到底开着没有」才是难的那部分

判断世界 Boss 是否开启,最直白的做法是去游戏状态里找世界 Boss 的数据。这行不通, 而且是以代价最高的方式行不通:活动结束很久之后,服务器仍然继续下发那一块数据。

在处理这件事之前,结果就是一个模块整天发送它的指令,而每一条都被 event not active 顶回来。每分钟一条警告,每个账号都是,还有一个把已经结束的活动 显示得像正在进行的活动界面。

Mercy SF 使用两个真相来源,按这个顺序。

  1. 协议给出时间窗的,就用活动自己的时间窗。 地狱电梯和传说地下城都带有开始和 结束的时间戳,因此可以给出准确的答案。
  2. 协议没给的,就用服务器自己的裁决。 世界 Boss 在游戏状态里没有时间窗,所以 唯一诚实的信号就是那次拒绝本身。一旦服务器说活动没在进行,这个结论会被相信一小 时,之后再探一次,以防新的一场已经开始。

那一小时就是这笔交易的全部。一个已关闭的活动,代价从每分钟一次请求降到每小时一 次;而一个刚开的活动,是在一小时之内加入,而不是立刻加入。

刻意不做的事

游戏会发来一个带数字类型码的 eventstatus 块。它的时间戳会被解析和使用。类型码本 身不会被当成到某个具体活动的映射,因为观测到的一个取值不构成一张映射表,而猜 错会悄无声息地让错误活动的模块去对着错误的时间窗运行。

解锁探测

严格依赖检测,会让新账号在世界 Boss 上陷入死锁,这一点值得了解,因为它的症状看起 来像 bug。

只有当角色加入过这个活动之后,服务器才会下发世界 Boss 的数据块。于是从未加入 过的角色没有数据块,永远检测不到,因此也永远不会加入。账号就那样一直卡着,而毫不 相干的请求不断带回 world boss join first

因此,只要角色过了解锁等级,Mercy SF 就会按定时尝试进入,即便什么都没检测到,把判 断留给服务器。被拒绝的代价是每隔几分钟一次请求,除此之外没有别的。

活动优先级

有三个设置决定限时活动能在多大程度上打乱平常的日常循环。

设置默认作用
event_priority_mode活动进行期间,它的模块在循环中排在普通模块之前。
event_ending_threshold_mins60距离活动结束多近算作「快结束了」,过了这条线活动会被更强地优先。
event_auto_beer_during_event允许在活动期间为冒险欲望花掉啤酒。默认关闭,因为啤酒是有限的每日资源,花不花它是一种偏好,而不该是默认值。

服务器活动与日常循环

普通模块会读取正在进行的服务器活动并作出调整:

  • 经验活动会把任务选择往经验任务那边推,好让双倍经验的周末不至于花在银币上;
  • 金币活动则相反;
  • 每日奖励、日历、转盘和骰子无论当下开着什么活动都照领不误,因为领取它们不花任何 代价。

任务选择如何在活动和你的长期偏好之间权衡,见 任务、酒馆与远征;领取循环见 每日奖励与日历

各个活动的说明在哪里

  • 世界 Boss:投石机、弹药、弱点和宝箱。就是那个每个按 钮旁边都配了一个蘑菇按钮的活动,以及它从不被按下的结构性原因。
  • 地狱电梯:往上爬、钥匙卡,以及零食铺,那是上面唯一 能撬动战斗力的杠杆。
  • 传说地下城:房间、门、祝福、诅咒,以及复活上 的两道蘑菇天花板。

Mercy SF 与《Shakes & Fidget》和 Playa Games 没有任何关联。使用风险自负。