############################################################################# # # 最終使用スキル個別記憶 # 作者:リック(http://mugenrick.seesaa.net) # 最終更新日:2019/9/24 # ############################################################################# # # 【説明】 # VXAceにはスキル選択画面になると最後に使用したスキルの位置へ # カーソルを移動してくれる機能が備わっています。 # しかし複数のスキルタイプを持つアクターの場合、 # 別個に最後に使用したスキルを記憶してくれませんので、 # スキルタイプAを選択してからスキルタイプBを選択し、 # 再びスキルタイプAのスキル選択画面を表示するとカーソルは一番上に移動します。 # このスクリプトを導入することで、スキルタイプごとに最後に使用したスキルを # 記憶してくれるようになり、操作性が改善されます。 # またメニューと戦闘中でも別個に記憶しますので、 # 例えばメニューで回復スキルを使用してから戦闘中に攻撃スキルを使用しても、 # メニューのカーソル位置は回復スキルのままです。 # 当然ですが、複数のスキルタイプが存在しないゲームに # このスクリプトを導入しても意味はありません。 # # 【使用方法】 # このスクリプトを導入するだけで適用されます。 # 注意点として、既にセーブデータがある状態のゲームに # このスクリプトを適用してもエラー落ちしないようにするため、 # エラー落ち回避のための処理が増えてしまっています。 # もしセーブデータ引き継ぎを考慮する必要が無く # 少しでも処理を少なくしたい場合は、このスクリプトの中を # 「エラー落ち回避」で検索し、該当の行を削除して下さい(2箇所あります)。 # ############################################################################# class Last_Skill_Rick #-------------------------------------------------------------------------- # ● オブジェクト初期化(新規クラス) #-------------------------------------------------------------------------- def initialize @data = [[],[],] #2次元配列[0][Menu] [1][戦闘中] [2]Menu最終スキルタイプ end #-------------------------------------------------------------------------- # ● 使用スキルの保存 #-------------------------------------------------------------------------- def save(skill) bat = !$game_party.in_battle ? 0 : 1 #メニューなら0、戦闘中なら1 tmp = @data[bat].index{|i| i[:type] == skill.stype_id} #同じスキルタイプがあれば上書き用インデックス @data[bat][tmp ? tmp : @data[bat].size] = {:id=>skill.id, :type=>skill.stype_id} #上書きできるものが無ければプッシュ @data[2] = skill.stype_id if bat == 0 #メニューなら最終スキルタイプ保存 end #-------------------------------------------------------------------------- # ● 指定スキルタイプの保存されたスキルIDを取得 #-------------------------------------------------------------------------- def load(stype_id) bat = !$game_party.in_battle ? 0 : 1 tmp = @data[bat].index{|i| i[:type] == stype_id} #指定スキルタイプを持つインデックス取得 tmp ? @data[bat][tmp][:id] : nil #ハッシュ中の:idを返す end #-------------------------------------------------------------------------- # ● メニュー中の最終スキルタイプを取得 #-------------------------------------------------------------------------- def load_menu @data[2] end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数(最終スキル) #-------------------------------------------------------------------------- attr_accessor :last_skill_rick #-------------------------------------------------------------------------- # ● オブジェクト初期化(最終スキル初期化処理追加) #-------------------------------------------------------------------------- alias last_skill_rick_initialize initialize def initialize(actor_id) last_skill_rick_initialize(actor_id) @last_skill_rick = Last_Skill_Rick.new end end class Window_SkillCommand < Window_Command #-------------------------------------------------------------------------- # ● 前回の選択位置を復帰(メニュー中のスキルコマンド選択) #-------------------------------------------------------------------------- alias last_skill_rick_select_last select_last def select_last last_skill_rick_select_last @actor.last_skill_rick ||= Last_Skill_Rick.new #セーブ途中でのエラー落ち回避 select_ext(@actor.last_skill_rick.load_menu) end end class Window_SkillList < Window_Selectable #-------------------------------------------------------------------------- # ● 前回の選択位置を復帰(メニュー/戦闘共通) #-------------------------------------------------------------------------- alias last_skill_rick_select_last select_last def select_last last_skill_rick_select_last @actor.last_skill_rick ||= Last_Skill_Rick.new #セーブ途中でのエラー落ち回避 select(@data.index{|i| i.id == @actor.last_skill_rick.load(@stype_id)}) end end class Scene_Skill < Scene_ItemBase #-------------------------------------------------------------------------- # ● アイテム[決定](メニュー最終スキルの保存処理追加) #-------------------------------------------------------------------------- alias last_skill_rick_on_item_ok on_item_ok def on_item_ok @actor.last_skill_rick.save(item) last_skill_rick_on_item_ok end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● スキル[決定](戦闘中最終スキルの保存処理追加) #-------------------------------------------------------------------------- alias last_skill_rick_on_skill_ok on_skill_ok def on_skill_ok BattleManager.actor.last_skill_rick.save(@skill_window.item) last_skill_rick_on_skill_ok end end