######################## 連続使用できないスキルの設定 ######################## # # # 技の属性に「復帰ターン:n」(:は半角、nは任意の整数、半角で)と入力。 # # するとその技はそのターンだけ経過するまで使用することができない。 # # たとえば「復帰ターン:1」の場合技を使用した次の次のターンまで使えない。 # # 「復帰ターン:1」の「復帰ターン:」の部分を変更したいなら設定で変更可能。 # # # ############################################################################## # ここから設定 module Annex LIMIT_NAME = "復帰ターン:" # 連続使用できないスキルの属性名。 # このあと半角数字で使用できないターンを入れる LIMIT_HELP_TEXT = "このスキルはあとnターン使えません" # そのスキルがターンの制約で使用できない場合のコメント。「n」に残りターン。 LIMIT_HELP_TIME = 80 # ヘルプウィンドウの説明文切り替えの時間(フレーム) # 0にすると上のHelpに指定された言葉だけを表示し続ける。 end # ここまで設定 #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- alias turn_sys_initialize initialize def initialize @turn_restriction = [] # 呼び戻し turn_sys_initialize end #-------------------------------------------------------------------------- # ◎ 追加:制約の追加 # skill_id : スキルID # turn : そのスキルが使えなくなるターン数 #-------------------------------------------------------------------------- def push_restriction(skill_id, turn) @turn_restriction.push([skill_id, turn]) end #-------------------------------------------------------------------------- # ◎ 追加:制約ターンの削除 #-------------------------------------------------------------------------- def restriction_clear @turn_restriction = [] end #-------------------------------------------------------------------------- # ◎ 追加:制約ターンの減算 #-------------------------------------------------------------------------- def restriction_subtraction # @turn_restrictionが空ならreturn return if @turn_restriction == [] for i in @turn_restriction i[1] -= 1 end # @turn_restriction[n[1]]が0のモノ(制約がなくなったモノ)を削除 @turn_restriction.reject! { |a| a[1] == 0} end #-------------------------------------------------------------------------- # ○ スキルの使用可能判定 # skill_id : スキル ID #-------------------------------------------------------------------------- alias turn_sys_skill_can_use? skill_can_use? def skill_can_use?(skill_id) # @turn_restrictionに含まれている場合使用不可 return false if check_restriction_turn(skill_id) # 呼び戻し return turn_sys_skill_can_use?(skill_id) end #-------------------------------------------------------------------------- # ○ スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- alias turn_sys_skill_effect skill_effect def skill_effect(user, skill) # 呼び戻し+スキルが使用されたかをboolに代入 bool = turn_sys_skill_effect(user, skill) # boolが真の時制約つきスキルの場合配列に追加 key = Annex::LIMIT_NAME turn = get_element_key_id(skill.element_set, key) if bool and turn != [] total = 0 for i in turn total += i end user.push_restriction(skill.id, total) end # boolを返す return bool end #-------------------------------------------------------------------------- # ◎ 追加:制約スキルの状況 #-------------------------------------------------------------------------- def check_restriction_turn(skill_id) return false if skill_id == nil i = @turn_restriction.find {|a| a[0] == skill_id} return false if i == nil return i[1] end #-------------------------------------------------------------------------- # ◎ 追加:「属性名+数字」の形式の属性が含まれていればその数字部分を取得。 # element_set : 属性の配列 # key : 取得する属性名 #-------------------------------------------------------------------------- def get_element_key_id(element_set, key) id = [] for i in element_set if $data_system.elements[i] =~ /#{key}([0-9]+)/ # ID取得 id.push($1.to_i) end end return id end end #============================================================================== # ■ Window_Skill #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ○ ヘルプテキスト更新 #-------------------------------------------------------------------------- alias turn_sys_update_help update_help def update_help turn = @actor.check_restriction_turn(self.skill.id) # Annex::LIMIT_HELP_TEXTが空なら呼び戻して普通の説明文を表示。 if Annex::LIMIT_HELP_TEXT == "" turn_sys_update_help # Annex::LIMIT_HELP_TIME が 0 なら Annex::LIMIT_HELP_TEXTのみ表示 elsif Annex::LIMIT_HELP_TIME == 0 phase = 1 else phase = Graphics.frame_count / Annex::LIMIT_HELP_TIME phase = phase % 2 end if turn and phase == 1 text = Annex::LIMIT_HELP_TEXT text.sub!(/n/, turn.to_s) @help_window.set_text(text) return end # 呼び戻し: 通常の説明文の表示 turn_sys_update_help end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ○ プレバトルフェーズ開始 #-------------------------------------------------------------------------- alias turn_sys_start_phase1 start_phase1 def start_phase1 # 味方全体の制約状況をクリア for actor in $game_party.actors actor.restriction_clear end # 呼び戻し turn_sys_start_phase1 end #-------------------------------------------------------------------------- # ○ メインフェーズ開始 #-------------------------------------------------------------------------- alias turn_sys_start_phase4 start_phase4 def start_phase4 # 呼び戻し turn_sys_start_phase4 # 敵味方全員の制約ターン数減算 for member in $game_party.actors + $game_troop.enemies member.restriction_subtraction end end end