Project1

标题: 【新手】真正的吸血技能特效脚本 [打印本页]

作者: 哆啦溯    时间: 2017-1-12 17:22
标题: 【新手】真正的吸血技能特效脚本
本帖最后由 哆啦溯 于 2017-1-12 19:07 编辑

吸血脚本想必各位dalao们已经是随处可见的了,不过我目前在论坛上搜索到的吸血脚本,都是类似
  1. @active_battler.damage = -(target.damage)
复制代码

之类,即“回复使用者技能伤害的HP”,但是真正的吸血不应该是“目标始末HP之差”么。。。简单来讲,敌人有10点HP,技能伤害有30点,那么应该是回复使用者10点HP而非30点。然后我就想了想,用了个全局变量写了写。。。
在Game_Battler 3的 #HP 的伤害减法运算 部分,改为
  1.       # HP 的伤害减法运算
  2.       last_hp = self.hp
  3.       self.hp -= self.damage
  4.       #===吸血用,< 0===
  5.       $su_delta = last_hp - self.hp
  6.       #==============
  7.       effective |= self.hp != last_hp
复制代码

然后在 Scene_Battle 4 的 刷新画面 (主回合步骤 5 : 显示伤害)  部分,改为
  1.   #--------------------------------------------------------------------------
  2.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  3.   #--------------------------------------------------------------------------
  4.   def update_phase4_step5
  5.     # 隐藏帮助窗口
  6.     @help_window.visible = false
  7.     # 刷新状态窗口
  8.     @status_window.refresh
  9.     # 显示伤害
  10.     for target in @target_battlers
  11.       if target.damage != nil
  12.         target.damage_pop = true
  13.         #===================吸血特效============================
  14.         if [75, 76, 77].include?(@active_battler.current_action.skill_id) and target.damage != "Miss" and target.damage > 0
  15.           @active_battler.animation_id = 15
  16.           @active_battler.damage = - $su_delta / 2
  17.           @active_battler.damage_pop = true
  18.           @active_battler.hp += $su_delta / 2
  19.           @status_window.refresh
  20.         end
  21.       end
  22.     end
  23.     # 移至步骤 6
  24.     @phase4_step = 6
  25.   end
复制代码

这部分各大吸血脚本都有~
[75, 76, 77] 这部分为技能ID,并且考虑了MISS的情况;之所以判断 target.damage > 0 这一点是考虑到属性有效度为 E 或 F 的情况~
有什么遗漏的还请指出~
新手第一次发布,瑟瑟发抖。。。如果有更好的方法欢迎提出~
作者: RyanBern    时间: 2017-1-12 18:03
不同人对吸血的理解不同,所以写出的效果当然不同咯。

在我的考场中,也出现过吸血的处理(详见R考场第二期,第三大题)。在那里的吸血技能还需要考虑吸血者本身的 maxhp,即假设吸血者的hp为99/100,那么这个吸血技能最多吸1点HP,并且对敌人的伤害也是1点。

代码方面的建议的话,首先是根据RGSS1的逻辑,伤害处理部分写在skill_effect中,伤害显示部分则放在Scene_Battle中,所以在这里,可以顺便将伤害处理也写在skill_effect中,这样的话,全局变量就可以省掉。当然,动画的处理就可能要写在这了(除非不要动画)。
RUBY 代码复制
  1. if [75, 76, 77].include?(skill_id)
  2.   drain = last_hp - self.hp
  3.   if drain > 0
  4.     user.damage = -drain
  5.     user.hp -= user.damage
  6.   end
  7. end

然后在Scene_Battle只需要添加damage_pop一项即可。
作者: 哆啦溯    时间: 2017-1-12 18:52
RyanBern 发表于 2017-1-12 18:03
不同人对吸血的理解不同,所以写出的效果当然不同咯。

在我的考场中,也出现过吸血的处理(详见R考场第二 ...

恩……对吸血的理解不同确实有差异,我这种应该是基于技能特效而不是纯吸血的技能……

代码部分,我一开始也是尝试直接在Game_Battler 3写的,但是这里面似乎找不到skill_id这个变量,所以不能直接写啊……
另外动画的处理在skill_effect中写的话,我用的是user.animation_id,这样的话只会改变使用方用技能时的动画(不会额外在对象方动画放完后再播放一种使用方动画),好像不对。。。




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