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

Project1

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

[已经解决] 如何让道具恢复一个新增的类似TP的人物能力值?

[复制链接]

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
跳转到指定楼层
1
发表于 2014-8-23 20:43:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我在游戏中添加了一个类似TP的能力值,现在想要道具能够回复这个值。

虽然可以关联公共事件用脚本调用来进行操作,但是操作起来特别繁琐,物品数量比较多的话设置起来公共事件也会太多。

请问没有没在物品备注操作的方法?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
269 小时
注册时间
2014-5-9
帖子
127

开拓者

2
发表于 2014-8-23 22:43:21 | 只看该作者
本帖最后由 泉塚四季 于 2014-8-23 23:56 编辑

并未测试,如果有什么地方不对的话请回复。

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

点评

定义之类我之前在添加这个能力值的时候就差不多做完了,现在我要在 物品备注 里输入哪些内容才能让它开始计算呢?  发表于 2014-8-23 23:19
看到如此长的回复首先我得跑来说声谢谢!然后再去做测试……  发表于 2014-8-23 22:52

评分

参与人数 1梦石 +2 收起 理由
taroxd + 2 你们慢慢聊我先走了

查看全部评分

泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
269 小时
注册时间
2014-5-9
帖子
127

开拓者

3
发表于 2014-8-24 00:12:11 | 只看该作者
本帖最后由 泉塚四季 于 2014-8-24 01:15 编辑

以我给出的示例代码为例,在 use_qz4j_param? 这个方法中,可以使用 item.note 来获取使用 物品/技能 的备注,如果备注只有一条内容的话,你可以直接使用 item.note == "特定的字符串" 进行判定,如果备注还包含其他内容的话,你可以使用正则表达式或者通过 item.note.include?("特定的字符串") 判断备注中是否包含指定的字符串。

点评

关于备注如何把值赋给公式开始计算的关联我还是不太明白,脚本懂的不是很多…… 话说我增加的是类似Tp的值,也不涉及到上限问题。  发表于 2014-8-24 13:44
泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
269 小时
注册时间
2014-5-9
帖子
127

开拓者

4
发表于 2014-8-24 15:48:41 | 只看该作者
本帖最后由 泉塚四季 于 2014-8-24 16:49 编辑
  1. value = (qz4j_param_max * effect.value1 + effect.value2) * rec
复制代码
qz4j_param_max:这是自己定义的这项能力的最大值

effect.value1:截图图中50那个位置填写的数值
effect.value2:截图图中100那个位置填写的数值

rec:角色的恢复效果比率

另外从头到尾这个公式中都没有任何获取备注的数值的地方。
泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
269 小时
注册时间
2014-5-9
帖子
127

开拓者

5
发表于 2014-8-24 15:54:16 | 只看该作者
是不是你从一开始就理解错了呢?我2楼说的方法是这样的:

使用恢复HP的道具前先进行判断,如果这个道具是特定的道具的话,本该恢复到HP的数值变为恢复到新增能力上。

例如,如果没有加这个备注的时候,使用这个道具可以恢复500点HP+30%的最大HP,那么加上备注以后使用这个道具就能恢复500点+30%的新定义的能力值。

备注只是用来判断是否是指定道具的,不会参与实际的数值运算。

点评

我一直以为是模仿HP的回复新增一个回复效果,然后用备注调用。现在理解了,辛苦了  发表于 2014-8-24 16:35
啊……原来是这样啊 我确实是理解错了,以为是备注中填写让这个道具使用的时候可以恢复新增的能力值,原来是替换的效果的意思啊。  发表于 2014-8-24 16:30
泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
269 小时
注册时间
2014-5-9
帖子
127

开拓者

6
发表于 2014-8-24 16:02:45 | 只看该作者
如果你不希望了解具体的原理,只是希望获得一个具体的答案的话,我整理了一下脚本,插入这段脚本,然后在对应的方法里进行修改。
  1. class Game_Battler
  2.   alias qz4j_item_effect_recover_hp item_effect_recover_hp
  3.   def item_effect_recover_hp(user, item, effect)
  4.     if use_qz4j_param?(item)
  5.       item_effect_recover_qz4j_param(user, item, effect)        
  6.     else
  7.       qz4j_item_effect_recover_hp(user, item, effect)
  8.     end
  9.   end
  10.   def item_effect_recover_qz4j_param(user, item, effect)
  11.     value = effect.value2 * rec
  12.     value *= user.pha if item.is_a?(RPG::Item)
  13.     value = value.to_i
  14.     @result.success = true
  15.     recover_qz4j_param(value)
  16.   end
  17.   def use_qz4j_param?(item)
  18.     return false unless item.is_a?(RPG::Item)
  19.     return item.note.include?("[recover_qz4j_param]")
  20.   end
  21.   alias qz4j_item_effect_test item_effect_test
  22.   def item_effect_test(user, item, effect)
  23.     return true if use_qz4j_param?(item)      
  24.     return qz4j_item_effect_test(user, item, effect)
  25.   end
  26.   def recover_qz4j_param(value)
  27.     # value 就是最终的数值,在这个方法中进行角色能力的修改吧。
  28.   end
  29. end
复制代码
之后这么设置某个物品的使用效果:

并在物品的备注栏中加入:[recover_qz4j_param]
之后使用这个物品的时候角色就能恢复100点对应的能力值了,依此类推。

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
VIPArcher + 100 + 1 认可答案

查看全部评分

泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
7
 楼主| 发表于 2014-8-24 17:10:08 | 只看该作者
泉塚四季 发表于 2014-8-24 16:02
如果你不希望了解具体的原理,只是希望获得一个具体的答案的话,我整理了一下脚本,插入这段脚本,然后在对 ...

十分感谢耐心的解答,抱歉是我一开始理解错了就钻到死胡同里去了。

现在已经解决,可以结贴啦~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-25 23:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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