#============================================================================== # ○隊列並び替え Ver1.00 # for RGSS2 # 西瓜 / Space not far # http://muspell.raindrop.jp/ # パーティーメンバーの並び順を変更するシステムです。 # このままではあまり意味がないので、「隊列による狙われやすさ設定」等と # 併用することをおすすめします。 #============================================================================== # ●つかいかた # 1.自力で改造してメニューコマンドか何かでScene_Arrangeを呼び出させるようにする。 # 2.レクトールのおまけ素材ExMenu_CustomCommandを使って呼び出しコマンドを作る。 # 3.イベントコマンドのスクリプトで$scene = Scene_Arrange.newと記述する。 module SNF ARRANGE_HEAD = "隊列並び替え" # 見出し表示 ARRANGE_RETURN = Scene_Map.new # 並び替えをやめる時戻る画面を指定します。 # Scene_Map.newならマップ画面、Scene_Menu.new(インデックス)で # メニュー画面に戻ります。 end class Scene_Arrange < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @viewport = Viewport.new(0, 0, 544, 416) @arrange_window = Window_Arrange.new(72, 86, 240, 96) @sort_window = Window_Sort.new(72, 86, 240, 96) @ptmemberstatus_window = Window_PartyMemberStatus.new(72, 180) @sort_window.opacity = 0 end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @viewport.dispose @arrange_window.dispose @sort_window.dispose @ptmemberstatus_window.dispose end def update_selection if Input.trigger?(Input::B) # キャンセルキー Sound.play_cancel if @arrange_window.active return_scene else @arrange_window.active = true @sort_window.active = false @sort_window.visible = false end elsif Input.trigger?(Input::C) # 決定キー if @arrange_window.active Sound.play_decision replace = @arrange_window.index @sort_window.index = @arrange_window.index @arrange_window.active = false @sort_window.active = true @sort_window.visible = true else if @sort_window.index != @arrange_window.index Sound.play_decision actors = [] for actor in $game_party.members actors.push(actor) end change = actors[@sort_window.index] actors[@sort_window.index] = actors[@arrange_window.index] actors[@arrange_window.index] = change $game_party.clear_members for actor in actors $game_party.add_actor(actor.id) end @arrange_window.refresh @arrange_window.active = true @sort_window.active = false @sort_window.visible = false else Sound.play_buzzer end end end end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene $scene = SNF::ARRANGE_RETURN end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super @arrange_window.update if @arrange_window.active @ptmemberstatus_window.refresh($game_party.members[@arrange_window.index]) else @ptmemberstatus_window.refresh($game_party.members[@sort_window.index]) end @sort_window.update update_selection update_menu_background end end class Game_Party < Game_Unit def clear_members @actors = [] end end class Window_Arrange < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y, weight, height) super(x, y, weight, height) refresh @column_max = 4 self.active = true self.index = 0 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(0, 0, 120, 32, SNF::ARRANGE_HEAD) @item_max = $game_party.members.size for actor in $game_party.members draw_actor_graphic(actor, 32 + actor.index * 48, 64) end end #-------------------------------------------------------------------------- # ● カーソルの更新 #-------------------------------------------------------------------------- def update_cursor if @index < 0 # カーソルなし self.cursor_rect.empty elsif @index < @item_max # 通常 self.cursor_rect.set(16 + @index * 48, 32, 32,32) end end end class Window_Sort < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y, weight, height) super(x, y, weight, height) refresh @column_max = 4 self.opacity = 0 self.active = false self.index = 0 self.visible = false end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.members.size end #-------------------------------------------------------------------------- # ● カーソルの更新 #-------------------------------------------------------------------------- def update_cursor if @index < 0 # カーソルなし self.cursor_rect.empty elsif @index < @item_max # 通常 self.cursor_rect.set(16 + @index * 48, 32, 32,32) end end end class Window_PartyMemberStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 400, WLH * 5 + 24) refresh($game_party.members[0]) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(actor) if actor != @actor self.contents.clear x,y = 8,8 draw_actor_face(actor, x, y, 92) x += 104 draw_actor_name(actor, x, y) draw_actor_level(actor, x, y + WLH * 1) draw_actor_state(actor, x, y + WLH * 1) draw_actor_hp(actor, x, y + WLH * 2) draw_actor_mp(actor, x, y + WLH * 3) x += 136 draw_actor_parameter2(actor, x, y + WLH * 0, 0) draw_actor_parameter2(actor, x, y + WLH * 1, 1) draw_actor_parameter2(actor, x, y + WLH * 2, 2) draw_actor_parameter2(actor, x, y + WLH * 3, 3) @actor = actor end end end class Window_Base < Window def draw_actor_parameter2(actor, x, y, type) case type when 0 parameter_name = Vocab::atk parameter_value = actor.atk when 1 parameter_name = Vocab::def parameter_value = actor.def when 2 parameter_name = Vocab::spi parameter_value = actor.spi when 3 parameter_name = Vocab::agi parameter_value = actor.agi end self.contents.font.color = system_color self.contents.draw_text(x, y, 120, WLH, parameter_name) self.contents.font.color = normal_color self.contents.draw_text(x + 84, y, 36, WLH, parameter_value, 2) end end