Project1

标题: RpgMakerMv接入steam成就的若干问题 [打印本页]

作者: 波鲁克    时间: 2025-2-7 22:47
标题: RpgMakerMv接入steam成就的若干问题
本帖最后由 波鲁克 于 2025-3-29 16:14 编辑

最近做了点mv接入steam成就的工作,遇到了不少问题。在此记录,以备其他用户参考。

在论坛搜索steam成就的问题,大概会找到几个帖子,这里我贴两个。我主要是参考第一个。
https://rpg.blue/thread-490052-1-1.html
https://rpg.blue/thread-484006-1-1.html

先介绍下用到的几个文件和它们的作用。有些工作我并没有做过,因此说法不一定准确。

1 steamSdk。毫无疑问,接入steam成就肯定得调用steamSdk的api。

2 GreenWorks.js。steamSdk一般需要用c++调用。但有些游戏不是c++写的,,比如rm用js。
这些语言调用c++库需要做点额外的工作,greenworks的作用就是如此。它是为js开发的游戏准备的。

3 OrangeGreenWorks.js 。它是对greenworks做了一层封装。greenworks对rm开发者还是不够直观。
orangeGreenWorks把steam的api暴露出来,无论是使用还是阅读,它的风格与rm默认脚本类似。

4 nw.js。nw.js可以把前端项目打包成pc端的应用程序,据说rmmv本身就是nw.js做的。
上面两个帖子提到的下载nw.js库应该是用于生产环境的。不要下载sdk版本是用于开发者调试的。

接下来进入正题。接入成就过程中遇到了什么问题,以及是如何解决的。

1 按上面的文章下载相应的文件,放到正确的文件夹内。按f8打开控制台看看有没有报错。
如果你是在2025前后这个时间点,使用上面两个帖子提供的下载链接的文件,十有八九是要报错的。
而且错误提示也不直观,网上搜到资料很少。后来翻github上greenworks的页面,才知道greenworks
对nw.js和steamSDK的版本有要求。必须根据nw.js的版本来找对应的greenworks和steamSDK。

如何确定nw.js版本?测试游戏的时候按f8打开控制台 console页面下输入process.versions即可查看nw.js版本
[attach]407584[/attach]

查看rm使用的nw.js版本之后,根据github上greenworks对应的版本信息下载正确的greenworks和steamsdk。实际上最新的steam的sdk搜一下就能在官网上下载,但是老版本的下载颇费周折。

这一步之后控制台不再报错。我个人猜测,说不定可以使用其他版本的nw.js版本的文件替换发布之后游戏文件夹的文件但是我没有尝试过。

2 游戏打包发布之后,必须上传到steam,成就才能触发。电脑安装steam客户端,使用本地工程测试时无法触发成就。



因为成就需要steam的appId,本地工程不可能有这个id。至于怎么使用orangegreenworks的api,我以后再补充。熟悉默认
脚本,这个文件一看便知。

3 如果前面没有出现错误,到这里已经可以触发steam成就了。不过这里还有个问题。全屏模式下steam成就不会弹出。
这时候你需要打开工程文件夹下package文件 加入两个浏览器命令参数
"chromium-args": "--in-process-gpu",(下图的中的-disable开头的这个命令不要用,会导致steamdeck出现色调问题)
文件会变成这样



以上虽然不能完美解决弹窗问题,但是接入的成就系统足够使用了

作者: 梦路    时间: 2025-2-17 16:59
请问第一个帖子没有写游戏内触发成就的插件指令或者脚本
可以求一下吗?没有搞懂
作者: 波鲁克    时间: 2025-2-18 00:36
梦路 发表于 2025-2-17 16:59
请问第一个帖子没有写游戏内触发成就的插件指令或者脚本
可以求一下吗?没有搞懂 ...

打开orangegreenworks直接翻看源码 函数名写的挺清楚的 要不就是打开那个帖子的里oranggreenworks的GitHub链接,里面有api的用法 你翻译一下就知道各个函数是干什么用的了
具体用法我给你举个例子
事件编辑器里有一个命令叫脚本,和插件命令这个命令在一组
打开事件编辑器脚本命令出现一个对话框,这样写
OrangeGreenworks.activateAchievement('achievementName')
achievementName换成你在steam设置里的成就名括号和引号一定换成英文的。
其他api和的用法和上面那个类似

作者: 梦路    时间: 2025-2-18 11:46
本帖最后由 梦路 于 2025-2-18 11:47 编辑
波鲁克 发表于 2025-2-18 00:36
打开orangegreenworks直接翻看源码 函数名写的挺清楚的 要不就是打开那个帖子的里oranggreenworks的GitHu ...


感谢解答!

如果只是想要触发成就,是不是这样设置就可以了?


另外nw版本还是不太懂,这样可以使用第一个帖子给的组合包吗?
也就是nwjs-v0.32.4版本,GreenWork不太清楚
对应的steamSDK版本可以用1.5吗?


作者: 波鲁克    时间: 2025-2-19 00:00
梦路 发表于 2025-2-18 11:46
感谢解答!

如果只是想要触发成就,是不是这样设置就可以了?

触发成就那样可以
你的是mv吗?我的mv已经是steam最新版本了 nw的版本只是0.29。不知道你的为什么是0.32
我的建议是,你最好看看github上orangegreenwork支持的的版本 这几个文件版本最好对的上
你根据github上greenwork页面的信息,不同版本的greenwork对应不同版本的nw和steamsdk
作者: 梦路    时间: 2025-2-19 10:56
波鲁克 发表于 2025-2-19 00:00
触发成就那样可以
你的是mv吗?我的mv已经是steam最新版本了 nw的版本只是0.29。不知道你的为什么是0.32
...

是mv,版本1.61,也可以用steam的1.63
主要是主楼提到的第一个帖子 https://rpg.blue/thread-490052-1-1.html
里面提供的nw版本就是0.32
总之我再研究一下吧,感谢解答!

部署游戏→用nw替换→用对应版本SDK上传steam→steam启动游戏,如果没有问题就可以触发成就了,是这样的流程吧?
作者: 波鲁克    时间: 2025-2-19 23:16
梦路 发表于 2025-2-19 10:56
是mv,版本1.61,也可以用steam的1.63
主要是主楼提到的第一个帖子 https://rpg.blue/thread-490052-1-1. ...

实际上你的steamsdk应该是先放到工程文件夹里再部署
作者: 梦路    时间: 2025-2-20 11:51
波鲁克 发表于 2025-2-19 23:16
实际上你的steamsdk应该是先放到工程文件夹里再部署

好的
是指把sdk的组件放到lib文件夹里,然后和greenwork一起放到工程目录下后再部署吧
作者: 波鲁克    时间: 2025-2-20 17:04
梦路 发表于 2025-2-20 11:51
好的
是指把sdk的组件放到lib文件夹里,然后和greenwork一起放到工程目录下后再部署吧 ...

对,这一步参考上面给出的两个链接就行
作者: 霜落树    时间: 2025-3-5 19:06
参考到了感谢各位大佬
作者: 青衣blackcloth    时间: 2025-3-11 14:25
他这个会影响steam启动游戏的快慢吗,可能是错觉了  接入了之后启动游戏变慢了
作者: 波鲁克    时间: 2025-3-12 11:56
青衣blackcloth 发表于 2025-3-11 14:25
他这个会影响steam启动游戏的快慢吗,可能是错觉了  接入了之后启动游戏变慢了 ...

印象中是不会引起这个问题的
作者: 写给妖精的情诗    时间: 2025-3-29 13:41
//自定义窗口大小
var x = 1920;
var y = 1080;
window.resizeTo(x, y);
window.moveTo((screen.width-x)/2, (screen.height-y)/2);

//图形。_请求全屏()
Graphics._requestFullScreen()

//按下F4切换全屏和窗口化那个功能的脚本。
var keyCode = 115; // F4 key code
document.dispatchEvent(new KeyboardEvent('keydown', {
keyCode: keyCode
}));

//窗口最大化。
window.moveTo(0, 0);
window.resizeTo(screen.width, screen.height);

楼主说:
需要打开工程文件夹下package文件 加入两个浏览器命令参数
"chromium-args": "--in-process-gpu",
不知道可不可以用窗口最大化来规避全屏,反正窗口最大化跟全屏也是差不的的。

【全网首发】SRPG Studio-触发Steam成就_哔哩哔哩
https://www.bilibili.com/video/BV1sQ4y1Z7wz/?spm_id_from=333.1387.upload.video_card.click&vd_source=fd84198c79e8abb85db5da3c83dba99e
还有就是,上面这个视频的置顶评论说:
注意:在1.232版本之后,即可以通过在脚本中调用 root.getSteamManager().setAchievement来激活Steam成就。
建议使用官方提供的方式来对接Steam成就。

那么,RPG maker的那个公司自己就在steam上架了好些游戏,他们应该向SRPG Studio学习这个做法的,
直接把steam的云存档、成就、菜单之类的东西都直接写在代码那里,或者是来一个官方插件,然后跟我们说一声使用什么脚本来调用就好了。
作者: 写给妖精的情诗    时间: 2025-3-29 13:42
本帖最后由 写给妖精的情诗 于 2025-3-29 13:59 编辑

過去の更新履歴|SRPG Studio ~ シミュレーションRPG作成ソフト
https://srpgstudio.com/update/history2021.html
我没有购买安装SRPG Studio,所以搜索到上面这个帖子,截取一段之后拿到百度翻译如下。

更新2021/6/7(Ver1.233)
【要求】Dlsite版的SRPG Studio也可使用Steam API。
此次以后的更新,安装文件夹不仅仅game.exe,game_s.exe也被输出。
在选中“使用Steam API”的状态下发布游戏时
game_s.exe改名为game.exe并输出到公共文件夹。
因为game_s.exe链接了steamapi.lib,所以这个文件可以调用SteamAPI(steam_api.dll的函数)。
但是,Dlsite版SRPG Studio不附带steam_api.dll
此文件将从SteamWorks SDK中单独下载并放置在公共文件夹中。
【要求】即使在Steamworks中未设定“实绩”的状态下,也能够尝试Steam API
单击功能区上的root.msg(root.getSteamManager().getAppID());中描述的相应参数的值
如果显示的值是Steam赋予的值,则Steam API可以正常使用。
【BUG】修正“返回基本BGM”在回想事件以外的场合也不能正常工作的问题
【BUG】修正结尾后返回标题画面时,瞬间显示地图的问题
【BUG】修正在事件中捕捉并立即发布时跳过介入时的问题


2021/6/4更新(Ver1.232)
【要求】大幅刷新地图文件的格式
在现有映射的导出中。创建了smap和.sysmap,但是从这个版本开始只有.smap。
以往。smap中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
作为样本,可以阅读官方下载素材的PV素材的一幅画地图。
【要求】在Steam版的SRPG Studio的文件菜单中追加“Steam设定”
如果要在Steam上发布游戏,请在此设置游戏的APPID。
如果设置此设置,则在游戏发布时将输出steam_appid.txt和steam_api.dll。
【要求】追加root.getSteamManager().setAchievement作为脚本方法
要调用此方法,必须在Steamworks中为游戏设置“实际”。
此外,必须在“Steam设置”对话框中选中“使用Steam API”。
在“脚本执行/代码执行”中,root.getSteamManager().setAchievement(‘API名称’);中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
【BUG】修正了在回忆事件中选择“返回基本BGM”时,即使事件结束也不会返回画面BGM的问题
【BUG】修正参照脚本_slideObject时未进行null检查的问题
【BUG】修正了在“事件条件/项目”中使用ID变量时,在编辑器侧标记为“无”的问题
作者: 波鲁克    时间: 2025-3-29 16:19
写给妖精的情诗 发表于 2025-3-29 13:41
//自定义窗口大小
var x = 1920;
var y = 1080;

"chromium-args": "--in-process-gpu",这个命令的作用是在全屏模式下触发steam成就
如果你说的窗口最大化可以触发触发成就 可以不用这个命令
但是印象中我这边窗口最大化是可以看见边框的,有点影响游戏体验
作者: 写给妖精的情诗    时间: 2025-3-29 20:53
波鲁克 发表于 2025-3-29 16:19
"chromium-args": "--in-process-gpu",这个命令的作用是在全屏模式下触发steam成就
如果你说的窗口最大化 ...

嗯,我知道是可以看见边框的,所以我说:反正窗口最大化跟全屏也是差不的。
所以,我还写了按下F4切换全屏和窗口化的脚本,就是在调用steam成就的时候短暂的窗口最大化,等个多少帧、多少秒再自动全屏就好了。
我只是随便说一说,这些脚本我是直接复制过来的,而不是特意写出来的。
我希望的是:RPG maker的那个公司跟SRPG Studio的那个公司学一下,在下次更新中直接包含这些东西,或者是来一个官方插件。
作者: 青衣blackcloth    时间: 2025-3-31 22:47
他这个能支持高版本nwjs吗,如果只支持低版本也搞不定,加密后不支持低版本的nwjs了
作者: 波鲁克    时间: 2025-4-3 11:14
青衣blackcloth 发表于 2025-3-31 22:47
他这个能支持高版本nwjs吗,如果只支持低版本也搞不定,加密后不支持低版本的nwjs了 ...

你说的更高版本应该是用了mz吧。具体支不支持我不太清楚。根据你的nw.js版本选greenworks和steamsdk
作者: 青衣blackcloth    时间: 2025-4-11 23:52
波鲁克 发表于 2025-4-3 11:14
你说的更高版本应该是用了mz吧。具体支不支持我不太清楚。根据你的nw.js版本选greenworks和steamsdk ...

我现在遇到了新的问题  成就已经接入并且正常触发了,但部分玩家因为成就接入的问题打不开游戏了,打开就闪退,想知道大老知道可能是什么原因吗,目前还没有头绪。
作者: 波鲁克    时间: 2025-4-16 09:12
青衣blackcloth 发表于 2025-4-11 23:52
我现在遇到了新的问题  成就已经接入并且正常触发了,但部分玩家因为成就接入的问题打不开游戏了,打开就 ...

如果是mz的话我就没办法了,没用过这个版本。不过我建议你去谷歌上搜一搜,mv接入steam成就的坑,我几乎都是通过谷歌搜索解决的。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1