计划任务快速入门
本快速入门介绍如何创建按计划运行的任务。 有许多游戏操作例程可使用计划任务自动执行,例如:
- 在一天中分时修改商店中的价格。
- 更新游戏数据以反映当前事件的更改。
- 每天将虚拟货币注入到游戏经济中等。
在本快速入门中使用的示例中,我们将演示如何修改游戏变量,该变量名为 rareDropRate 于 12:00 UTC,且仅在周末。
步骤 1 - 准备 CloudScript
在 Game Manager 中:
- 在左侧菜单中选择 Automation。
- 在" CloudScript 修订 "选项卡上,添加一个名为"
adjustRareDropRate
"的新 CloudScript 函数,该函数通过对SetTitleData
API 的简单调用进行调用,如下面的代码片段和图像所示。
注意
对于仔细观察的人而言,不要担心 - Bug 是有意为之。 确保部署新版本,以便在游戏中可正常运行。
在我们的 CloudScript 快速入门以及 ExecuteCloudScript 方法的文档中,可以了解有关使用 CloudScript 的详细信息。
handlers.adjustRareDropRate = function(args) {
// Tutorial demo CloudScript
serverAPI.SetTitleData({
"Key": "rareDropRate",
"Value": args.dropRate
});
}
第 2 步 - 创建计划任务
现在从左侧菜单中选择 Servers。
- 转到" 计划任务" 选项卡。
- 选择屏幕右上角的"新建计划任务"。
- 这将弹出 Create Task 视图。
- 在 Type of task 字段中,选择 Run a CloudScript function。
- 在其下方,可以从当前部署的 CloudScript 版本中选择一个函数,以及指定要传入的参数。
- 选择在上一步中写入的 adjustRareDropRate Handler。
为此任务设置计划:
- 在 SCHEDULE 标题下,选择 On a schedule (UTC)。
- 通过一个简单的计划生成器可选择任务应运行的时间(每小时、每天、每周等)。
- 对于此示例,我们想要一个高级计划,在该计划中,可指定在一周中的哪几天运行此任务。
- 因此选择 CRON EXPRESSION。
高度可定制的 Cron 表达式可生成非常复杂的计划,但务必注意,我们当前仅 允许在小时的 5 分钟标记处发生的计划。
例如,可以指定在小时的第 5、第 10、第 25 或第 50 分钟运行的任务,但不 可以指定将在小时的第 3、第 11 或第 46 分钟运行的任务。
如果要了解有关 Cron 表达式的详细信息,请参阅 crontab.guru 提供的丰富信息和交互式表达式生成器。
在本例中,我们希望任务在 UTC 时间星期六和星期天 12:00 运行,也就是 00 12 * * 0,6(每个星期日和星期六的十二点零分)。
最后,确保在继续执行下一步前保存新任务。
步骤 3 - 测试任务
在“任务”视图(“服务器”->“任务”)上,可以看到新创建的任务的下一次运行是在下一个星期六 - 与预期一致。
因此,如果当前为星期二,则下一个计划运行时将是 4 天后。 要立即 测试该任务,请选择 Adjust rare drop rate 任务,然后选择 RUN TASKS。
第 4 步 - 查看测试运行结果
不幸的是,运行的任务已失败。 选择任务实例,看出现了什么问题。
Task Instance Details 视图提供有关任务失败原因的诊断信息。
在本例中,它指出,到 serverAPI.SetTitleData 的调用不正确。 它实际上 应为 server.SetTitleData(有关说明,请参阅编写自定义 CloudScript 教程的中间:调用服务器 API 部分)。
Task Instance Details 视图上还有其他重要信息 - 例如开始和结束时间、被调用的函数、传入的任何参数、完整 CloudScript 执行结果等。
第 5 步 - 再次测试(成功)
继续修复我们在第 4 步中发现的错误。 下面是正确的代码段。
handlers.adjustRareDropRate = function(args) {
// Tutorial demo CloudScript
server.SetTitleData({
"Key": "rareDropRate",
"Value": args.dropRate
});
}
现在,重复步第 3 步,最终的测试运行成功。
确认成功:
- 在左侧菜单中选择 Content。
- 转到 Title Data 选项卡。
- 验证 Title Data 条目实际上是否已设置。