Project1

标题: 【RGSOS】基于 SAE 的网络插件 v1.0 [打印本页]

作者: guoxiaomi    时间: 2019-2-21 15:59
标题: 【RGSOS】基于 SAE 的网络插件 v1.0
本帖最后由 guoxiaomi 于 2019-2-24 23:32 编辑

RGSOS (Ruby Game  Server On SAE) 是一款开源的网络插件,为 RPG Maker XP / VX / VA 量身定做,并提供了免费的服务器。
服务端当然是世界上最好的语言编写。

项目主页:https://gitlab.com/gxm/rgsos
项目Wiki:https://gitlab.com/gxm/rgsos/wikis/home
↑↑↑ Wiki 里有更详细的介绍和使用说明,点一下不会吃亏 ↑↑↑
B站视频教程:https://www.bilibili.com/video/av44588685,声音没调好,所以请打开字幕静音观看~

下载范例立即体验: rgsos-v1.0.zip (5.9 MB, 下载次数: 437) ,进一步的开发请先阅读 Wiki 和范例内的事件。
注:
1. 打开工程使用 F12 测试模式运行,注意控制台的输出
2. 若范例在windows上不能正常运行,尝试使用兼容模式
3. 复制范例双开测试时,不要复制游戏目录下的 user 文件
4. 其他情况见 Wiki-FAQ

RGSOS 主要特点:
1. 高性能的服务端,并利用公钥隔离不同游戏之间的数据
2. 游戏启动时,RGSOS 在后台自动完成注册、登陆、同步数据的功能
3. 以“群组”的形式同步变量和文件,加入群组即可修改变量
4. 在网站上速览游戏、群组内数据,方便监控、调试
5. 友好的客户端脚本,只需很少的代码即可实现对变量、文件的读写
6. 自带地图位置同步和打字聊天的功能

相比于其他的网络插件,RGSOS 的优点:
1. 服务端运行在 SAE 上,性能高,收费低,易布署
2. 使用 Websocket 传递数据,延迟低
3. 客户端脚本兼容性好,配置简单,范例详细

RGSOS 的缺点:
1. 弱服务端,只负责缓存数据、转发消息,主要游戏逻辑在客户端执行
2. 没有使用关系型数据库,K-V 型数据库无检索功能
3. 只有变量、文件同步的功能,其他的功能需要开发者自己完成
4. 不同 Windows 版本的兼容性问题,以及 SAE 的诸多限制

如有任何问题都可以在此贴下回复,更多的介绍请看 Wiki
作者: soulsaga    时间: 2019-2-21 18:28
WIKI没说怎么用范例工程进入TEXT的服务器里..
作者: 正太君    时间: 2019-2-21 19:02
猫叔忒厉害了蛤...得好好学习研究一下...

作者: ppspssss    时间: 2019-2-22 10:37
為什么XP版当遊戏加載到开头会彈Critical Error C00000005 at address 7737e49B , 然后点了确定就关
作者: guoxiaomi    时间: 2019-2-22 11:23
本帖最后由 guoxiaomi 于 2019-2-22 11:57 编辑
soulsaga 发表于 2019-2-21 18:28
WIKI没说怎么用范例工程进入TEXT的服务器里..


我wiki里没有表述清楚,https://rgsos.applinzi.com 上确实有我创建的游戏 test,所以连上 test 需要提供创建时候的公钥,这个只有创建者(我)才拥有,所以你是连不上的。这就是所谓的“隔离”,同一份公钥访问同一份数据,因为公钥不同,不同的游戏之间数据是不互通的。

从 main.rb 中可以看出,目前范例里的游戏名是 client-xp/vx/va,服务器地址是 http://rgssser.applinzi.com。访问这个网站,确实能看见有这几个游戏。但是 rgssser 是我的开发环境,你自己的游戏需要去 https://rgsos.applinzi.com 上创建。

比如你在 https://rgsos.applinzi.com 上创建了 test2,服务器会返回 test2 的公钥。test 和 test2 这两个游戏虽然在同一个服务器上,但数据是隔离的。你拿到 test2 的公钥之后,就把范例中 main.rb 里提到的公钥和服务器地址换成 test2 的公钥和 http://rgsos.applinzi.com

这样你再进行后续的开发并发布后,所有你发布的游戏副本,因为拥有相同的公钥,访问的是同一份数据,就实现了“数据共享”。但其他人的游戏里不会有你的公钥,就不会导致“串线”的问题(被其他人发的非法数据导致游戏崩溃)。

注意在 main.rb 中的服务器地址是 http 开头,但是从浏览器中访问网页必须是 https 开头。

试着创建一个游戏吧。
作者: guoxiaomi    时间: 2019-2-22 11:37
本帖最后由 guoxiaomi 于 2019-2-22 11:39 编辑
ppspssss 发表于 2019-2-22 10:37
為什么XP版当遊戏加載到开头会彈Critical Error C00000005 at address 7737e49B , 然后点了确定就关 ...


使用方法在 https://gitlab.com/gxm/rgsos/wikis/home#client 中写好了,把范例的脚本导入到自己的游戏中,然后替换掉公钥就能正常运行。

当然前提是范例能正常运行……如果无法打开范例就没办法了,先按照FAQ尝试正常运行范例吧。

范例的事件里提到了如何共享变量和文件,你可以打开事件页看看到底需要做什么。你如果只想上传、下载文件,在地图 4 中提到了如何完成文件的上传和下载。
作者: guoxiaomi    时间: 2019-2-24 23:35
在B站上传了视频教程:https://www.bilibili.com/video/av44588685
作者: soulsaga    时间: 2019-2-26 19:58
聊天没有聊天框吗?
作者: BCJT    时间: 2019-3-26 15:30
本帖最后由 BCJT 于 2019-3-26 15:36 编辑

请问怎么样可以实现两个玩家之间回合制对战呀?
比如RM默认的战斗系统:1.指令选择阶段–当两个玩家都选择完指令确认后,2.系统再开始回合–战斗演出阶段。如此循环……
还有,战斗中玩家各自控制的角色都是数据库中[我方的角色]。
作者: guoxiaomi    时间: 2019-3-26 17:11
本帖最后由 guoxiaomi 于 2019-3-26 17:14 编辑
BCJT 发表于 2019-3-26 15:30
请问怎么样可以实现两个玩家之间回合制对战呀?
比如RM默认的战斗系统:1.指令选择阶段–当两个玩家都选择完 ...


非常困难,建议放弃。RM的默认战斗设计的时候没有考虑联机对战的可能,很多地方写的并不好。

原则上你可以共享每回合的行动数据,但是会被默认战斗里的随机数、$game_party等东西弄得头皮发麻。

最好的解决方案反而是不使用默认的战斗系统,写一个更简单的更适合联机的战斗系统,比如使用卡牌、骰子这些……

如果非要用默认战斗,那也要先抛弃原有的Scene_Battle,重新设计一个适合联机的 Scene_Battle。

我这么说是因为我真的尝试过……
作者: MCCF    时间: 2019-3-30 22:04
配置完之后发现了问题:

第一次错误:


找到错误位置为:


尝试修改为16进制范围内的“f0”:


发现该问题消失了,但是又出现另一个问题:


错误位置:


现在希望知道这是什么原因?谢谢!
作者: 66RPG梦    时间: 2020-3-24 20:04
本帖最后由 66RPG梦 于 2020-3-24 20:06 编辑

XP的工程
出现问题原因是在地图里面按下回车键输入信息,再按回车键准备输出信息的时候出现了这个问题。
按照范例里的main.rb顺序复制脚本,我以为是我少复制什么东西,开了好几个工程重新复制好几次了还是这样。
不知道是不是少了什么,麻烦楼主看一下。

B)B[T4K~_ASV9WYNRB_S0MC.png (5.32 KB, 下载次数: 53)

B)B[T4K~_ASV9WYNRB_S0MC.png

作者: guoxiaomi    时间: 2020-3-24 20:22
本帖最后由 guoxiaomi 于 2020-3-24 20:24 编辑
66RPG梦 发表于 2020-3-24 20:04
XP的工程
出现问题原因是在地图里面按下回车键输入信息,再按回车键准备输出信息的时候出现了这个问题。
按 ...


服务器设置好了吗?怀疑是没有设置服务端?Debug的窗口的输出截图发一下?
作者: 66RPG梦    时间: 2020-3-24 20:40
guoxiaomi 发表于 2020-3-24 20:22
服务器设置好了吗?怀疑是没有设置服务端?Debug的窗口的输出截图发一下? ...

不知道是不是这样设置的,公匙下面那个连接是输入云应用的HTTP域名吗

7G_DF9G7I@F{FD9W[E0E{52.png (36.66 KB, 下载次数: 50)

7G_DF9G7I@F{FD9W[E0E{52.png

TRW)Z~D8EWMR~MGL91G1ST0.png (60.27 KB, 下载次数: 54)

TRW)Z~D8EWMR~MGL91G1ST0.png

作者: 66RPG梦    时间: 2020-3-24 21:14
66RPG梦 发表于 2020-3-24 20:40
不知道是不是这样设置的,公匙下面那个连接是输入云应用的HTTP域名吗

http://qq1483088318.applinzi.com
网站可以了,但是游戏还是这样
作者: 66RPG梦    时间: 2020-3-24 21:16
66RPG梦 发表于 2020-3-24 21:14
http://qq1483088318.applinzi.com
网站可以了,但是游戏还是这样

而且发现了一个问题,好像不创建那个user文件了
作者: 66RPG梦    时间: 2020-3-24 22:00
66RPG梦 发表于 2020-3-24 21:16
而且发现了一个问题,好像不创建那个user文件了

可以了,刚刚还不行的,不知道怎么的突然可以了。
作者: 66RPG梦    时间: 2020-3-24 22:14
原来是要在自己的网站上面创建一个游戏,然后公钥和网站都输入自己的
作者: 66RPG梦    时间: 2020-3-25 10:58
本帖最后由 66RPG梦 于 2020-3-25 11:05 编辑

这个插件可以设置成某些在地图上面玩家不能互相看见吗 ,
而且我想问一下那个自己写的脚本要添加在哪里,直接写在脚本编辑器里的话,我开一个游戏是没问题的,开两个连在一起的时候就冲突了。
作者: 66RPG梦    时间: 2020-3-25 11:26
66RPG梦 发表于 2020-3-25 10:58
这个插件可以设置成某些在地图上面玩家不能互相看见吗 ,
而且我想问一下那个自己写的脚本要添加在哪里,直 ...

之前看到那个教程我以为只有一个介绍流程,没看到后面还有一堆的几分钟的视频也是教程。
我去看看去了
作者: 66RPG梦    时间: 2020-3-25 13:13
发现了几个问题,不知道是不是只有XP才会出现的问题,就是我用XP打开游戏的话,要等标题画面出现后在等几秒(应该是在连接服务器),如果没等个几秒钟在开始游戏的话进入地图后是看不到别人的。这个时候在打字发出去的话就会出现我之前截图的那个错误。
作者: 66RPG梦    时间: 2020-3-26 10:08
不知道为什么,在标题画面使用自己定义的全局变量或者使用$net.online?(应该是与$net相关的脚本),在点击继续游戏进入存档画面的时候会出现报错。

)7W2BZINWNENF_F4~7$42ST.png (6.44 KB, 下载次数: 57)

)7W2BZINWNENF_F4~7$42ST.png

作者: guoxiaomi    时间: 2020-3-26 15:45
本帖最后由 guoxiaomi 于 2020-3-26 17:09 编辑
66RPG梦 发表于 2020-3-26 10:08
不知道为什么,在标题画面使用自己定义的全局变量或者使用$net.online?(应该是与$net相关的脚本),在点击 ...

我对Scene_Title进行了如下的改动,并且复现了此BUG,注意19行的super:


因为XP没有Scene_Base,为了让每个场景里都会跟随着 $net.update,我直接给所有的以 Scene_ 开头的类修改了对应的 main 和 update 方法,但是这样做是存在一个问题的:
上图中的 Scene_Title 继承自 Scene_Title_Base,从而导致两个类里的 main 和 update 方法都被修改了,但是真实的游戏里,并不会有 $scene = Scene_Title_Base.new(...) 这段代码,
所以 Scene_Title_Base 作为不会被实例化的类应该被排除在外。

你需要修改 scene_base_net.rb 里的内容,在 14 行后加入下面的代码以排除不会被实例化的类。比如 Scene_File:
  1. All_Scenes -= [Scene_File]
复制代码

你可以 print 出 All_Scenes 然后看看里面有哪些类。
或者可以去寻找在 main 和 update 中使用了 super 继承父类方法的类,把这些类排除掉。(不推荐)
如果你的脚本里有其他场景类,但是不以 Scene_ 开头,你也需要手动把这些场景类加入到 All_Scene 里,否则会导致玩家处于这个场景时,网络数据不被更新,如果持续时间较长则会被服务器断开连接。

解释一下为什么和默认脚本兼容,这是因为在默认脚本里只有 Scene_File 和 Scene_Save / Scene_Load 有继承关系,而在继承的时候并没有使用 super 调用父类的 main 和 update 方法。实际上这两个方法甚至没有定义。

顺便多谢你的提醒,我已经更新了gitlab上的工程,排除掉 Scene_File 类。
作者: 66RPG梦    时间: 2020-3-26 21:40
本帖最后由 66RPG梦 于 2020-3-26 21:49 编辑
guoxiaomi 发表于 2020-3-26 15:45
我对Scene_Title进行了如下的改动,并且复现了此BUG,注意19行的super:


范例好像并没有这个问题,好奇怪
作者: 陈大帅帅帅哥    时间: 2021-8-2 21:37
请教一下不用的时候怎么停止使用云豆(
作者: 15217320790    时间: 2023-3-13 20:03
好棒的插件,真羡慕会做插件的人儿~
作者: 15217320790    时间: 2023-3-13 20:04
有个小问题,按B站的教程做完后,发现游戏不能全屏了应该咋办?
作者: 15217320790    时间: 2023-3-16 19:43
15217320790 发表于 2023-3-13 20:04
有个小问题,按B站的教程做完后,发现游戏不能全屏了应该咋办?

我猜可能是因为聊天框是ENTER呼出的,所以有点关联?
作者: 子叶子叶    时间: 2023-4-11 17:24
测试范例时显示"console.rb"第18行发生Errno::EBADF Bad file descriptor-CONIN$,要怎么解决
作者: 子叶子叶    时间: 2023-4-13 20:35
子叶子叶 发表于 2023-4-11 17:24
测试范例时显示"console.rb"第18行发生Errno::EBADF Bad file descriptor-CONIN$,要怎么解决 ...

谢谢!已经解决
作者: 雨之沉默    时间: 2023-5-31 21:04
不知道什么原因,SAE突然就连接不上了,demo也连不上
demo截图:


我用来测试的工程截图:
作者: 雨之沉默    时间: 2023-5-31 23:45
雨之沉默 发表于 2023-5-31 21:04
不知道什么原因,SAE突然就连接不上了,demo也连不上
demo截图:

SAE的服务是正常的,重新创个游戏也是无法注册,不知道啥原因,没有报错信息,也没有返回代码




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