Project1
标题: 制作强化装备某一属性的技能 [打印本页]
作者: 黑曜秘法 时间: 2015-1-14 01:16
标题: 制作强化装备某一属性的技能
譬如我想设计个技能叫【盾牌专精】,效果是提升盾牌附加防御力的10%,而不是固定的防御数值或者与自身防御力挂钩的百分比数值。
我知道这个用脚本应该挺容易实现的,但是自己不懂,也没搜到相关的,求大神解惑。
作者: taroxd 时间: 2015-1-14 12:48
你为什么会产生这个挺容易实现的错觉(虽然我承认不难)- - 要实现的话得破坏原来计算属性的统一方法了
就思路而言大致是这样的:
class Game_Actor
alias_method :pp_20150114, :param_plus
def param_plus(id)
old = pp_20150114(id)
return old unless id == 对应防御力的id
return old unless skill_learn?($data_skills[技能的id])
return old unless 装备了盾牌?
old + 盾牌防御力 / 10
end
end
class Game_Actor
alias_method :pp_20150114, :param_plus
def param_plus(id)
old = pp_20150114(id)
return old unless id == 对应防御力的id
return old unless skill_learn?($data_skills[技能的id])
return old unless 装备了盾牌?
old + 盾牌防御力 / 10
end
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
- class Game_Actor
- alias_method :c4_20150117, :param_plus
- def param_plus(id)
- old = c4_20150117(id)
- for i in 0...equips.size
- if equips[i]!=nil
- if id == 3#物理防御
- if skill?(146)#盾牌专精
- old+=equips[i].params[3]/10 if equips[i].etype_id==1
- end
- end
- end
- end
- old
- end
- end
复制代码 按照taroxd的思路做的,这个只针对已经学会146号技能的角色身上的1号类型的装备(盾牌,0为武器)加的物理防御(params[3]为物理防御)
需要使用这里的https://rpg.blue/thread-365967-1-1.html脚本
或者添加一小段- class Game_Battler < Game_BattlerBase
- def skills
- (basic_skills | added_skills).sort.map {|id| $data_skills[id] }
- end
- end
复制代码
作者: 黑曜秘法 时间: 2015-1-18 16:54
本帖最后由 黑曜秘法 于 2015-1-18 17:27 编辑
chd114 发表于 2015-1-17 16:54 
按照taroxd的思路做的,这个只针对已经学会146号技能的角色身上的1号类型的装备(盾牌,0为武器)加的物理 ...
class Game_Actor #定义类
alias_method :c4_20150117, :param_plus
def param_plus(id)
old = c4_20150117(id)
for i in 0...equips.size #把0到(装备数量-1,for in后两数之间三个点)的数一一代入循环
if equips[i]!=nil #第一个判断,若某部位的装备不为(逻辑判断)空
if id == 3 #第二个判断,若属性对应id全等于(逻辑判断)3(物理防御,不为时可自行编辑)
if skill?(146) #第三个判断,若第146号技能(自行编辑)已习得(这里省略“==true”)
old+=equips[i].params[3]/10 if equips[i].etype_id==1
#old(属性加成量)加上equips[i].params[3]/10 (某装备的对应属性加成量除以10,公式可自行编辑)
#第四个判断,若装备的编号为1(1是盾牌,不为盾牌时可自行编辑)时
end
end
end
end
old
end
end
class Game_Actor #定义类
alias_method :c4_20150117, :param_plus
def param_plus(id)
old = c4_20150117(id)
for i in 0...equips.size #把0到(装备数量-1,for in后两数之间三个点)的数一一代入循环
if equips[i]!=nil #第一个判断,若某部位的装备不为(逻辑判断)空
if id == 3 #第二个判断,若属性对应id全等于(逻辑判断)3(物理防御,不为时可自行编辑)
if skill?(146) #第三个判断,若第146号技能(自行编辑)已习得(这里省略“==true”)
old+=equips[i].params[3]/10 if equips[i].etype_id==1
#old(属性加成量)加上equips[i].params[3]/10 (某装备的对应属性加成量除以10,公式可自行编辑)
#第四个判断,若装备的编号为1(1是盾牌,不为盾牌时可自行编辑)时
end
end
end
end
old
end
end
非常感谢!你的脚本我完全理解了,不仅为我解决了脚本本身的问题,对我的理解学习帮助也非常大。
或许也会有和我一样的新手戳进我的提问帖,所以我把脚本自己添加了作为新手的理解注释,如果有偏差请你指出。
@taroxd 谢谢指出,为了避免误导,还是把你说的那几行注释删了
。确实你在沙发楼的回复没有用到循环,unless直接把非指定(装备、属性)的id排除了,因此只需要判断一次就出结果,楼上给我写好了访问需要数值的语法,我会自己改改看的。
嗯,等有时间,我一定会再仔细学学的,太励志了。
| 欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |