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

Project1

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

[已经过期] 写入存档的问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
596
在线时间
797 小时
注册时间
2014-7-1
帖子
578

开拓者

跳转到指定楼层
1
发表于 2016-9-24 16:39:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 jiushiainilip19 于 2016-9-24 17:49 编辑

    save_data($data_weapons, "Data/Weapons.rxdata")
    save_data($data_armors, "Data/Armors.rxdata")
    save_data($data_classes, "Data/Classes.rxdata")
    save_data($data_skills, "Data/Skills.rxdata")
    save_data($data_states, "Data/States.rxdata")

用这些命令写入存档  游戏中强化等等都可以永久保存

但是只要一打开游戏的数据库就会还原,怎么回事?有什么办法解决吗?


如果仿造
    $data_weapons        = Marshal.load(file)
类来写入存档的话 就会固定死数据库原来的设定  
比如数据中 武器名字叫 A   你写入上面存档后就永远是A 无论你怎么在数据库更改都不行
只有在游戏中用事件命令去更改!好不科学啊!

其实我就是想通过一些简单事件命令来强化一些需求的东西

比如技能 防具 武器 的属性等等 $data_skills[@skill_id].str_f  等等之类的

可问题是更本没用 重启游戏就消失了  强行写入存档又会固定死数据库的设定 想改都改不了

下面我是这样来做技能升级脚本的
脚本一
脚本二
脚本三
脚本四
然后裁图脚本写入
学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21616
在线时间
9412 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2016-9-24 17:37:59 | 只看该作者
因为数据库做的事情就是这个……你要强化装备就不要动data开头的那些全局变量

点评

。。。那要怎么去做升级效果啊不动这些  发表于 2016-9-24 17:40

评分

参与人数 1星屑 +90 收起 理由
RyanBern + 90 我很赞同

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

3
发表于 2016-9-24 17:39:48 | 只看该作者
也许可以这么干……
强化之类的需要保存文件的操作可以另存不同名的数据文件,
然后开始游戏初始化数据的时候,
把记录这类数据的全局变量拐带去读另存的文件,
如果另存的文件不存在再读原数据库的文件。
(这样做的后果就是数据库有更新相关数据的时候运行游戏不会更新,必须先删掉(或改名)记录强化数据的文件才行。

点评

我把主楼我自己写的技能升级放进去了 结果就是我说的问题  发表于 2016-9-24 17:50
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

4
发表于 2016-9-24 21:42:20 | 只看该作者
另外加个变量。需要用到的地方都相加或者想成这个新的变量。

点评

好像除了建立新的ID在保存,否则都会被数据库灭了,我还是用写入存档的方式吧,只不过是写入要强化的属性其他的就不保存就好了  发表于 2016-9-27 07:55
用自带的变量可以被保存。$game_variables[1]  发表于 2016-9-26 13:48
应该换个说法。其实这并不是用这些命令,强化的问题。是XP的SAVE不能保存变量造成的。一起求个能保存变量的SAVE吧。我也需要  发表于 2016-9-26 12:44
加了也没用 一切都会还原 就算实例定义新的也没用!  发表于 2016-9-26 08:27
不是动数据库啊,是动自己加的新变量  发表于 2016-9-25 22:00
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
596
在线时间
797 小时
注册时间
2014-7-1
帖子
578

开拓者

5
 楼主| 发表于 2016-9-27 08:12:52 | 只看该作者
yang1zhi 发表于 2016-9-24 21:42
另外加个变量。需要用到的地方都相加或者想成这个新的变量。

RUBY 代码复制
  1. $game_system        = Marshal.load(file)
  2.     $game_switches      = Marshal.load(file)
  3.     $game_variables     = Marshal.load(file
  4.     $game_self_switches = Marshal.load(file)
  5.     $game_screen        = Marshal.load(file)
  6.     $game_actors        = Marshal.load(file)
  7.     $game_party         = Marshal.load(file)
  8.     $game_troop         = Marshal.load(file)
  9.     $game_map           = Marshal.load(file)
  10.     $game_player        = Marshal.load(file)

存档就保存这些 在这些里面定义实例会被保存 而且也可以在事件中直接用$命令调取
例如:

RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   attr_accessor :crt     # 暴击几率
  3.   alias mohuaiyuan2016927_setup setup
  4.   def setup(actor_id)
  5.     mohuaiyuan2016927_setup(actor_id)
  6.    @crt_z = 0
  7. end
  8.   def crt # 暴击几率
  9.       @crt_z = [[@crt_z, 1].max,9999].min
  10.       n = @crt_z
  11.       return [[n, 1].max, 9999].min
  12.     end
  13.  
  14.   def crt=(crt)
  15.     @crt_z += crt - self.crt
  16.     @crt_z = [[@crt_z, 1].max,9999].min
  17.   end  
  18. end
[/pre]
这样就成功了 这里对应了 $game_actors        = Marshal.load(file)

其他的例如防具 武器 技能 等等上面存档没有  
按照上面方法来定义的话 也不会被接受 可能是少了那个步骤
想要直接采用$的命令来强化防具武器等等只能用 $data_skills       = Marshal.load(file) 类的命令来存档了 或者分开一些
$data_skills.name       = Marshal.load(file) 只保存名字。
学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

6
发表于 2016-9-27 12:07:43 | 只看该作者
本帖最后由 RyanBern 于 2016-9-27 12:53 编辑

稍微看了一下你的代码,里面有几个非常严重的问题。
用这些命令写入存档  游戏中强化等等都可以永久保存

但是只要一打开游戏的数据库就会还原,怎么回事?有什么办法解决吗?

1. 我试了一下,其实并没有。在你的代码中,你只对技能中的@power变量做出了更改,所以其他变量是根本没有变化的。改变的只是@power而已。所以使用RM打开时,是能看到“威力”一栏发生了变化,其他的项目是不动的。

2. 对于技能来说,@power是表示技能“威力”,现在你把它改成了“技能等级”,不知道是不是你故意这样设置的。

3. 正如喵呜所说,数据库的作用就是写死了某些设定,而并非可以随着游戏进度的变化而变化,这不是数据库该做的事情。正如,数据库中的“角色RPG::Actor”是写死的,里面包含了升级相关的能力值(例如每一级的MAXHP),升级所需经验等不会发生改变的数据。而并非游戏运行中的“Game_Actor”。所以,直接去改数据库文件是非常不明智的做法,除非你确定你在做什么,否则会有很多问题。例如,假如一把武器所有人都可以买(装备),那么按照你的思路去更改数据库,一把武器强化之后,是不是其他所有的武器都一起强化了呢?这一般不是我们要的效果,当然除非你就是要这么做。退一步讲,就算你真的要这么做,那么当玩家想重新开一个档玩的时候,这些被强化的数据由于存在数据库里了,那么新档下这些装备也都是强化过了的!那么这是否也是你需要的效果呢?

4. 滥用全局变量。这点已经说过很多次了,有些人搞不清变量之间的区别,然后就开始滥用全局变量,反正全局变量是永远都可以用的,这是非常不好的习惯。同样的,表示写死了的常量也不应该使用全局变量表示,应该用常量+命名空间的形式。

所以,你要明白游戏中应该存什么,不应该存什么。至于如何实现,希望你忘掉当前的代码,重新思考一下。首先你弄清楚我在(3)中提到的问题,确定你是否真的这么做。然后重新实现这个效果。

至于存储额外的变量,我已经写过非常详细的教程,你可以看看。
https://rpg.blue/forum.php?mod=viewthread&tid=375515

点评

好的,我要好好考虑一下这些问题!谢谢了!  发表于 2016-9-27 14:14
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 17:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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