大家好,我想讨论一下我的Steam排行榜和Discord集成架构,希望通过学习其他游戏开发人员的痛点、胜利和想法来提高我的架构。没有什么新的东西,但是这个结构中有很多有趣的组件,有很多空间进行不同的集成。我的背景是B2B API集成,我发现这个过程非常有趣,因为它结合了Python和JavaScript的预先存在的技能,以及游戏架构的新理解。
数据提交:游戏数据到主服务A
首先,当玩家完成一个关卡时,会收集一些游戏数据。如果这是玩家的第一次完成关卡或他们在这个保存文件上的最快个人时间,则会将这些游戏数据发送到主服务A。游戏数据不仅包括关卡完成的速度,还包括一些其他元素,这些元素被哈希以验证游戏状态是否真实或假的,还包括与Steam API(一个明显的例子:这个人是否拥有游戏[https://steamapi.xpaw.me/ISteamUser#GetPublisherAppOwnership]) 的额外信息。通过限制到只有新玩家的时间或他们的最快时间,这样可以减少对主服务A的调用次数。
其次,主服务A会检查验证的游戏数据是否符合某些参数,如标准安全检查和,另外,如果玩家在我的禁令列表中。如果玩家被禁令,则游戏不会关闭或任何东西 - 他们的在线互动会被限制,他们的分数不会被处理。
排行榜时间提交:主服务A到Steam
第三,如果游戏数据是有效的,则主服务A会将该数据发送到Steam,因为Steam是排行榜的主机。所有排行榜都设置为仅可信写入,因此写入排行榜所需的密钥被安全地存储在公共访问中。
新#1排行榜通知:主服务A到主服务B到Discord
第四,主服务A会从Steam收到响应,看看最新的时间是否排在了排行榜的第一位。如果是,则它会很好地打包信息发送到主服务B。主服务B实际上会做几件事情,但当它从主服务A接收信息时,它会解析#1排行榜通知的信息,然后将其发送到Discord社区使用Discord Bot webhook。例子:
“[[关卡名称]] - 恭喜[Steam玩家名称]获得[MM:SS:毫秒]的#1时间!”
排行榜QOL:Discord机器人
第五,有2个自定义Discord机器人。前一个机器人写入排行榜通知来自主服务B,而第二个自定义机器人允许您保存关卡名称。让我们说您是玩家之一,拥有“关卡A”的#1位置。您可以告诉第二个自定义机器人(通过私信)每次有人在“关卡A”上获得#1位置时通知您(包括Steam玩家名称和时间),这样您就可以回去夺回您的#1位置。
游戏内消息:Discord到主服务C
第六,有主服务C,它存储一个消息在我的Discord管理员频道中。某个频率,游戏客户端检索最新的消息从主服务C(尽可能减少请求)。我只需要写“Hello World!”,这个消息就会出现在游戏中的集群区域中。
每日随机关卡 + 每日排行榜:主服务B到Steam
第七,每天的日常挑战关卡在UTC午夜重置,这会触发主服务B执行2件事情:(1)创建一个新的排行榜(再次使用信任的权限)和(2)生成一个新的日常关卡代码。游戏客户端也会识别UTC午夜(或新的一天)并获取最新的日常关卡代码。这个日常关卡代码会创建相同的关卡给所有玩家,无论他们的时区如何,同样地,它也会对齐排行榜以适应特定的日常挑战。
附注:如果玩家恰好在日常挑战从一个时区移动到另一个时区时开始玩关卡,他们仍然会被计入前一天 - 没有任何方法可以将其转移到当前的时区。
由于Steam允许每个游戏最多10,000个排行榜,因此没有任何问题可以让这个设置在接下来的25年内继续运行,因为这是一个简单的任务,它每24小时都会运行一次。这也与游戏数据到主服务A到Steam排行榜工作流程集成得很好。
排行榜检查游戏内
第八,每当玩家想查看一个特定关卡的排行榜时,会发送一个简单的GET调用到Steam。
客户端永远不会直接写入Steam,也不允许这样做,因为Steam排行榜是信任的写入,并且密钥被存储在另一个主服务中。
现在,我正在寻找其他有趣的功能来添加到这个设置中!我正在考虑为玩家提供一个可以轻松查看排行榜的服务,而不需要在游戏中使用一个美观的UI。很高兴听到关于酷的社交集成和其他人使用主机服务的想法!
评论 (0)