#============================================================================== # 「変化スキル」(ACE) ver1.0 # 製作者:奈々(なな) # へぷたなすくろーる http://heptanas.mamagoto.com/ # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # #------------------------------------------------------------------------------ # # スキルのメモ欄で<スキル変化 ID>と記述します。(複数可能) # このスキルを親スキル、指定したIDのスキルを子スキルと呼びます。 # スキル使用で親スキルを選択すると、子スキルの一覧が表示され # その子スキルを選んで使用することになります。 # # スキルの性能やコストなどは全て子スキルのものが使われ、親スキルは無関係です。 # 但し親スキルの使用条件を満たしていないと一覧が表示されないため # 例えば親スキルがMP10消費であれば、MP10未満のときは子スキルを使用できません。 # # 変化は一段階のみ有効ですので、子スキルから更に孫スキルに派生はしません。 # よって<スキル変化 ID>で親スキル自身のIDを登録することも可能です。 # #============================================================================== class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # ● 変化先スキルの定義(追加定義) #-------------------------------------------------------------------------- def changetoskills list = [] @note.scan(/<スキル変化\s?(\d*)>/) {|s| list.push($data_skills[$1.to_i]) if $1 } return list end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ # バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 全ウィンドウの作成 #-------------------------------------------------------------------------- alias create_all_windows2 create_all_windows def create_all_windows create_all_windows2 create_changetoskill_window end #-------------------------------------------------------------------------- # ● 変化先スキルウィンドウの作成 #-------------------------------------------------------------------------- def create_changetoskill_window @changetoskill_window = Window_BattleChangetoSkill.new(@help_window, @info_viewport) @changetoskill_window.set_handler(:ok, method(:on_changetoskill_ok)) @changetoskill_window.set_handler(:cancel, method(:on_changetoskill_cancel)) end #-------------------------------------------------------------------------- # ● スキル[決定] #-------------------------------------------------------------------------- def on_skill_ok @skill = @skill_window.item if @skill.changetoskills != [] @skill_window.hide @changetoskill_window.actor = BattleManager.actor @changetoskill_window.changetoskills = @skill.changetoskills @changetoskill_window.show.activate return end BattleManager.actor.input.set_skill(@skill.id) BattleManager.actor.last_skill.object = @skill if !@skill.need_selection? @skill_window.hide next_command elsif @skill.for_opponent? select_enemy_selection else select_actor_selection end end #-------------------------------------------------------------------------- # ● 変化先スキル[決定] #-------------------------------------------------------------------------- def on_changetoskill_ok @changetoskill = @changetoskill_window.item BattleManager.actor.input.set_skill(@changetoskill.id) BattleManager.actor.last_skill.object = @changetoskill if !@changetoskill.need_selection? @changetoskill_window.hide next_command elsif @changetoskill.for_opponent? select_enemy_selection else select_actor_selection end end #-------------------------------------------------------------------------- # ● 変化先スキル[キャンセル] #-------------------------------------------------------------------------- def on_changetoskill_cancel @changetoskill_window.hide @skill_window.show.activate end #-------------------------------------------------------------------------- # ● アクター[決定] #-------------------------------------------------------------------------- def on_actor_ok BattleManager.actor.input.target_index = @actor_window.index @actor_window.hide @skill_window.hide @changetoskill_window.hide @item_window.hide next_command end #-------------------------------------------------------------------------- # ● アクター[キャンセル] #-------------------------------------------------------------------------- def on_actor_cancel @actor_window.hide case @actor_command_window.current_symbol when :skill @changetoskill_window.hide @skill_window.show.activate when :item @item_window.activate end end #-------------------------------------------------------------------------- # ● 敵キャラ[決定] #-------------------------------------------------------------------------- def on_enemy_ok BattleManager.actor.input.target_index = @enemy_window.enemy.index @enemy_window.hide @skill_window.hide @changetoskill_window.hide @item_window.hide next_command end #-------------------------------------------------------------------------- # ● 敵キャラ[キャンセル] #-------------------------------------------------------------------------- def on_enemy_cancel @enemy_window.hide case @actor_command_window.current_symbol when :attack @actor_command_window.activate when :skill @changetoskill_window.hide @skill_window.show.activate when :item @item_window.activate end end end #============================================================================== # ■ Window_Battlechangetoskill #------------------------------------------------------------------------------ # バトル画面で、使用する変化先スキルを選択するウィンドウです。 #============================================================================== class Window_BattleChangetoSkill < Window_SkillList #-------------------------------------------------------------------------- # ● オブジェクト初期化 # info_viewport : 情報表示用ビューポート #-------------------------------------------------------------------------- def initialize(help_window, info_viewport) y = help_window.height super(0, y, Graphics.width, info_viewport.rect.y - y) self.visible = false @help_window = help_window @info_viewport = info_viewport @changetoskills = nil end #-------------------------------------------------------------------------- # ● 変化先スキルの設定 #-------------------------------------------------------------------------- def changetoskills=(changetoskills) return if @changetoskills == changetoskills @changetoskills = changetoskills refresh self.oy = 0 end #-------------------------------------------------------------------------- # ● スキルリストの作成 #-------------------------------------------------------------------------- def make_item_list @data = @changetoskills ? @changetoskills : [] end #-------------------------------------------------------------------------- # ● ウィンドウの表示 #-------------------------------------------------------------------------- def show select(0) @help_window.show super end #-------------------------------------------------------------------------- # ● ウィンドウの非表示 #-------------------------------------------------------------------------- def hide @help_window.hide super end end #============================================================================== # ■ Scene_Skill #------------------------------------------------------------------------------ # スキル画面の処理を行うクラスです。処理共通化の便宜上、スキルも「アイテム」 # として扱っています。 #============================================================================== class Scene_Skill < Scene_ItemBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias start2 start def start start2 create_changetoitem_window @change = false end #-------------------------------------------------------------------------- # ● 変化先アイテムウィンドウの作成 #-------------------------------------------------------------------------- def create_changetoitem_window wx = 0 wy = @status_window.y + @status_window.height ww = Graphics.width wh = Graphics.height - wy @changetoitem_window = Window_ChangetoSkillList.new(wx, wy, ww, wh) @changetoitem_window.actor = @actor @changetoitem_window.viewport = @viewport @changetoitem_window.help_window = @help_window @changetoitem_window.set_handler(:ok, method(:on_changetoitem_ok)) @changetoitem_window.set_handler(:cancel, method(:on_changetoitem_cancel)) @changetoitem_window.hide end #-------------------------------------------------------------------------- # ● 現在選択されているアイテムの取得 #-------------------------------------------------------------------------- def item @change ? @changetoitem_window.item : @item_window.item end #-------------------------------------------------------------------------- # ● カーソルが左列にあるかの判定 #-------------------------------------------------------------------------- def cursor_left? @change ? @changetoitem_window.index % 2 == 0 : @item_window.index % 2 == 0 end #-------------------------------------------------------------------------- # ● アイテム[決定] #-------------------------------------------------------------------------- def on_item_ok @change = false if item.changetoskills != [] @item_window.hide @changetoitem_window.changetoskills = item.changetoskills @changetoitem_window.select(0) @change = true @changetoitem_window.show.activate return end @actor.last_skill.object = item determine_item end #-------------------------------------------------------------------------- # ● 変化先アイテム[決定] #-------------------------------------------------------------------------- def on_changetoitem_ok @actor.last_skill.object = item determine_item end #-------------------------------------------------------------------------- # ● 変化先アイテム[キャンセル] #-------------------------------------------------------------------------- def on_changetoitem_cancel @changetoitem_window.hide @item_window.show.activate end #-------------------------------------------------------------------------- # ● アクター[キャンセル] #-------------------------------------------------------------------------- def on_actor_cancel hide_sub_window(@actor_window) @changetoitem_window.hide @item_window.show.activate end end #============================================================================== # ■ Window_ChangetoSkillList #------------------------------------------------------------------------------ # スキル画面で、使用できるスキルの一覧を表示するウィンドウです。 #============================================================================== class Window_ChangetoSkillList < Window_SkillList #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @actor = nil @stype_id = 0 @data = [] @changetoskills = nil end #-------------------------------------------------------------------------- # ● 変化先スキルの設定 #-------------------------------------------------------------------------- def changetoskills=(changetoskills) return if @changetoskills == changetoskills @changetoskills = changetoskills refresh self.oy = 0 end #-------------------------------------------------------------------------- # ● スキルリストの作成 #-------------------------------------------------------------------------- def make_item_list @data = @changetoskills ? @changetoskills : [] end end