#============================================================================== # スキル並べ替えスクリプト ver1.05 #------------------------------------------------------------------------------ # [仕様] # 新規に覚えたスキルは欄の一番最後に追加されます。 # # [導入上の注意] # 特になし # # Kamesoft様の「スキル分類」と同時に使用する場合は # 当スクリプトの428行目の「for skill in @actor.skills」を # 「for skill in @actor.skill_list」としてください。 # また、本スクリプトを「スキル分類」より上に追加してください。 # # 編集結果によって、行数がずれていることがあると思います。 # 該当箇所は「class Window_Skill」の「def refresh」にあります。 # # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.05 スキルを忘れても、リストからスキルが消えないのを修正。 # ver1.04 ニューゲームで開始してもエラーが出ないようになりました。(途中からの導入が可能に) # ver1.03 F12でリセットしたとき、エラーが出てしまっていたのを修正。 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module SET_SKILL # 入れ替えをするキーです。 INPUT_KEY = Input::A # 入れ替え中に表示する文字です。 VOCAB = "並べ替えたいスキルを選んで下さい" # 選択中のスキルの色です。 COLOR = Color.new(96, 96, 255) end end #============================================================================== # ここまで #============================================================================== #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill < Scene_Base include Kazari #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias skill_set_start start def start skill_set_start @skill_set_window = Window_Help.new @skill_set_window.visible = false @skill_set = false end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @help_window.update @status_window.update @skill_window.update @target_window.update if @skill_set update_skill_set elsif @skill_window.active update_skill_selection elsif @target_window.active update_target_selection end end #-------------------------------------------------------------------------- # ● スキル選択の更新 #-------------------------------------------------------------------------- alias skill_set_update_skill_selection update_skill_selection def update_skill_selection if Input.trigger?(SET_SKILL::INPUT_KEY) if @skill_window.skill == nil Sound.play_buzzer else Sound.play_decision @skill_set_window.visible = true @help_window.visible = false @set_skill = @skill_window.skill @skill_window.set_skill(@set_skill) @skill_set_window.set_text(SET_SKILL::VOCAB) @skill_set = true @skill_window.refresh end end skill_set_update_skill_selection end #-------------------------------------------------------------------------- # ● スキル並べ替えの更新 #-------------------------------------------------------------------------- def update_skill_set if Input.trigger?(Input::B) Sound.play_cancel @skill_set_window.visible = false @help_window.visible = true @skill_set = false @skill_window.refresh elsif Input.trigger?(Input::C) || Input.trigger?(SET_SKILL::INPUT_KEY) Sound.play_decision @skill_set_window.visible = false @help_window.visible = true @skill = @skill_window.skill before = after = 0 for skill in @actor.skill_list break if skill == @skill before += 1 end for skill in @actor.skill_list break if skill == @set_skill after += 1 end @actor.change_skill_list([before, @skill.id], [after, @set_skill.id]) @skill_window.refresh @skill_set = false end end end #============================================================================== # ■ Window_Skill #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias set_skill_initialize initialize def initialize(x, y, width, height, actor) @skill_id = 0 set_skill_initialize(x, y, width, height, actor) end #-------------------------------------------------------------------------- # ● 並べ替えるスキルのセッティング #-------------------------------------------------------------------------- def set_skill(skill) @skill_id = skill.id end #-------------------------------------------------------------------------- # ● リフレッシュ ※ 再定義 #-------------------------------------------------------------------------- def refresh @data = [] for skill in @actor.skill_list @data.push(skill) if skill.id == @actor.last_skill_id self.index = @data.size - 1 end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end @skill_id = 0 end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 enabled = @actor.skill_can_use?(skill) || skill.id == @skill_id draw_item_name(skill, rect.x, rect.y, enabled) self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2) end end #-------------------------------------------------------------------------- # ● アイテム名の描画 #-------------------------------------------------------------------------- def draw_item_name(skill, x, y, enabled = true) if skill != nil draw_icon(skill.icon_index, x, y, enabled) self.contents.font.color = skill.id == @skill_id ? Kazari::SET_SKILL::COLOR : normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x + 24, y, 172, WLH, skill.name) end end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias skill_list_setup setup def setup(actor_id) @skill_list = [] skill_list_setup(actor_id) end #-------------------------------------------------------------------------- # ● スキルウィンドウに並べるスキルのリスト #-------------------------------------------------------------------------- def skill_list @skill_list = @skills if @skill_list == nil list = [] for skill_id in @skill_list do list.push($data_skills[skill_id]) end return list end #-------------------------------------------------------------------------- # ● スキルを覚える #-------------------------------------------------------------------------- alias skill_list_learn_skill learn_skill def learn_skill(skill_id) unless skill_learn?($data_skills[skill_id]) @skill_list.push(skill_id) end skill_list_learn_skill(skill_id) end #-------------------------------------------------------------------------- # ● スキルを忘れる #-------------------------------------------------------------------------- alias skill_list_forget_skill forget_skill def forget_skill(skill_id) @skill_list.delete(skill_id) skill_list_forget_skill(skill_id) end #-------------------------------------------------------------------------- # ● スキルの並び順を変更する #-------------------------------------------------------------------------- def change_skill_list(before, after) @skill_list[before[0]] = after[1] @skill_list[after[0]] = before[1] end end