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

Project1

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

[已经过期] 10V求保存“创造的装备”进存档的方法

 关闭 [复制链接]

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42329
在线时间
7598 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

跳转到指定楼层
1
发表于 2011-6-4 20:51:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 fux2 于 2011-6-4 22:24 编辑

如何将游戏中打造的装备存起来而不与原始的装备数据库冲突……
在下苦思这个问题很久,
目前是把创造的装备存入$data_weapons,但是发现如果在RM编辑界面加入新装备会ID冲突
保存入一个新的数组会让装备的读取变得困难(game_party只储存装备ID,读取不知道该怎么办)
另外楼下说的将ID和索引设置大一点也考虑过,会让$data_weapons遍历速度变慢
于是求一个比较完善的方法,悬赏金额可以增加.

点评

再读档自定义数组不会被加两次谢谢= = $data_weapons不会随存档被记录……下次读档它还是保持设计器中的状态= =  发表于 2011-6-5 13:59
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2011-6-4 20:54:47 | 只看该作者
直接在Scene_Save和Scene_Load里的存读档中把$data_weapons也写入不行么

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42329
在线时间
7598 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

3
 楼主| 发表于 2011-6-4 21:04:06 | 只看该作者
Wind2010 发表于 2011-6-4 20:54
直接在Scene_Save和Scene_Load里的存读档中把$data_weapons也写入不行么

如何写?例如我新建的装备ID为32,然后存档之后回到RMXP编辑界面增加一个新武器,ID也是32,读取存档的时候这个新武器就被忽略了。

点评

数组的索引1000= =遍历效率= =  发表于 2011-6-4 22:13
那弄成ID和索引都是1000不就行了么- -  发表于 2011-6-4 21:42
32号是游戏中新建的装备,ID和索引都是32  发表于 2011-6-4 21:31
储存进32不也是和原来的ID不同了么- -  发表于 2011-6-4 21:16
装备的ID和索引相同,所以很方便,如果ID和索引不同很多位置会出错  发表于 2011-6-4 21:11
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

菜鸟飞呀飞 该用户已被删除
4
发表于 2011-6-4 21:53:53 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
5
发表于 2011-6-4 22:57:00 | 只看该作者
为装备添加一个新的ID吧,判断数量的时候取新ID,辨认是否和元数据冲突使用新ID和旧ID做比较。
这个是参考仙剑四的。
回复 支持 反对

使用道具 举报

乌有君
6
乌有君  发表于 2011-6-4 23:11:06
本帖最后由 匿名 于 2011-6-4 23:36 编辑


黑幕邪术之石器随机装备系统之存取部分
  1.     $data_weapons[to] = Marshal.load(Marshal.dump($data_weapons[from]))
  2.     $data_weapons[to].id = to
复制代码
制造时关键代码就两行- -

汝把造的东西全部存一个GAME_PARTY下开的数组里就行了(不是ID,而是彻底的把这东西丢里面- - 偶是万恶的深度拷贝
读的时候把数组抓来往$data_weapons里面丢

所有ID必须不同是废话- - 故而新建物品必须有新ID

读取时的黑幕代码就三行- -
  1.     for i in $game_party.get_un_w.keys
  2.       $data_weapons[i] =   Marshal.load(Marshal.dump($game_party.get_un_w[i]))
  3.     end  
复制代码
有啥问题直接拆开石器看就行了- -
石器是无敌的!


啥?读取和遍历的效率问题?
在石器中所有随机生成物品的ID皆在2000以后或0以前(别问偶怎么重定义数组的负数规则的- -)
数据库到随机物品中间的地方全是NIL
遍历怎么玩捏?
FOR循环- - 爱查数据库查数据库 爱查随机物查随机物
别告诉偶乃们不打算在有了随机物品后做垃圾回收了。
队伍中已经不持有的并且短期内容不到的随机生成物就该果断被轰成NIL(当然石器里没有干掉$DATA_WEAPONS里那坨,回收的全是$GAME_PARTY的那坨,原因是寻找新随机物ID时按照的是$GAME_PARTY的那坨然后会顺势轰杀掉$DATA_WEAPONS里那坨)
于是,GC做得好的话效率没问题- -

接下来汝等要考虑的问题是当用户拥有几万种物品后的窗口绘制崩溃问题
这个问题在石器的随机系统我弄成后的一星期内被用户反馈。

偶的用户是如此的狂热地刷装备- -
于是导致了另外一个效率问题值得改善的地方就是刷新窗口那坨。
于是一星期后的石器版本在这方面也被彻底搞干净了。
于是,重点其实很简单。
那就是,石器是无敌的!

呃……接下来还有啥捏?
貌似啥都搞定了……
既然如此,剩下就随便继续喊喊吧……

石器是无敌的!

哦耶 ~\(≧▽≦)/~

点评

Hash  发表于 2011-6-10 16:44
囧,没看懂  发表于 2011-6-5 11:51
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

7
发表于 2011-6-5 10:56:14 | 只看该作者
  1. class Scene_Title
  2.   alias random_main main unless $@
  3.   def main
  4.     random_main
  5.     $data_weapons.push(RPG::Weapon.new)
  6.     $data_weapons[-1].name = 'New Weapon'
  7.     $data_weapons[-1].id = $data_weapons.size - 1
  8.     $game_party.gain_weapon($data_weapons[-1].id, 1)
  9.   end
  10. end
复制代码
存档后并没有什么问题的样子。

点评

- - 这不是新建装备,动态修改数据库么。  发表于 2011-6-5 12:17
你确定-1不是数组的倒数第一个元素么= =  发表于 2011-6-5 11:51
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
169 小时
注册时间
2007-8-12
帖子
203
8
发表于 2011-6-5 11:18:19 | 只看该作者
本帖最后由 心雪 于 2011-6-5 14:08 编辑

定义一个新数组,保存自定义装备数据,然后写入存档,读档的时候直接
$data_weapons = $data_weapons + 自定义数组

好吧……还挺麻烦的……
范例提供:
Project52.rar (191.68 KB, 下载次数: 56)




貌似没想到装备的ID改变的问题……恩……这些小问题就不用修复了吧~

点评

这就是我需要回避的问题,取档后$data_weapons = $data_weapons + 自定义数组,再存档读档时$data_weapons = $data_weapons + 自定义数组+自定义数组,恶性循环  发表于 2011-6-5 11:52
读档之后再存档会怎么样呢?  发表于 2011-6-5 11:50
ms是个好办法。  发表于 2011-6-5 11:29
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

9
发表于 2011-6-4 20:51:11 | 只看该作者
运行时创造装备的存储.rar (190.46 KB, 下载次数: 133)

原理:
只做了武器和防具.
在 Game_Party 新建了2个数组和2个哈希表来存储运行是创造的装备和数量.
还用了2个实例变量来记录数据库 $data_xxx 的 size
给 RPG::Weapon 和 RPG::Armor 新增加了一个 real_id
用于记录其在数据库的原型id.保留id和索引一致.
开放 Game_Actor 的 weapon_id armor1_id armor2_id....的直接外部 = 号写入
修改了角色对装备是否可以装备的判断 equippable?
因为RM默认系统对于角色能装备某装备是通过职业里打钩来决定的.
所以再用id来判定的话.新创造的装备id肯定不在其中.所以改用real_id 进行判定.
然后就是最蛋疼的在读档时候的id修正.
因为游戏更新可能改变数据库装备的总个数.所以旧版本玩家存档里的装备id.
就会有可能指向新增的数据库装备.
这时就要对其进行修正.
在 Scene_Shop 减少装备时.装备数量为 0的话.就会把 该装备id位置处设置为 nil
然后在下次读档的时候清空 nil.当然 nil 的位置被清空.也会造成后面装备的id出现偏差.
所以也进行了修正.
这样做不知道会不会有后遗症.角色装备的id 会在读档后发生变化.虽然指向的还是原来的那个装备.
代码应该还有很大的缩水空间.目前就先这样了......











你知道得太多了

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42329
在线时间
7598 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

10
 楼主| 发表于 2011-6-5 12:04:39 | 只看该作者
后知后觉 发表于 2011-6-5 11:51
原理:
只做了武器和防具.
在 Game_Party 新建了2个数组和2个哈希表来存储运行是创造的装备和数量.

一旦原有数据库装备ID改变后所有新装备的ID都需要改变吗?
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 10:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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