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

Project1

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

[RMVA发布] 自定义装备栏脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
跳转到指定楼层
1
发表于 2015-5-2 22:27:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这个功能也许有人已经做出来了。
我搜索的时候,看到https://rpg.blue/thread-223361-1-1.html这个帖子,其中6楼的内容非常接近我想要的效果。
该脚本的原出处据说是http://www.rpgmakervxace.net/topic/385-custom-equipment-slots/

我的脚本是在这个思路上进行修改和拓展而得到的,所以先说这个版本

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
2
 楼主| 发表于 2015-5-2 22:42:23 | 只看该作者
这个脚本的思路是:
系统给了5条可修改的装备栏位置(就是在 数据库-用语 中修改它们的名称),先把这5条改成自己想要的装备栏名字。
在脚本中加入Extra_Slots模块,在其中写上5条之后想要的装备栏名字。
覆盖一些默认脚本,使游戏中成功显示5条之后的装备栏。

以上思路是完美实现的部分……

然后不完美的部分:
尽管装备栏显示出来了,但并不能正确地更换装备。
原因很简单:系统默认给出5条装备栏位置,其中4条是护甲。而数据库的护甲一页中,“装备位置”的下拉菜单只有4个选项。这个下拉菜单——反正我是没有找到能更改它的地方。
而数据库生成的装备数据,被放在Data文件夹下,用rvdata2格式加密了。如果在脚本中使用load_data函数,可以看到其中有个@etype_id的变量,这个变量就是根据数据库中“装备位置”的选择来生成的。而“装备位置”只有4个,也就注定了程序中只可能生成0,1,2,3这几种@etype_id。
最后在游戏中切换装备的时候,程序会读取文件中装备的@etype_id,判断它应该放在哪个装备栏。
假设自定义装备栏中有第五条护甲栏,那么它对应的@etype_id应该是4才对。但综上所述,4是不可能由程序中生成的。

所以,最终的效果就是这样,自定义装备栏只是正确地显示了名字,但那些多出来的装备栏中,并不能放上任何装备。

原脚本的作者,大概觉得这个问题最终无解,所以脚本并没能解决这个问题。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
3
 楼主| 发表于 2015-5-2 22:54:24 | 只看该作者
然后说说我的思路:

我首先想到的是,将rvdata2文件解密,对它进行修改……可惜我没有这方面的才能,在一番搜索之后,也没有找到合适的工具。所以这个最方便的方法就行不通了。

然后我想到,重写一个不加密的rvdata2文件,就可以随时进行外部修改了。再在脚本中略修改一下,读取的时候就从这个自制的文件中读取,摒弃数据库自动生成的rvdata2文件。
这个想法我并没有进行尝试,因为后来想想,即使我在自制的rvdata2文件中记录了所有装备数据,也不能就这样把数据库弃之不顾。因为在事件中,要设定商店里出售些什么,那个物品列表仍然是由数据库提供的。这样装备数据就得准备一式两份……
总之,这个想法不可取。

后来我终于想到,如果直接修改@etype_id不可行的话,为什么不尝试用别的变量来判断装备应该属于哪个装备栏?
比如……note
在这个思路上进行了各种坑爹的尝试之后(毕竟我接触RM才不到一个星期,无知地走了很多弯路),终于实现了根据note——也就是备注,来判断装备类型,的功能。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
4
 楼主| 发表于 2015-5-2 22:55:51 | 只看该作者
然后就是实际的代码····
我分了两页来写。
第一页是可以根据情况修改的部分。
第二页是完全不需要修改的部分。
  1. module Slots
  2.   
  3.   Slots = []
  4.   
  5.   Slots[0] = "武器"
  6.   Slots[1] = "头盔"
  7.   Slots[2] = "衣服"
  8.   Slots[3] = "披风"
  9.   Slots[4] = "鞋子"
  10.   Slots[5] = "饰品"
  11. end


  12.   #--------------------------------------------------------------------------
  13.   # ● Rewrites equip_slots
  14.   #--------------------------------------------------------------------------
  15.   # 以下代码
  16.   # 用于返回装备栏的排列数组
  17. class Game_Actor < Game_Battler

  18.   def equip_slots
  19.     return [0,0,1,2,3,4,5,5,5] if dual_wield? #当装备风格为双手武器时
  20.     return [0,1,2,3,4,5,5,5]
  21.   end
  22. end

  23. # 以下代码
  24. # 用于改变装备的装备类型
  25. module RPG
  26.   
  27.   class Armor
  28.    
  29.     def etype_id
  30.       for i in 0..5
  31.         etype_id = i if Slots::Slots[i] == note
  32.       end
  33.       p etype_id
  34.       return etype_id
  35.     end
  36.   end
  37. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
5
 楼主| 发表于 2015-5-2 22:56:34 | 只看该作者
以下是第二页
  1.   #--------------------------------------------------------------------------
  2.   # ● Rewrites slot_name
  3.   #--------------------------------------------------------------------------
  4.   # 以下代码
  5.   # 用于绘制装备栏名字
  6. class Window_EquipSlot < Window_Selectable
  7.   def slot_name(index)
  8.       Slots::Slots[@actor.equip_slots[index]]
  9.   end
  10. end

  11.   #--------------------------------------------------------------------------
  12.   # ● Aliases create_slot_window
  13.   #--------------------------------------------------------------------------
  14.   # 以下代码
  15.   # 当装备栏数量超过一页时
  16.   # 用于显示第二页的内容
  17. class Scene_Equip < Scene_MenuBase

  18.   alias custom_slots_create_slot_window create_slot_window
  19.   def create_slot_window
  20.     custom_slots_create_slot_window
  21.     @slot_window.create_contents
  22.     @slot_window.refresh
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● Aliases on_actor_change
  26.   #--------------------------------------------------------------------------
  27.   alias custom_slots_on_actor_change on_actor_change
  28.   def on_actor_change
  29.     custom_slots_on_actor_change
  30.     @slot_window.create_contents
  31.     @slot_window.refresh
  32.   end
  33. end
复制代码
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9997
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

6
发表于 2015-5-2 23:08:39 | 只看该作者
本帖最后由 VIPArcher 于 2015-5-2 23:14 编辑

加油,希望楼主在触手之路上越走越远
另外,据说这个脚本更加通用
https://raw.githubusercontent.co ... 6%89%A9%E5%B1%95.rb
另外,使用备注最好使用正则,关于正则表达式百度一下即可学习到,否则你这个脚本将可能会导致其他使用到备注栏的脚本无法兼容使用,或者你的脚本无法达到预期效果啥的。

点评

谢谢,我看了一下,的确是很不错的思路  发表于 2015-5-2 23:19
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21110
在线时间
9347 小时
注册时间
2012-6-19
帖子
7107

开拓者短篇九导演组冠军

7
发表于 2015-5-2 23:09:53 | 只看该作者
将rvdata2文件解密,对它进行修改

在脚本中使用 load_data 读取数据并修改,修改完成后再用 save_data 命令保存回去,例如这个:https://rpg.blue/home.php?mod=sp ... o=blog&id=13703

当然,一般情况下还是建议你使用note备注来做这些扩展就是了

点评

用正则表达式来读取就可以了,在层主喵呜的空间里大概有一篇文章就是正则的讲解。技术区也有一篇RB叔写的正则教程,推荐楼主去看看  发表于 2015-5-2 23:26
嗯,用note来做更便于修改。不过我想,如果有多个功能都要用到note的话,说不定就必须用到save_data了。谢谢告知。  发表于 2015-5-2 23:23
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
8
 楼主| 发表于 2015-5-2 23:11:22 | 只看该作者
加入这个脚本后,在数据库设计装备的时候,“备注”中要写且只能写装备类型。
“装备位置”可以管,也可以不管。大多数情况下,不管它也没关系。

需要设定装备位置的情况:
“装备位置”这一项,如果选择的位置跟备注中的类型位置相同(比如,装备位置中选择盾牌,而备注中写上Slots[1]对应的类型),那么该装备可以作为初始装备,在数据库中正常使用。另外,如果要在事件中给角色穿上装备,同样要将该装备的装备位置选到合适的位置。如果这一项没选对的话,以上两个动作依然可以进行,但游戏中进行到这一步的时候,装备会无法穿上,只会躺在包包里。
以上动作,如果换成用脚本来实现,将不会有任何问题。
以上动作,如果装备类型对应的格子是第6条及以下的装备栏,则无论如何都只能用脚本实现。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
9
 楼主| 发表于 2015-5-2 23:14:00 | 只看该作者
不知有没有人做出过更完善的版本····

总之,我的研究止步于此·····

点评

嗯,我发完帖子才在楼上看到这个  发表于 2015-5-2 23:26
https://raw.githubusercontent.com/VIPArcher/RGSS3/master/scripts/%E8%A3%85%E5%A4%87%E6%A0%8F%E9%A3%8E%E6%A0%BC%E6%89%A9%E5%B1%95.rb 这里就是更完善的版本啊。  发表于 2015-5-2 23:15
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-5-1
帖子
11
10
 楼主| 发表于 2015-5-2 23:37:39 | 只看该作者
另外,还有一些设想中的功能,目前未能实现

1.想实现双手武器在装备栏显示不同名字,比如“主手”“副手”。但id不等于0的装备,系统默认为武器。Slots[1]的装备栏,默认判定为护具。进行该判定的代码不在可见代码中,修改困难。这个功能尝试了多次,没能实现。目前没有新的可尝试思路。
2.想实现根据武器类型来判定是否双手武器,而非根据职业设定。例如,同一角色,在使用手枪时可以装备两个武器,使用狙击枪时只能装备一件。第一感觉的思路是,当角色穿上一件武器且武器类型为xxx(是一种双手武器),就将角色的第二个装备栏封锁。当角色脱下一件武器,且武器类型为xxx,就解锁角色的第二个装备栏。具体要覆盖哪些代码,添加哪些代码,倒是要写写看才知道……

不知这两个功能有人做出来没有。
下一步,我打算尝试做功能2。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-6 01:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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