#============================================================================== # ■ RGSS2 ステート付与/解除時 HP・MP回復ステート&パッシブスキル #------------------------------------------------------------------------------ # 特定のステートが付与/解除された際にHP、MPもしくはその両方を回復する # ステート・パッシブスキルを作成する事が出来ます。 # # 設定例 #(全て、ステートに記入します。 # 最初の数字が処理用の数字の指定。 # 次のdもしくは%がそのままの数字を足すか、最大値の%分回復するかの指定。 # 最後の数字が、ステートもしくはスキルのIDです。0の場合無条件となります) # # <付与時HP回復ST:25,d,0> # # このステートが付与された時、無条件でHPを25回復します。 # # <付与時HP回復ST:25,%,2> # # このステートが付与された時、ステートID2が付与されていたら、HPを25%回復します。 # # <付与時MP回復ST:50,d,0> # # このステートが付与された時、無条件でMPを50回復します。 # # <付与時MP回復ST:50,%,4> # # このステートが付与された時、ステートID4が付与されていたら、MPを50%回復します。 # # <付与時HP回復PS:75,d,6> # # このステートが付与された時、スキルID6を習得していたら、HPを75回復します。 # # <付与時HP回復PS:75,%,0> # # このステートが付与された時、無条件でHPを75%回復します。 # # <付与時MP回復PS:100,d,8> # # このステートが付与された時、スキルID8を習得していたら、MPを100回復します。 # # <付与時MP回復PS:100,%,0> # # このステートが付与された時、無条件でHPを100%回復します。 # # <解除時HP回復ST:25,d,0> # # このステートが解除された時、無条件でHPを25回復します。 # # <解除時HP回復ST:25,%,2> # # このステートが解除された時、ステートID2が付与されていたら、HPを25%回復します。 # # <解除時MP回復ST:50,d,0> # # このステートが解除された時、無条件でMPを50回復します。 # # <解除時MP回復ST:50,%,4> # # このステートが解除された時、ステートID4が付与されていたら、MPを50%回復します。 # # <解除時HP回復PS:75,d,6> # # このステートが解除された時、スキルID6を習得していたら、HPを75回復します。 # # <解除時HP回復PS:75,%,0> # # このステートが解除された時、無条件でHPを75%回復します。 # # <解除時MP回復PS:100,d,8> # # このステートが解除された時、スキルID8を習得していたら、MPを100回復します。 # # <解除時MP回復PS:100,%,0> # # このステートが解除された時、無条件でHPを100%回復します。 # #============================================================================== module HMPR #戦闘終了時にステートが解除されてもHP・MP回復処理を行うか?(true→行う false→行わない) BATTLE_E = false #非戦闘時もステート付与・解除による回復処理を行うか?(true→行う false→行わない) N_BATTLE = true #各設定用キーワードを指定します。(特に変更不要) #付与時用 #ステートを条件にHP回復 ADD_HPR_ST = "付与時HP回復ST" #ステートを条件にMP回復 ADD_MPR_ST = "付与時MP回復ST" #スキル習得を条件にHP回復 ADD_HPR_PS = "付与時HP回復PS" #スキル習得を条件にMP回復 ADD_MPR_PS = "付与時MP回復PS" #解除時用 #ステートを条件にHP回復 REM_HPR_ST = "解除時HP回復ST" #ステートを条件にMP回復 REM_MPR_ST = "解除時MP回復ST" #スキル習得を条件にHP回復 REM_HPR_PS = "解除時HP回復PS" #スキル習得を条件にMP回復 REM_MPR_PS = "解除時MP回復PS" end class Game_Battler #-------------------------------------------------------------------------- # ● ステートの付加 # state_id : ステート ID #-------------------------------------------------------------------------- alias add_state_hmpr add_state def add_state(state_id) return add_state_hmpr(state_id) if HMPR::N_BATTLE == false && $game_temp.in_battle == false state = $data_states[state_id] # ステートデータを取得 return if state == nil # データが無効? return if state_ignore?(state_id) # 無視するべきステート? return if state?(state_id) # このステートが付加されていない? add_state_hmpr(state_id) $data_states[state_id].note.each_line { |line| memo = line.scan(/<#{HMPR::ADD_HPR_ST}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or state?(memo[2].to_i) if memo[1].to_s == "%" self.hp += self.maxhp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.hp += memo[0].to_i end end end memo = line.scan(/<#{HMPR::ADD_MPR_ST}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or state?(memo[2].to_i) if memo[1].to_s == "%" self.mp += self.maxmp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.mp += memo[0].to_i end end end next unless self.actor? memo = line.scan(/<#{HMPR::ADD_HPR_PS}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or skills.include?($data_skills[memo[2].to_i]) if memo[1].to_s == "%" self.hp += self.maxhp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.hp += memo[0].to_i end end end memo = line.scan(/<#{HMPR::ADD_MPR_PS}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or skills.include?($data_skills[memo[2].to_i]) if memo[1].to_s == "%" self.mp += self.maxmp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.mp += memo[0].to_i end end end } end #-------------------------------------------------------------------------- # ● ステートの解除 # state_id : ステート ID #-------------------------------------------------------------------------- alias remove_state_hmpr remove_state def remove_state(state_id) $be_hmpr_execute = false if $be_hmpr_execute == nil return remove_state_hmpr(state_id) if HMPR::N_BATTLE == false && $game_temp.in_battle == false or $be_hmpr_execute == true return unless state?(state_id) # このステートが付加されていない? remove_state_hmpr(state_id) $data_states[state_id].note.each_line { |line| memo = line.scan(/<#{HMPR::REM_HPR_ST}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or state?(memo[2].to_i) if memo[1].to_s == "%" self.hp += self.maxhp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.hp += memo[0].to_i end end end memo = line.scan(/<#{HMPR::REM_MPR_ST}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or state?(memo[2].to_i) if memo[1].to_s == "%" self.mp += self.maxmp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.mp += memo[0].to_i end end end next unless self.actor? memo = line.scan(/<#{HMPR::REM_HPR_PS}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or skills.include?($data_skills[memo[2].to_i]) if memo[1].to_s == "%" self.hp += self.maxhp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.hp += memo[0].to_i end end end memo = line.scan(/<#{HMPR::REM_MPR_PS}[::](\S+),(\S+),(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? if memo[2].to_i == 0 or skills.include?($data_skills[memo[2].to_i]) if memo[1].to_s == "%" self.mp += self.maxmp * memo[0].to_i / 100 elsif memo[1].to_s == "d" self.mp += memo[0].to_i end end end } end #-------------------------------------------------------------------------- # ● 戦闘用ステートの解除 (戦闘終了時に呼び出し) #-------------------------------------------------------------------------- alias remove_states_battle_hmpr remove_states_battle def remove_states_battle $be_hmpr_execute = true if HMPR::BATTLE_E == false remove_states_battle_hmpr $be_hmpr_execute = false end end