#=========================================================================== # ◆ A1 Scripts ◆ # ひっさつわざ(RGSS3) # # バージョン : 1.00 (2012/01/26) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・必殺技コマンドに対応したスキルを発動します #--------------------------------------------------------------------------- # 更新履歴   :2012/01/26 Ver1.00 リリース #--------------------------------------------------------------------------- # 設置場所 # A1バトル共通スクリプト以下 # (スキル拡張以下) # # 必要スクリプト # A1バトル共通スクリプト #--------------------------------------------------------------------------- # 使い方 # ■ 設定項目 に設定します # # データベース「スキル」のメモ欄に記述します # # <必殺コマンド入力開始> # この設定をしたスキルを選択すると、必殺コマンド入力状態になります # 入力した必殺コマンドに一致するスキルがなければ、このスキルを発動します # # <必殺コマンド key,key,key,key,...> # 習得しているスキルの中で、必殺コマンド入力したコマンドと # 設定したコマンドが一致した場合、このスキルを発動します # # 例:<必殺コマンド 4,6,4> ※ 左・右・左 # 例:<必殺コマンド 2,1,4> ※ 下・左下・左 # 例:<必殺コマンド X,A,2,8> ※ Xボタン・Aボタン・下・上 # 例:<必殺コマンド R,L,R,L,X,A> # # 入力後 Cボタン を押すとコマンドを評価します #--------------------------------------------------------------------------- # 入力のコツ # わりとゆっくりめに、しっかりと入力するのが吉 #============================================================================== $imported ||= {} if $imported["A1_BattleCommonScript"] $imported["A1_SpecialCommand"] = true old_common_script("ひっさつわざ", "4.30") if common_version < 4.30 #============================================================================== # ■ 設定項目 #============================================================================== module A1_System::SpecialCommandConfig #-------------------------------------------------------------------------- # ○ 入力待ち時間(フレーム) #-------------------------------------------------------------------------- INPUT_FRAME = 120 end #============================================================================== # ■ RPG::Skill #============================================================================== class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # ○ 必殺コマンド #-------------------------------------------------------------------------- def special_command @special_command ||= $a1_common.note_data_array_value(self.note, "必殺コマンド", []) return @special_command end #-------------------------------------------------------------------------- # ○ 必殺技 #-------------------------------------------------------------------------- def special_command_input @special_command_input = $a1_common.note_data(self.note, "必殺コマンド入力開始") if @special_command_input == nil return @special_command_input end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ○ 定数 #-------------------------------------------------------------------------- INPUT_FRAME = A1_System::SpecialCommandConfig::INPUT_FRAME #-------------------------------------------------------------------------- # ○ バトルマネージャメソッドの定義 #-------------------------------------------------------------------------- alias a1_special_command_gac_define_battle_manager_method define_battle_manager_method def define_battle_manager_method a1_special_command_gac_define_battle_manager_method BattleManager.define_method(method(:start_special_input),:start_special_input) end #-------------------------------------------------------------------------- # ☆ スキル[決定] #-------------------------------------------------------------------------- alias a1_special_command_gac_on_skill_ok on_skill_ok def on_skill_ok BattleManager.actor.input.command_input(true) a1_special_command_gac_on_skill_ok end #-------------------------------------------------------------------------- # ○ 必殺技入力開始 #-------------------------------------------------------------------------- def start_special_input(actor) @special_input = [] @input_index = 0 @input_frame = INPUT_FRAME @input_end = false wait_for_special_input while !@input_end return actor.special_command(chein_delete(@special_input.compact)) end #-------------------------------------------------------------------------- # ○ 連続した同じコマンドを削除する #-------------------------------------------------------------------------- def chein_delete(command, r = []) command.each {|key| r.push(key) if r.size == 0 || (r.size > 0 && r[r.size - 1] != key) || !key.is_a?(Integer) } r.delete("C") return r end #-------------------------------------------------------------------------- # ○ 必殺技入力待ち #-------------------------------------------------------------------------- def wait_for_special_input @special_input[@input_index] = input_key @input_frame -= 1 @input_index += 1 if @special_input[@input_index] @input_end = true if input_key == "C" || @input_frame == 0 update_basic end #-------------------------------------------------------------------------- # ○ 押されたキー #-------------------------------------------------------------------------- def input_key return Input.dir8 if Input.repeat?(:UP) || Input.repeat?(:DOWN) || Input.repeat?(:LEFT) || Input.repeat?(:RIGHT) return "A" if Input.trigger?(:A) return "B" if Input.trigger?(:B) return "C" if Input.trigger?(:C) return "X" if Input.trigger?(:X) return "Y" if Input.trigger?(:Y) return "Z" if Input.trigger?(:Z) return "L" if Input.trigger?(:L) return "R" if Input.trigger?(:R) end #============================================================================== # ■ 特殊アクターコマンド対応 #============================================================================== if $imported["A1_ExActorCommand"] #-------------------------------------------------------------------------- # ○ 特殊スキルコマンド #-------------------------------------------------------------------------- alias a1_special_command_gac_command_ex_skill command_ex_skill def command_ex_skill BattleManager.actor.input.command_input(true) a1_special_command_gac_command_ex_skill end;end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) # の内部で使用され、Game_Party クラス($game_party)からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 必殺技スキル #-------------------------------------------------------------------------- def special_command(input_command) skills.select {|skill| skill.special_command == input_command }[0] end end #============================================================================== # ■ Game_Action #------------------------------------------------------------------------------ #  戦闘行動を扱うクラスです。このクラスは Game_Battler クラスの内部で使用され # ます。 #============================================================================== class Game_Action #-------------------------------------------------------------------------- # ☆ スキルを設定 #-------------------------------------------------------------------------- alias a1_special_command_gac_set_skill set_skill def set_skill(skill_id) skill_id = special_skill(skill_id) if $data_skills[skill_id].special_command_input a1_special_command_gac_set_skill(skill_id) end #-------------------------------------------------------------------------- # ○ 必殺技スキル #-------------------------------------------------------------------------- def special_skill(skill_id) return skill_id unless @command_input @command_input = false special = BattleManager.call_method(:start_special_input, @subject) special ? special.id : skill_id end #-------------------------------------------------------------------------- # ○ コマンド入力開始 #-------------------------------------------------------------------------- def command_input(flag) @command_input = flag end end #============================================================================== # ■ Window_SkillList #------------------------------------------------------------------------------ #  スキル画面で、使用できるスキルの一覧を表示するウィンドウです。 #============================================================================== class Window_SkillList < Window_Selectable #-------------------------------------------------------------------------- # ☆ スキルを許可状態で表示するかどうか #-------------------------------------------------------------------------- alias a1_special_command_wsl_enable? enable? def enable?(item) a1_special_command_wsl_enable?(item) && item.special_command.empty? end #============================================================================== # ■ スキル拡張対応 #============================================================================== if $imported["A1_PassiveSkill"] #-------------------------------------------------------------------------- # ○ 描画するスキル種別 #-------------------------------------------------------------------------- alias a1_special_command_wsl_show_skill_kind show_skill_kind def show_skill_kind(skill) skill.special_command.empty? ? a1_special_command_wsl_show_skill_kind(skill) : "Special" end;end end end