Project1

标题: 在把玩家数据传到服务器再传到本地的时候想破了脑子 [打印本页]

作者: 零教授    时间: 2018-2-21 20:46
标题: 在把玩家数据传到服务器再传到本地的时候想破了脑子


咱做的东方桌宠,就这个→
目前已经完成了联网更新、检测本地IP并识别城市并天气预报

但怎么样都是些有的没的的功能,最重要的一步还是把你本地游玩RPG的数据
传到服务器去
因为用的RMXP的内核,所以数据传起来还真不是一般的棘手
目前遇到的最大的问题是:
RM中诸如使用道具之类的指令的步骤是:
1.读取存档中的玩家数据并存到游戏内变量
2.修改变量
3.把变量存进存档作为玩家数据

如果联网的话就变成:
1.从服务器读取存档文件暂存到本地
2.从存档文件中读取玩家数据到变量
3.修改变量
4.把变量存进存档作为玩家数据
5.把存档上传服务器

这样就有一个很大的问题:我如果操作频繁的吃药,我只能看到自己的药在飞速消耗,但是血量却不见涨
原因是玩家的物品数这个数据,为了防止修改是不和外界进行交互的
但是玩家的血量什么的却是和外界进行交互的
如果服务器延迟,玩家就干嗑药不回血了

嗯,所以最后折衷做出的方案是

大概这样
这样还有个好处就是可以作为单机游戏来玩,不用和服务器交互就能进行游戏

把玩家的存档数据存到服务器,服务器只提供存储功能,除非服务器收到命令要把存档发回到本地覆盖,才会发回
否则玩家在本地进行游戏始终是自己读自己写,自己存自己改,丝毫不会收到外界影响

那么什么时候服务器会把玩家的存档发回本地呢

目前有这么几个想法:
1.每次打开程序的时候,默认自动读取一遍服务器内的存档(如果是单机玩的玩家,一连上网大概就会血亏了,进度全都被覆盖掉了)
所以要么单机(在设置中可以自行设置:我要玩单机),要么就正儿八经的建立账号联机*(账号名要查重来着)

2.如果你的游戏程序和你的QQ协议同时在线
意思是你在QQ上向华景机器人发了命令,说:请帮我打开游戏
那服务器上就会给你打开游戏,帮你进行指令操作
与此同时你本地又自己打开了游戏,你如果不在服务器上登出的话,那么如果你在QQ上进行了任何一项操作
比如:在QQ上告诉机器人我要进行探索,那机器人会帮你在服务器上打开游戏的探索模式,然后这个时候
就需要发存档信息给本地了
否则说我服务器上的存档是探索状态,你本地在睡觉,睡NMB
你能又探索又睡觉,你梦游啊?

所以任何在QQ上进行了操作,改变了服务器存档,服务器内你的存档中就会多出一条配置项:Read_Server_Flag=1
而很不幸,你本地的程序每秒钟都会读一遍服务器上的这个配置项,如果是1,那就给你读服务器存档了
你本地的存档就会被服务器上的给覆盖掉了,所以,一心二用是不行滴

作者: 2256538860    时间: 2018-2-21 21:00
果然搞东方的,都很厉害啊
不管是前人还是后人
作者: Williamnice    时间: 2018-2-21 21:47
渣渣表示看不太懂→___→
不过看起来很厉害的样子
作者: guoxiaomi    时间: 2018-2-21 22:23
我的游戏里基本上就是个单机,然后会定期与服务器进行数据交换(聊天功能),但是存档什么的都是在本地。
作者: Tink    时间: 2018-2-22 15:11
emmmm,websocket 能解决你的问题?
作者: chd114    时间: 2018-2-22 17:57
老实说,如果只是个桌宠,这样大费周章,时间久了你不会亏本吗···
目前我用过的桌宠或者放置游戏数据一般是在本地,最多就是更新的时候可能会有提示你有更新(你也可以不更新)
虽然这样搞玩家很好修改数据,但是只有做实验或者拆包之类的情况才会去尝试改数据吧···(比如《旅行青蛙》里面测如果一直不给青蛙准备食物,你家瓜娃子会不会回来,那个测试视频的up调本地时间调到1年后,三叶草照样收割但是青蛙不会回来)
我不清楚这个服务器是你自己免费用还是花钱,如果免费用的你倒是可以自己试试,但如果是收费的最好悠着点(除非你是个高月薪土豪不在乎那点钱)
作者: 零教授    时间: 2018-2-22 18:57
本帖最后由 零教授 于 2018-2-22 19:18 编辑
chd114 发表于 2018-2-22 17:57
老实说,如果只是个桌宠,这样大费周章,时间久了你不会亏本吗···
目前我用过的桌宠或者放置游戏数据一 ...





作者: chd114    时间: 2018-2-22 19:16
零教授 发表于 2018-2-22 18:57

亏了5年···
这都还能活的吗···
作者: 喵呜喵5    时间: 2018-2-23 08:30
玩家频繁吃药为什么不回血……
吃药数据存本地?血量数据存服务器?为啥?




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