查看: 1983|回复: 7

[已经解决] 求,一状态在HP低于X%解除

[复制链接]
梦石
0
星屑
582
在线时间
310 小时
注册时间
2016-2-29
回帖
149
发表于 2016-10-9 10:21:08 | 显示全部楼层 |阅读模式

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

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

×
求新增状态解除条件,回合结束时如果HP低于x%时自动解除

评分

参与人数 1星屑 +60 收起 理由
夜狠简单 + 60 塞糖

查看全部评分

梦石
0
星屑
3557
在线时间
2337 小时
注册时间
2015-8-25
回帖
928

开拓者

发表于 2016-10-10 20:04:27 | 显示全部楼层
本帖最后由 七重 于 2016-10-10 21:01 编辑

[pre lang="ruby"]class Game_BattlerBase
  def refresh
    state_resist_set.each {|state_id| erase_state(state_id) }
    @hp = [[@hp, mhp].min, 0].max
    @mp = [[@mp, mmp].min, 0].max
    @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
    if hp_rate <= 0.3 #生命值的百分比。
      remove_state(4)#狀態的編號。
    end
  end
end[/pre]

在標記的地方設置狀態的編號,比如默認是4號,沉默。
生命值的百分比,寫成小數形式,比如百分之30以下解除就是0.3.
==
class Game_Battler < Game_BattlerBase
  alias krst161010_update_state_turns update_state_turns
  def update_state_turns
    states.each do |state|
      if state.note.include?("<limited>")
        if $game_party.battle_members[0].hp_rate <= 0.3
          remove_state(state.id)
        end
      else
      @state_turns[state.id] -= 1 if @state_turns[state.id] > 0
      end
    end
  end
end

写了个不成熟的。。。
  这个脚本的效果是:
“备注标记有“<limited>”的状态”,会在队伍的第一个角色生命值少于百分之三十的时候解除。

不知道楼主能不能用得上,我不知道这里怎么写成判断状态使用者的血量。。等人来补充吧。。_(:X_L

评分

参与人数 3星屑 +320 梦石 +1 收起 理由
RaidenInfinity + 250 + 1 楼主认可的解答
是猪别乱叫 + 10 认可答案
夜狠简单 + 60 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
发表于 2016-10-15 10:17:37 | 显示全部楼层
七重 发表于 2016-10-10 20:04
class Game_BattlerBase
  def refresh
    state_resist_set.each {|state_id| erase_state(state_id) }

请问如果是HP低于X%自动附加一个状态的 怎么写
回复

使用道具 举报

梦石
0
星屑
3557
在线时间
2337 小时
注册时间
2015-8-25
回帖
928

开拓者

发表于 2016-10-15 11:23:33 | 显示全部楼层
本帖最后由 七重 于 2016-10-15 11:45 编辑
sq333333 发表于 2016-10-15 10:17
请问如果是HP低于X%自动附加一个状态的 怎么写


[pre lang="ruby"]module Krst7e
  
  LimitedHp_Rate = 0.3 #设置生命值比率
  
  Limited_State = 4 #设置状态的编号

  Limited_Class = 1 #设置能够享受这个效果的职业的编号
  
end
  
################################################

class Game_BattlerBase
  def refresh
    state_resist_set.each {|state_id| erase_state(state_id) }
    @hp = [[@hp, mhp].min, 0].max
    @mp = [[@mp, mmp].min, 0].max
    @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
    if hp_rate <= Krst7e::LimitedHp_Rate
      add_state(Krst7e::Limited_State) # if @class_id == Krst7e::Limited_Class
    end
    if hp_rate > Krst7e::LimitedHp_Rate
       remove_state(Krst7e::Limited_State)
    end
  end
end[/pre]

在最上面设置。
当生命值高于设置的比率时,这个状态又会消失掉。

嘛 想必需要这个功能的时候,应该也是限度个别的职业才能使用的。
有这个需求的话,就将下面的#号去掉
回复

使用道具 举报

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
发表于 2016-10-15 12:14:06 来自手机 | 显示全部楼层
七重 发表于 2016-10-15 11:23
module Krst7e
  
  LimitedHp_Rate = 0.3 #设置生命值比率

感谢大神,回去试试
回复

使用道具 举报

梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
发表于 2016-10-16 19:49:14 | 显示全部楼层
本帖最后由 夜狠简单 于 2016-10-17 12:55 编辑
七重 发表于 2016-10-15 11:23
module Krst7e
  
  LimitedHp_Rate = 0.3 #设置生命值比率


[pre lang="ruby"]module Krst7e

  LimitedHp_Rate = 0.3 #设置生命值比率

  Limited_State = 4 #设置状态的编号

  Limited_Class = 1 #设置能够享受这个效果的职业的编号

end

################################################

class Game_BattlerBase
alias Krst7e_refresh refresh
  def refresh
    Krst7e_refresh
    hp_rate <= Krst7e::LimitedHp_Rate ?  (add_state(Krst7e::Limited_State) if
    @class_id == Krst7e::Limited_Class) : remove_state(Krst7e::Limited_State)
  end
end[/pre]

那一段可以在如下部分换行
hp_rate <=
Krst7e::LimitedHp_Rate ?
(add_state(Krst7e::Limited_State)  if
@class_id ==
Krst7e::Limited_Class) :
remove_state(Krst7e::Limited_State)

点评

用alias 的话兼容性会高一些  发表于 2016-10-17 12:47
被发现了///x///,当初犹豫了一下,最后还是没加。。  发表于 2016-10-16 23:52
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部