Project1

标题: 制作强化装备某一属性的技能 [打印本页]

作者: 黑曜秘法    时间: 2015-1-14 01:16
标题: 制作强化装备某一属性的技能
譬如我想设计个技能叫【盾牌专精】,效果是提升盾牌附加防御力的10%,而不是固定的防御数值或者与自身防御力挂钩的百分比数值。
我知道这个用脚本应该挺容易实现的,但是自己不懂,也没搜到相关的,求大神解惑。
作者: taroxd    时间: 2015-1-14 12:48
你为什么会产生这个挺容易实现的错觉(虽然我承认不难)- - 要实现的话得破坏原来计算属性的统一方法了

就思路而言大致是这样的:
RUBY 代码复制
  1. class Game_Actor
  2.  
  3.   alias_method :pp_20150114, :param_plus
  4.  
  5.   def param_plus(id)
  6.     old = pp_20150114(id)
  7.     return old unless id == 对应防御力的id
  8.     return old unless skill_learn?($data_skills[技能的id])
  9.     return old unless 装备了盾牌?
  10.     old + 盾牌防御力 / 10
  11.   end
  12. end

作者: 黑曜秘法    时间: 2015-1-14 17:32
taroxd 发表于 2015-1-14 12:48
你为什么会产生这个挺容易实现的错觉(虽然我承认不难)- - 要实现的话得破坏原来计算属性的统一方法了

就 ...

哈哈,毕竟不甘心一直都做事件党啊,脚本尝试了解但是不专心的话看不懂。
我只知道要先定义类和方法,但是具体怎么调用数据的方法就不知道了。
你的解答我能看懂1、5、6、7行,先定义Game_Actor的类(其实也不是很懂,这个不是原系统已经有定义了吗,再定义一次无法理解);再定义param_plus的方法(这个我知道,是增加常规属性的方法),设置一个仅在此脚本中生效的变量,然后把变量赋值(unless分歧条件首先判断装备附加的属性是不是等于我们技能的对应属性,再判断有没有学习专精技能和装备盾牌)。
不过其余的我有疑问啊,“装备了盾牌”和“盾牌防御力”我用Ctrl+Shift+F查了一下没有定义过,复制脚本之后运行游戏也果然报错。
我知道这个问题对于你而言肯定就像要耐心解释1+1=2一样,不过请原谅我不懂脚本。
作者: 黑曜秘法    时间: 2015-1-15 00:09
@chd114 不啊,我随便起了个ID,不过你这么说还确实有点像“黑鸟出秘法鞋”的意思。
@三途亚梦 嗯,我现在是反应过来了,“装备了盾牌”和“盾牌防御力”只是概念上的解释,不是脚本语言本身。
照这个思路我继续学学看吧,先等等看还有没有其他回复,明晚再找版主结帖。
作者: 黑曜秘法    时间: 2015-1-15 23:21
到此为止了吧,思路我知道了。版主请结帖。
作者: morningboo    时间: 2015-1-17 14:19
回答一个不算回答的回答,可以这样判断,如果某个角色拥有盾牌专精的技能,那么当他装备盾牌类装备时,防御力上升x%,这个还是很好实现的,用到的语句也不多,楼主可以参考下,恕本人脚本渣,只能想到这个愚笨的不是办法的办法
作者: chd114    时间: 2015-1-17 16:54
  1. class Game_Actor
  2.   alias_method :c4_20150117, :param_plus
  3.   def param_plus(id)
  4.     old = c4_20150117(id)
  5.     for i in 0...equips.size
  6.       if equips[i]!=nil
  7.         if id == 3#物理防御
  8.           if skill?(146)#盾牌专精
  9.             old+=equips[i].params[3]/10 if equips[i].etype_id==1
  10.           end
  11.         end
  12.       end
  13.     end
  14.     old
  15.   end
  16. end
复制代码
按照taroxd的思路做的,这个只针对已经学会146号技能的角色身上的1号类型的装备(盾牌,0为武器)加的物理防御(params[3]为物理防御)
需要使用这里的https://rpg.blue/thread-365967-1-1.html脚本

或者添加一小段
  1. class Game_Battler < Game_BattlerBase
  2. def skills
  3.     (basic_skills | added_skills).sort.map {|id| $data_skills[id] }
  4.   end
  5. end
复制代码

作者: 黑曜秘法    时间: 2015-1-18 16:54
本帖最后由 黑曜秘法 于 2015-1-18 17:27 编辑
chd114 发表于 2015-1-17 16:54
按照taroxd的思路做的,这个只针对已经学会146号技能的角色身上的1号类型的装备(盾牌,0为武器)加的物理 ...


RUBY 代码复制
  1. class Game_Actor              #定义类
  2.   alias_method :c4_20150117, :param_plus
  3.   def param_plus(id)      
  4.     old = c4_20150117(id)     
  5.     for i in 0...equips.size  #把0到(装备数量-1,for in后两数之间三个点)的数一一代入循环
  6.       if equips[i]!=nil       #第一个判断,若某部位的装备不为(逻辑判断)空
  7.         if id == 3            #第二个判断,若属性对应id全等于(逻辑判断)3(物理防御,不为时可自行编辑)
  8.           if skill?(146)      #第三个判断,若第146号技能(自行编辑)已习得(这里省略“==true”)
  9.             old+=equips[i].params[3]/10 if equips[i].etype_id==1   
  10.             #old(属性加成量)加上equips[i].params[3]/10 (某装备的对应属性加成量除以10,公式可自行编辑)
  11.             #第四个判断,若装备的编号为1(1是盾牌,不为盾牌时可自行编辑)时
  12.           end
  13.         end
  14.       end
  15.     end
  16.     old  
  17.   end
  18. end


非常感谢!你的脚本我完全理解了,不仅为我解决了脚本本身的问题,对我的理解学习帮助也非常大。
或许也会有和我一样的新手戳进我的提问帖,所以我把脚本自己添加了作为新手的理解注释,如果有偏差请你指出。

@taroxd  谢谢指出,为了避免误导,还是把你说的那几行注释删了 。确实你在沙发楼的回复没有用到循环,unless直接把非指定(装备、属性)的id排除了,因此只需要判断一次就出结果,楼上给我写好了访问需要数值的语法,我会自己改改看的。
嗯,等有时间,我一定会再仔细学学的,太励志了。




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