设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1592|回复: 5
打印 上一主题 下一主题

[已经解决] (更正标题) HP小于一定比率时附加状态

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
160 小时
注册时间
2012-12-2
帖子
15
跳转到指定楼层
1
发表于 2014-11-3 04:02:50 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 youda1018 于 2014-11-3 13:47 编辑

前阵子获得帮助得到了战斗开始时附加状态腳本
但是后来又加了一点东西
让在HP小于一定比率时附加状态
但是问题来了附加的危状态
只有在战斗开始判定是否危急决定是否附加
(好吧我承认我只会乱玩技能公式不懂脚本{:2_263:} )

求修改
(或是分成战斗开始附加状态跟危急时附加状态2个脚本)

RUBY 代码复制
  1. # 随便写的,没有详细测试过。用法是在角色|职业|装备|敌人的备注栏
  2. # 备注<被动状态:状态ID> 例如<被动状态:18> 那么就会在战斗开始前
  3. # 会为该角色附加18号状态,战斗结束时移除这个状态。同时装备2个以
  4. # 上的有被动状态的装备亦可叠加,都会附加上对应的状态。
  5. class Game_Battler < Game_BattlerBase
  6.   #--------------------------------------------------------------------------
  7.   # ● 战斗开始处理
  8.   #--------------------------------------------------------------------------
  9.   alias state_battle_start on_battle_start
  10.   def on_battle_start
  11.     state_battle_start
  12.     self.feature_objects.each {|obj|
  13.     self.add_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  14.       if hp_rate <= 0.99 #自行设定的HP比率
  15.          self.feature_objects.each {|obj|
  16.          self.add_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  17.        else
  18.          self.feature_objects.each {|obj|
  19.          self.remove_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  20.       end
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 战斗结束时的处理
  24.   #--------------------------------------------------------------------------
  25.   alias state_on_battle_end on_battle_end
  26.   def on_battle_end
  27.     state_on_battle_end
  28.     self.feature_objects.each {|obj|
  29.     self.remove_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  30.     self.feature_objects.each {|obj|
  31.     self.remove_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  32.   end
  33. end

点评

什么叫危机时刻?这个危急的标准是什么?  发表于 2014-11-3 11:37

Lv5.捕梦者

梦石
0
星屑
22928
在线时间
8637 小时
注册时间
2011-12-31
帖子
3367
6
发表于 2014-11-4 00:45:11 | 只看该作者
參考(来自己閉站的RGSS研究所)
オートステート実装
  1. #==============================================================================
  2. # □ オートステート実装(for VX Ace)
  3. #------------------------------------------------------------------------------
  4. # Version : 2_20120517
  5. # by サリサ・タイクーン
  6. # http://www.tycoon812.com/rgss/
  7. #==============================================================================

  8. #==============================================================================
  9. # □ 素材スイッチ
  10. #==============================================================================
  11. $rgsslab = {} if $rgsslab == nil
  12. $rgsslab["オートステート実装"] = true

  13. if $rgsslab["オートステート実装"]

  14. #==============================================================================
  15. # ○ カスタマイズポイント
  16. #==============================================================================
  17. module RGSSLAB end
  18. module RGSSLAB::Auto_State
  19.   #--------------------------------------------------------------------------
  20.   # ○ オートステートの文字列設定
  21.   #    武器・防具のメモ欄にて記述する文字列を設定します。
  22.   #
  23.   #    メモ欄に [ + NOTE + ステートID + ] と記述する事で
  24.   #    自動付加するオートステートを設定する事ができます。
  25.   #
  26.   #    記述例:
  27.   #    NOTEが"オートステート:"で、ID 17に設定したい場合は
  28.   #    [オートステート:17] と記述します。
  29.   #    (複数指定する場合は、必要な分だけ指定して記述して下さい)
  30.   #--------------------------------------------------------------------------
  31.   NOTE = "オートステート:"
  32.   #--------------------------------------------------------------------------
  33.   # ○ オートステートの条件
  34.   #    オートステートの条件を指定します。
  35.   #
  36.   #    ・記述方法
  37.   #    オートステートID => [HP, MP, ステートID]
  38.   #
  39.   #    HP         : 残りHPx‰で発動
  40.   #    MP         : 残りMPx‰で発動
  41.   #    ステートID : 特定のステートIDに掛かっている時に発動
  42.   #                (オートステートによる付与では発動しません)
  43.   #
  44.   #    尚、該当する条件にnilの場合、条件無しになります。
  45.   #
  46.   #    又、ここに書かれていないオートステートIDは
  47.   #    無条件で発動するものとして設定されます。
  48.   #    ([nil, nil, nil] と記述しているのと同じになります)
  49.   #--------------------------------------------------------------------------
  50.   ID = {
  51.    30 => [nil, nil, nil],
  52.   }
  53. end

  54. # カスタマイズポイントは、ここまで

  55. #==============================================================================
  56. # □ RGSSLAB::Auto_State [module]
  57. #==============================================================================
  58. module RGSSLAB::Auto_State
  59.   #--------------------------------------------------------------------------
  60.   # ○ 素材設定用の定数定義
  61.   #--------------------------------------------------------------------------
  62.   MATERIAL_NAME = "オートステート実装"
  63.   VERSION       = 2
  64.   RELEASE       = 20120517
  65. end

  66. #==============================================================================
  67. # ■ Game_Battler [class]
  68. #==============================================================================
  69. class Game_Battler < Game_BattlerBase
  70.   #--------------------------------------------------------------------------
  71.   # ● ステートの付加 [再定義]
  72.   #      state_id : ステート ID
  73.   #--------------------------------------------------------------------------
  74.   def add_state(state_id)
  75.     if state_addable?(state_id)
  76.       add_new_state(state_id) unless state?(state_id)
  77.       reset_state_counts(state_id)
  78.       @result.added_states.push(state_id).uniq!
  79.       self.update_auto_states if self.is_a?(Game_Actor) if $rgsslab["オートステート実装"]
  80.     end
  81.   end
  82. end

  83. #==============================================================================
  84. # ■ Game_Actor [class]
  85. #==============================================================================
  86. class Game_Actor < Game_Battler
  87.   #--------------------------------------------------------------------------
  88.   # ○ モジュールの設定
  89.   #--------------------------------------------------------------------------
  90.   RGSSLAB_078 = RGSSLAB::Auto_State
  91.   #--------------------------------------------------------------------------
  92.   # ● セットアップ [エイリアス]
  93.   #     actor_id : アクター ID
  94.   #--------------------------------------------------------------------------
  95.   alias auto_state_setup setup
  96.   def setup(actor_id)
  97.     auto_state_setup(actor_id)
  98.     update_auto_states
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ○ オートステートの処理
  102.   #--------------------------------------------------------------------------
  103.   def update_auto_states
  104.     for equip in equips.compact
  105.       if equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/]
  106.         for auto_state_id in equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/].scan(/(\d+)/)
  107.           if RGSSLAB_078::ID[auto_state_id[0].to_i]
  108.             if RGSSLAB_078::ID[auto_state_id[0].to_i][0]
  109.               unless @hp <= self.mhp * RGSSLAB_078::ID[auto_state_id[0].to_i][0] / 1000.0
  110.                 remove_state(auto_state_id[0].to_i)
  111.                 next
  112.               end
  113.             end
  114.             if RGSSLAB_078::ID[auto_state_id[0].to_i][1]
  115.               unless @mp <= self.mmp * RGSSLAB_078::ID[auto_state_id[0].to_i][1] / 1000.0
  116.                 remove_state(auto_state_id[0].to_i)
  117.                 next
  118.               end
  119.             end
  120.             if RGSSLAB_078::ID[auto_state_id[0].to_i][2]
  121.               flag = false
  122.               states.each do |state|
  123.                 flag = true if state.id == RGSSLAB_078::ID[auto_state_id[0].to_i][2]
  124.               end
  125.               next unless flag
  126.             end
  127.             add_state(auto_state_id[0].to_i, true)
  128.           else
  129.             add_state(auto_state_id[0].to_i, true)
  130.           end
  131.         end
  132.       end
  133.     end
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ○ ステートの付加 [オーバーライド]
  137.   #     state_id : ステートID
  138.   #     force    : 強制付加フラグ
  139.   #     flag     : 復活フラグ
  140.   #--------------------------------------------------------------------------
  141.   def add_state(state_id, force = false, flag = false)
  142.     return super(state_id) if force == false
  143.     if state_id != 0 && state_id != nil
  144.       add_new_state(state_id, flag) unless state?(state_id)
  145.       @state_turns[state_id] = -1
  146.       @state_steps[state_id] = -1
  147.       @result.added_states.push(state_id).uniq!
  148.     end
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ○ 新しいステートの付加 [オーバーライド]
  152.   #     state_id : ステートID
  153.   #     flag     : 復活フラグ
  154.   #--------------------------------------------------------------------------
  155.   def add_new_state(state_id, flag = false)
  156.     return super(state_id) if flag == false
  157.     die if state_id == death_state_id
  158.     @states.push(state_id)
  159.     sort_states
  160.     refresh
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 装備の変更 [再定義]
  164.   #     slot_id : 装備スロット ID
  165.   #     item    : 武器/防具(nil なら装備解除)
  166.   #--------------------------------------------------------------------------
  167.   def change_equip(slot_id, item)
  168.     return unless trade_item_with_party(item, equips[slot_id])
  169.     return if item && equip_slots[slot_id] != item.etype_id
  170.     old = @equips[slot_id].object ? @equips[slot_id].object.dup : nil
  171.     @equips[slot_id].object = item
  172.     if old != nil
  173.       if old.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/]
  174.         for auto_state_id in old.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/].scan(/(\d+)/)
  175.           remove_state(auto_state_id[0].to_i)
  176.         end
  177.       end
  178.     end
  179.     update_auto_states         if $rgsslab["オートステート実装"]
  180.     equip_combinations_process if $rgsslab["装備組み合わせオートステート付与"]
  181.     refresh
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ○ 戦闘不能から復活 [オーバーライド]
  185.   #--------------------------------------------------------------------------
  186.   def revive
  187.     super
  188.     for equip in equips.compact
  189.       if equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/]
  190.         for auto_state_id in equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/].scan(/(\d+)/)
  191.           add_state(auto_state_id[0].to_i, true, true)
  192.         end
  193.       end
  194.     end
  195.     equip_combinations_process if $rgsslab["装備組み合わせオートステート付与"]
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ○ HP の変更 [オーバーライド]
  199.   #     hp : 新しい HP
  200.   #--------------------------------------------------------------------------
  201.   def hp=(hp)
  202.     super
  203.     update_auto_states if $rgsslab["オートステート実装"]
  204.   end
  205. end

  206. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
160 小时
注册时间
2012-12-2
帖子
15
5
 楼主| 发表于 2014-11-4 00:32:48 | 只看该作者
问题已解决
脚本修好后是小弟我忘记在状态设定那
勾选战斗结束时解除搞到现在才好
感谢各位帮助
还劳请版主结贴

最后修正的脚本

RUBY 代码复制
  1. # 战斗开始前附加状态并于HP到达一定比率时附加状态
  2. #--------------------------------------------------------------------------
  3. # ● 战斗开始前附加状态
  4. #--------------------------------------------------------------------------
  5. # 用法是在角色|职业|装备|敌人的备注栏
  6. # 备注<被动状态:状态ID> 例如<被动状态:18> 那么就会在战斗开始前
  7. # 会为该角色附加18号状态,战斗结束时移除这个状态。同时装备2个以
  8. # 上的有被动状态的装备亦可叠加,都会附加上对应的状态。
  9. #--------------------------------------------------------------------------
  10. # ● HP到达一定比率时附加状态
  11. #--------------------------------------------------------------------------
  12. # 用法是在角色|职业|装备|敌人的备注栏
  13. # 设定34行处设定HP比率并备注<danger:状态ID>可在设定的HP比率下附加状态
  14. # 例:比率0.5 <danger:19> 就会在该角色HP低于50%的情况下附加19号状态
  15. # 并于战斗结束时移除这个状态。
  16. # 设定的状态请勾选战斗结束时解除
  17. class Game_Battler < Game_BattlerBase
  18.   #--------------------------------------------------------------------------
  19.   # ● 战斗开始处理
  20.   #--------------------------------------------------------------------------
  21.   alias state_battle_start on_battle_start
  22.   def on_battle_start
  23.     state_battle_start
  24.     self.feature_objects.each {|obj|
  25.     self.add_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 重新整理
  29.   #--------------------------------------------------------------------------
  30.   def refresh
  31.     state_resist_set.each {|state_id| erase_state(state_id) }
  32.     @hp = [[@hp, mhp].min, 0].max
  33.     @mp = [[@mp, mmp].min, 0].max
  34.       if hp_rate <=  0.99 #设定触发状态的生命比率
  35.          self.feature_objects.each {|obj|
  36.          self.add_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  37.        else
  38.          self.feature_objects.each {|obj|
  39.          self.remove_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  40.       end
  41.     @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 战斗结束时的处理
  45.   #--------------------------------------------------------------------------
  46.   alias state_on_battle_end on_battle_end
  47.   def on_battle_end
  48.     state_on_battle_end
  49.     self.feature_objects.each {|obj|
  50.     self.remove_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  51.     self.feature_objects.each {|obj|
  52.     self.remove_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  53.   end
  54. end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
160 小时
注册时间
2012-12-2
帖子
15
4
 楼主| 发表于 2014-11-3 14:50:13 | 只看该作者
本帖最后由 youda1018 于 2014-11-3 17:13 编辑
三途亚梦 发表于 2014-11-3 13:16
你说的这个危机时刻这个时刻应该是检测当前HP数值的……

VIP这个脚本还做不到这种效果。


感谢各位的帮助
已经解决大部分问题了
但是战斗结束后连同HP小于该比率附加上的状态一同移除该怎么改?


(战斗开始时附加状态并且在HP小于一定比率时附加状态)

RUBY 代码复制
  1. # 随便写的,没有详细测试过。用法是在角色|职业|装备|敌人的备注栏
  2. # 备注<被动状态:状态ID> 例如<被动状态:18> 那么就会在战斗开始前
  3. # 会为该角色附加18号状态,战斗结束时移除这个状态。同时装备2个以
  4. # 上的有被动状态的装备亦可叠加,都会附加上对应的状态。
  5. class Game_Battler < Game_BattlerBase
  6.   #--------------------------------------------------------------------------
  7.   # ● 战斗开始处理
  8.   #--------------------------------------------------------------------------
  9.   alias state_battle_start on_battle_start
  10.   def on_battle_start
  11.     state_battle_start
  12.     self.feature_objects.each {|obj|
  13.     self.add_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 重新整理
  17.   #--------------------------------------------------------------------------
  18.   def refresh
  19.     state_resist_set.each {|state_id| erase_state(state_id) }
  20.     @hp = [[@hp, mhp].min, 0].max
  21.     @mp = [[@mp, mmp].min, 0].max
  22.       if hp_rate <=  0.99                            #HP小于该比率 附加上状态
  23.          self.feature_objects.each {|obj|
  24.          self.add_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  25.        else
  26.          self.feature_objects.each {|obj|
  27.          self.remove_state($1.to_i) if obj.note =~ /<danger:\s*(\d+)>/}
  28.       end
  29.     @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 战斗结束时的处理
  33.   #--------------------------------------------------------------------------
  34.   alias state_on_battle_end on_battle_end
  35.   def on_battle_end
  36.     state_on_battle_end
  37.     self.feature_objects.each {|obj|
  38.     self.remove_state($1.to_i) if obj.note =~ /<被动状态:\s*(\d+)>/}
  39.   end
  40. end

点评

就在战斗结束时的处理中读取备注,然后移除。  发表于 2014-11-3 17:57
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
160 小时
注册时间
2012-12-2
帖子
15
3
 楼主| 发表于 2014-11-3 13:23:05 | 只看该作者
三途亚梦 发表于 2014-11-3 13:16
你说的这个危机时刻这个时刻应该是检测当前HP数值的……

VIP这个脚本还做不到这种效果。

当初就是参考这个的
检验法就是参照技能公式HP比率
if hp_rate <= 0.99 #定义危急状态生命比例(0.99方便测试用)

点评

可以在hp= 这个方法中执行判断。  发表于 2014-11-3 13:55
效果有出来了但是是战斗开始时HP小于一定比率才有附加我要的状态 不是在战斗中HP小于一定比率才附加  发表于 2014-11-3 13:36
你要是看懂这个帖子了应该就没有任何障碍才对啊  发表于 2014-11-3 13:24
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
2
发表于 2014-11-3 13:16:09 | 只看该作者
你说的这个危机时刻这个时刻应该是检测当前HP数值的……

VIP这个脚本还做不到这种效果。

关于这种技能你可以参考一下这个帖子
https://rpg.blue/thread-239136-1-1.html


评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-11 15:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表