=begin   俺専用スキルウィンドウ(長いので以下俺専) スクリプトver.1.0               ~うんこ、再び~ ● 概要 スキルの量が死ぬほど多くなってくると 狙ったスキルを探すのに手間取ってまじかったるいよね! でも量が増えたからって製作者側が勝手にスキル消すと なんであのスキルがなくなってんのよウフォアアアアアアアアアアア ってなるよね! っていうか なんでこのスキルが残ってんだよ邪魔だボケウフォアアアアアアアアアアアアアアアアア ってなるけど正直知ったこっちゃ無いよね! というわけで、表示されるスキルの種類をプレイヤーに丸投げ、 もといプレイヤー主体でスキルウィンドウを構成、 使い易くカスタマイズしてもらっちゃおう☆ そういう感じのスクリプトです。 ● 基本的な使い方  イベントのスクリプトに $scene = Scene_Skill_Setting.new(0) をぶち込めば発動 キャンセルを押すとマップに戻るが このスクリプトの再下段にある数行のコメントを解除すると メニューにもどるようになる。 ● 戦闘時 スキルを選択するとデフォの代わりに俺専が出ます 切り替えボタン(デフォX、キーボードのA)を押すと デフォルトのスキルウィンドウが登場。 設定していなかったスキルも利用することができる *これ重要な ●スキルセット こっちは大体触ってみればわかるんだけど パッと見で判らない微妙な機能として デフォX、キーボードのA: 俺専からスキルを削除する。 デフォY、キーボードのS: カーソルのあっている俺専のスキルを選択状態にする 移動するとき便利。 うわざっと書いてみたら大した機能無いじゃん! 2010/01/31 ver1.01 ・CSW_SKILLSの説明と実際のスペースの数とが間違ってたの修正       ・あと意味不明な処理を削除。つーか修正 ・@customize_skillsを作った際に今覚えているスキルを   すべてコピるように変更 2010/01/30 ver1.0 公開 =end module LUD #以下設定項目 CSW_SKILLS = 49 #俺専用スキルウィンドウに登録可能なスキルの上限数 #プログラム的に0番が存在するので、奇数に設定しておくと #実際の動作ん時には偶数になる。 #奇数しておいた方が無用なすき間が生まれないので吉 CSW_BATTLE_SKILL_WINDOW_CHANGE_BUTTON = Input::X #戦闘中に、俺専用ウィンドウとデフォルト #スキルウィンドウを切り替えるためのボタン #ゲーム内でプレイヤーに知らせるようにしてください。 CSW_SKILL_SETTING_SCENE_DELETE_BUTTON = Input::Y #スキルをセットする画面で俺専用ウィンドウから登録したスキルを削除するボタン #やっぱゲーム内でプレイヤーに知らせるようにしt CSW_SKILL_SETTING_SCENE_PICK_BUTTON = Input::X #スキルをセットする画面で俺専用ウィンドウに登録してあるスキルを拾うボタン。 #現在のカーソルのスキルに切り替わるのでそのまま決定を押すと #どんどんスキルは増えて行く。 CSW_DECISION_ACTIVE_NO_CHANGE = true # ture=発動中 false=鳴りを潜め中 #考えられる限り最も謎の機能 #俺専でスキルを登録した直後にデフォルト側をアクティブに戻さない。 #連打しまくってスキルをバンバン登録出来ると言う意味不明な機能。 # end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :customize_skills #スキル用の配列 # # スキルウィンドウ表示時に呼び出す # 初期化を兼ねる。 # セーブを挟んでスクリプトを導入した際の措置。 # def customize_data if @customize_skills == nil @customize_skills = [] @customize_skills[LUD::CSW_SKILLS] = nil for i in 0...@skills.size #現在のスキルを総コピー @customize_skills[i] = @skills[i] end end end end #============================================================================== # ■ Window_Skill #------------------------------------------------------------------------------ #  スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。 #============================================================================== class Window_Skill_Customize < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 # width : ウィンドウの幅 # height : ウィンドウの高さ # actor : アクター #-------------------------------------------------------------------------- def initialize(x, y, width, height, actor) super(x, y, width, height) @actor = actor @column_max = 2 self.index = 0 @actor.customize_data refresh end #-------------------------------------------------------------------------- # ● スキルの取得 #-------------------------------------------------------------------------- def skill return @data[self.index] end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] for skill in @actor.customize_skills if skill != nil @data.push($data_skills[skill]) else @data.push nil end 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 end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- 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) draw_item_name(skill, rect.x, rect.y, enabled) self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2) end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(skill == nil ? "" : skill.description) end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● スキル選択の開始 *再定義 #-------------------------------------------------------------------------- def start_skill_selection @help_window = Window_Help.new @skill_window = Window_Skill_Customize.new(0, 56, 544, 232, @active_battler) @skill_window.help_window = @help_window @actor_command_window.active = false end #-------------------------------------------------------------------------- # ● スキルウィンドウの種別交代 #-------------------------------------------------------------------------- def skill_window_change @help_window = Window_Help.new @skill_window = Window_Skill.new(0, 56, 544, 232, @active_battler) @skill_window.help_window = @help_window @actor_command_window.active = false end #-------------------------------------------------------------------------- # ● スキル選択の更新 #-------------------------------------------------------------------------- alias customize_update_skill_selection update_skill_selection def update_skill_selection if Input.trigger?(LUD::CSW_BATTLE_SKILL_WINDOW_CHANGE_BUTTON) customize = @skill_window.is_a?(Window_Skill_Customize) end_skill_selection Sound.play_decision if customize == true skill_window_change else start_skill_selection end end @actor_command_window.active = false customize_update_skill_selection end end #============================================================================== # ■ Window_Base #------------------------------------------------------------------------------ #  ゲーム中のすべてのウィンドウのスーパークラスです。 #  スキル設定時に描写される文字色を白で強制する為の措置。 #  無関係のシーンでは通常のメソッドに渡す # #============================================================================== class Window_Base < Window alias customaize_skill_draw_item_name draw_item_name def draw_item_name(item, x, y, enabled = true) if $scene.is_a?(Scene_Skill_Setting) customaize_skill_draw_item_name(item, x, y, true) else customaize_skill_draw_item_name(item, x, y, enabled) end end end #============================================================================== # ■ Window_Active_Actor 名前の表示用 #------------------------------------------------------------------------------ #============================================================================== class Window_Active_Actor < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y,actor) super(x, y, 256, WLH + 32) @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear draw_actor_name(@actor, 0, 0) end end #============================================================================== # ■ Window_Active_Skill 選択中のスキル用 #------------------------------------------------------------------------------ #============================================================================== class Window_Active_Skill < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y,skill= nil) super(x, y, 288, WLH + 32) @item = skill refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(item= nil) if item != nil self.contents.clear draw_item_name(item, 0, 0, enabled = true) else self.contents.clear end end end #============================================================================== # ■ Scene_Skill_Setting #------------------------------------------------------------------------------ #  スキル設定用シーン。 #============================================================================== class Scene_Skill_Setting < Scene_Base #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize(actor_index = 0) @actor_index = actor_index end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @actor = $game_party.members[@actor_index] @help_window = Window_Help.new @actor_window = Window_Active_Actor.new(0,56,@actor) @active_skill_window = Window_Active_Skill.new(256,56) @skill_window = Window_Skill.new(0, 112, 544, 152, @actor) @skill_window.help_window = @help_window @skill_window_customize = Window_Skill_Customize.new(0, 264, 544, 152,@actor) @skill_window_customize.help_window = @help_window skill_window_active end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @help_window.dispose @skill_window_customize.dispose @skill_window.dispose @actor_window.dispose @active_skill_window.dispose end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene $scene = Scene_Map.new end #-------------------------------------------------------------------------- # ● 次のアクターの画面に切り替え #-------------------------------------------------------------------------- def next_actor @actor_index += 1 @actor_index %= $game_party.members.size $scene = Scene_Skill_Setting.new(@actor_index) end #-------------------------------------------------------------------------- # ● 前のアクターの画面に切り替え #-------------------------------------------------------------------------- def prev_actor @actor_index += $game_party.members.size - 1 @actor_index %= $game_party.members.size $scene = Scene_Skill_Setting.new(@actor_index) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super @help_window.update @skill_window_customize.update @skill_window.update if @skill_window.active == true update_skill_selection else update_skill_customize end end #-------------------------------------------------------------------------- # ● アイテム選択の更新 #-------------------------------------------------------------------------- def update_skill_selection if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::R) Sound.play_cursor next_actor elsif Input.trigger?(Input::L) Sound.play_cursor prev_actor elsif Input.trigger?(Input::C) Sound.play_decision @skill = @skill_window.skill @active_skill_window.refresh(@skill) skill_window_customize_active end end #-------------------------------------------------------------------------- # ● 登録側の処理開始 #-------------------------------------------------------------------------- def update_skill_customize if Input.trigger?(Input::B) Sound.play_cancel skill_window_active elsif Input.trigger?(Input::C) if @skill == nil @actor.customize_skills[@skill_window_customize.index] = nil Sound.play_cancel @skill_window_customize.refresh else Sound.play_decision @actor.customize_skills[@skill_window_customize.index] = @skill.id @skill_window_customize.refresh if LUD::CSW_DECISION_ACTIVE_NO_CHANGE == false then skill_window_active end end # 削除 elsif Input.trigger?(LUD::CSW_SKILL_SETTING_SCENE_DELETE_BUTTON) @actor.customize_skills[@skill_window_customize.index] = nil Sound.play_cancel @skill_window_customize.refresh # スキル取得 elsif Input.trigger?(LUD::CSW_SKILL_SETTING_SCENE_PICK_BUTTON) @skill = @skill_window_customize.skill @active_skill_window.refresh(@skill) Sound.play_decision @skill_window_customize.refresh end end #-------------------------------------------------------------------------- # ● スキルウィンドウをアクティブに #-------------------------------------------------------------------------- def skill_window_active @skill_window_customize.active = false @skill_window_customize.opacity = 128 @skill_window.active = true @skill_window.opacity = 256 end #-------------------------------------------------------------------------- # ● カスタマイズスキルウィンドウをアクティブに #-------------------------------------------------------------------------- def skill_window_customize_active @skill_window_customize.active = true @skill_window_customize.opacity = 256 @skill_window.active = false @skill_window.opacity = 128 end end # 下をコメント解除でスキル設定シーンからメニューにもどるようになる #この行はコメント解除しないでね。 #~ #============================================================================== #~ # ■ Scene_Skill_Setting #~ #------------------------------------------------------------------------------ #~ #  スキル設定用シーン。 #~ #============================================================================== #~ class Scene_Skill_Setting < Scene_Base #~ def return_scene #~ $scene = Scene_Menu.new(0) #~ end #~ end