#============================================================================== # ■ RGSS3 ステート・強化・弱体付与/解除時 HP・MP・TP回復特徴 Ver1.02 #------------------------------------------------------------------------------ # 特定のステート・強化・弱体が付与/解除された際に # HP、MPもしくはその両方を回復する特徴を作成する事が出来ます。 # # ステート設定例 #(ステートのメモ欄に記入します。 # 最初の数字が処理用の数字の指定。 # 次のdもしくは%がそのままの数字を足すか、最大値の%分回復するかの指定) #------------------------------------------------------------------------------ # <付与時HP回復:25,d> # # このステートが付与された時 # HPを25回復します。 #------------------------------------------------------------------------------ # <付与時HP回復:25,%> # # このステートが付与された時 # HPを25%回復します。 #------------------------------------------------------------------------------ # <付与時MP回復:50,d> # # このステートが付与された時 # MPを50回復します。 #------------------------------------------------------------------------------ # <付与時MP回復:25,%> # # このステートが付与された時 # MPを25%回復します。 #------------------------------------------------------------------------------ # <付与時TP回復:50,d> # # このステートが付与された時 # TPを50回復します。 #------------------------------------------------------------------------------ # <付与時TP回復:25,%> # # このステートが付与された時 # TPを25%回復します。 #------------------------------------------------------------------------------ # <解除時HP回復:25,d> # # このステートが解除された時 # 無条件でHPを25回復します。 #------------------------------------------------------------------------------ # <解除時HP回復:25,%> # # このステートが解除された時 # HPを25%回復します。 #------------------------------------------------------------------------------ # <解除時MP回復:50,d> # # このステートが解除された時 # MPを50回復します。 #------------------------------------------------------------------------------ # <解除時MP回復:50,%> # # このステートが解除された時 # MPを50%回復します。 #------------------------------------------------------------------------------ # <解除時TP回復:50,d> # # このステートが解除された時 # TPを50回復します。 #------------------------------------------------------------------------------ # <解除時TP回復:50,%> # # このステートが解除された時 # TPを50%回復します。 #============================================================================== # 特徴全般設定例 #(特徴を有する項目のメモ欄に記入します。 # 最初の数字が、対象となるステートID(0の場合無条件)、 # 次の数字が処理用の数字の指定、 # 次のdもしくは%がそのままの数字を足すか、最大値の%分回復するかの指定です) #------------------------------------------------------------------------------ # <付与時HP回復特徴:2,25,d> # # ステートID2が付与された時 # HPを25回復します。 #------------------------------------------------------------------------------ # <付与時HP回復特徴:3,25,%> # # ステートID3が付与された時 # TPを25%回復します。 #------------------------------------------------------------------------------ # <付与時MP回復特徴:4,50,d> # # ステートID4が付与された時 # MPを50回復します。 #------------------------------------------------------------------------------ # <付与時MP回復特徴:5,25,%> # # ステートID5が付与された時 # TPを25%回復します。 #------------------------------------------------------------------------------ # <付与時TP回復特徴:6,50,d> # # ステートID6が付与された時 # TPを50回復します。 #------------------------------------------------------------------------------ # <付与時TP回復特徴:7,25,%> # # ステートID7が付与された時 # TPを25%回復します。 #------------------------------------------------------------------------------ # <解除時HP回復特徴:2,25,d> # # ステートID2が解除された時 # 無条件でHPを25回復します。 #------------------------------------------------------------------------------ # <解除時HP回復特徴:3,25,%> # # ステートID3が解除された時 # HPを25%回復します。 #------------------------------------------------------------------------------ # <解除時MP回復特徴:4,50,d> # # ステートID4が解除された時 # MPを50回復します。 #------------------------------------------------------------------------------ # <解除時MP回復特徴:5,50,%> # # ステートID5が解除された時 # MPを50%回復します。 #------------------------------------------------------------------------------ # <解除時TP回復特徴:6,50,d> # # ステートID6が解除された時 # TPを50回復します。 #------------------------------------------------------------------------------ # <解除時TP回復特徴:7,50,%> # # ステートID7が解除された時 # TPを50%回復します。 #============================================================================== module HMTPR Words1 = [] Words2 = [] #戦闘終了時にステートが解除されてもHP・MP回復処理を行うか?(true→行う false→行わない) BATTLE_E = true #非戦闘時もステート付与・解除による回復処理を行うか?(true→行う false→行わない) N_BATTLE = true #パッシブスキルを有効にするか?(true→有効 false→無効) #これがtrueの場合、このスクリプトによる効果について #所持スキルにも特徴のメモ欄と同様の設定が可能になります。 PASSIVE = true #各設定用キーワードを指定します。(特に変更不要) #付与時用 #付与時HP回復フラグ #ステート付与を条件にHP回復 Words1[0] = "付与時HP回復" #ステート付与を条件にMP回復 Words1[1] = "付与時MP回復" #ステート付与を条件にTP回復 Words1[2] = "付与時TP回復" #ステート付与を条件にHP回復する特徴 Words2[0] = "付与時HP回復特徴" #ステート付与を条件にMP回復する特徴 Words2[1] = "付与時MP回復特徴" #ステート付与を条件にTP回復する特徴 Words2[2] = "付与時TP回復特徴" #解除時用 #解除時HP回復フラグ #ステート解除を条件にHP回復 Words1[3] = "解除時HP回復" #ステート解除を条件にMP回復 Words1[4] = "解除時MP回復" #ステート解除を条件にTP回復 Words1[5] = "解除時TP回復" #ステート解除を条件にHP回復する特徴 Words2[3] = "解除時HP回復特徴" #ステート解除を条件にMP回復する特徴 Words2[4] = "解除時MP回復特徴" #ステート解除を条件にTP回復する特徴 Words2[5] = "解除時TP回復特徴" #最大HP強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 MHP_BUF = [25,26] MHP_DBF = [27,28] #最大MP強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 MMP_BUF = [25,26] MMP_DBF = [27,28] #攻撃強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 ATK_BUF = [25,26] ATK_DBF = [27,28] #防御強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 DEF_BUF = [25,26] DEF_DBF = [27,28] #魔力強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 MAT_BUF = [25,26] MAT_DBF = [27,28] #魔防強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 MDF_BUF = [25,26] MDF_DBF = [27,28] #敏捷強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 AGI_BUF = [25,26] AGI_DBF = [27,28] #運強化/弱体の付与/解除の際に #特定のステートIDのデータに読み替えて処理を行います。 #0を指定した場合、処理を行いません。 LUK_BUF = [25,26] LUK_DBF = [27,28] end class Game_ActionResult attr_accessor :hmtpr_hp attr_accessor :hmtpr_mp attr_accessor :hmtpr_tp #-------------------------------------------------------------------------- # ダメージ値のクリア #-------------------------------------------------------------------------- alias clear_damage_values_hmtpr clear_damage_values def clear_damage_values clear_damage_values_hmtpr @hmtpr_hp = 0 @hmtpr_mp = 0 @hmtpr_tp = 0 end #-------------------------------------------------------------------------- # ステート回復効果適用判定 #-------------------------------------------------------------------------- def hmtpr_changed? !(@hmtpr_hp == 0 && @hmtpr_mp == 0 && @hmtpr_tp == 0) end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # 使用効果のテスト #-------------------------------------------------------------------------- alias item_effect_test_hmtpr item_effect_test def item_effect_test(user, item, effect) return true if item_effect_test_hmtpr(user, item, effect) case effect.code when EFFECT_ADD_STATE ar_common_state_all_test(effect.data_id,true) when EFFECT_REMOVE_STATE ar_common_state_all_test(effect.data_id,false) when EFFECT_ADD_BUFF state_id = get_hmtpr_dbuff(effect.data_id,true,true) return if !$data_states[state_id] ar_common_state_all_test(effect.data_id,true,true) when EFFECT_ADD_DEBUFF state_id = get_hmtpr_dbuff(effect.data_id,false,true) return if !$data_states[state_id] ar_common_state_all_test(effect.data_id,false,true) else false end end def get_hmtpr_dbuff(dbuff_id,bd,type) t = type ? 0 : 1 case dbuff_id when 0;[bd ? HMTPR::MHP_BUF : HMTPR::MHP_DBF][t] when 1;[bd ? HMTPR::MMP_BUF : HMTPR::MMP_DBF][t] when 2;[bd ? HMTPR::ATK_BUF : HMTPR::ATK_DBF][t] when 3;[bd ? HMTPR::DEF_BUF : HMTPR::DEF_DBF][t] when 4;[bd ? HMTPR::MAT_BUF : HMTPR::MAT_DBF][t] when 5;[bd ? HMTPR::MDF_BUF : HMTPR::MDF_DBF][t] when 6;[bd ? HMTPR::AGI_BUF : HMTPR::AGI_DBF][t] when 7;[bd ? HMTPR::LUK_BUF : HMTPR::LUK_DBF][t] end end #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_hmtpr item_user_effect def item_user_effect(user, item) item_user_effect_hmtpr(user, item) if alive? && !$game_party.in_battle self.hp -= @result.hmtpr_hp self.mp -= @result.hmtpr_mp self.tp -= @result.hmtpr_tp end end #-------------------------------------------------------------------------- # 行動結果の呼びもどし #-------------------------------------------------------------------------- def result_recall_hmtpr(r) @result = r end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def hmtpr_ra_seal_flag (HMTPR::N_BATTLE == false && $game_party.in_battle == false) or (@be_hmtpr_execute && !HMTPR::BATTLE_E) end #-------------------------------------------------------------------------- # ステートの付加 #-------------------------------------------------------------------------- alias add_state_hmtpr add_state def add_state(state_id) add_state_hmtpr(state_id) return if hmtpr_ra_seal_flag or !@be_hmtpr_execute && !@result.added_states.include?(state_id) ar_common_state_all(state_id,true) end #-------------------------------------------------------------------------- # ステートの解除 #-------------------------------------------------------------------------- alias remove_state_hmtpr remove_state def remove_state(state_id) f = state?(state_id) remove_state_hmtpr(state_id) return if hmtpr_ra_seal_flag or !@be_hmtpr_execute && !@result.removed_states.include?(state_id) ar_common_state_all(state_id,false) end #-------------------------------------------------------------------------- # 戦闘終了処理 #-------------------------------------------------------------------------- alias on_battle_end_be_hmtpr_execute on_battle_end def on_battle_end @be_hmtpr_execute = true on_battle_end_be_hmtpr_execute @be_hmtpr_execute = nil r = @result.clone @result.clear @result.hp_damage = r.hmtpr_hp @result.mp_damage = r.hmtpr_mp @result.tp_damage = r.hmtpr_tp self.hp -= r.hmtpr_hp if r.hmtpr_hp != 0 self.mp -= r.hmtpr_mp if r.hmtpr_mp != 0 self.tp -= r.hmtpr_tp if r.hmtpr_tp != 0 self.result_recall_hmtpr(r) end #-------------------------------------------------------------------------- # 能力強化 #-------------------------------------------------------------------------- alias add_buff_hmtpr add_buff def add_buff(param_id, turns) add_buff_hmtpr(param_id, turns) return if hmtpr_ra_seal_flag or !@be_hmtpr_execute && !@result.added_buffs.include?(param_id) case param_id when 0;state_id = HMTPR::MHP_BUF[0] when 1;state_id = HMTPR::MMP_BUF[0] when 2;state_id = HMTPR::ATK_BUF[0] when 3;state_id = HMTPR::DEF_BUF[0] when 4;state_id = HMTPR::MAT_BUF[0] when 5;state_id = HMTPR::MDF_BUF[0] when 6;state_id = HMTPR::AGI_BUF[0] when 7;state_id = HMTPR::LUK_BUF[0] end return if !$data_states[state_id] ar_common_state_all(state_id,true) end #-------------------------------------------------------------------------- # 能力弱体 #-------------------------------------------------------------------------- alias add_debuff_hmtpr add_debuff def add_debuff(param_id, turns) l = @buffs[param_id] add_debuff_hmtpr(param_id, turns) return if hmtpr_ra_seal_flag or !@be_hmtpr_execute && !@result.added_debuffs.include?(param_id) case param_id when 0;state_id = HMTPR::MHP_DBF[0] when 1;state_id = HMTPR::MMP_DBF[0] when 2;state_id = HMTPR::ATK_DBF[0] when 3;state_id = HMTPR::DEF_DBF[0] when 4;state_id = HMTPR::MAT_DBF[0] when 5;state_id = HMTPR::MDF_DBF[0] when 6;state_id = HMTPR::AGI_DBF[0] when 7;state_id = HMTPR::LUK_DBF[0] end return if !$data_states[state_id] ar_common_state_all(state_id,true) end #-------------------------------------------------------------------------- # 能力強化/弱体の消去 #-------------------------------------------------------------------------- alias erase_buff_hmtpr erase_buff def erase_buff(param_id) f1 = buff?(param_id) ? 0 : (debuff?(param_id) ? 1 : 2) f2 = @buffs[param_id] erase_buff_hmtpr(param_id) return if hmtpr_ra_seal_flag or !@be_hmtpr_execute && (f1 == 2 or f2 == @buffs[param_id]) case param_id when 0;state_id = (f1 == 0 ? HMTPR::MHP_BUF : HMTPR::MHP_DBF)[1] when 1;state_id = (f1 == 0 ? HMTPR::MMP_BUF : HMTPR::MMP_DBF)[1] when 2;state_id = (f1 == 0 ? HMTPR::ATK_BUF : HMTPR::ATK_DBF)[1] when 3;state_id = (f1 == 0 ? HMTPR::DEF_BUF : HMTPR::DEF_DBF)[1] when 4;state_id = (f1 == 0 ? HMTPR::MAT_BUF : HMTPR::MAT_DBF)[1] when 5;state_id = (f1 == 0 ? HMTPR::MDF_BUF : HMTPR::MDF_DBF)[1] when 6;state_id = (f1 == 0 ? HMTPR::AGI_BUF : HMTPR::AGI_DBF)[1] when 7;state_id = (f1 == 0 ? HMTPR::LUK_BUF : HMTPR::LUK_DBF)[1] end return if !$data_states[state_id] ar_common_state_all(state_id,false) end #-------------------------------------------------------------------------- # 付与/解除効果用配列の準備 #-------------------------------------------------------------------------- def hmtpr_extra_data(state_id,i) ar = [] (feature_objects + (HMTPR::PASSIVE && self.actor? ? skills : [])).select {|fs| fs.hmtpr_extra_data_f[6]}.each {|f| f.hmtpr_extra_data_f[i].each {|a| ar.push(a) if a[2] == 0 or a[2] == state_id}} ar end #-------------------------------------------------------------------------- # 付与/解除時の回復効果一括処理 #-------------------------------------------------------------------------- def ar_common_state_all(state_id,type) ar_common_state_hpr(state_id,type) ar_common_state_mpr(state_id,type) ar_common_state_tpr(state_id,type) end #-------------------------------------------------------------------------- # 付与/解除時の回復効果一括処理テスト #-------------------------------------------------------------------------- def ar_common_state_all_test(state_id,type) return false if !state?(state_id) h = ar_common_state_hpr_test(state_id,type) m = ar_common_state_mpr_test(state_id,type) t = ar_common_state_tpr_test(state_id,type) if h != 0 f = h > 0 ? self.mhp - self.hp > 0 : self.hp > 0 return true if f end if m != 0 f = h > 0 ? self.mmp - self.mp > 0 : self.mp > 0 return true if f end if t != 0 f = h > 0 ? self.max_tp - self.tp > 0 : self.tp > 0 return true if f end false end #-------------------------------------------------------------------------- # 付与/解除時のHP回復効果 #-------------------------------------------------------------------------- def ar_common_state_hpr(state_id,type) ar_common_state_array(state_id,type ? 0 : 3).each {|a| case a[1] when "%";@result.hmtpr_hp -= self.mhp * eval(a[0]) / 100 when "d";@result.hmtpr_hp -= eval(a[0]) end} end #-------------------------------------------------------------------------- # 付与/解除時のMP回復効果 #-------------------------------------------------------------------------- def ar_common_state_mpr(state_id,type) ar_common_state_array(state_id,type ? 1 : 4).each {|a| case a[1] when "%";@result.hmtpr_mp -= self.mmp * eval(a[0]) / 100 when "d";@result.hmtpr_mp -= eval(a[0]) end} end #-------------------------------------------------------------------------- # 付与/解除時のTP回復効果 #-------------------------------------------------------------------------- def ar_common_state_tpr(state_id,type) ar_common_state_array(state_id,type ? 2 : 5).each {|a| case a[1] when "%";@result.hmtpr_tp -= (self.max_tp * eval(a[0]) / 100).to_i when "d";@result.hmtpr_tp -= eval(a[0]) end} end #-------------------------------------------------------------------------- # 付与/解除時のHP回復効果テスト #-------------------------------------------------------------------------- def ar_common_state_hpr_test(state_id,type) ar_common_state_array(state_id,type ? 0 : 3).inject(0) {|r,a| case a[1] when "%";r += self.mhp * eval(a[0]) / 100 when "d";r += eval(a[0]) end} end #-------------------------------------------------------------------------- # 付与/解除時のMP回復効果テスト #-------------------------------------------------------------------------- def ar_common_state_mpr_test(state_id,type) ar_common_state_array(state_id,type ? 1 : 4).inject(0) {|r,a| case a[1] when "%";r += self.mmp * eval(a[0]) / 100 when "d";r += eval(a[0]) end} end #-------------------------------------------------------------------------- # 付与/解除時のTP回復効果テスト #-------------------------------------------------------------------------- def ar_common_state_tpr_test(state_id,type) ar_common_state_array(state_id,type ? 2 : 5).inject(0) {|r,a| case a[1] when "%";r += (self.max_tp * eval(a[0]) / 100).to_i when "d";r += eval(a[0]) end} end #-------------------------------------------------------------------------- # 付与/解除時のHP回復効果 #-------------------------------------------------------------------------- def ar_common_state_array(state_id,i) $data_states[state_id].hmtpr_extra_data[i] + hmtpr_extra_data(state_id,i) end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # 影響を受けたステータスの表示 #-------------------------------------------------------------------------- alias display_affected_status_hmtpr_changed display_affected_status def display_affected_status(target, item) display_affected_status_hmtpr_changed(target, item) return if !(target.alive? && target.result.hmtpr_changed?) clear f = $game_party.in_battle r = target.result.clone target.result.clear target.result.hp_damage = r.hmtpr_hp target.result.mp_damage = r.hmtpr_mp target.result.tp_damage = r.hmtpr_tp if r.hmtpr_hp != 0 target.hp -= r.hmtpr_hp SceneManager.scene.refresh_status if f display_hp_damage(target, item) end if r.hmtpr_mp != 0 target.mp -= r.hmtpr_mp SceneManager.scene.refresh_status if f display_mp_damage(target, item) end if r.hmtpr_tp != 0 target.tp -= r.hmtpr_tp SceneManager.scene.refresh_status if f display_tp_damage(target, item) end display_affected_status(target, item) target.result_recall_hmtpr(r) clear end end class RPG::State < RPG::BaseItem #-------------------------------------------------------------------------- # 回復特徴データ #-------------------------------------------------------------------------- def hmtpr_extra_data @hmtpr_extra_data ||= create_hmtpr_extra_data end #-------------------------------------------------------------------------- # 回復特徴データの作成 #-------------------------------------------------------------------------- def create_hmtpr_extra_data h = {} 6.times {|i| h[i] = [] note.each_line {|l| h[i].push([$1.to_s,$2.to_s]) if /<#{HMTPR::Words1[i]}[::](\S+),(\S+)>/ =~ l}} h end end class RPG::BaseItem #-------------------------------------------------------------------------- # 回復特徴データの作成 #-------------------------------------------------------------------------- def hmtpr_extra_data_f @hmtpr_extra_data_f ||= create_hmtpr_extra_data_f end #-------------------------------------------------------------------------- # 回復特徴データの作成 #-------------------------------------------------------------------------- def create_hmtpr_extra_data_f h = {} 6.times {|i| h[i] = [] note.each_line {|l| h[i].push([$2.to_s,$3.to_s,$1.to_i]) if /<#{HMTPR::Words2[i]}[::](\d+),(\S+),(\S+)>/ =~ l}} h[6] = h.values.any? {|a| !a.empty?} h end end