Project1

标题: 请教如何让回复技能智能化一些? [打印本页]

作者: 文雅夕露    时间: 2017-12-2 20:05
标题: 请教如何让回复技能智能化一些?
比如说:一个复活技能(己方单体Hp为0)。
当队伍所有人都没有战斗不能的状态。这个技能无法被直接使用,直接以灰色字表示不能使用。
同理:一个回复技能。当队伍所有人Hp全满时,直接以灰色字表示不能使用。
请教这功能该怎么做到。


作者: 芯☆淡茹水    时间: 2017-12-2 20:37
本帖最后由 芯☆淡茹水 于 2017-12-2 20:40 编辑

很久没碰XP,估摸着瞎写的
  1. #==============================================================================
  2. class Game_Battler
  3.   #--------------------------------------------------------------------------
  4.   alias xrdata_skill_can_use? skill_can_use?
  5.   def skill_can_use?(skill_id)
  6.     return false if !has_dead_member? && is_bereborn_skill?(skill_id)
  7.     return false if all_full_blood? && is_recovery_skill?(skill_id)
  8.     return xrdata_skill_can_use?(skill_id)
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   def ranks
  12.     return self.is_a?(Game_Actor) ? $game_party.actors : $game_troop.enemies
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   def has_dead_member?
  16.     ranks.each do |member|
  17.       next if member.hidden
  18.       return true if member.dead?
  19.     end
  20.     return false
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   def all_full_blood?
  24.     ranks.each do |member|
  25.       next if member.hidden
  26.       return false if member.hp < member.maxhp
  27.     end
  28.     return true
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   def is_bereborn_skill?(skill_id)
  32.     return false if $data_skills[skill_id].nil?
  33.     return $data_skills[skill_id].minus_state_set.include?(1)
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   def is_recovery_skill?(skill_id)
  37.     return false if $data_skills[skill_id].nil?
  38.     return $data_skills[skill_id].power < 0
  39.   end
  40. end
  41. #==============================================================================
复制代码

作者: guoxiaomi    时间: 2017-12-2 20:50
额,预计好boss要放大招,提前放复活/恢复技能也是很重要的吧?这个设定放在菜单更合适?
作者: chd114    时间: 2017-12-4 17:23
2楼的脚本翻译一下是这样
  1. #==============================================================================
  2. class Game_Battler
  3.   #--------------------------------------------------------------------------
  4.   alias xrdata_skill_can_use? skill_can_use?#在旧的内容里添加新内容的alias方法
  5.   def skill_can_use?(skill_id)#判断技能能否使用
  6.     return false if !has_dead_member? && is_bereborn_skill?(skill_id)#技能以阵亡队友为目标,但是不存在阵亡队友,不可用
  7.     return false if all_full_blood? && is_recovery_skill?(skill_id)#技能是恢复技能,但是团队成员全部满血,不可用
  8.     return xrdata_skill_can_use?(skill_id)#读取旧的内容
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   def ranks#判断使用者/使用对象所属团队(角色的场合返回团队party,敌人的场合返回敌群troop)
  12.     return self.is_a?(Game_Actor) ? $game_party.actors : $game_troop.enemies
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   def has_dead_member?#是否存在阵亡队友
  16.     ranks.each do |member|
  17.       next if member.hidden
  18.       return true if member.dead?
  19.     end
  20.     return false
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   def all_full_blood?#团队内队员是否全部满血
  24.     ranks.each do |member|
  25.       next if member.hidden
  26.       return false if member.hp < member.maxhp
  27.     end
  28.     return true
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   def is_bereborn_skill?(skill_id)#技能是否可对阵亡队友使用
  32.     return false if $data_skills[skill_id].nil?
  33.     return $data_skills[skill_id].minus_state_set.include?(1)
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   def is_recovery_skill?(skill_id)#技能是否属性恢复技能
  37.     return false if $data_skills[skill_id].nil?
  38.     return $data_skills[skill_id].power < 0
  39.   end
  40. end
  41. #==============================================================================
复制代码

作者: SailCat    时间: 2017-12-4 18:18
本帖最后由 SailCat 于 2017-12-4 18:20 编辑

参见我的脚本:技能消耗你想消耗的一切:
https://rpg.blue/forum.php?mod=viewthread&tid=403718
插入那个脚本


然后写备注(写描述里):
没有人战斗不能时没法用:#cf:$game_party.actors.inject(false){|f,x| f||=x.hp0?}
没有人不满血时没法用:#cf:$game_party.actors.inject(false){|f,x| f||=x.hp<x.maxhp}





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