#============================================================================== # ■ RGSS3 戦闘時スキル分類 Ver1.03 by 星潟 # 元スクリプト改良(簡易自動分別機能追加)by 白雪レイカ様 #------------------------------------------------------------------------------ # 戦闘中のスキル分類を独自に実行します。 # # 設定方法は、項目名・スキルメモ欄設定用キーワードで指定したキーワードの前後を # <>で囲む事で、振り分け対象となります。 # 振り分けの指定がされていないスキルは # 戦闘中は使用可能な設定であっても表示されることはありません。 # なお、ももまるLabs様のXPスタイルバトルとの併用は可能ですが # 表示上、相性があまりよくないので非推奨とさせていただきます。 #------------------------------------------------------------------------------ # Ver1.01 簡易自動分別機能が無効な場合の分別挙動を修正 # Ver1.02 戦闘開始時に決定ボタンを連打していると異常な動作をする問題を修正。 # Ver1.03 カテゴリをアクター別に記憶させるかを指定する機能を追加。 #============================================================================== module BSC_W #項目名・スキルメモ欄設定用キーワードを指定します。 IC1 = ["回復用", "攻撃用", "補助用", "特殊", "全て"] #分類を行わず、全てのスキルを表示する項目の名前を指定します。 ALL = "全て" #簡易自動分別を使用するか USE_SYMPLE_CLASSIFICATION = true #複数の場所への配置を許可するか(『全て』の項目は対象外とする) DUPLICATION = false #分類がデフォの場合、0で回復用、1で攻撃用、2で補助用、3で特殊になります。 #アクターに対して符号がマイナスのダメージ(回復)をもつスキルの分類 RECOVER_ITEM = 0 #エネミーに対して符号がプラスのダメージをもつスキルの分類 DAMAGE_ITEM = 1 #使用効果「HP回復」の分類 EFF_HP_REC = 0 #使用効果「MP回復」の分類 EFF_MP_REC = 0 #使用効果「TP増加」の分類 EFF_GAIN_TP = 0 #使用効果「ステート付加」の分類:スキルの効果対象がアクターの場合 EFF_ADD_STATE_TO_ACTOR = 2 #使用効果「ステート付加」の分類:スキルの効果対象がエネミーの場合 EFF_ADD_STATE_TO_ENEMY = 1 #使用効果「ステート解除」の分類:スキルの効果対象がアクターの場合 EFF_RECOVER_ST_FROM_ACTOR = 0 #使用効果「ステート解除」の分類:スキルの効果対象がエネミーの場合 EFF_RECOVER_ST_FROM_ENEMY = 1 #使用効果「能力強化」の分類 EFF_ADD_BUFF = 2 #使用効果「能力弱体」の分類 EFF_ADD_DEBUFF = 1 #使用効果「能力強化の解除」の分類 EFF_REMOVE_BUFF = 2 #使用効果「能力弱体の解除」の分類 EFF_REMOVE_DEBUFF = 0 #カテゴリの記録設定を行います。 #0で共有、1でアクター別、2で常に一番左になります。 CATEGORY_MEMORY = 1 end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # 全ウィンドウの作成 #-------------------------------------------------------------------------- alias create_all_windows_bscw create_all_windows def create_all_windows create_all_windows_bscw create_battle_skill_category_window end #-------------------------------------------------------------------------- # カテゴリウィンドウの作成 #-------------------------------------------------------------------------- def create_battle_skill_category_window @s_category_window = Window_BattleSkillCategory.new @s_category_window.viewport = @viewport @s_category_window.help_window = @help_window @s_category_window.skill_window = @skill_window @s_category_window.y = @help_window.height @s_category_window.actor_command_window = @actor_command_window @s_category_window.hide end #-------------------------------------------------------------------------- # コマンド[スキル] #-------------------------------------------------------------------------- alias command_skill_bscw command_skill def command_skill command_skill_bscw @skill_window.unselect @skill_window.deactivate a = BattleManager.actor case BSC_W::CATEGORY_MEMORY when 0;i = -1 when 1;i = a.last_skill_category_id ||= 0 when 2;i = 0 end @s_category_window.actor = a @s_category_window.select(i < @s_category_window.item_max ? i : 0) if i >= 0 @s_category_window.show.activate end #-------------------------------------------------------------------------- # スキル[キャンセル] #-------------------------------------------------------------------------- def on_skill_cancel @skill_window.deactivate @skill_window.unselect @s_category_window.activate end #-------------------------------------------------------------------------- # スキル[決定] #-------------------------------------------------------------------------- alias on_skill_ok_bscw on_skill_ok def on_skill_ok on_skill_ok_bscw @s_category_window.deactivate end #-------------------------------------------------------------------------- # 次のコマンド入力へ #-------------------------------------------------------------------------- alias next_command_bscw next_command def next_command @s_category_window.hide if @s_category_window.visible next_command_bscw end end #============================================================================== # ■ Window_BattleSkillCategory #------------------------------------------------------------------------------ #  アイテム画面またはショップ画面で、通常アイテムや装備品の分類を選択するウィ # ンドウです。 #============================================================================== class Window_BattleSkillCategory < Window_HorzCommand #-------------------------------------------------------------------------- # 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :skill_window attr_reader :actor_command_window attr_accessor :actor #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0) deactivate set_handler(:ok, method(:on_category_ok)) set_handler(:cancel, method(:on_category_cancel)) end #-------------------------------------------------------------------------- # ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width Graphics.width end #-------------------------------------------------------------------------- # 桁数の取得 #-------------------------------------------------------------------------- def col_max return BSC_W::IC1.size end #-------------------------------------------------------------------------- # フレーム更新 #-------------------------------------------------------------------------- def update super @skill_window.category = current_symbol if @skill_window end #-------------------------------------------------------------------------- # コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list for i in 0...BSC_W::IC1.size add_command(BSC_W::IC1[i], BSC_W::IC1[i]) end end #-------------------------------------------------------------------------- # アイテムウィンドウの設定 #-------------------------------------------------------------------------- def skill_window=(skill_window) @skill_window = skill_window update end #-------------------------------------------------------------------------- # アイテムウィンドウの設定 #-------------------------------------------------------------------------- def actor_command_window=(actor_command_window) @actor_command_window = actor_command_window update end #-------------------------------------------------------------------------- # カテゴリ[決定] #-------------------------------------------------------------------------- def on_category_ok @skill_window.activate @skill_window.select_last actor_last_skill_category_memorize(self.index) end #-------------------------------------------------------------------------- # スキル[キャンセル] #-------------------------------------------------------------------------- def on_category_cancel @skill_window.hide self.hide @actor_command_window.activate end def actor_last_skill_category_memorize(i) @actor.last_skill_category_id = i if @actor end def actor_last_skill_category @actor.last_skill_category_id ||= 0 end end #============================================================================== # ■ Window_BattleSkill #------------------------------------------------------------------------------ #  バトル画面で、使用するスキルを選択するウィンドウです。 #============================================================================== class Window_BattleSkill < Window_SkillList #-------------------------------------------------------------------------- # オブジェクト初期化 # info_viewport : 情報表示用ビューポート #-------------------------------------------------------------------------- alias initialize_bscw initialize def initialize(help_window, info_viewport) initialize_bscw(help_window, info_viewport) self.y = fitting_height(2) + fitting_height(1) self.height = Graphics.height - self.y - (info_viewport.rect.y - y - fitting_height(1)) @category = :none end #-------------------------------------------------------------------------- # カテゴリの設定 #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category refresh self.oy = 0 end #-------------------------------------------------------------------------- # スキルをリストに含めるかどうか #-------------------------------------------------------------------------- alias include_bscw? include? def include?(item) include_bscw?(item) && battle_item_check(item) end #-------------------------------------------------------------------------- # スキル分類 #-------------------------------------------------------------------------- def battle_item_check(item) return false if item == nil return true if @category == BSC_W::ALL data = nil w = BSC_W::IC1 data2 = w.clone unless BSC_W::DUPLICATION w.size.times do |i| if w[i] == @category data = w[i] unless BSC_W::DUPLICATION data2.delete(w[i]) data2.size.times {|i| return false if item.note.include?(data2[i])} end end end return true if data != nil && item.note.include?("<" + data + ">") if BSC_W::USE_SYMPLE_CLASSIFICATION return true if @category == w[BSC_W::RECOVER_ITEM] and item.damage.recover? and item.for_friend? return true if @category == w[BSC_W::DAMAGE_ITEM] and [1, 2].include?(item.damage.type) and item.for_opponent? item.effects.each do |effect| if effect.code == Game_Battler::EFFECT_RECOVER_HP return true if @category == w[BSC_W::EFF_HP_REC] elsif effect.code == Game_Battler::EFFECT_RECOVER_MP return true if @category == w[BSC_W::EFF_MP_REC] elsif effect.code == Game_Battler::EFFECT_GAIN_TP return true if @category == w[BSC_W::EFF_GAIN_TP] elsif effect.code == Game_Battler::EFFECT_REMOVE_STATE and item.for_friend? return true if @category == w[BSC_W::EFF_RECOVER_ST_FROM_ACTOR] elsif effect.code == Game_Battler::EFFECT_REMOVE_STATE and item.for_opponent? return true if @category == w[BSC_W::EFF_RECOVER_ST_FROM_ENEMY] elsif effect.code == Game_Battler::EFFECT_REMOVE_DEBUFF return true if @category == w[BSC_W::EFF_REMOVE_DEBUFF] elsif effect.code == Game_Battler::EFFECT_REMOVE_BUFF return true if @category == w[BSC_W::EFF_REMOVE_BUFF] elsif effect.code == Game_Battler::EFFECT_ADD_DEBUFF return true if @category == w[BSC_W::EFF_ADD_DEBUFF] elsif effect.code == Game_Battler::EFFECT_ADD_BUFF return true if @category == w[BSC_W::EFF_ADD_BUFF] elsif effect.code == Game_Battler::EFFECT_ADD_STATE and item.for_friend? return true if @category == w[BSC_W::EFF_ADD_STATE_TO_ACTOR] elsif effect.code == Game_Battler::EFFECT_ADD_STATE and item.for_opponent? return true if @category == w[BSC_W::EFF_ADD_STATE_TO_ENEMY] end end end return false end end class Game_Actor attr_accessor :last_skill_category_id end