查看: 1938|回复: 4

[已经解决] HP低于多少时附加一个状态的被动技能

[复制链接]
梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
发表于 2017-1-26 11:48:28 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 fjm 于 2017-1-26 13:08 编辑

原本的脚本是这样的
[pre lang="ruby"]module P叔
  #==============参==============数==============设==============定==============
  # 请在下面设定被动技能的ID,当角色拥有该被动技能时才会触发状态附加。
  # 默认设置是127号技能。
    SKILL_ID = 127
  # 请在下面设定附加状态的ID
  # 默认设置是26号状态。
    STATE_ID = 26
  # 请设定HP限定变量的ID,用于控制各项数值。
  # 默认设置是10号变量。
    HP_VARIABLE = 10
  # HP限定变量是类似这样一个特殊的一维数组变量:
  # $game_variables[P叔::HP_VARIABLE] = [40,35,0,45]
  # 默认表示当队伍1号的HP小于或等于40才附加状态;当队伍2号的HP小于或等于35才附加状态;
  # 队伍3号无效化,队伍4号的HP小于或等于45才附加状态
  #==============================================================================
end

class Scene_Base
  
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    auto_state_by_skill                                 # 添加了本句
    update_basic
  end
  
  #--------------------------------------------------------------------------
  # ● 附加状态  自定义函数
  #--------------------------------------------------------------------------
  def auto_state_by_skill
    if $game_variables[P叔::HP_VARIABLE].class == Array # 当HP限定变量才执行
      return if $game_party.members.empty?
      for i in 0...$game_party.members.size
        j = $game_party.members
        j.remove_state(P叔::STATE_ID) if j.hp <= 0      # 死亡时解除状态
        next unless j.skill_learn?($data_skills[P叔::SKILL_ID]) # 没有学会技能则跳过
        # 当hp<=最大hp的百分比时,附加状态STATE_ID,否则就解除
        j.hp <= j.mhp * $game_variables[P叔::HP_VARIABLE] / 100.0 ? j.add_state(P叔::STATE_ID) : j.remove_state(P叔::STATE_ID)
      end  
    end  
  end
end[/pre]


我想改成下面这种效果  第6行,15行,39行,42行的效果
[pre lang="ruby"]module P叔
  #==============参==============数==============设==============定==============
  # 请在下面设定被动技能的ID,当角色拥有该被动技能时才会触发状态附加。
  # 默认设置是127号技能。
    SKILL_ID = 127
    SKILL_ID = 128       (有多个被动技能,附加不同的状态ID,例如127号技能附加26号状态,128号技能附加27号状态)
  # 请在下面设定附加状态的ID
  # 默认设置是26号状态。
    STATE_ID = 26
    STATE_ID = 27
  # 请设定HP限定变量的ID,用于控制各项数值。
  # 默认设置是10号变量。
    HP_VARIABLE = 10
  # HP限定变量是类似这样一个特殊的一维数组变量:
  # $game_variables[P叔::HP_VARIABLE] = [40,35,0,45]   (队伍有6个成员)
  # 默认表示当队伍1号的HP小于或等于40才附加状态;当队伍2号的HP小于或等于35才附加状态;
  # 队伍3号无效化,队伍4号的HP小于或等于45才附加状态
  #==============================================================================
end

class Scene_Base
  
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    auto_state_by_skill                                 # 添加了本句
    update_basic
  end
  
  #--------------------------------------------------------------------------
  # ● 附加状态  自定义函数
  #--------------------------------------------------------------------------
  def auto_state_by_skill
    if $game_variables[P叔::HP_VARIABLE].class == Array # 当HP限定变量才执行
      return if $game_party.members.empty?
      for i in 0...$game_party.members.size
        j = $game_party.members
        j.remove_state(P叔::STATE_ID) if j.hp <= 0      # 死亡时解除状态  (死亡时保留被动技能)
        next unless j.skill_learn?($data_skills[P叔::SKILL_ID]) # 没有学会技能则跳过
        # 当hp<=最大hp的百分比时,附加状态STATE_ID,否则就解除
        j.hp <= j.mhp * $game_variables[P叔::HP_VARIABLE] / 100.0 ? j.add_state(P叔::STATE_ID) : j.remove_state(P叔::STATE_ID)   (HP回复到一定量时不移除状态)
      end  
    end  
  end
end[/pre]

自动状态.rar

1.42 MB, 下载次数: 56

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2017-1-26 13:45:17 | 显示全部楼层
我用的这个你试试
脚本[pre lang="ruby"]# 战斗开始前附加状态或者HP到达一定比率时附加状态
#--------------------------------------------------------------------------
# ● 战斗开始前附加状态
#--------------------------------------------------------------------------
# 用法是在角色|职业|装备|敌人的备注栏
# 备注<被动状态:状态ID> 例如<被动状态:18> 那么就会在战斗开始前
# 会为该角色附加18号状态,战斗结束时移除这个状态。同时装备2个以
# 上的有被动状态的装备亦可叠加,都会附加上对应的状态。
#--------------------------------------------------------------------------
# ● HP到达一定比率时附加状态
#--------------------------------------------------------------------------
# 用法是在角色|职业|装备|敌人的备注栏
# 设定34行处设定HP比率并备注<危机:状态ID>可在设定的HP比率下附加状态
# 例:比率0.2 <危机:19> 就会在该角色HP低于20%的情况下附加19号状态
# 并于战斗结束时移除这个状态。
# 设定的状态请勾选战斗结束时解除
# <危机1:19>是HP低于50% <危机2:19>是25% <危机3:19> 是10%
#如果想低于特定HP自行设定,hp_rate改成mp_rate可以设置成MP低于某比例
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 战斗开始处理
  #--------------------------------------------------------------------------
  alias state_battle_start on_battle_start
  def on_battle_start
    state_battle_start
    self.feature_objects.each {|obj|
    self.add_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  end
  #--------------------------------------------------------------------------
  # ● 重新整理
  #--------------------------------------------------------------------------
  def refresh
    state_resist_set.each {|state_id| erase_state(state_id) }
    @hp = [[@hp, mhp].min, 0].max
    @mp = [[@mp, mmp].min, 0].max
      if hp_rate <=  0.2 #设定触发状态的生命比率
         self.feature_objects.each {|obj|
         self.add_state($1.to_i) if obj.note =~ /<危机:\s*(\d+)>/}
       else
         self.feature_objects.each {|obj|
         self.remove_state($1.to_i) if obj.note =~ /<危机:\s*(\d+)>/}
       end
      if hp_rate <=  0.5 #设定触发状态的生命比率
         self.feature_objects.each {|obj|
         self.add_state($1.to_i) if obj.note =~ /<危机1:\s*(\d+)>/}
       else
         self.feature_objects.each {|obj|
         self.remove_state($1.to_i) if obj.note =~ /<危机1:\s*(\d+)>/}
       end
      if hp_rate <=  0.25 #设定触发状态的生命比率
         self.feature_objects.each {|obj|
         self.add_state($1.to_i) if obj.note =~ /<危机2:\s*(\d+)>/}
       else
         self.feature_objects.each {|obj|
         self.remove_state($1.to_i) if obj.note =~ /<危机2:\s*(\d+)>/}
       end
      if hp_rate <=  0.01 #设定触发状态的生命比率
         self.feature_objects.each {|obj|
         self.add_state($1.to_i) if obj.note =~ /<危机3:\s*(\d+)>/}
       else
         self.feature_objects.each {|obj|
         self.remove_state($1.to_i) if obj.note =~ /<危机3:\s*(\d+)>/}
       end
    @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
  end
  #--------------------------------------------------------------------------
  # ● 战斗结束时的处理
  #--------------------------------------------------------------------------
  alias state_on_battle_end on_battle_end
  def on_battle_end
    state_on_battle_end
    self.feature_objects.each {|obj|
    self.remove_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
    self.feature_objects.each {|obj|
    self.remove_state($1.to_i) if obj.note =~ /<危机:\s*(\d+)>/}
    self.feature_objects.each {|obj|
    self.remove_state($1.to_i) if obj.note =~ /<危机1:\s*(\d+)>/}
    self.feature_objects.each {|obj|
    self.remove_state($1.to_i) if obj.note =~ /<危机2:\s*(\d+)>/}
    self.feature_objects.each {|obj|
    self.remove_state($1.to_i) if obj.note =~ /<危机3:\s*(\d+)>/}
  end
end
[/pre]

点评

我没遇到你这情况,我是HP恢复后直接就解除了  发表于 2017-1-27 08:20
fjm
问下HP回复到一定程度不移除状态,怎么改  发表于 2017-1-26 15:51
fjm
非常感谢,这个脚本蛮好用的  发表于 2017-1-26 14:05

评分

参与人数 2星屑 +180 收起 理由
RaidenInfinity + 150 认可答案
fjm + 30

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部