设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 11472|回复: 68
打印 上一主题 下一主题

[原创发布] 【RGSOS】基于 SAE 的网络插件 v1.0

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

跳转到指定楼层
1
发表于 2019-2-21 15:59:22 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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, 下载次数: 434) ,进一步的开发请先阅读 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

评分

参与人数 8星屑 +200 +8 收起 理由
15217320790 + 1 精品文章
zyf722 + 1 tql
66RPG梦 + 1 精品文章
MCCF + 1 精品文章
百里_飞柳 + 1 塞糖
唯道集虚 + 200 + 1 猫叔!
SixRC + 1 塞糖
正太君 + 1 塞糖

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
 楼主| 发表于 2019-2-22 11:23:00 | 显示全部楼层
本帖最后由 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 开头。

试着创建一个游戏吧。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

3
 楼主| 发表于 2019-2-22 11:37:52 | 显示全部楼层
本帖最后由 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 中提到了如何完成文件的上传和下载。

点评

会編程都一般不用RMXP了 , RMXP都是入門是没有經驗或少經驗的人而設的, 会用的一种是會編程但想玩玩花式(比如你)  发表于 2019-2-22 21:39
不同解决方案各有优劣,等你提升了编程水平,再回来看看这个吧  发表于 2019-2-22 13:43
你的这个用XP模式能进去了,但由于复杂,我还是不选这个了,你这个还是需要一定水平,像我这种只会单句socket收發的,还是自己DIY一个  发表于 2019-2-22 12:39
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

4
 楼主| 发表于 2019-2-24 23:35:05 | 显示全部楼层
在B站上传了视频教程:https://www.bilibili.com/video/av44588685

评分

参与人数 1+1 收起 理由
正太君 + 1 视频好评,声音好听...

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

5
 楼主| 发表于 2019-3-26 17:11:24 | 显示全部楼层
本帖最后由 guoxiaomi 于 2019-3-26 17:14 编辑
BCJT 发表于 2019-3-26 15:30
请问怎么样可以实现两个玩家之间回合制对战呀?
比如RM默认的战斗系统:1.指令选择阶段–当两个玩家都选择完 ...


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

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

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

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

我这么说是因为我真的尝试过……

评分

参与人数 2+2 收起 理由
唯道集虚 + 1 塞糖
BCJT + 1 塞糖

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

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


服务器设置好了吗?怀疑是没有设置服务端?Debug的窗口的输出截图发一下?
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

7
 楼主| 发表于 2020-3-26 15:45:16 | 显示全部楼层
本帖最后由 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 类。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-25 21:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表