本帖最后由 RaidenInfinity 于 2018-2-21 13:35 编辑  
 
2楼你再继续发这种回复出事了你别哭。 
 
就如3楼所表示的,VA的HP再生率(hrg)是统一计算的。 
如果要让持续伤害状态可以被属性效率影响,的确是要分开计算。 
 
那么在默认系统里,处理每回合(包括地图上行走)HP再生或伤害 的地方是Game_Battler的regenerate_hp方法。 
 
class Game_Battler < Game_BattlerBase   def regenerate_hp     damage = -(mhp * hrg).to_i     perform_map_damage_effect if $game_party.in_battle && damage > 0     @result.hp_damage = [damage, max_slip_damage].min     self.hp -= @result.hp_damage   end end 
 
 class Game_Battler < Game_BattlerBase  
  def regenerate_hp  
    damage = -(mhp * hrg).to_i  
    perform_map_damage_effect if $game_party.in_battle && damage > 0  
    @result.hp_damage = [damage, max_slip_damage].min  
    self.hp -= @result.hp_damage  
  end  
end  
 
  
 
默认的伤害值(damage)是: 负数(-)的 (最大HP(mhp) 乘于(*) 再生率(hrg) ) 转为整数 (to_i)。 
假设 灼烧状态 的ID是6 ,每回合扣除5%最大血量,受火属性效率影响(也假设火是1号属性)。 
判定是否有状态的方法是 state?(状态ID) 而 获取属性效率的方法是 element_rate(属性ID)。 
我们需要在存在状态的情况之下,获取 最大HP * HP扣除倍率 * 属性效率 的量 然后加进damage里。  
 
因此,最终的脚本: 
class Game_Battler < Game_BattlerBase   def regenerate_hp     damage = -(mhp * hrg).to_i     damage += (mhp * 0.05 * element_rate(1)).to_i if state?(6) #6号状态ID,1号属性ID,5%基础HP扣除倍率     perform_map_damage_effect if $game_party.in_battle && damage > 0     @result.hp_damage = [damage, max_slip_damage].min     self.hp -= @result.hp_damage   end end 
 
 class Game_Battler < Game_BattlerBase  
  def regenerate_hp  
    damage = -(mhp * hrg).to_i  
    damage += (mhp * 0.05 * element_rate(1)).to_i if state?(6) #6号状态ID,1号属性ID,5%基础HP扣除倍率  
    perform_map_damage_effect if $game_party.in_battle && damage > 0  
    @result.hp_damage = [damage, max_slip_damage].min  
    self.hp -= @result.hp_damage  
  end  
end  
 
  
 
如果需要再多几个状态/属性配对,那就加多几行吧。 
当然,数据库里状态的效果留空就好,毕竟已经在脚本里强行定义了。 |