#============================================================================== # ■ RGSS3 連続行動化アイテム・スキル Ver1.02 by 星潟 #------------------------------------------------------------------------------ # アイテム・スキル対象のこのターンの行動が # 指定回数分繰り返されるようになります。 # 使用者自身を対象とした場合や、行動済みの対象を指定した場合無効となります。 # また、使用条件を満たしていない場合、その行動は飛ばされます。 # (ポーションを一個しか所持していない状態で # ポーションを使うキャラクターに連続行動化を付与した場合は # ポーションを一度使って行動終了) # #============================================================================== # アイテム・スキルのメモ欄に記述 #------------------------------------------------------------------------------ # <連続行動:1> # # このアイテム・スキルの対象は # 既定の行動を全て行った後、同じ行動をもう一度繰り返します。 #============================================================================== module ADD_A_N WORD = "連続行動" #連続行動付与時のメッセージを表示するかどうかを決定します。 #trueで表示、falseで非表示 TEXT_FLAG = true #連続行動付与時のデフォルトメッセージを設定します。 #1つ目の%sに対象の名前、2つ目の%sに増加回数が入ります。 TEXT = "%sの行動回数が%s回増加した!" end class Game_ActionResult attr_accessor :added_action_number #-------------------------------------------------------------------------- # 命中フラグのクリア #-------------------------------------------------------------------------- alias clear_hit_flags_added_action clear_hit_flags def clear_hit_flags clear_hit_flags_added_action @added_action_number = 0 end end class Game_Battler < Game_BattlerBase attr_accessor :sub_action #-------------------------------------------------------------------------- # 使用効果の適用 #-------------------------------------------------------------------------- alias item_apply_add_actions item_apply def item_apply(user, item) item_apply_add_actions(user, item) return if $game_party.in_battle == false return if item.add_actions_number == 0 return if self.actions == nil or self.actions.empty? #行動内容が存在しない場合は処理しない #使用対象が自分の場合は処理しない return if user == self @result.added_action_number = item.add_actions_number @result.success = true @sub_action = @actions.clone if @sub_action == nil add_actions(item.add_actions_number, @sub_action) end #-------------------------------------------------------------------------- # 行動内容追加処理 #-------------------------------------------------------------------------- def add_actions(number, actions_array) return unless number > 0 number.times {actions_array.each {|action| @actions.push(action.clone)}} end #-------------------------------------------------------------------------- # 戦闘行動終了時の処理 #-------------------------------------------------------------------------- alias on_action_end_add_actions on_action_end def on_action_end on_action_end_add_actions @sub_action = nil end #-------------------------------------------------------------------------- # ターン終了処理 #-------------------------------------------------------------------------- alias on_turn_end_add_actions on_turn_end def on_turn_end on_turn_end_add_actions @sub_action = nil end #-------------------------------------------------------------------------- # 戦闘終了処理 #-------------------------------------------------------------------------- alias on_battle_end_add_actions on_battle_end def on_battle_end on_battle_end_add_actions @sub_action = nil end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 行動回数追加 #-------------------------------------------------------------------------- def add_actions_number return @add_a_n if @add_a_n != nil data = self.note.scan(/<#{ADD_A_N::WORD}[::](\S+)>/).flatten @add_a_n = data != nil && !data.empty? ? data[0].to_i : 0 return @add_a_n end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # 影響を受けたステータスの表示 #-------------------------------------------------------------------------- alias display_affected_status_add_actions display_affected_status def display_affected_status(target, item) display_affected_status_add_actions(target, item) #キャンセルメッセージを表示しない場合は飛ばす if target.result.added_action_number > 0 number = target.result.added_action_number target.result.added_action_number = 0 return if !ADD_A_N::TEXT_FLAG #キャンセルメッセージが存在しない場合は飛ばす add_text("") if line_number < max_line_number replace_text(sprintf(ADD_A_N::TEXT, target.name, number)) wait end end end