#============================================================================== # ■ RGSS3 ターンカット Ver2.00 by 星潟 #------------------------------------------------------------------------------ # 特定のスキルやアイテム使用時、敵の行動を指定ターン数停止させます。 # スキル・アイテムの効果対象に関わらず、停止効果は敵が対象になります。 # また、この状態の際、ターン経過や行動後の処理を行うか否かも選択できます。 # # スキル設定例(メモ欄) # <ターンカット:2> # このスキル使用後、使用したターンを含む敵全体の行動を停止。 #============================================================================== module TurnCut #ターンカット設定用ワード Word = "ターンカット" #ターンカット状態の場合、戦闘ターン数の増加や #ステート・強化・弱体の持続ターン数減少やスリップダメージも消滅させるか否か #trueで消滅、falseで増加 #(戦闘ターン数は敵・味方どちらが止まっても、設定がtrueであれば停止する) Turn = true #効果発動時メッセージ TurnCut1 = "%sは時の流れを歪めた!!" #敵停止ターン数表示メッセージ TurnCut2 = "敵は%sターンの間、行動を封じられる!!" #味方停止ターン数表示メッセージ TurnCut3 = "味方は%sターンの間、行動を封じられる!!" #敵停止ターン数表示メッセージ TurnCut4 = "敵の時間が動き出した!" #味方停止ターン数表示メッセージ TurnCut5 = "味方の時間が動き出した!" end class Game_Unit #-------------------------------------------------------------------------- # 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :turn_cut # ターンカット #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_turncut initialize def initialize initialize_turncut @turn_cut = 0 end #-------------------------------------------------------------------------- # ターンカット適用 #-------------------------------------------------------------------------- def turn_cut_apply(data) @turn_cut = data members.each {|i| i.clear_actions} data end end class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # ターンの増加 #-------------------------------------------------------------------------- alias increase_turn_turncut increase_turn def increase_turn return if TurnCut::Turn && (@turn_cut > 0 or $game_party.turn_cut > 0) increase_turn_turncut end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # 戦闘時コマンド入力可能判定 #-------------------------------------------------------------------------- alias inputable_turncut? inputable? def inputable? return false if @turn_cut > 0 inputable_turncut? end end class Game_BattlerBase #-------------------------------------------------------------------------- # 行動可能判定 #-------------------------------------------------------------------------- alias movable_turncut? movable? def movable? return false if friends_unit.turn_cut > 0 movable_turncut? end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # 戦闘行動終了時の処理 #-------------------------------------------------------------------------- alias on_action_end_turncut on_action_end def on_action_end return @result.clear if turn_cut_turn? on_action_end_turncut end #-------------------------------------------------------------------------- # ターン終了処理 #-------------------------------------------------------------------------- alias on_turn_end_turncut on_turn_end def on_turn_end return @result.clear if turn_cut_turn? on_turn_end_turncut end #-------------------------------------------------------------------------- # ターンカット処理 #-------------------------------------------------------------------------- def turncut_execute(item) t = eval(item.turn_cut) return [] unless t > 0 opponents_unit.turn_cut_apply(t) [t,self] end #-------------------------------------------------------------------------- # ターンカットによる行動阻害判定 #-------------------------------------------------------------------------- def turn_cut_turn? TurnCut::Turn && friends_unit.turn_cut > 0 end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # 戦闘開始 #-------------------------------------------------------------------------- alias battle_start_turncut battle_start def battle_start $game_party.turn_cut = 0 $game_troop.turn_cut = 0 battle_start_turncut end #-------------------------------------------------------------------------- # ターン開始 #-------------------------------------------------------------------------- alias turn_start_turncut turn_start def turn_start m = [] m += $game_party.members if $game_party.turn_cut > 0 m += $game_troop.members if $game_troop.turn_cut > 0 m.each {|i| i.clear_actions} turn_start_turncut end #-------------------------------------------------------------------------- # ターン終了 #-------------------------------------------------------------------------- alias turn_end_turncut turn_end def turn_end if $game_party.turn_cut > 0 $game_party.turn_cut -= 1 @log_window.display_turn_cut_end(true) if $game_party.turn_cut <= 0 end if $game_troop.turn_cut > 0 $game_troop.turn_cut -= 1 @log_window.display_turn_cut_end(false) if $game_troop.turn_cut <= 0 end turn_end_turncut end #-------------------------------------------------------------------------- # スキル/アイテムの使用 #-------------------------------------------------------------------------- alias use_item_turncut use_item def use_item s = @subject i = @subject.current_action.item use_item_turncut t = s.turncut_execute(i) unless t.empty? @log_window.clear @log_window.display_turncut(t) end end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ターンカットの表示 #-------------------------------------------------------------------------- def display_turncut(array) return unless array[0] > 0 s = array[1] add_text(sprintf(TurnCut::TurnCut1, s.name)) wait add_text(sprintf(s.actor? ? TurnCut::TurnCut2 : TurnCut::TurnCut3, array[0])) wait end #-------------------------------------------------------------------------- # ターンカットの終了 #-------------------------------------------------------------------------- def display_turn_cut_end(type) add_text(type ? TurnCut::TurnCut5 : TurnCut::TurnCut4) wait end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 効果前提ステート #-------------------------------------------------------------------------- def turn_cut @turn_cut ||= /<#{TurnCut::Word}[::](\S+)>/ =~ note ? $1.to_s : "0" end end