3

更改星期几以重新加载英雄实例的问题。
总是在星期五的 04:00。

我正在尝试将配置放入以下行:
Instance.ResetTimeRelativeTimestamp =
其他日期之一:
1552867201 = 18.03.2019 00:01 星期一
1552953600 = 19.03.2019 00:00 星期二
1553040001 = 20.03.2019 00:01 星期三
15521 = 14.03.2019 00:00 星期四
1552608001 = 15.03.2019 00:01 星期五
1552694401 = 16.03.2019 00:01 星期六
1552780801 = 17.03.2019 00:01 星期日

然后我清除了 3 个字符表中的实例 DB
instance_reset
character_instance


我启动服务器 - 我看到相同的结果 - 周五 4:00 重新启动。

问题:如何更改星期几?应该是星期三。

4

1 回答 1

0

实际上,我自己刚刚弄清楚了这一点。在对 AzerothCore 源进行大量挖掘之后,似乎在服务器第一次启动时选择了重置实例的星期几。据我所知,ResetTimeRelativeTimestamp不用于确定重置时间。更加具体:

  • 服务器启动并开始从characters. instance_reset桌子
  • 如果实例缺少instance_reset表中的条目,则使用以下公式添加条目:
    • 重置时间 = today(以 UTC 为单位,四舍五入到最近的一天)+ RaidDuration(来自 mapdifficulty_dbc,在代码中命名为 resetTime)+ Instance.ResetTimeHour(来自 worldserver.conf)
    • 让我们通过一个例子
      • 您位于美国中部时区,目前为 UTC-5。它是2020_10_18 14:56:23,将其转换为 UTC ,你得到:2020_10_18 19:56:23. 四舍五入到最近的一天,你得到UTC 2020_10_18 00:00:00
      • 假设它正在为 ICC 10 人设置重置时间。如果你看mapdifficulty_dbcRaidDuration604800秒,也就是 7 天。
      • 假设您已Instance.ResetTimeHour设置为默认值4. 这成为4 hours.
      • 把这一切都插上,你就得到resettime = 'UTC 2020_10_18 00:00:00' + 7 days + 4 hours = UTC 2020_10_25 04:00:00了,一个星期天。转换回美国中部时间,您会得到:2020_10_24 23:00:00 CST,星期六。实例将在周六重置
  • 下次重置实例时,将使用 重置其下一次重置时间previous reset time + RaidDuration

这意味着,如果您想选择星期几,您需要执行以下操作之一:

  • 将表中的实例重置时间修改instance_reset为所需的星期几。这种方法是有风险的,因为它涉及直接操纵数据库中的重置时间戳
  • 清空实例表,然后在您希望实例重置的那一天启动服务器。是的,这仍然涉及数据库操作,但至少表的内容是由艾泽拉斯核心而不是你自己生成的。

这是我为解决问题所做的

我在答案中如此深埋的原因是,在开始清除数据库中的表之前,您必须了解自己在做什么。谨慎行事。

  1. 关闭世界服务器
  2. 清空characters. instance_reset通过 SQL 表
  3. 将您的系统时间设置为当前时间之前的某个时间,当转换为 UTC时,该时间落在您希望实例重置的星期几
  4. 启动世界服务器。等待它加载。登录并确认实例锁定在正确的时间到期。
  5. 关闭世界服务器
  6. 将您的系统时间设置回正确的时间并重新启动服务器
于 2020-10-18T20:19:59.810 回答