#=========================================================================== # ◆ A1 Scripts ◆ # 特殊アクターコマンド(RGSS3) # # バージョン : 1.00 (2012/01/26) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・アクターコマンドが 縦4 x 横2 の 8コマンド表示になります # ・戦闘中装備変更ができます # ・ダイレクトにスキルを使えるアクターコマンドを追加できます #--------------------------------------------------------------------------- # 更新履歴   :2012/01/26 Ver1.00 リリース #--------------------------------------------------------------------------- # 設置場所 # A1バトル共通スクリプト以下 # (スキル拡張以下) # (ステータスウィンドウ系スクリプト以上) # # 必要スクリプト # A1バトル共通スクリプト #--------------------------------------------------------------------------- # 使い方 # ■ 設定項目 に設定します # # データベース「アクター」のメモ欄に記述します # # <追加コマンド name,skill_id> # name と言う項目のアクターコマンドが追加され # skill_id のスキルを使用します # # 複数追加することも可能です # # 例:<追加コマンド なげる,143> # <追加コマンド 連続攻撃,3> #============================================================================== $imported ||= {} if $imported["A1_BattleCommonScript"] $imported["A1_ExActorCommand"] = true old_common_script("特殊アクターコマンド", "4.30") if common_version < 4.30 #============================================================================== # ■ 設定項目 #============================================================================== module A1_System::ExActorCommand #-------------------------------------------------------------------------- # ○ ステータスウィンドウの幅をを画面サイズ一杯にして各種ウィンドウを再配置する # ※ デフォルトステータスウィンドウ向け #-------------------------------------------------------------------------- WIDE_STATUS_WINDOW = false end #============================================================================== # ■ RPG::Actor #============================================================================== class RPG::Actor < RPG::BaseItem #-------------------------------------------------------------------------- # ○ 追加コマンド #-------------------------------------------------------------------------- def ex_commands @ex_commands ||= $a1_common.note_data_hash(self.note, "追加コマンド", {}) return @ex_commands end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) # の内部で使用され、Game_Party クラス($game_party)からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 追加コマンド #-------------------------------------------------------------------------- def ex_commands actor.ex_commands end end #============================================================================== # ■ Window_ActorCommand #------------------------------------------------------------------------------ #  バトル画面で、アクターの行動を選択するウィンドウです。 #============================================================================== class Window_ActorCommand < Window_Command #-------------------------------------------------------------------------- # ★ ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width return 216 end #-------------------------------------------------------------------------- # ○ 桁数の取得 #-------------------------------------------------------------------------- def col_max return 2 end #-------------------------------------------------------------------------- # ○ 行数の取得 #-------------------------------------------------------------------------- def row_max return 4 end #-------------------------------------------------------------------------- # ○ 横に項目が並ぶときの空白の幅を取得 #-------------------------------------------------------------------------- def spacing return 8 end #-------------------------------------------------------------------------- # ○ カーソルを下に移動 #-------------------------------------------------------------------------- def cursor_down(wrap = false) select((index + 1) % item_max) if row_max >= 2 && (index < item_max - 1 || (wrap && horizontal?)) end #-------------------------------------------------------------------------- # ○ カーソルを上に移動 #-------------------------------------------------------------------------- def cursor_up(wrap = false) select((index - 1 + item_max) % item_max) if row_max >= 2 && (index > 0 || (wrap && horizontal?)) end #-------------------------------------------------------------------------- # ○ カーソルを右に移動 #-------------------------------------------------------------------------- def cursor_right(wrap = false) select((index + row_max) % item_max) if index < item_max - col_max || (wrap && col_max == 1) end #-------------------------------------------------------------------------- # ○ カーソルを左に移動 #-------------------------------------------------------------------------- def cursor_left(wrap = false) select((index - row_max + item_max) % item_max) if index >= col_max || (wrap && col_max == 1) end #-------------------------------------------------------------------------- # ○ 項目を描画する矩形の取得 #-------------------------------------------------------------------------- def item_rect(index) rect = Rect.new rect.width = item_width rect.height = item_height rect.x = index / row_max * (item_width + spacing) rect.y = index % row_max * item_height rect end #-------------------------------------------------------------------------- # ☆ コマンドリストの作成 #-------------------------------------------------------------------------- alias a1_two_col_ac_wac_make_command_list make_command_list def make_command_list a1_two_col_ac_wac_make_command_list return unless @actor add_skill_command_plus add_ex_commands add_equip_commands end #-------------------------------------------------------------------------- # ☆ スキルコマンドをリストに追加 #-------------------------------------------------------------------------- def add_skill_commands @stype_list = [] @actor.added_skill_types.each { |stype_id| create_stype_list(stype_id) } @added_stype = @stype_list[0] add_command(@added_stype[0], :skill, true, @added_stype[1]) end #-------------------------------------------------------------------------- # ○ スキルタイプリストの作成 #-------------------------------------------------------------------------- def create_stype_list(stype_id) @stype_list.push([$data_system.skill_types[stype_id], stype_id]) end #-------------------------------------------------------------------------- # ○ 2番目以降のスキルコマンドをリストに追加 #-------------------------------------------------------------------------- def add_skill_command_plus @stype_list.each {|stype| second_skill(stype) } end #-------------------------------------------------------------------------- # ○ 2番目以降のスキルコマンドをリストに追加 #-------------------------------------------------------------------------- def second_skill(stype) return if @added_stype == stype add_command(stype[0], :skill, true, stype[1]) end #-------------------------------------------------------------------------- # ○ 追加コマンドをリストに追加 #-------------------------------------------------------------------------- def add_ex_commands @actor.ex_commands.each_pair {|name, id| add_command(name, :ex_skill, true, id) } end #-------------------------------------------------------------------------- # ○ 装備変更コマンドをリストに追加 #-------------------------------------------------------------------------- def add_equip_commands add_command("装備変更", :open_equip, true, @actor) end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ○ 定数 #-------------------------------------------------------------------------- WIDE_STATUS_WINDOW = A1_System::ExActorCommand::WIDE_STATUS_WINDOW #-------------------------------------------------------------------------- # ☆ 全ウィンドウの作成 #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_create_all_windows create_all_windows def create_all_windows a1_ex_skill_command_sb_create_all_windows create_equip_status_window create_equip_command_window create_equip_slot_window create_equip_item_window end #-------------------------------------------------------------------------- # ☆ 情報表示ビューポート作成の後処理 #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_post_create_info_viewport post_create_info_viewport def post_create_info_viewport a1_ex_skill_command_sb_post_create_info_viewport resize_status_window if WIDE_STATUS_WINDOW end #-------------------------------------------------------------------------- # ○ ステータスウィンドウのリサイズ #-------------------------------------------------------------------------- def resize_status_window @status_window.viewport = nil @status_window.x = 0 @status_window.y = Graphics.height - @status_window.height @status_window.width = Graphics.width @status_window.create_contents @status_window.refresh end #-------------------------------------------------------------------------- # ☆ アクターコマンドウィンドウ作成の後処理 #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_post_create_actor_command_window post_create_actor_command_window def post_create_actor_command_window a1_ex_skill_command_sb_post_create_actor_command_window reposting_actor_command_window if WIDE_STATUS_WINDOW end #-------------------------------------------------------------------------- # ○ アクターコマンドウィンドウの位置再設定 #-------------------------------------------------------------------------- def reposting_actor_command_window @actor_command_window.viewport = nil @actor_command_window.y = 0 @actor_command_window.x = Graphics.width - @actor_command_window.width end #-------------------------------------------------------------------------- # ☆ パーティコマンドウィンドウ作成の後処理 #-------------------------------------------------------------------------- alias a1_ex_skill_commandw_sb_post_create_party_command_window post_create_party_command_window def post_create_party_command_window a1_ex_skill_commandw_sb_post_create_party_command_window reposting_party_command_window if WIDE_STATUS_WINDOW end #-------------------------------------------------------------------------- # ○ パーティコマンドウィンドウの位置再設定 #-------------------------------------------------------------------------- def reposting_party_command_window @party_command_window.viewport = nil @party_command_window.x = Graphics.width - @party_command_window.width @party_command_window.y = 0 end #-------------------------------------------------------------------------- # ☆ アクターコマンドウィンドウハンドルの定義 #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_define_actor_command_handle define_actor_command_handle def define_actor_command_handle a1_ex_skill_command_sb_define_actor_command_handle @actor_command_window.set_handler(:ex_skill, method(:command_ex_skill)) @actor_command_window.set_handler(:open_equip, method(:equip_window_open)) end #-------------------------------------------------------------------------- # ☆ 情報表示ビューポートの更新 #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_update_info_viewport update_info_viewport def update_info_viewport return a1_ex_skill_command_sb_update_info_viewport unless @actor_command_window.active move_info_viewport(@actor_command_window.width) if @actor_command_window.active end #-------------------------------------------------------------------------- # ★ 情報表示ビューポートの移動 #-------------------------------------------------------------------------- def move_info_viewport(ox) return if WIDE_STATUS_WINDOW current_ox = @info_viewport.ox @info_viewport.ox = [ox, current_ox + 32].min if current_ox < ox @info_viewport.ox = [ox, current_ox - 32].max if current_ox > ox end #-------------------------------------------------------------------------- # ☆ スキル/アイテムウィンドウが表示された時の処理 #-------------------------------------------------------------------------- alias a1_ex_skill_command_skill_item_window_show skill_item_window_show def skill_item_window_show a1_ex_skill_command_skill_item_window_show close_actor_command_window if WIDE_STATUS_WINDOW end #-------------------------------------------------------------------------- # ○ アクターコマンドウィンドウのクローズ #-------------------------------------------------------------------------- def close_actor_command_window @actor_command_window.close end #-------------------------------------------------------------------------- # ☆ スキル/アイテムウィンドウが非表示になった時の処理 #-------------------------------------------------------------------------- alias a1_ex_skill_command_skill_item_window_hide skill_item_window_hide def skill_item_window_hide a1_ex_skill_command_skill_item_window_hide open_actor_command_window if WIDE_STATUS_WINDOW end #-------------------------------------------------------------------------- # ○ アクターコマンドウィンドウのオープン #-------------------------------------------------------------------------- def open_actor_command_window @actor_command_window.open @actor_command_window.activate end #-------------------------------------------------------------------------- # ○ 装備変更 #-------------------------------------------------------------------------- def equip_window_open @actor_command_window.close @equip_status_window.open @equip_command_window.open @equip_slot_window.open @equip_item_window.open @help_window.open setup_equip_actor end #-------------------------------------------------------------------------- # ○ アクターのセットアップ #-------------------------------------------------------------------------- def setup_equip_actor @equip_status_window.actor = @actor_command_window.current_ext @equip_slot_window.actor = @actor_command_window.current_ext @equip_item_window.actor = @actor_command_window.current_ext @equip_actor = @actor_command_window.current_ext @equip_command_window.activate end #-------------------------------------------------------------------------- # ○ 装備変更ウィンドウを閉じる #-------------------------------------------------------------------------- def close_equip_windows @equip_status_window.close @equip_command_window.close @equip_slot_window.close @equip_item_window.close @help_window.close @actor_command_window.open @actor_command_window.activate refresh_status end #-------------------------------------------------------------------------- # ○ ステータスウィンドウの作成 #-------------------------------------------------------------------------- def create_equip_status_window @equip_status_window = Window_EquipStatus.new(0, @help_window.height) @equip_status_window.viewport = @viewport @equip_status_window.actor = @actor @equip_status_window.openness = 0 end #-------------------------------------------------------------------------- # ○ コマンドウィンドウの作成 #-------------------------------------------------------------------------- def create_equip_command_window wx = @equip_status_window.width wy = @help_window.height ww = Graphics.width - @equip_status_window.width @equip_command_window = Window_EquipCommand.new(wx, wy, ww) @equip_command_window.viewport = @viewport @equip_command_window.help_window = @help_window @equip_command_window.set_handler(:equip, method(:command_equip)) @equip_command_window.set_handler(:optimize, method(:command_optimize)) @equip_command_window.set_handler(:clear, method(:command_clear)) @equip_command_window.set_handler(:cancel, method(:close_equip_windows)) @equip_command_window.openness = 0 end #-------------------------------------------------------------------------- # ○ スロットウィンドウの作成 #-------------------------------------------------------------------------- def create_equip_slot_window wx = @equip_status_window.width wy = @equip_command_window.y + @equip_command_window.height ww = Graphics.width - @equip_status_window.width @equip_slot_window = Window_EquipSlot.new(wx, wy, ww) @equip_slot_window.viewport = @viewport @equip_slot_window.help_window = @help_window @equip_slot_window.status_window = @equip_status_window @equip_slot_window.actor = @actor @equip_slot_window.set_handler(:ok, method(:on_slot_ok)) @equip_slot_window.set_handler(:cancel, method(:on_slot_cancel)) @equip_slot_window.set_handler(:on_slot_un_equip, method(:on_slot_un_equip)) @equip_slot_window.openness = 0 end #-------------------------------------------------------------------------- # ○ アイテムウィンドウの作成 #-------------------------------------------------------------------------- def create_equip_item_window wx = 0 wy = @equip_slot_window.y + @equip_slot_window.height ww = Graphics.width wh = Graphics.height - wy @equip_item_window = Window_EquipItem.new(wx, wy, ww, wh) @equip_item_window.viewport = @viewport @equip_item_window.help_window = @help_window @equip_item_window.status_window = @equip_status_window @equip_item_window.actor = @actor @equip_item_window.set_handler(:ok, method(:on_equip_item_ok)) @equip_item_window.set_handler(:cancel, method(:on_equip_item_cancel)) @equip_slot_window.item_window = @equip_item_window @equip_item_window.openness = 0 end #-------------------------------------------------------------------------- # ○ コマンド[装備変更] #-------------------------------------------------------------------------- def command_equip @equip_slot_window.activate @equip_slot_window.select(0) end #-------------------------------------------------------------------------- # ○ コマンド[最強装備] #-------------------------------------------------------------------------- def command_optimize Sound.play_equip @equip_actor.optimize_equipments @equip_status_window.refresh @equip_slot_window.refresh @equip_command_window.activate end #-------------------------------------------------------------------------- # ○ コマンド[全て外す] #-------------------------------------------------------------------------- def command_clear Sound.play_equip @equip_actor.clear_equipments @equip_status_window.refresh @equip_slot_window.refresh @equip_command_window.activate end #-------------------------------------------------------------------------- # ○ スロット[決定] #-------------------------------------------------------------------------- def on_slot_ok @equip_item_window.activate @equip_item_window.select(0) end #-------------------------------------------------------------------------- # ○ スロット[キャンセル] #-------------------------------------------------------------------------- def on_slot_cancel @equip_slot_window.unselect @equip_command_window.activate end #-------------------------------------------------------------------------- # ○ アイテム[決定] #-------------------------------------------------------------------------- def on_equip_item_ok Sound.play_equip @equip_actor.change_equip(@equip_slot_window.index, @equip_item_window.item) @equip_slot_window.activate @equip_slot_window.refresh @equip_item_window.unselect @equip_item_window.refresh end #-------------------------------------------------------------------------- # ○ アイテム[キャンセル] #-------------------------------------------------------------------------- def on_equip_item_cancel @equip_slot_window.activate @equip_item_window.unselect end #-------------------------------------------------------------------------- # ○ 装備を外す #-------------------------------------------------------------------------- def on_slot_un_equip Sound.play_equip @equip_actor.change_equip(@slot_window.index, nil) @equip_slot_window.refresh @equip_status_window.refresh @equip_item_window.refresh end #-------------------------------------------------------------------------- # ○ 特殊スキルコマンド #-------------------------------------------------------------------------- def command_ex_skill @skill = $data_skills[@actor_command_window.current_ext] prev_open_item_window_for_ex_skill BattleManager.actor.input.set_skill(@skill.id) BattleManager.actor.last_skill.object = @skill return post_close_item_window_for_ex_skill unless post_open_item_window_for_ex_skill return next_command if !@skill.need_selection? return select_enemy_selection if @skill.for_opponent? select_actor_selection end #-------------------------------------------------------------------------- # ☆ アクター[キャンセル] #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_on_actor_cancel on_actor_cancel def on_actor_cancel a1_ex_skill_command_sb_on_actor_cancel @actor_command_window.activate if @actor_command_window.current_symbol == :ex_skill end #-------------------------------------------------------------------------- # ☆ 敵キャラ[キャンセル] #-------------------------------------------------------------------------- alias a1_ex_skill_command_sb_on_enemy_cancel on_enemy_cancel def on_enemy_cancel a1_ex_skill_command_sb_on_enemy_cancel @actor_command_window.activate if @actor_command_window.current_symbol == :ex_skill end #-------------------------------------------------------------------------- # ○ アイテム使用スキル用前処理 #-------------------------------------------------------------------------- def prev_open_item_window_for_ex_skill end #-------------------------------------------------------------------------- # ○ アイテム使用スキル用後処理 #-------------------------------------------------------------------------- def post_open_item_window_for_ex_skill return true end #-------------------------------------------------------------------------- # ○ アイテム使用スキル用ウィンドウクローズ後処理 #-------------------------------------------------------------------------- def post_close_item_window_for_ex_skill end #============================================================================== # ■ スキル拡張対応処理 #============================================================================== if $imported["A1_PassiveSkill"] #-------------------------------------------------------------------------- # ○ アイテム使用スキル用前処理 #-------------------------------------------------------------------------- def prev_open_item_window_for_ex_skill BattleManager.actor.input.select_skill(true) @actor_command_window.close @item_window_open_mode = "Ex_Command" end #-------------------------------------------------------------------------- # ○ アイテム使用スキル用後処理 #-------------------------------------------------------------------------- def post_open_item_window_for_ex_skill return false if @item_window.item_kind && !@item_window.item_kind.empty? @actor_command_window.open @actor_command_window.activate return true end #-------------------------------------------------------------------------- # ○ アイテム使用スキル用ウィンドウクローズ後処理 #-------------------------------------------------------------------------- def post_close_item_window_for_ex_skill @item_window.hide @item_window.item_kind = nil @item_window_open_mode = nil end #-------------------------------------------------------------------------- # ☆ アイテム[決定] #-------------------------------------------------------------------------- alias a1_ex_command_sb_on_item_ok on_item_ok def on_item_ok return a1_ex_command_sb_on_item_ok unless @item_window_open_mode == "Ex_Command" post_close_item_window_for_ex_skill end #-------------------------------------------------------------------------- # ☆ アイテム[キャンセル] #-------------------------------------------------------------------------- alias a1_ex_command_sb_on_item_cancel on_item_cancel def on_item_cancel return a1_ex_command_sb_on_item_cancel unless @item_window_open_mode == "Ex_Command" @item_window.hide @actor_command_window.open @actor_command_window.activate end;end end end