Project1

标题: 如何制作通过吸收魔法攻击来格挡物理攻击的技能 [打印本页]

作者: qqyxzyb    时间: 2013-8-5 11:02
标题: 如何制作通过吸收魔法攻击来格挡物理攻击的技能
原先那个帖子我就设置成过期了,因为很重要所以换个方法再问一遍。最初的设想是做一个技能给自己附加一个状态,然后处在这个状态下的角色在被对方的魔法攻击时会将伤害值转化为能量值,然后在有能量值的情况下对方的物理技能和普通攻击造成的伤害会减少50%,并扣除等额的能量值。能量值不足时只抵挡剩余能量数额的伤害。同时技能存在吸收上限,超出人物等级*100的攻击无法吸收,但是伤害会减少人物当前等级*100的数值。具体设想是在Game_Battler脚本里先加上attr_accessor :energy之后再在Game_Battler3的应用通常攻击效果和应用特技效果里的HP的伤害计算部分分别加上下面两段脚本
  1.       # HP 的伤害计算
  2.       # 检测对象是否拥有无光之盾状态
  3.       if self.states.include?(18)
  4.         #判断剩余的能量是否足以抵挡此次攻击
  5.         if self.damage <= self.energy * 2
  6.         self.hp -= self.damage / 2
  7.         self.energy -= self.damage / 2
  8.         #不足的情况,只抵挡剩余能量的伤害,同时能量值清零
  9.         else self.damage -= self.energy
  10.         self.hp -= self.damage
  11.         self.energy = 0
  12.         end
  13.       else; self.hp -= self.damage
  14.       end
复制代码
  1.       # HP 的伤害减法运算
  2.       if self.is_a?(Game_Actor)
  3.       # 检测对象是否拥有无光之盾状态
  4.       if self.states.include?(18)
  5.         #判断对手使用的是否是魔法攻击
  6.         if skill.atk_f == 0
  7.           if self.damage > self.level * 100      #无光之盾的能量上限
  8.             self.damage -= self.level * 100
  9.             last_hp = self.hp
  10.             self.hp -= self.damage
  11.             effective |= self.hp != last_hp
  12.           elsif self.damage + self.energy > self.level * 100
  13.             self.energy = self.level * 100
  14.           else; self.energy += self.damage
  15.           end
  16.         #判断剩余的能量是否足以抵挡此次攻击
  17.         elsif self.damage <= self.energy * 2
  18.           last_hp = self.hp
  19.           self.hp -= self.damage / 2
  20.           effective |= self.hp != last_hp
  21.           self.energy -= self.damage / 2
  22.         #不足的情况,只抵挡剩余能量的伤害,同时能量值清零
  23.         else; self.damage -= self.energy
  24.           last_hp = self.hp
  25.           self.hp -= self.damage
  26.           effective |= self.hp != last_hp
  27.           self.energy = 0
  28.         end
  29.         end
  30.       last_hp = self.hp
  31.       self.hp -= self.damage
  32.       effective |= self.hp != last_hp
  33.       end
复制代码
但是加上以上两段脚本之后使用技能攻击怪物就只显示伤害却无法致死,一直不明白问题出在哪里,求指点
作者: 弗雷德    时间: 2013-8-5 11:44
本帖最后由 弗雷德 于 2013-8-5 13:43 编辑

你把 effective |= self.hp != last_hp 写进if self.is_a?(Game_Actor)的判断当中,那么如果对象不是角色,就不会执行效果,移出去试试。
另外强烈抗议使用的分号的判断语句,看得很晕,这跟一大堆三目似的……

俺是的意思是将effective |= self.hp != last_hp 这句写出判断外,当执行完判断之后,再统一应用效果
比如你现在是这样写的。
  1.       # HP 的伤害减法运算
  2.       if self.is_a?(Game_Actor)
  3.       # 检测对象是否拥有无光之盾状态
  4.       if self.states.include?(18)
  5.         #判断对手使用的是否是魔法攻击
  6.         if skill.atk_f == 0
  7.           if self.damage > self.level * 100      #无光之盾的能量上限
  8.             self.damage -= self.level * 100
  9.             last_hp = self.hp
  10.             self.hp -= self.damage
  11.             effective |= self.hp != last_hp
  12.           elsif self.damage + self.energy > self.level * 100
  13.             self.energy = self.level * 100
  14.           else; self.energy += self.damage
  15.           end
  16.         #判断剩余的能量是否足以抵挡此次攻击
  17.         elsif self.damage <= self.energy * 2
  18.           last_hp = self.hp
  19.           self.hp -= self.damage / 2
  20.           effective |= self.hp != last_hp
  21.           self.energy -= self.damage / 2
  22.         #不足的情况,只抵挡剩余能量的伤害,同时能量值清零
  23.         else; self.damage -= self.energy
  24.           last_hp = self.hp
  25.           self.hp -= self.damage
  26.           effective |= self.hp != last_hp
  27.           self.energy = 0
  28.         end
  29.         end
  30.       last_hp = self.hp
  31.       self.hp -= self.damage
  32.       effective |= self.hp != last_hp
  33.       end
复制代码
改成:
  1. # HP 的伤害减法运算
  2. if self.is_a?(Game_Actor)
  3. # 检测对象是否拥有无光之盾状态
  4. if self.states.include?(18)
  5. #判断对手使用的是否是魔法攻击
  6. if skill.atk_f == 0
  7. if self.damage > self.level * 100 #无光之盾的能量上限
  8. self.damage -= self.level * 100
  9. last_hp = self.hp
  10. self.hp -= self.damage
  11. effective |= self.hp != last_hp
  12. elsif self.damage + self.energy > self.level * 100
  13. self.energy = self.level * 100
  14. else; self.energy += self.damage
  15. end
  16. #判断剩余的能量是否足以抵挡此次攻击
  17. elsif self.damage <= self.energy * 2
  18. last_hp = self.hp
  19. self.hp -= self.damage / 2
  20. effective |= self.hp != last_hp
  21. self.energy -= self.damage / 2
  22. #不足的情况,只抵挡剩余能量的伤害,同时能量值清零
  23. else; self.damage -= self.energy
  24. last_hp = self.hp
  25. self.hp -= self.damage
  26. effective |= self.hp != last_hp
  27. self.energy = 0
  28. end
  29. end
  30. last_hp = self.hp
  31. self.hp -= self.damage
  32. end
  33. ##########################################写出这个判断外。因为你之前的代码导致只有当对象为角色的时候才执行effective |= self.hp != last_hp
  34. effective |= self.hp != last_hp

复制代码
@qqyxzyb  




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