#============================================================================== # ■ RGSS3 自動戦闘時のスキル封印 Ver1.20 #------------------------------------------------------------------------------ # 自動戦闘時に指定したスキルを封印状態(使用価値0扱い)にします。 # # スキルウィンドウが表示されている状態で # 特定のキーを押す事で封印状態の設定/解除が行えます。 # # 封印スキルについてスキル名ではなく # スキルアイコンに変化をもたらすタイプを選んだ場合に使用する # スキルアイコン変化用の"SealFrame"という画像ファイルは # グラフィック配布ページにて配布しております。 #============================================================================== # アクター・職業のメモ欄に指定 #------------------------------------------------------------------------------ # <自動戦闘封印禁止> # # このアクター、もしくはこの職業のアクターは # 自動戦闘封印禁止の機能を使用することができず # 過去のセーブデータで使用していた場合についても封印対象から削除される。 #============================================================================== # スキルのメモ欄に指定 #------------------------------------------------------------------------------ # <自動戦闘封印禁止> # # このスキルについては自動戦闘封印禁止の機能を使用できない。 # 過去のセーブデータで使用していた場合についても封印対象から削除される。 #============================================================================== module AB_SSS #封印スキル指定時のキー #デフォルトでは:Yとしてありますが #これはキーボード上のYではなく内部のコマンド処理上のYです。 #ゲームパッド設定時に出てくるものですね。 # #キーボード上でのキーはSキーとなります。 KEY = :Y #封印スキルのスキル表示形式を選択 #0 スキルの文字色変更 #1 スキルアイコン変更 TYPE = 0 #封印スキルのスキル名表示色を指定 COLOR = 4 #封印スキルのアイコンに足す画像を選択 ICON = "SealFrame" #自動戦闘封印禁止の指定 Word = "自動戦闘封印禁止" end class Window_SkillList < Window_Selectable attr_reader :actor # アクター #-------------------------------------------------------------------------- # 決定やキャンセルなどのハンドリング処理 #-------------------------------------------------------------------------- unless method_defined?(:process_handling_skill_seal) alias process_handling_skill_seal process_handling def process_handling process_handling_skill_seal return unless open? && active return process_skill_seal if ok_enabled? && Input.trigger?(AB_SSS::KEY) end end #-------------------------------------------------------------------------- # 決定ボタンが押されたときの処理 #-------------------------------------------------------------------------- def process_skill_seal Input.update call_pss_handler end #-------------------------------------------------------------------------- # アイテム スキルシール #-------------------------------------------------------------------------- def call_pss_handler call_handler(:sh_pss) end #-------------------------------------------------------------------------- # アイテム名の描画 #-------------------------------------------------------------------------- unless method_defined?(:draw_item_name_skill_seal) alias draw_item_name_skill_seal draw_item_name def draw_item_name(item, x, y, enabled = true, width = 172) return unless item if @actor.auto_skill_seal.include?(item.id) if AB_SSS::TYPE == 0 draw_icon(item.icon_index, x, y, enabled) change_color(text_color(AB_SSS::COLOR), enabled) draw_text(x + 24, y, width, line_height, item.name) else draw_item_name_skill_seal(item, x, y, enabled, width) bitmap = Cache.system(AB_SSS::ICON) rect = Rect.new(0, 0, 24, 24) contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha) end else draw_item_name_skill_seal(item, x, y, enabled, width) end end end end class Scene_Skill < Scene_ItemBase #-------------------------------------------------------------------------- # アイテムウィンドウの作成 #-------------------------------------------------------------------------- alias create_item_window_skill_seal create_item_window def create_item_window create_item_window_skill_seal @item_window.set_handler(:sh_pss, method(:pss)) end #-------------------------------------------------------------------------- # スキルシール #-------------------------------------------------------------------------- def pss return if !item s_id = item.id if @actor.auto_skill_seal.include?(s_id) Sound.play_ok @actor.auto_skill_seal.delete(s_id) else if @actor.auto_skill_sealable? && item.auto_skill_sealable? Sound.play_ok @actor.auto_skill_seal.push(s_id) else Sound.play_buzzer end end @item_window.refresh end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # アイテムウィンドウの作成 #-------------------------------------------------------------------------- alias create_skill_window_skill_seal create_skill_window def create_skill_window create_skill_window_skill_seal @skill_window.set_handler(:sh_pss, method(:pss)) end #-------------------------------------------------------------------------- # スキルシール #-------------------------------------------------------------------------- def pss return if !@skill_window.item s_id = @skill_window.item.id chara = @skill_window.actor if chara.auto_skill_seal.include?(s_id) Sound.play_ok chara.auto_skill_seal.delete(s_id) else if chara.auto_skill_sealable? && @skill_window.item.auto_skill_sealable? Sound.play_ok chara.auto_skill_seal.push(s_id) else Sound.play_buzzer end end @skill_window.refresh end end class Game_Actor < Game_Battler attr_accessor :auto_skill_seal #-------------------------------------------------------------------------- # 封印配列 #-------------------------------------------------------------------------- def auto_skill_seal @auto_skill_seal ||= [] if @auto_skill_seal_version_id != $data_system.version_id neo_array = [] if auto_skill_sealable? @auto_skill_seal.each {|sid| neo_array.push(sid) if $data_skills[sid] && $data_skills[sid].auto_skill_sealable?} end @auto_skill_seal_version_id = $data_system.version_id.to_i @auto_skill_seal = neo_array end @auto_skill_seal end #-------------------------------------------------------------------------- # 封印配列設定 #-------------------------------------------------------------------------- def auto_skill_seal=(neo_array) auto_skill_seal @auto_skill_seal = neo_array end #-------------------------------------------------------------------------- # セットアップ #-------------------------------------------------------------------------- alias setup_skill_seal setup def setup(actor_id) setup_skill_seal(actor_id) @auto_skill_seal = [] end #-------------------------------------------------------------------------- # 職業の変更 #-------------------------------------------------------------------------- alias change_class_skill_seal change_class def change_class(class_id, keep_exp = false) change_class_skill_seal(class_id, keep_exp) @auto_skill_seal = [] unless auto_skill_sealable? end #-------------------------------------------------------------------------- # 自動戦闘封印禁止 #-------------------------------------------------------------------------- def auto_skill_sealable? actor.auto_skill_sealable? && self.class.auto_skill_sealable? end end class Game_Action #-------------------------------------------------------------------------- # 行動の価値評価(自動戦闘用) #-------------------------------------------------------------------------- alias evaluate_skill_seal evaluate def evaluate @subject.auto_skill_seal = [] if @subject.actor? && @subject.auto_skill_seal == nil if @subject.actor? && !@subject.auto_skill_seal.empty? && @subject.auto_skill_seal.include?(item.id) @value = 0 return self end evaluate_skill_seal end end class RPG::BaseItem #-------------------------------------------------------------------------- # 自動戦闘封印禁止 #-------------------------------------------------------------------------- def auto_skill_sealable? (@auto_skill_sealable ||= /<#{AB_SSS::Word}>/ =~ note ? 1 : 0) == 0 end end