每日奖励 #
吸引和留住玩家的一种常见方式是为他们每天登录游戏提供每日奖励。
在本例中,您将学习如何使用服务器运行时代码实现每日奖励系统。
前提条件 #
为轻松学习本教程,请执行以下操作后再继续:
- 下载Nakama项目模板或
- 按照TypeScript设置指南操作
注册RPC #
每日奖励示例定义了两个RPC(远程过程调用)来检查资格并发放奖励。
然后RPC在main.ts
、main.go
或main.lua
中注册到Nakama事件。
Server
|
|
Server
|
|
Server
|
|
要向服务器注册RPC,需要指定字符串标识符以及客户端调用RPC时要运行的函数。
实现RPC #
RPC实现以下逻辑:
canClaimDailyReward
#
- 从Nakama存储引擎获取最新每日奖励对象。
- 检查用户上次领取奖励的时间是否在00:00之前
- 返回JSON响应,指示用户是否可以领取每日奖励
claimDailyReward
#
- 从Nakama存储引擎获取最新每日奖励对象。
- 检查用户上次领取奖励的时间是否在00:00之前
- 更新用户的钱包
- 向用户发送通知
- 更新或在Nakama存储引擎中创建最新每日奖励对象
- 返回一个包含收到硬币数量的JSON响应
模块代码 #
本节内容专门面向Go或Lua用户。您需要在日常奖励模块脚本中为每种语言添加一些额外的代码。
Server
|
|
Server
|
|
获取上一个每日奖励对象 #
我们来看从Nakama存储引擎检索最新每日奖励对象的代码。
Server
|
|
Server
|
|
Server
|
|
无论您使用哪种语言,核心逻辑都是相同的。
- 检查上下文以确保存在有效的用户ID
- 检查用户未在有效负载中传递任何内容
- 从存储引擎查询
reward
集合中的daily
对象 - 返回每日奖励对象或默认对象
检查用户是否有资格获得每日奖励 #
Server
|
|
Server
|
|
Server
|
|
此函数检查每日奖励对象的上次领奖的Unix时间戳值。如果小于前一天午夜的时间戳,则返回true,否则返回false。
CanClaimDailyReward RPC #
两个助手函数完成后即可实现第一个RPC。此RPC将返回检查用户是否符合JSON对象资格的助手函数的值。
Server
|
|
Server
|
|
Server
|
|
ClaimDailyReward RPC #
此RPC将确保用户有资格接收每日奖励,更新用户的钱包,发送通知,然后在存储引擎中更新用户的每日奖励。
Server
|
|
Server
|
|
Server
|
|
了解Nakama控制台 #
启动服务器(使用Docker)并使用Nakama控制台测试RPC。
打开浏览器,进入http://localhost:7351,可访问Nakama控制台。
进入后,您可以尝试通过API资源管理器与RPC交互,方法是从下拉列表中选择它们并指定用户ID作为上下文。
总结 #
实现了这两个RPC,您现在有了一个简单的每日奖励系统,恭喜!
您可以通过添加更复杂的资格条件或其他此类功能来进一步尝试。