#============================================================================== # ■ RGSS3 戦闘開始前・終了後・勝利後能力変化特徴 Ver1.04 by 星潟 #------------------------------------------------------------------------------ # 戦闘開始前、もしくは戦闘終了後、戦闘勝利時に # HP・MP・TPの増減、ステート・強化・弱体の付与と解除を # 指定した確率で行う特徴を作成できるようになります。 # また、スクリプトを実行する事も出来ます。 # 工夫次第で大幅な表現拡張が望めます。 #------------------------------------------------------------------------------ # 全て、特徴を有する項目のメモ欄で指定します。 # 強化・弱体付与以外は、<キーワード:IDや数値等の値,確率>、 # もしくは確率を省略(100%扱い)し、<キーワード:IDや数値等の値>。 # 強化・弱体付与は、<キーワード:パラメータのID,ターン数,確率>、 # もしくは確率を省略(100%扱い)し、<キーワード:IDや数値等の値,ターン数>で # それぞれ設定します。 #------------------------------------------------------------------------------ # 設定例 #------------------------------------------------------------------------------ # <戦闘前HP固定回復:1000,50> # # 50%の確率で戦闘開始前にHPを1000回復。 #------------------------------------------------------------------------------ # <戦闘前HP割合回復:50,75> # # 75%の確率で戦闘開始前にHPを50%回復。 #------------------------------------------------------------------------------ # <戦闘前MP固定回復:500,25> # # 25%の確率で戦闘開始前にMPを500回復。 #------------------------------------------------------------------------------ # <戦闘前MP割合回復:100> # # 戦闘開始前にMPを100%回復。 #------------------------------------------------------------------------------ # <戦闘前TP固定回復:level> # # 戦闘開始前にTPをレベルの値分回復。 #------------------------------------------------------------------------------ # <戦闘前TP割合回復:hp_rate*100> # # 戦闘開始前にTPを現在HPの割合分の割合で回復。(最大TPを100より上に増やしている方向け) #------------------------------------------------------------------------------ # <戦闘前ステート付与:2,5> # # 5%の確率で戦闘開始前にステートID2を付与。 #------------------------------------------------------------------------------ # <戦闘前ステート解除:2,10> # # 10%の確率で戦闘開始前にステートID2を解除。 #------------------------------------------------------------------------------ # <戦闘前強化付与:0,20,75> # # 75%の確率で戦闘開始前に最大HP強化(20ターン)を付与。 #------------------------------------------------------------------------------ # <戦闘前強化解除:1,50> # # 50%の確率で戦闘開始前に最大MP強化を解除。 #------------------------------------------------------------------------------ # <戦闘前弱体付与:2,10,25> # # 25%の確率で戦闘開始前に攻撃力弱体(10ターン)を付与。 #------------------------------------------------------------------------------ # <戦闘前弱体解除:3> # # 戦闘開始前に防御力弱体を解除。 #------------------------------------------------------------------------------ # <戦闘前スクリプト:$game_troop.members.each{|a|a.hp=0}> # # 戦闘開始前に敵全体のHPを0にする。(テストモード向け) #------------------------------------------------------------------------------ # <戦闘後HP固定回復:1000,50> # # 50%の確率で戦闘終了後にHPを1000回復。 #------------------------------------------------------------------------------ # <戦闘後HP割合回復:50,75> # # 75%の確率で戦闘終了後にHPを50%回復。 #------------------------------------------------------------------------------ # <戦闘後MP固定回復:500,25> # # 25%の確率で戦闘終了後にMPを500回復。 #------------------------------------------------------------------------------ # <戦闘後MP割合回復:100> # # 戦闘終了後にMPを100%回復。 #------------------------------------------------------------------------------ # <戦闘後TP固定回復:25> # # 戦闘終了後にTPを25回復。 #------------------------------------------------------------------------------ # <戦闘後TP割合回復:50> # # 戦闘終了後にTPを50%回復。(最大TPを100より上に増やしている方向け) #------------------------------------------------------------------------------ # <戦闘後ステート付与:2,5> # # 5%の確率で戦闘終了後にステートID2を付与。 #------------------------------------------------------------------------------ # <戦闘後ステート解除:2,10> # # 10%の確率で戦闘終了後にステートID2を解除。 #------------------------------------------------------------------------------ # <戦闘後強化付与:0,20,75> # # 75%の確率で戦闘終了後に最大HP強化(20ターン)を付与。 #------------------------------------------------------------------------------ # <戦闘後強化解除:1,50> # # 50%の確率で戦闘終了後に最大MP強化を解除。 #------------------------------------------------------------------------------ # <戦闘後弱体付与:2,10,25> # # 25%の確率で戦闘終了後に攻撃力弱体(10ターン)を付与。 #------------------------------------------------------------------------------ # <戦闘後弱体解除:3> # # 戦闘終了後に防御力弱体を解除。 #------------------------------------------------------------------------------ # <戦闘後スクリプト:$game_party.all_members.each{|a|a.recover_all}> # # 戦闘終了後にパーティ全体を全回復させる。(テストモード向け) #------------------------------------------------------------------------------ # <勝利時HP固定回復:1000,50> # # 50%の確率で戦闘勝利時にHPを1000回復。 #------------------------------------------------------------------------------ # <勝利時HP割合回復:50,75> # # 75%の確率で戦闘勝利時にHPを50%回復。 #------------------------------------------------------------------------------ # <勝利時MP固定回復:500,25> # # 25%の確率で戦闘勝利時にMPを500回復。 #------------------------------------------------------------------------------ # <勝利時MP割合回復:100> # # 戦闘勝利時にMPを100%回復。 #------------------------------------------------------------------------------ # <勝利時TP固定回復:25> # # 戦闘勝利時にTPを25回復。 #------------------------------------------------------------------------------ # <勝利時TP割合回復:50> # # 戦闘勝利時にTPを50%回復。(最大TPを100より上に増やしている方向け) #------------------------------------------------------------------------------ # <勝利時ステート付与:2,5> # # 5%の確率で戦闘勝利時にステートID2を付与。 #------------------------------------------------------------------------------ # <勝利時ステート解除:2,10> # # 10%の確率で戦闘勝利時にステートID2を解除。 #------------------------------------------------------------------------------ # <勝利時強化付与:0,20,75> # # 75%の確率で戦闘勝利時に最大HP強化(20ターン)を付与。 #------------------------------------------------------------------------------ # <勝利時強化解除:1,50> # # 50%の確率で戦闘勝利時に最大MP強化を解除。 #------------------------------------------------------------------------------ # <勝利時弱体付与:2,10,25> # # 25%の確率で戦闘勝利時に攻撃力弱体(10ターン)を付与。 #------------------------------------------------------------------------------ # <勝利時弱体解除:3> # # 戦闘勝利時に防御力弱体を解除。 #------------------------------------------------------------------------------ # <勝利時スクリプト:$game_switches[1]=true> # # 戦闘勝利時にスイッチID1をONにする。 #------------------------------------------------------------------------------ # <勝利時スクリプト:$game_variables[2]+=1> # # 戦闘勝利時に変数ID2の値を+1する。 #------------------------------------------------------------------------------ # <勝利時スクリプト:$game_temp.reserve_common_event(10)> # # 戦闘勝利時にコモンイベントID10を起動する。 # # ※通常、コモンイベントIDは1つしか保存できないので # 複数のコモンイベントは起動できませんが # 上記の戦闘勝利時にスイッチや変数を変更する機能と併せる事で # 特定の装備を装備したまま一定回数勝利する事で # イベントを発生させる等の機能を実装できます。 #============================================================================== module BFE_RECOVERY #戦闘前の変化用キーワードを指定。 #配列を準備。ここは変更しないで下さい。 WORD1 = [] #戦闘前にHPを固定値回復する場合のキーワードを指定。 WORD1[0] = "戦闘前HP固定回復" #戦闘前にHPを割合回復する場合のキーワードを指定。 WORD1[1] = "戦闘前HP割合回復" #戦闘前にMPを固定値回復する場合のキーワードを指定。 WORD1[2] = "戦闘前MP固定回復" #戦闘前にMPを割合回復する場合のキーワードを指定。 WORD1[3] = "戦闘前MP割合回復" #戦闘前にTPを固定値回復する場合のキーワードを指定。 WORD1[4] = "戦闘前TP固定回復" #戦闘前にTPを割合回復する場合のキーワードを指定。 WORD1[5] = "戦闘前TP割合回復" #戦闘前にステートを付与する場合のキーワードを指定。 WORD1[6] = "戦闘前ステート付与" #戦闘前にステートを解除する場合のキーワードを指定。 WORD1[7] = "戦闘前ステート解除" #戦闘前に強化を付与する場合のキーワードを指定。 WORD1[8] = "戦闘前強化付与" #戦闘前に強化を解除する場合のキーワードを指定。 WORD1[9] = "戦闘前強化解除" #戦闘前に弱体を付与する場合のキーワードを指定。 WORD1[10] = "戦闘前弱体付与" #戦闘前に弱体を解除する場合のキーワードを指定。 WORD1[11] = "戦闘前弱体解除" #戦闘前にスクリプトを実行する場合のキーワードを指定。 WORD1[12] = "戦闘前スクリプト" #戦闘後の変化用キーワードを指定。 #配列を準備。ここは変更しないで下さい。 WORD2 = [] #戦闘後にHPを固定値回復する場合のキーワードを指定。 WORD2[0] = "戦闘後HP固定回復" #戦闘後にHPを割合回復する場合のキーワードを指定。 WORD2[1] = "戦闘後HP割合回復" #戦闘後にMPを固定値回復する場合のキーワードを指定。 WORD2[2] = "戦闘後MP固定回復" #戦闘後にMPを割合回復する場合のキーワードを指定。 WORD2[3] = "戦闘後MP割合回復" #戦闘後にTPを固定値回復する場合のキーワードを指定。 WORD2[4] = "戦闘後TP固定回復" #戦闘後にTPを割合回復する場合のキーワードを指定。 WORD2[5] = "戦闘後TP割合回復" #戦闘後にステートを付与する場合のキーワードを指定。 WORD2[6] = "戦闘後ステート付与" #戦闘後にステートを解除する場合のキーワードを指定。 WORD2[7] = "戦闘後ステート解除" #戦闘後に強化を付与する場合のキーワードを指定。 WORD2[8] = "戦闘後強化付与" #戦闘後に強化を解除する場合のキーワードを指定。 WORD2[9] = "戦闘後強化解除" #戦闘後に弱体を付与する場合のキーワードを指定。 WORD2[10] = "戦闘後弱体付与" #戦闘後に弱体を解除する場合のキーワードを指定。 WORD2[11] = "戦闘後弱体解除" #戦闘後にスクリプトを実行する場合のキーワードを指定。 WORD2[12] = "戦闘後スクリプト" #戦闘後の変化用キーワードを指定。 #配列を準備。ここは変更しないで下さい。 WORD3 = [] #勝利時にHPを固定値回復する場合のキーワードを指定。 WORD3[0] = "勝利時HP固定回復" #勝利時にHPを割合回復する場合のキーワードを指定。 WORD3[1] = "勝利時HP割合回復" #勝利時にMPを固定値回復する場合のキーワードを指定。 WORD3[2] = "勝利時MP固定回復" #勝利時にMPを割合回復する場合のキーワードを指定。 WORD3[3] = "勝利時MP割合回復" #勝利時にTPを固定値回復する場合のキーワードを指定。 WORD3[4] = "勝利時TP固定回復" #勝利時にTPを割合回復する場合のキーワードを指定。 WORD3[5] = "勝利時TP割合回復" #勝利時にステートを付与する場合のキーワードを指定。 WORD3[6] = "勝利時ステート付与" #勝利時にステートを解除する場合のキーワードを指定。 WORD3[7] = "勝利時ステート解除" #勝利時に強化を付与する場合のキーワードを指定。 WORD3[8] = "勝利時強化付与" #勝利時に強化を解除する場合のキーワードを指定。 WORD3[9] = "勝利時強化解除" #勝利時に弱体を付与する場合のキーワードを指定。 WORD3[10] = "勝利時弱体付与" #勝利時に弱体を解除する場合のキーワードを指定。 WORD3[11] = "勝利時弱体解除" #勝利時にスクリプトを実行する場合のキーワードを指定。 WORD3[12] = "勝利時スクリプト" #統合。変更不要。 WORDS = [WORD1,WORD2,WORD3] end class << BattleManager #-------------------------------------------------------------------------- # 戦闘終了 #-------------------------------------------------------------------------- alias battle_end_battle_start_recovery battle_end def battle_end(result) #戦闘に勝利した場合は勝利フラグをtrueにする。 $game_temp.battle_win = true if result == 0 #本来の処理を実行。 battle_end_battle_start_recovery(result) #勝利フラグをnilに戻す。 $game_temp.battle_win = nil end end class Game_Temp attr_accessor :battle_win end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # 戦闘開始処理 #-------------------------------------------------------------------------- alias on_battle_start_battle_start_recovery on_battle_start def on_battle_start #本来の処理を実行。 on_battle_start_battle_start_recovery #戦闘開始時の変化処理を実行。 battle_start_auto_recovery end #-------------------------------------------------------------------------- # 戦闘終了処理 #-------------------------------------------------------------------------- alias on_battle_end_battle_end_recovery on_battle_end def on_battle_end #本来の処理を実行。 on_battle_end_battle_end_recovery #戦闘終了時の変化処理を実行。 battle_end_auto_recovery end #-------------------------------------------------------------------------- # 戦闘開始時特徴処理 #-------------------------------------------------------------------------- def battle_start_auto_recovery #結果のクリア。 @result.clear #特徴別に戦闘開始時の変化処理を実行。 feature_objects.each {|f| battle_s_e_recovery(f, 0)} #結果のクリア。 @result.clear end #-------------------------------------------------------------------------- # 戦闘終了時特徴処理 #-------------------------------------------------------------------------- def battle_end_auto_recovery #結果のクリア。 @result.clear #特徴別に戦闘終了後の変化処理を実行。 feature_objects.each {|f| battle_s_e_recovery(f, 1)} #特徴別に戦闘勝利後の変化処理を実行。 feature_objects.each {|f| battle_s_e_recovery(f, 2)} if $game_temp.battle_win #結果のクリア。 @result.clear end #-------------------------------------------------------------------------- # 特徴別処理 #-------------------------------------------------------------------------- def battle_s_e_recovery(f_data, type) #タイプ判定 array = f_data.bfe_data_hash[type] #配列内のデータ別に計算。 array.each {|data| #タグデータを取得。 tag = data[:tag] #ID・確立等の配列を取得。 value = data[:value] #タグ別に確率の条件を満たした場合は処理を実行。 rate = value[value.size - 1] next if eval(rate) <= rand(100) case tag #HP固定値回復処理を実行。 when 0;self.hp += (eval(value[0])).to_i #HP割合回復処理を実行。 when 1;self.hp += (eval(value[0]) * self.mhp / 100).to_i #MP固定値回復処理を実行。 when 2;self.mp += (eval(value[0])).to_i #MP割合回復処理を実行。 when 3;self.mp += (eval(value[0]) * self.mmp / 100).to_i #TP固定値回復処理を実行。 when 4;self.tp += (eval(value[0])).to_i #TP割合回復処理を実行。 when 5;self.tp += (eval(value[0]) * self.max_tp / 100).to_i #ステート付与を実行。 when 6;add_state(eval(value[0])) #ステート解除を実行。 when 7;remove_state(eval(value[0])) #強化付与を実行。 when 8;add_buff(eval(value[0]), eval(value[1]).to_i) #強化解除を実行。 when 9;data_id = eval(value[0]);remove_buff(data_id) if @buffs[data_id] > 0 #弱体付与を実行。 when 10;add_debuff(eval(value[0]), eval(value[1]).to_i) #弱体解除を実行。 when 11;data_id = eval(value[0]);remove_buff(data_id) if @buffs[data_id] < 0 #スクリプトを実行。 when 12;eval(value[0]) end } end end class RPG::BaseItem #-------------------------------------------------------------------------- # 戦闘勝利後付与/解除特徴 #-------------------------------------------------------------------------- def bfe_data_hash #キャッシュが存在する場合はキャッシュを返す。 @bfe_data_hash ||= create_bfe_data_hash end #-------------------------------------------------------------------------- # 戦闘勝利後付与/解除特徴データを作成 #-------------------------------------------------------------------------- def create_bfe_data_hash #ハッシュを作成。 h = {0 => [],1 => [],2 => []} #メモ欄の行別に判定。 self.note.each_line {|l| #処理パターン別に判定。 13.times {|i| #処理パターン別にタグと配列数を取得。 case i when 8,10;ac = 3;as = 2 else ;ac = 2;as = 1 end #行内のデータを取得。 BFE_RECOVERY::WORDS.each_with_index {|words,index| if /<#{words[i]}[::](\S+)>/ =~ l #データを分解する。 a = $1.to_s.split(/\s*,\s*/) #valueの配列要素が1足りない場合は確率として"100"を加える。 a.push("100") if a.size == as next if a.size != ac #配列にハッシュを追加。 h[index] h[index].push({:tag => i,:value => a}) end }}} #ハッシュを返す。 h end end