#============================================================================== # ■ RGSS3 行動速度補正矯正アイテム・スキル Ver2.02 by 星潟 #------------------------------------------------------------------------------ # アイテム・スキル対象のこのターンの行動速度を矯正した上で # 行動順番を再度作成し直します。 # 使用者自身を対象とした場合や、行動済みの対象を指定した場合無効となります。 # アクターの入れ替えが行われた場合、そのアクターの行動速度補正はなくなります。 #============================================================================== # アイテム・スキルのメモ欄を使用します。 #============================================================================== # <行動補正矯正値:100000> # # この場合、対象の行動速度補正を+100000した上で行動順番を再作成します。 #------------------------------------------------------------------------------ # <行動補正矯正値:-2000,50> # # この場合、50%の確率で対象の行動速度補正を-2000した上で行動順番を再作成します。 #------------------------------------------------------------------------------ # <行動補正矯正値:a.agi,b.luk> # # この場合、相手の運と同じ確率で # 使用者の敏捷度の値分行動速度補正をプラスして行動順番を再作成します。 #============================================================================== # Ver1.01 行動不能時のエラー落ちを修正・余計な記述の削除 # Ver2.00 行動順常時敏捷依存との併用を想定し処理を変更。 # 効果発動率を設定できるように変更。 # スクリプトによる効果量計算を行えるように変更。 # Ver2.02 エラーになりうる状況への対策を行いました。 #============================================================================== module REMAKE_ACTION WORD = "行動補正矯正値" #行動補正矯正時のメッセージを表示するかどうかを決定します。 #trueで表示、falseで非表示 TEXT_FLAG = true #行動補正矯正時のデフォルトメッセージを設定します。 #このメッセージの前に対象の名前が入ります。 TEXT1 = "このターンの%sの行動速度が増加した!" #行動補正矯正時のデフォルトメッセージを設定します。 #このメッセージの前に対象の名前が入ります。 TEXT2 = "このターンの%sの行動速度が減少した!" end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 行動速度矯正データ #-------------------------------------------------------------------------- def add_actions_speed @add_a_s ||= add_actions_speed_make end #-------------------------------------------------------------------------- # 行動速度矯正データ作成 #-------------------------------------------------------------------------- def add_actions_speed_make a = (/<#{REMAKE_ACTION::WORD}[::](\S+)>/ =~ note ? $1.to_s : "0,0").split(/\s*,\s*/) case a.size when 1;[a[0],"100"] when 2;a else;["0","0"] end end end class Game_ActionResult attr_accessor :in_turn_speed_boost #-------------------------------------------------------------------------- # ステータス効果のクリア #-------------------------------------------------------------------------- alias clear_status_effects_in_turn_speed_boost clear_status_effects def clear_status_effects clear_status_effects_in_turn_speed_boost @in_turn_speed_boost = 0 end end module BattleManager #-------------------------------------------------------------------------- # 行動順序の再作成 #-------------------------------------------------------------------------- def self.remake_action_orders_instant @action_battlers.sort! {|a,b| b.speed - a.speed} end end class Game_Battler < Game_BattlerBase attr_accessor :in_turn_speed_boost #-------------------------------------------------------------------------- # 行動速度矯正データ #-------------------------------------------------------------------------- def in_turn_speed_boost @in_turn_speed_boost ||= 0 end #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_in_turn_speed_boost item_user_effect def item_user_effect(user, item) item_user_effect_in_turn_speed_boost(user, item) add_in_turn_speed_boost(user,item) end #-------------------------------------------------------------------------- # 行動速度の決定 #-------------------------------------------------------------------------- alias make_speed_in_turn_speed_boost make_speed def make_speed make_speed_in_turn_speed_boost @speed += in_turn_speed_boost end #-------------------------------------------------------------------------- # 行動速度補正値の付与 #-------------------------------------------------------------------------- def add_in_turn_speed_boost(user,item) return unless $game_party.in_battle return if user == self return unless current_action array = item.add_actions_speed a = user b = self return unless eval(array[1]) > rand(100) d = eval(array[0]) return if d == 0 @result.in_turn_speed_boost += d @in_turn_speed_boost ||= 0 @in_turn_speed_boost += d make_speed BattleManager.remake_action_orders_instant @result.success = true end #-------------------------------------------------------------------------- # 戦闘開始処理 #-------------------------------------------------------------------------- alias on_battle_start_in_turn_speed_boost on_battle_start def on_battle_start on_battle_start_in_turn_speed_boost @in_turn_speed_boost = 0 end #-------------------------------------------------------------------------- # 戦闘行動終了時の処理 #-------------------------------------------------------------------------- alias on_action_end_in_turn_speed_boost on_action_end def on_action_end on_action_end_in_turn_speed_boost @in_turn_speed_boost = 0 end #-------------------------------------------------------------------------- # ターン終了処理 #-------------------------------------------------------------------------- alias on_turn_end_in_turn_speed_boost on_turn_end def on_turn_end on_turn_end_in_turn_speed_boost @in_turn_speed_boost = 0 end #-------------------------------------------------------------------------- # 戦闘終了処理 #-------------------------------------------------------------------------- alias on_battle_end_in_turn_speed_boost on_battle_end def on_battle_end on_battle_end_in_turn_speed_boost @in_turn_speed_boost = 0 end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # アクターを加える #-------------------------------------------------------------------------- alias add_actor_in_turn_speed_boost add_actor def add_actor(actor_id) aa = @actors.clone add_actor_in_turn_speed_boost(actor_id) a = $game_actors[actor_id] a.in_turn_speed_boost = 0 if aa != @actors && a end #-------------------------------------------------------------------------- # アクターを外す #-------------------------------------------------------------------------- alias remove_actor_in_turn_speed_boost remove_actor def remove_actor(actor_id) aa = @actors.clone remove_actor_in_turn_speed_boost(actor_id) a = $game_actors[actor_id] a.in_turn_speed_boost = 0 if aa != @actors && a end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # 影響を受けたステータスの表示 #-------------------------------------------------------------------------- alias display_affected_status_remake_action_orders display_affected_status def display_affected_status(target, item) display_affected_status_remake_action_orders(target, item) #キャンセルメッセージを表示しない場合は飛ばす return if !REMAKE_ACTION::TEXT_FLAG #矯正対象に含まれていない場合は飛ばす a = target.result.in_turn_speed_boost return if a == 0 add_text("") if line_number < max_line_number replace_text(sprintf(a > 0 ? REMAKE_ACTION::TEXT1 : REMAKE_ACTION::TEXT2, target.name)) wait end end