Project1

标题: 求教如何使一件武器具有多种类型 [打印本页]

作者: qknight    时间: 2014-7-7 01:13
标题: 求教如何使一件武器具有多种类型
本帖最后由 qknight 于 2014-7-9 01:10 编辑

一些技能判定需要特别的武器类型,还有职业设定也会规定该职业只能使用哪种武器。但假如要设置一个另类,比如说方天画戟,同时具备枪和矛的类型,让只能拿枪的枪兵拿上它发出矛系的必杀技。求教大神这个问题该如何解决?

已经解决,具体方法看楼下版主大人的脚本,这样子轨迹里具备短剑与火铳属性的导力铳、具备斧子与枪属性的斧枪都可以做出来了
作者: chd114    时间: 2014-7-7 08:05
枪兵和矛兵都得设置一个共有的武器类型,然后方天画戟属于这一类
作者: qknight    时间: 2014-7-7 12:35
chd114 发表于 2014-7-7 08:05
枪兵和矛兵都得设置一个共有的武器类型,然后方天画戟属于这一类

其实方天画戟只是一个形象的说法,不是让枪兵拿上方天画戟就行了,关键是如何还能使它发挥出别的系的必杀技。比如说平民职业,只能拿日常用武器,我让其只能持有水果刀(同时具备日常用武器和短剑类型),不能持有其他的短剑武器(比如说匕首),但是因为水果刀也具有短剑属性,所以他可以使用短剑系的必杀技
作者: taroxd    时间: 2014-7-7 12:49
本帖最后由 taroxd 于 2014-7-9 05:58 编辑

我没测试,报错了不要打我(呃,真报错或者用不了的话还是回复一下吧……)

RUBY 代码复制
  1. # 在武器上备注 <wtype 2 5 6> 2, 5, 6 是武器类型的 id
  2. # 备注后,原来武器类型的设置失效
  3.  
  4. class RPG::Weapon
  5.  
  6.   def wtypes
  7.     @wtypes ||=
  8.     if @note =~ /<wtype((?:\s+\d+)+)\s*>/
  9.       $1.strip.split(/\s+/).map(&:to_i)
  10.     else
  11.       [wtype_id]
  12.     end
  13.   end
  14.  
  15. end
  16.  
  17. class Game_BattlerBase
  18.   #--------------------------------------------------------------------------
  19.   # ● 判定物品是否可以装备
  20.   #--------------------------------------------------------------------------
  21.   def equippable?(item)
  22.     return false unless item.is_a?(RPG::EquipItem)
  23.     return false if equip_type_sealed?(item.etype_id)
  24.     return item.wtypes.any? {|wtype_id| equip_wtype_ok?(wtype_id) } if item.is_a?(RPG::Weapon)
  25.     return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor)
  26.     return false
  27.   end
  28. end
  29.  
  30. class Game_Actor
  31.   #--------------------------------------------------------------------------
  32.   # ● 是否装备着特定类型的武器装备
  33.   #--------------------------------------------------------------------------
  34.   def wtype_equipped?(wtype_id)
  35.     weapons.any? {|weapon| weapon.wtypes.include?(wtype_id) }
  36.   end
  37. end

作者: Arthurrrr    时间: 2014-7-8 11:24
技能的武器限制都设置成无。
比如这里  1 是枪兵技能,2 是矛兵技能。
艾力克是枪兵 塔丽娜是矛兵
枪兵1级学习 1 技能,矛兵1级学习 2 技能
判断=>艾力克装备方天画戟
                                    ↓学习技能 2
判断=>塔丽娜装备方天画戟
                                    ↓学习技能 1
……
话说矛(mao)兵(bing)真的好么!!

QQ图片20140708110355.jpg (126.94 KB, 下载次数: 28)

QQ图片20140708110355.jpg

作者: lirn    时间: 2014-7-8 14:40
这么说大概行吧。

突刺:发动技能所需要武器:枪、方天画戟

横扫:发动技能所需要武器:矛,方天画戟
作者: qknight    时间: 2014-7-9 02:03
taroxd 发表于 2014-7-7 12:49
我没测试,报错了不要打我(呃,真报错或者用不了的话还是回复一下吧……)

脚本亲测超实用,所以追问一下,如果想把防具也弄成这种多种类型的,比如女武神之靴=魔法防具+女性专用防具,这要怎么弄?
作者: taroxd    时间: 2014-7-9 05:53
本帖最后由 taroxd 于 2014-7-9 06:05 编辑
qknight 发表于 2014-7-9 02:03
脚本亲测超实用,所以追问一下,如果想把防具也弄成这种多种类型的,比如女武神之靴=魔法防具+女性专用防 ...


呃,你好,我这个脚本呢是、只要满足一个条件就可以装备的……

因为楼主说“只能拿枪的枪兵拿上它发出矛系的必杀技”,因此只要满足枪和矛之一就可以装备。

但是我看了你这个要求,难道只要可以装备魔法防具,男的也可以装备女性专用的防具吗?
如果不是追求这个效果,你可以干脆设置一个类别,叫做“女性专用魔法防具”即可,不需要什么脚本。

如果你依旧需要“只要满足条件之一即可装备”的话:

RUBY 代码复制
  1. # 在武器上备注 <wtype 2 5 6> 2, 5, 6 是武器类型的 id
  2. # 在防具上备注 <atype 2 5 6> 2, 5, 6 是防具类型的 id
  3. # 备注后,原来武器类型的设置失效
  4.  
  5. class RPG::Weapon
  6.  
  7.   def wtypes
  8.     @wtypes ||=
  9.     if @note =~ /<wtype((?:\s+\d+)+)\s*>/i
  10.       $1.strip.split(/\s+/).map(&:to_i)
  11.     else
  12.       [wtype_id]
  13.     end
  14.   end
  15.  
  16. end
  17.  
  18. class RPG::Armor
  19.  
  20.   def atypes
  21.     @atypes ||=
  22.     if @note =~ /<atype((?:\s+\d+)+)\s*>/i
  23.       $1.strip.split(/\s+/).map(&:to_i)
  24.     else
  25.       [atype_id]
  26.     end
  27.   end
  28.  
  29. end
  30.  
  31.  
  32. class Game_BattlerBase
  33.   #--------------------------------------------------------------------------
  34.   # ● 判定物品是否可以装备
  35.   #--------------------------------------------------------------------------
  36.   def equippable?(item)
  37.     return false unless item.is_a?(RPG::EquipItem)
  38.     return false if equip_type_sealed?(item.etype_id)
  39.     return item.wtypes.any? {|wtype_id| equip_wtype_ok?(wtype_id) } if item.is_a?(RPG::Weapon)
  40.     return item.atypes.any? {|atype_id| equip_atype_ok?(atype_id) } if item.is_a?(RPG::Armor)
  41.     return false
  42.   end
  43. end
  44.  
  45. class Game_Actor
  46.   #--------------------------------------------------------------------------
  47.   # ● 是否装备着特定类型的武器装备
  48.   #--------------------------------------------------------------------------
  49.   def wtype_equipped?(wtype_id)
  50.     weapons.any? {|weapon| weapon.wtypes.include?(wtype_id) }
  51.   end
  52. end


依旧没有测试,但我相信上次没有问题的话这次也应该没有问题。
如果你需要“满足所有条件才可以装备”的话,可以把39、40行的 any? 改成 all?
或者,“装备条件以默认设置为准”的话,请把 32 到 43 行删去。但是这样护甲的设置就没有任何意义了。
@熊喵酱 大概可以结贴了吧




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