Project1

标题: 如何更改武器属性而不影响数据库属性? [打印本页]

作者: kirbym    时间: 2010-9-6 20:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2010-9-6 23:24
其实这个效果是一个很常见的效果
但是默认的却是以 物品、武器、防具、特技的 ID
来作为 hash 的主键.
这样一来想要做相同ID的同类道具的话就很麻烦.
因为这个牵涉到太多太多的东西了.
首先是角色要记录的不是武器的ID号.而是那个武器的对象.
然后修改角色属性的计算定义.
修改 道具的持有数. 计算方式
然后要改物品场景.装备场景.战斗场景(物品、特技的使用).商店场景.
以及事件解释器(Interpreter)的和这些道具的增减有关的内容可能都需要更改.

结论就是你自己不会写的话就去找找现成的 装备打造/锻造/随机属性/强化
找这类的脚本参考参考...

还个事件的方法就是...
武器1号叫 铜剑.
武器2号叫 铜剑+1
武器3号叫 铜剑+2
....
传说中的雷死人不偿命就是说的这个了.
作者: fux2    时间: 2010-9-7 08:52
回复 kirbym 的帖子


    可以制造一个武器,再取走原来的武器.
作者: 八云紫    时间: 2010-9-7 09:52
本帖最后由 铃仙·优昙华院·因幡 于 2010-9-7 10:01 编辑

weapon = $game_party.actors[0].weapon_id
new_weapon = $data_weapons[weapon].dup
new_weapon.name = "铜剑+1"

最好是对某个具体的武器来修改,这个不会影响原数据库里的武器信息。

$data_weapons[$data_weapons.size] = new_weapon

然后再往数据库里添加,最后保存到文件里去。

---------------------------------------------------------------
我好早好早之前坑掉的一个道具合成脚本的思路就是这样的。

不过这样有的问题就是对后面添加的序号很混乱,虽然在ID 999之前的道具会被 RM 显示出来,但是数据库是变动的,要想添加后面的道具就很麻烦。

=============================

另一种做法不许呀修改数据库,不过要改的地方也比较多, 思路是这样的:
1. 先在对应的类(比如 RPG::Weapon)里添加一些属性,比如每级增加的属性数;
2. 修改其中某一条属性,比如 武器说明, 改成 [武器说明, 强化次数]
3. 修改 2 中修改的属性的读接口, 比如  description , 可以改成这样
   def description
        return description[0]
    end
4. 在获取道具相关数据的时候,做数据修正调整就好
5. 为人物添加道具的时候,修改之前的属性就好。

不过也有一个问题就是 在显示的时候,需要分开~~~~
作者: 禾西    时间: 2010-9-7 11:19
這不是甚麼新技術……

    id = $game_party.actors[0].weapon_id
    new_weapon = $data_weapons[id].clone
    new_weapon.id = $data_weapons.size
    $data_weapons << new_weapon
    $data_weapons[-1].name = "铜剑+1"
    $game_party.actors[0].equip(0, new_weapon.id)
... on save
    Marshal.dump($data_weapons, file)
... on read
    $data_weapons        = Marshal.load(file)

大概就是這樣。簡單來說,就是把整個武器庫寫入存檔,在讀取記錄的時候覆蓋由默認武器庫來的數據,而不改變默認數據庫。
作者: 后知后觉    时间: 2010-9-7 13:31
本帖最后由 后知后觉 于 2010-9-7 13:33 编辑

额.这个思路到是没想过.省事了不少.
如果做的是.战斗后怪物掉的装备都是随机属性的话.那长篇游戏到后期.
这个的资源占用量就太大了.
毕竟这样的效果更适合于 长篇游戏.
只是做做装备强化/锻造这类的就是很好的做法了.

作者: kirbym    时间: 2010-9-8 21:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2010-9-9 00:16
本帖最后由 后知后觉 于 2010-9-9 00:25 编辑

禾西 前辈不是已经都写出来了嘛.
如果还要再清楚一点的话.那你先说说你想要干嘛.

你说的 “给角色1一把铜剑”

这个 “给” 一字是个什么概念?

默认的系统所有角色可是共用 一个物品栏 的.

如果是更改已经装备上的武器的属性的话.那就是 禾西前辈 写的那样了


作者: 禾西    时间: 2010-9-9 13:38
本帖最后由 禾西 于 2010-9-9 13:41 编辑
如果做的是.战斗后怪物掉的装备都是随机属性的话.那长篇游戏到后期.
这个的资源占用量就太大了.
后知后觉 发表于 2010-9-7 13:31


不知道說的是不是一個東西,但是如果覺得可能遊戲後期會有太多廢用武器的話,可以這樣考慮:
1.永遠不調用作為藍本的武器.也就是說即使是白板依然是副本而不是正本
2.在取得時加入數據庫,在失去時從數據庫中刪掉
3.按照上述的做法,後期會有很多指向nil的id.事實上用一個簡單的方法就能把這些空白id重新應用起來.方法就是
  1. for i in 1...$data_weapons.size+1
  2.   if $data_weapons[ i ].nil?
  3.     new_weapon.id = i
  4.     $data_weapons[i] = new_weapon
  5.   end
  6. end
复制代码
當然,以上的理論都與樓主的問題沒有多大關系……純有感而發罷了。




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