赞 | 0 |
VIP | 0 |
好人卡 | 27 |
积分 | 1 |
经验 | 21216 |
最后登录 | 2017-9-15 |
在线时间 | 269 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 269 小时
- 注册时间
- 2014-5-9
- 帖子
- 127
|
本帖最后由 泉塚四季 于 2014-8-23 23:56 编辑
并未测试,如果有什么地方不对的话请回复。
Game_Battler里有一个执行道具/技能恢复HP的方法- def item_effect_recover_hp(user, item, effect)
- value = (mhp * effect.value1 + effect.value2) * rec
- value *= user.pha if item.is_a?(RPG::Item)
- value = value.to_i
- @result.hp_damage -= value
- @result.success = true
- self.hp += value
- end
复制代码 effect.value1 是道具设置中HP恢复量的百分比,
effect.value2 是道具设置中HP恢复量的数目,
@result.hp_damage、@result.success是战斗中显示的数据,
最后通过self.hp += value来实现HP的恢复。
模仿这个方法,接下去我们可以实现特定的技能回复的不是HP而是其他属性的功能。
首先先对方法进行alias,并仿照原本的方法写出类似的方法:- class Game_Battler
- alias qz4j_item_effect_recover_hp item_effect_recover_hp
- def item_effect_recover_hp(user, item, effect)
- qz4j_item_effect_recover_hp(user, item, effect)
- end
- def item_effect_recover_qz4j_param(user, item, effect)
- value = (qz4j_param_max * effect.value1 + effect.value2) * rec # 计算恢复量
- value *= user.pha if item.is_a?(RPG::Item) # 应用药理知识
- value = value.to_i # 计算最终的恢复量
- @result.success = true # 物品/技能成功使用的标志
- self.qz4j_param += value # 应用最终效果
- end
- end
复制代码 @result 是用于战斗中显示伤害的,如何正确显示特殊技能的恢复量这里暂且不提,为了防止战斗中出现头疼的“物品使用失败”,这里姑且加上了一句 @result.success = true 。
之后要做的事情是让特定的物品在执行恢复HP的效果的时候能够无视原本的方法而使用我们的新方法:- class Game_Battler
- alias qz4j_item_effect_recover_hp item_effect_recover_hp
- def item_effect_recover_hp(user, item, effect)
- if use_qz4j_param?(item)
- item_effect_recover_qz4j_param(user, item, effect)
- else
- qz4j_item_effect_recover_hp(user, item, effect)
- end
- end
- def item_effect_recover_qz4j_param(user, item, effect)
- value = (qz4j_param_max * effect.value1 + effect.value2) * rec # 计算恢复量
- value *= user.pha if item.is_a?(RPG::Item) # 应用药理知识
- value = value.to_i # 计算最终的恢复量
- @result.success = true # 物品/技能成功使用的标志
- self.qz4j_param += value # 应用最终效果
- end
- def use_qz4j_param?(item)
- return false unless item.is_a?(RPG::Item)
- return item.id == 1
- end
- end
复制代码 这里我们使用了 use_qz4j_param? 来判断这个物品是否是用来恢复角色新增加的能力的。传递给这个方法的参数就是物品本身。在这个例子中,第一行的代码用来判断使用的是物品还是技能,第二行则判断物品的id是否为1。更多情况下,我们使用物品的备注等来进行这个判断,具体的判断方法大同小异,这里就不累述了。
这样的脚本实际使用时还有一个小问题,当角色的HP满值的时候这个本质上是“恢复HP”的物品是无法使用的,因此我们还需要修改一下判断物品能否使用部分的代码。在这里我们选择 item_effect_test 方法来进行修改:- class Game_Battler
- def item_effect_test(user, item, effect)
- case effect.code
- when EFFECT_RECOVER_HP
- hp < mhp || effect.value1 < 0 || effect.value2 < 0
- when EFFECT_RECOVER_MP
- mp < mmp || effect.value1 < 0 || effect.value2 < 0
- when EFFECT_ADD_STATE
- !state?(effect.data_id)
- when EFFECT_REMOVE_STATE
- state?(effect.data_id)
- when EFFECT_ADD_BUFF
- !buff_max?(effect.data_id)
- when EFFECT_ADD_DEBUFF
- !debuff_max?(effect.data_id)
- when EFFECT_REMOVE_BUFF
- buff?(effect.data_id)
- when EFFECT_REMOVE_DEBUFF
- debuff?(effect.data_id)
- when EFFECT_LEARN_SKILL
- actor? && !skills.include?($data_skills[effect.data_id])
- else
- true
- end
- end
- end
复制代码 和刚才一样,先进行alias:- class Game_Battler
- alias qz4j_item_effect_test item_effect_test
- def item_effect_test(user, item, effect)
- return qz4j_item_effect_test(user, item, effect)
- end
- end
复制代码 由于之前我们已经定义了 use_qz4j_param? 这个判断物品是否是特殊道具的方便方法了,这里可以直接使用。- class Game_Battler
- alias qz4j_item_effect_test item_effect_test
- def item_effect_test(user, item, effect)
- if use_qz4j_param?(item)
- return true if self.qz4j_param < qz4j_param_max
- end
- return qz4j_item_effect_test(user, item, effect)
- end
- end
复制代码 当角色的这个能力小于它的最大值时,允许使用这个道具进行恢复,否则继续进行其他效果的判断。 |
评分
-
查看全部评分
|