内容提要
本文介绍如何用 greenworks 让 TyranoScript 游戏接入 Steamworks:安装 greenworks 并下载匹配系统和 Electron 版本的已编译 .node 文件,放入 node_modules/greenworks/lib;下载 Steamworks SDK,将 steam_api64.dll 和 sdkencryptedappticket64.dll 放入同目录;版本报错时替换 .node 文件;最后通过自定义标签调用 greenworks.init 和 activateAchievement 实现成就功能。
延伸解读
为什么需要 greenworks 来接入 Steamworks
TyranoScript 游戏通常运行在 NW.js 或 Electron 等网页套壳环境中,而 Steamworks 官方并未提供 JavaScript SDK。greenworks 作为中间层,让这些环境能够调用 Steamworks 的原生接口。文章指出,借助 greenworks 可以避免直接研究 Node 与 C++ 的对接,从而以较低成本实现成就等功能。
接入前的环境匹配与文件放置
文章强调,下载 greenworks 的已编译 .node 文件时,必须注意操作系统和 Electron 版本是否匹配。具体操作包括:将 greenworks-win64.node 放入 node_modules/greenworks/lib,并将 Steamworks SDK 中的 steam_api64.dll 和 sdkencryptedappticket64.dll 也放入同一目录。这些步骤是后续功能调用的基础。
版本报错的处理与自定义标签调用
如果遇到版本错误,文章提到报错信息会直接显示当前版本,此时只需更换对应的 .node 文件即可解决。功能调用方面,通过自定义标签实现:先定义 greenworks_init 标签调用 greenworks.init,再定义 activate_achievement 标签调用 greenworks.activateAchievement,传入成就名称和回调函数。
Q&A
TyranoScript 游戏如何接入 Steam 成就?
使用 greenworks 库。通过 npm 安装 greenworks,下载匹配系统和 Electron 版本的已编译 .node 文件,放入 node_modules/greenworks/lib,并下载 Steamworks SDK,将 steam_api64.dll 和 sdkencryptedappticket64.dll 放入同一目录。然后在 TyranoScript 中自定义标签调用 greenworks.init 和 greenworks.activateAchievement 实现成就功能。
greenworks 安装时需要注意什么?
安装 greenworks 时,需要使用 npm install --save --ignore-scripts git+https://github.com/greenheartgames/greenworks.git 命令。关键是要选择与你的操作系统和 Electron 版本匹配的已编译 .node 文件,否则可能出现版本错误。
如何解决 greenworks 版本错误?
如果遇到版本错误,报错信息会直接告诉你当前版本,只需更换对应的 .node 文件即可解决。
Steamworks SDK 中的哪些文件需要放入 greenworks 目录?
需要将 Steamworks SDK 中的 redistributable_bin/win64/steam_api64.dll 和 public/steam/lib/win64/sdkencryptedappticket64.dll 放入 node_modules/greenworks/lib 目录。
如何在 TyranoScript 中调用 greenworks 初始化?
在 TyranoScript 中定义自定义标签,例如:tyrano.plugin.kag.tag.greenworks_init = { start: function () { greenworks.init(); this.kag.ftag.nextOrder(); }, }; 然后在脚本中使用该标签即可初始化 greenworks。
如何用 greenworks 激活 Steam 成就?
定义自定义标签 activate_achievement,参数为成就名称,调用 greenworks.activateAchievement(pm.name, successCallback, errorCallback)。例如:tyrano.plugin.kag.tag.activate_achievement = { pm: { name: "" }, start: function (pm) { greenworks.activateAchievement(pm.name, function () { console.log("Activating achievement successfully"); }, function (err) { console.log(err); }); this.kag.ftag.nextOrder(); }, }; 然后在脚本中使用该标签并传入成就名称。