#============================================================================== # ■ パーティ入れ替え改 ver 1.03 本体プログラム #------------------------------------------------------------------------------ #  配布元: # 白の魔 http://www12.plala.or.jp/izumiizayoi/tkool/ # #  利用規約: # RPGツクールVXの正規の登録者のみご利用になれます。 # 利用報告・著作権表示とかは必要ありません。 # 改造もご自由にどうぞ。 # 何か問題が発生しても責任は持ちません。 #============================================================================== #============================================================================== # ■ WD_memberchange_commonmethod #------------------------------------------------------------------------------ #  各ウィンドウで使用する共通描画用メソッドを定義するモジュールです。 #============================================================================== module WD_memberchange_commonmethod #-------------------------------------------------------------------------- # ● 名前の描画 #-------------------------------------------------------------------------- def draw_actor_name(actor, x, y, width, enabled = true) self.contents.font.color = hp_color(actor) self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x, y, width, 24, actor.name) end #-------------------------------------------------------------------------- # ● クラスの描画 #-------------------------------------------------------------------------- def draw_actor_class(actor, x, y, width, enabled = true) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x, y, width, 24, actor.class.name) end #-------------------------------------------------------------------------- # ● レベルの描画 #-------------------------------------------------------------------------- def draw_actor_level(actor, x, y, width, enabled = true) self.contents.font.color = system_color self.contents.draw_text(x, y, width, 24, Vocab::level_a) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x, y, width, 24, actor.level, 2) end #-------------------------------------------------------------------------- # ● 能力値の描画 #-------------------------------------------------------------------------- def draw_actor_parameter(actor, x, y, width, type, enabled = true) 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 when 4 parameter_name = Vocab::hp parameter_value = actor.maxhp when 5 parameter_name = Vocab::mp parameter_value = actor.maxmp end self.contents.font.color = system_color self.contents.draw_text(x, y, width, 24, parameter_name) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x, y, width, 24, parameter_value, 2) end #-------------------------------------------------------------------------- # ● トータルの経験値情報の描画 #-------------------------------------------------------------------------- def draw_exptotal_info(actor, x, y, width) s1 = actor.exp_s self.contents.font.color = system_color self.contents.draw_text(x, y, width, 24, Vocab::ExpTotal) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, 24, s1, 2) end #-------------------------------------------------------------------------- # ● 次のレベルまでの経験値情報の描画 #-------------------------------------------------------------------------- def draw_expnext_info(actor, x, y, width) s2 = actor.next_rest_exp_s s_next = sprintf(Vocab::ExpNext, Vocab::level) self.contents.font.color = system_color self.contents.draw_text(x, y, width, 24, s_next) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, 24, s2, 2) end #-------------------------------------------------------------------------- # ● 装備品の描画 #-------------------------------------------------------------------------- def draw_equip_name(item, x, y, width, enabled = true) if item != nil draw_icon(item.icon_index, x, y, enabled) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x + 24, y, width, 24, item.name) end end #-------------------------------------------------------------------------- # ● スキルの描画 #-------------------------------------------------------------------------- def draw_skill_name(item, x, y, width, enabled = true) if item != nil draw_icon(item.icon_index, x, y, enabled) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x + 24, y, width-24, 24, item.name) end end #-------------------------------------------------------------------------- # ● アクターの歩行グラフィック描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_actor_graphic(actor, x, y, enabled = true) draw_character(actor.character_name, actor.character_index, x, y, enabled) end #-------------------------------------------------------------------------- # ● 歩行グラフィックの描画 # character_name : 歩行グラフィック ファイル名 # character_index : 歩行グラフィック インデックス # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_character(character_name, character_index, x, y, enabled = true) return if character_name == nil bitmap = Cache.character(character_name) sign = character_name[/^[\!\$]./] if sign != nil and sign.include?('$') cw = bitmap.width / 3 ch = bitmap.height / 4 else cw = bitmap.width / 12 ch = bitmap.height / 8 end n = character_index src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch) if enabled == true self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, 255) else self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, 128) end end #-------------------------------------------------------------------------- # ● アクターの顔グラフィック描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # size : 表示サイズ #-------------------------------------------------------------------------- def draw_actor_face(actor, x, y, size = 96, enabled = true) draw_face(actor.face_name, actor.face_index, x, y, size, enabled) end #-------------------------------------------------------------------------- # ● 顔グラフィックの描画 # face_name : 顔グラフィック ファイル名 # face_index : 顔グラフィック インデックス # x : 描画先 X 座標 # y : 描画先 Y 座標 # size : 表示サイズ #-------------------------------------------------------------------------- def draw_face(face_name, face_index, x, y, size = 96, enabled = true) bitmap = Cache.face(face_name) rect = Rect.new(0, 0, 0, 0) rect.x = face_index % 4 * 96 + (96 - size) / 2 rect.y = face_index / 4 * 96 + (96 - size) / 2 rect.width = size rect.height = size if enabled == true self.contents.blt(x, y, bitmap, rect, 255) else self.contents.blt(x, y, bitmap, rect, 128) end bitmap.dispose end #-------------------------------------------------------------------------- # ● HP の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 幅 #-------------------------------------------------------------------------- def draw_actor_hp(actor, x, y, width, enabled = true) draw_actor_hp_gauge(actor, x, y, width) self.contents.font.color = system_color self.contents.draw_text(x, y, 30, 24, Vocab::hp_a) self.contents.font.color = hp_color(actor) self.contents.font.color.alpha = enabled ? 255 : 128 xr = x + width if width < 120 self.contents.draw_text(xr - 40, y, 40, 24, actor.hp, 2) else self.contents.draw_text(xr - 90, y, 40, 24, actor.hp, 2) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(xr - 50, y, 10, 24, "/", 2) self.contents.draw_text(xr - 40, y, 40, 24, actor.maxhp, 2) end end #-------------------------------------------------------------------------- # ● MP の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 幅 #-------------------------------------------------------------------------- def draw_actor_mp(actor, x, y, width, enabled = true) draw_actor_mp_gauge(actor, x, y, width) self.contents.font.color = system_color self.contents.draw_text(x, y, 30, 24, Vocab::mp_a) self.contents.font.color = mp_color(actor) self.contents.font.color.alpha = enabled ? 255 : 128 xr = x + width if width < 120 self.contents.draw_text(xr - 40, y, 40, 24, actor.mp, 2) else self.contents.draw_text(xr - 90, y, 40, 24, actor.mp, 2) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(xr - 50, y, 10, 24, "/", 2) self.contents.draw_text(xr - 40, y, 40, 24, actor.maxmp, 2) end end end #============================================================================== # ■ Window_SelectableMemberChange1-2 #------------------------------------------------------------------------------ #  カーソルの移動やスクロールの機能を持つウィンドウクラスです。 #============================================================================== class Window_SelectableMemberChange1 < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :item_max # 項目数 attr_reader :column_max # 桁数 attr_reader :index # カーソル位置 attr_reader :help_window # ヘルプウィンドウ #-------------------------------------------------------------------------- # ● ウィンドウ内容の作成 #-------------------------------------------------------------------------- def create_contents self.contents.dispose self.contents = Bitmap.new( width - 32, [height - 32, row_max * ( WD_memberchange_layout1::Rect_height + WD_memberchange_layout1::Rect_interval) - WD_memberchange_layout1::Rect_interval].max) end #-------------------------------------------------------------------------- # ● 先頭の行の取得 #-------------------------------------------------------------------------- def top_row return self.oy / (WD_memberchange_layout1::Rect_height + WD_memberchange_layout1::Rect_interval) end #-------------------------------------------------------------------------- # ● 先頭の行の設定 # row : 先頭に表示する行 #-------------------------------------------------------------------------- def top_row=(row) row = 0 if row < 0 row = row_max - 1 if row > row_max - 1 self.oy = row * (WD_memberchange_layout1::Rect_height + WD_memberchange_layout1::Rect_interval) end #-------------------------------------------------------------------------- # ● 1 ページに表示できる行数の取得 #-------------------------------------------------------------------------- def page_row_max return (self.height - 32 + WD_memberchange_layout1::Rect_interval) / (WD_memberchange_layout1::Rect_height + WD_memberchange_layout1::Rect_interval) end #-------------------------------------------------------------------------- # ● 項目を描画する矩形の取得 # index : 項目番号 #-------------------------------------------------------------------------- def item_rect(index) rect = Rect.new(0, 0, 0, 0) rect.width = WD_memberchange_layout1::Rect_width rect.height = WD_memberchange_layout1::Rect_height rect.x = index % @column_max * (rect.width + WD_memberchange_layout1::Rect_spacing) rect.y = index / @column_max * (rect.height + WD_memberchange_layout1::Rect_interval) return rect end end class Window_SelectableMemberChange2 < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :item_max # 項目数 attr_reader :column_max # 桁数 attr_reader :index # カーソル位置 attr_reader :help_window # ヘルプウィンドウ #-------------------------------------------------------------------------- # ● ウィンドウ内容の作成 #-------------------------------------------------------------------------- def create_contents self.contents.dispose self.contents = Bitmap.new( width - 32, [height - 32, row_max * ( WD_memberchange_layout2::Rect_height + WD_memberchange_layout2::Rect_interval) - WD_memberchange_layout2::Rect_interval].max) end #-------------------------------------------------------------------------- # ● 先頭の行の取得 #-------------------------------------------------------------------------- def top_row return self.oy / (WD_memberchange_layout2::Rect_height + WD_memberchange_layout2::Rect_interval) end #-------------------------------------------------------------------------- # ● 先頭の行の設定 # row : 先頭に表示する行 #-------------------------------------------------------------------------- def top_row=(row) row = 0 if row < 0 row = row_max - 1 if row > row_max - 1 self.oy = row * (WD_memberchange_layout2::Rect_height + WD_memberchange_layout2::Rect_interval) end #-------------------------------------------------------------------------- # ● 1 ページに表示できる行数の取得 #-------------------------------------------------------------------------- def page_row_max return (self.height - 32 + WD_memberchange_layout2::Rect_interval) / (WD_memberchange_layout2::Rect_height + WD_memberchange_layout2::Rect_interval) end #-------------------------------------------------------------------------- # ● 項目を描画する矩形の取得 # index : 項目番号 #-------------------------------------------------------------------------- def item_rect(index) rect = Rect.new(0, 0, 0, 0) rect.width = WD_memberchange_layout2::Rect_width rect.height = WD_memberchange_layout2::Rect_height rect.x = index % @column_max * (rect.width + WD_memberchange_layout2::Rect_spacing) rect.y = index / @column_max * (rect.height + WD_memberchange_layout2::Rect_interval) return rect end end #============================================================================== # ■ Scene_MemberChange #------------------------------------------------------------------------------ #  パーティ入れ替えの処理を行うクラスです。 #============================================================================== class Scene_MemberChange < Scene_Base #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize #特に処理なし end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @viewport = Viewport.new(0, 0, 544, 416) @frontmember_window = Window_FrontMember.new @frontmember_window.viewport = @viewport @frontmember_window.active = true @backmember_window = Window_BackMember.new @backmember_window.viewport = @viewport @backmember_window.active = false @memberstatus_window = Window_MemberStatus.new @memberstatus_window.viewport = @viewport if WD_memberchange_ini::Eliminate_use @eliminate_window = Window_EliminateMember.new @eliminate_window.viewport = @viewport @eliminate_window.visible = false @eliminate_window.active = false end if WD_memberchange_ini::Sort_use @sortstatus_window = Window_SortStatus.new @sortstatus_window.viewport = @viewport end if WD_memberchange_ini::Exwindow1_use @extra_window1 = Window_ExtraText1.new @extra_window1.viewport = @viewport if WD_memberchange_ini::Exwindow1_timing == 3 @extra_window1.visible = false end end if WD_memberchange_ini::Exwindow2_use @extra_window2 = Window_ExtraText2.new @extra_window2.viewport = @viewport if WD_memberchange_ini::Exwindow2_timing == 3 @extra_window2.visible = false end end if WD_memberchange_ini::Exwindow3_use @extra_window3 = Window_ExtraText3.new @extra_window3.viewport = @viewport if WD_memberchange_ini::Exwindow3_timing == 3 @extra_window3.visible = false end end @last_index = -1 @backmember_window.index = -1 end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @frontmember_window.dispose @backmember_window.dispose @memberstatus_window.dispose @sortstatus_window.dispose if WD_memberchange_ini::Sort_use @eliminate_window.dispose if WD_memberchange_ini::Eliminate_use @extra_window1.dispose if WD_memberchange_ini::Exwindow1_use @extra_window2.dispose if WD_memberchange_ini::Exwindow2_use @extra_window3.dispose if WD_memberchange_ini::Exwindow3_use end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene $scene = Scene_Map.new # $scene = Scene_Menu.new(6) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @frontmember_window.update @backmember_window.update @memberstatus_window.update @sortstatus_window.update if WD_memberchange_ini::Sort_use @eliminate_window.update if WD_memberchange_ini::Eliminate_use @extra_window1.update if WD_memberchange_ini::Exwindow1_use @extra_window2.update if WD_memberchange_ini::Exwindow2_use @extra_window3.update if WD_memberchange_ini::Exwindow3_use if @frontmember_window.active if @frontmember_window.index < $game_party.members.size actorid = $game_party.members[@frontmember_window.index].id else actorid = -1 end @memberstatus_window.set_actorid(actorid) update_frontmember_selection elsif @backmember_window.active if @backmember_window.index < @backmember_window.actor.size actorid = @backmember_window.actor[@backmember_window.index].id else actorid = -1 end @memberstatus_window.set_actorid(actorid) update_backmember_selection elsif @eliminate_window.active update_eliminate_selection end end #-------------------------------------------------------------------------- # ● 外すアクター選択の更新 #-------------------------------------------------------------------------- def update_frontmember_selection hantei = true if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) if @frontmember_window.index < $game_party.members.size actorid = $game_party.members[@frontmember_window.index].id if WD_memberchange_ini::Fix_switch[actorid] != nil if $game_switches[WD_memberchange_ini::Fix_switch[actorid]] == true hantei = false end end end if hantei == true Sound.play_decision @frontmember_window.active = false @backmember_window.active = true if WD_memberchange_ini::Exwindow1_use case WD_memberchange_ini::Exwindow1_timing when 2 @extra_window1.visible = false when 3 @extra_window1.visible = true end end if WD_memberchange_ini::Exwindow2_use case WD_memberchange_ini::Exwindow2_timing when 2 @extra_window2.visible = false when 3 @extra_window2.visible = true end end if WD_memberchange_ini::Exwindow3_use case WD_memberchange_ini::Exwindow3_timing when 2 @extra_window3.visible = false when 3 @extra_window3.visible = true end end if @last_index != -1 @backmember_window.index = @last_index else @backmember_window.index = 0 end else Sound.play_buzzer end elsif Input.trigger?(Input::X) and WD_memberchange_ini::Sort_use and WD_memberchange_ini::Sort_frontcommand $game_variables[WD_memberchange_ini::Sort_variable] += 1 if $game_variables[WD_memberchange_ini::Sort_variable] >= WD_memberchange_ini::Sort_series.size $game_variables[WD_memberchange_ini::Sort_variable] = 0 end @backmember_window.refresh @sortstatus_window.refresh @last_index = 0 if WD_memberchange_ini::Sort_indexini Sound.play_cursor end end #-------------------------------------------------------------------------- # ● 加えるアクター選択の更新 #-------------------------------------------------------------------------- def update_backmember_selection if Input.trigger?(Input::B) Sound.play_cancel @frontmember_window.active = true @backmember_window.active = false if WD_memberchange_ini::Exwindow1_use case WD_memberchange_ini::Exwindow1_timing when 2 @extra_window1.visible = true when 3 @extra_window1.visible = false end end if WD_memberchange_ini::Exwindow2_use case WD_memberchange_ini::Exwindow2_timing when 2 @extra_window2.visible = true when 3 @extra_window2.visible = false end end if WD_memberchange_ini::Exwindow3_use case WD_memberchange_ini::Exwindow3_timing when 2 @extra_window3.visible = true when 3 @extra_window3.visible = false end end @last_index = @backmember_window.index @backmember_window.index = -1 elsif Input.trigger?(Input::C) actor = @backmember_window.actor[@backmember_window.index] if $game_party.members.include?(actor) == true Sound.play_buzzer elsif $game_party.members.size == 1 and @backmember_window.index == @backmember_window.actor.size Sound.play_buzzer elsif @frontmember_window.index == $game_party.members.size and @backmember_window.index == @backmember_window.actor.size Sound.play_buzzer else Sound.play_decision determine_member end elsif Input.trigger?(Input::Y) and WD_memberchange_ini::Eliminate_use actor = @backmember_window.actor[@backmember_window.index] if @backmember_window.index == @backmember_window.actor.size Sound.play_buzzer elsif $game_party.members.include?(actor) == true Sound.play_buzzer elsif WD_memberchange_ini::Fix_switch2[actor.id] != nil and $game_switches[WD_memberchange_ini::Fix_switch2[actor.id]] == true Sound.play_buzzer else Sound.play_decision @backmember_window.active = false @eliminate_window.index = 1 @eliminate_window.visible = true @eliminate_window.active = true end elsif Input.trigger?(Input::X) and WD_memberchange_ini::Sort_use $game_variables[WD_memberchange_ini::Sort_variable] += 1 if $game_variables[WD_memberchange_ini::Sort_variable] >= WD_memberchange_ini::Sort_series.size $game_variables[WD_memberchange_ini::Sort_variable] = 0 end @backmember_window.refresh @sortstatus_window.refresh @backmember_window.index = 0 if WD_memberchange_ini::Sort_indexini Sound.play_cursor end end #-------------------------------------------------------------------------- # ● 除籍確認の更新 #-------------------------------------------------------------------------- def update_eliminate_selection if Input.trigger?(Input::B) Sound.play_cancel @eliminate_window.visible = false @eliminate_window.active = false @backmember_window.active = true elsif Input.trigger?(Input::C) if @eliminate_window.index == 0 Sound.play_decision eliminate_member @eliminate_window.visible = false @eliminate_window.active = false @backmember_window.active = true else Sound.play_cancel @eliminate_window.visible = false @eliminate_window.active = false @backmember_window.active = true end end end #-------------------------------------------------------------------------- # ● 入れ替えの決定 #-------------------------------------------------------------------------- def determine_member if WD_memberchange_ini::Remove_equip == true and @frontmember_window.index != $game_party.members.size actor = $game_party.members[@frontmember_window.index] remove_equip(actor) if WD_memberchange_ini::Remove_equip end membersize = $game_party.members.size membersize += 1 if @frontmember_window.index == membersize actorid_1 = $game_party.members[0].id actorid_2 = $game_party.members[1].id actorid_3 = $game_party.members[2].id actorid_4 = $game_party.members[3].id $game_party.remove_actor(actorid_4) $game_party.remove_actor(actorid_3) $game_party.remove_actor(actorid_2) $game_party.remove_actor(actorid_1) case @frontmember_window.index when 0 if @backmember_window.index != @backmember_window.actor.size actorid_1 = @backmember_window.actor[@backmember_window.index].id else actorid_1 = 0 #アクターを外すだけで加えない end when 1 if @backmember_window.index != @backmember_window.actor.size actorid_2 = @backmember_window.actor[@backmember_window.index].id else actorid_2 = 0 #アクターを外すだけで加えない end when 2 if @backmember_window.index != @backmember_window.actor.size actorid_3 = @backmember_window.actor[@backmember_window.index].id else actorid_3 = 0 #アクターを外すだけで加えない end when 3 if @backmember_window.index != @backmember_window.actor.size actorid_4 = @backmember_window.actor[@backmember_window.index].id else actorid_4 = 0 #アクターを外すだけで加えない end end $game_party.add_actor(actorid_1) if membersize >= 1 and actorid_1 != 0 $game_party.add_actor(actorid_2) if membersize >= 2 and actorid_2 != 0 $game_party.add_actor(actorid_3) if membersize >= 3 and actorid_3 != 0 $game_party.add_actor(actorid_4) if membersize >= 4 and actorid_4 != 0 @backmember_window.active = false @last_index = @backmember_window.index @backmember_window.index = -1 @frontmember_window.active = true @backmember_window.refresh @frontmember_window.refresh if WD_memberchange_ini::Exwindow1_use case WD_memberchange_ini::Exwindow1_timing when 2 @extra_window1.visible = true when 3 @extra_window1.visible = false end end if WD_memberchange_ini::Exwindow2_use case WD_memberchange_ini::Exwindow2_timing when 2 @extra_window2.visible = true when 3 @extra_window2.visible = false end end if WD_memberchange_ini::Exwindow3_use case WD_memberchange_ini::Exwindow3_timing when 2 @extra_window3.visible = true when 3 @extra_window3.visible = false end end end #-------------------------------------------------------------------------- # ● 装備を外す #-------------------------------------------------------------------------- def remove_equip(actor) actor.change_equip_by_id(0, 0) actor.change_equip_by_id(1, 0) actor.change_equip_by_id(2, 0) actor.change_equip_by_id(3, 0) actor.change_equip_by_id(4, 0) end #-------------------------------------------------------------------------- # ● 仲間を除去 #-------------------------------------------------------------------------- def eliminate_member actor = @backmember_window.actor[@backmember_window.index] $game_switches[WD_memberchange_ini::Initial_switch + actor.id - 1] = false remove_equip(actor) if WD_memberchange_ini::Remove_equip2 @backmember_window.refresh end end #============================================================================== # ■ Window_FrontMember #------------------------------------------------------------------------------ #  パーティから外すアクターを選択するウィンドウです。 #============================================================================== class Window_FrontMember < Window_SelectableMemberChange1 include WD_memberchange_commonmethod #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout1::Window_x y = WD_memberchange_layout1::Window_y width = WD_memberchange_layout1::Window_width height = WD_memberchange_layout1::Window_height super(x, y, width, height) @index=0 @column_max = WD_memberchange_layout1::Window_column refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = $game_party.members if @data.size == WD_memberchange_ini::Party_max @item_max = @data.size else @item_max = @data.size + 1 end self.contents.clear create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) actor = @data[index] if index < @data.size actorid = actor.id hantei = true if WD_memberchange_ini::Fix_switch[actorid] != nil if $game_switches[WD_memberchange_ini::Fix_switch[actorid]] == true hantei = false end end x0 = rect.x y0 = rect.y #顔グラフィックの表示 if WD_memberchange_layout1::Faceview == true x = x0 + WD_memberchange_layout1::Faceview_x y = y0 + WD_memberchange_layout1::Faceview_y draw_actor_face(actor, x, y, 92, hantei) end #歩行グラフィックの表示 if WD_memberchange_layout1::Charaview == true x = x0 + WD_memberchange_layout1::Charaview_x y = y0 + WD_memberchange_layout1::Charaview_y draw_actor_graphic(actor, x, y, hantei) end #ステートの表示 if WD_memberchange_layout1::Stateview == true x = x0 + WD_memberchange_layout1::Stateview_x y = y0 + WD_memberchange_layout1::Stateview_y width = WD_memberchange_layout1::Stateview_width draw_actor_state(actor, x, y, width) end #名前の表示 if WD_memberchange_layout1::Nameview == true x = x0 + WD_memberchange_layout1::Nameview_x y = y0 + WD_memberchange_layout1::Nameview_y width = WD_memberchange_layout1::Nameview_width draw_actor_name(actor, x, y, width, hantei) end #クラスの表示 if WD_memberchange_layout1::Classview == true x = x0 + WD_memberchange_layout1::Classview_x y = y0 + WD_memberchange_layout1::Classview_y width = WD_memberchange_layout1::Classview_width draw_actor_class(actor, x, y, width, hantei) end #レベルの表示 if WD_memberchange_layout1::Lvview == true x = x0 + WD_memberchange_layout1::Lvview_x y = y0 + WD_memberchange_layout1::Lvview_y width = WD_memberchange_layout1::Lvview_width draw_actor_level(actor, x, y, width, hantei) end #HPゲージの表示 if WD_memberchange_layout1::Hpgaugeview == true x = x0 + WD_memberchange_layout1::Hpgaugeview_x y = y0 + WD_memberchange_layout1::Hpgaugeview_y width = WD_memberchange_layout1::Hpgaugeview_width draw_actor_hp(actor, x, y, width, hantei) end #MPゲージの表示 if WD_memberchange_layout1::Mpgaugeview == true x = x0 + WD_memberchange_layout1::Mpgaugeview_x y = y0 + WD_memberchange_layout1::Mpgaugeview_y width = WD_memberchange_layout1::Mpgaugeview_width draw_actor_mp(actor, x, y, width, hantei) end #パラメータの表示 if WD_memberchange_layout1::Parameterview1 == true x = x0 + WD_memberchange_layout1::Parameterview1_x y = y0 + WD_memberchange_layout1::Parameterview1_y width = WD_memberchange_layout1::Parameterview1_width draw_actor_parameter(actor, x, y, width, 0, hantei) end if WD_memberchange_layout1::Parameterview2 == true x = x0 + WD_memberchange_layout1::Parameterview2_x y = y0 + WD_memberchange_layout1::Parameterview2_y width = WD_memberchange_layout1::Parameterview2_width draw_actor_parameter(actor, x, y, width, 1, hantei) end if WD_memberchange_layout1::Parameterview3 == true x = x0 + WD_memberchange_layout1::Parameterview3_x y = y0 + WD_memberchange_layout1::Parameterview3_y width = WD_memberchange_layout1::Parameterview3_width draw_actor_parameter(actor, x, y, width, 2, hantei) end if WD_memberchange_layout1::Parameterview4 == true x = x0 + WD_memberchange_layout1::Parameterview4_x y = y0 + WD_memberchange_layout1::Parameterview4_y width = WD_memberchange_layout1::Parameterview4_width draw_actor_parameter(actor, x, y, width, 3, hantei) end if WD_memberchange_layout1::Parameterview5 == true x = x0 + WD_memberchange_layout1::Parameterview5_x y = y0 + WD_memberchange_layout1::Parameterview5_y width = WD_memberchange_layout1::Parameterview5_width draw_actor_parameter(actor, x, y, width, 4, hantei) end if WD_memberchange_layout1::Parameterview6 == true x = x0 + WD_memberchange_layout1::Parameterview6_x y = y0 + WD_memberchange_layout1::Parameterview6_y width = WD_memberchange_layout1::Parameterview6_width draw_actor_parameter(actor, x, y, width, 5, hantei) end end end end #============================================================================== # ■ Window_BackMember #------------------------------------------------------------------------------ #  パーティに加えるアクターを選択するウィンドウです。 #============================================================================== class Window_BackMember < Window_SelectableMemberChange2 include WD_memberchange_commonmethod #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :actor # 入れ替え可能アクター #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout2::Window_x y = WD_memberchange_layout2::Window_y width = WD_memberchange_layout2::Window_width height = WD_memberchange_layout2::Window_height super(x, y, width, height) @index = 0 @column_max = WD_memberchange_layout2::Window_column refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh data = [] for i in 1...$data_actors.size if $game_switches[WD_memberchange_ini::Initial_switch-1+i] == true data.push($game_actors[i]) end end case WD_memberchange_ini::Sort_series[ $game_variables[WD_memberchange_ini::Sort_variable]] when 0 @actor = data.sort_by{ |actor| actor.id} when 1 @actor = data.sort_by{ |actor| WD_memberchange_ini::Assignsort_array[actor.id-1]} when 2 @actor = data.sort_by{ |actor| -actor.level*10000+actor.id} when 3 @actor = data.sort_by{ |actor| -actor.maxhp*10000+actor.id} when 4 @actor = data.sort_by{ |actor| -actor.maxmp*10000+actor.id} when 5 @actor = data.sort_by{ |actor| -actor.atk*10000+actor.id} when 6 @actor = data.sort_by{ |actor| -actor.def*10000+actor.id} when 7 @actor = data.sort_by{ |actor| -actor.spi*10000+actor.id} when 8 @actor = data.sort_by{ |actor| -actor.agi*10000+actor.id} when 9 @actor = data.sort_by{ |actor| actor.class_id*10000+actor.id} end @item_max = @actor.size self.contents.clear create_contents for i in 0...@item_max draw_item(i) end @item_max += 1 if WD_memberchange_ini::Remove_only end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) actor = @actor[index] if $game_party.members.include?(actor) hantei = false else hantei = true end x0 = rect.x y0 = rect.y #顔グラフィックの表示 if WD_memberchange_layout2::Faceview == true x = x0 + WD_memberchange_layout2::Faceview_x y = y0 + WD_memberchange_layout2::Faceview_y draw_actor_face(actor, x, y, 92, hantei) end #歩行グラフィックの表示 if WD_memberchange_layout2::Charaview == true x = x0 + WD_memberchange_layout2::Charaview_x y = y0 + WD_memberchange_layout2::Charaview_y draw_actor_graphic(actor, x, y, hantei) end #ステートの表示 if WD_memberchange_layout2::Stateview == true x = x0 + WD_memberchange_layout2::Stateview_x y = y0 + WD_memberchange_layout2::Stateview_y width = WD_memberchange_layout2::Stateview_width draw_actor_state(actor, x, y, width) end #名前の表示 if WD_memberchange_layout2::Nameview == true x = x0 + WD_memberchange_layout2::Nameview_x y = y0 + WD_memberchange_layout2::Nameview_y width = WD_memberchange_layout2::Nameview_width draw_actor_name(actor, x, y, width, hantei) end #クラスの表示 if WD_memberchange_layout2::Classview == true x = x0 + WD_memberchange_layout2::Classview_x y = y0 + WD_memberchange_layout2::Classview_y width = WD_memberchange_layout2::Classview_width draw_actor_class(actor, x, y, width, hantei) end #レベルの表示 if WD_memberchange_layout2::Lvview == true x = x0 + WD_memberchange_layout2::Lvview_x y = y0 + WD_memberchange_layout2::Lvview_y width = WD_memberchange_layout2::Lvview_width draw_actor_level(actor, x, y, width, hantei) end #HPゲージの表示 if WD_memberchange_layout2::Hpgaugeview == true x = x0 + WD_memberchange_layout2::Hpgaugeview_x y = y0 + WD_memberchange_layout2::Hpgaugeview_y width = WD_memberchange_layout2::Hpgaugeview_width draw_actor_hp(actor, x, y, width, hantei) end #MPゲージの表示 if WD_memberchange_layout2::Mpgaugeview == true x = x0 + WD_memberchange_layout2::Mpgaugeview_x y = y0 + WD_memberchange_layout2::Mpgaugeview_y width = WD_memberchange_layout2::Mpgaugeview_width draw_actor_mp(actor, x, y, width, hantei) end #パラメータの表示 if WD_memberchange_layout2::Parameterview1 == true x = x0 + WD_memberchange_layout2::Parameterview1_x y = y0 + WD_memberchange_layout2::Parameterview1_y width = WD_memberchange_layout2::Parameterview1_width draw_actor_parameter(actor, x, y, width, 0, hantei) end if WD_memberchange_layout2::Parameterview2 == true x = x0 + WD_memberchange_layout2::Parameterview2_x y = y0 + WD_memberchange_layout2::Parameterview2_y width = WD_memberchange_layout2::Parameterview2_width draw_actor_parameter(actor, x, y, width, 1, hantei) end if WD_memberchange_layout2::Parameterview3 == true x = x0 + WD_memberchange_layout2::Parameterview3_x y = y0 + WD_memberchange_layout2::Parameterview3_y width = WD_memberchange_layout2::Parameterview3_width draw_actor_parameter(actor, x, y, width, 2, hantei) end if WD_memberchange_layout2::Parameterview4 == true x = x0 + WD_memberchange_layout2::Parameterview4_x y = y0 + WD_memberchange_layout2::Parameterview4_y width = WD_memberchange_layout2::Parameterview4_width draw_actor_parameter(actor, x, y, width, 3, hantei) end if WD_memberchange_layout2::Parameterview5 == true x = x0 + WD_memberchange_layout2::Parameterview5_x y = y0 + WD_memberchange_layout2::Parameterview5_y width = WD_memberchange_layout2::Parameterview5_width draw_actor_parameter(actor, x, y, width, 4, hantei) end if WD_memberchange_layout2::Parameterview6 == true x = x0 + WD_memberchange_layout2::Parameterview6_x y = y0 + WD_memberchange_layout2::Parameterview6_y width = WD_memberchange_layout2::Parameterview6_width draw_actor_parameter(actor, x, y, width, 5, hantei) end end end #============================================================================== # ■ Window_MemberStatus #------------------------------------------------------------------------------ #  アクターのステータスを表示するウィンドウです。 #============================================================================== class Window_MemberStatus < Window_Base include WD_memberchange_commonmethod #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout3::Window_x y = WD_memberchange_layout3::Window_y width = WD_memberchange_layout3::Window_width height = WD_memberchange_layout3::Window_height super(x, y, width, height) @id = $game_party.members[0].id end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear if @id > 0 actor = $game_actors[@id] #顔グラフィックの表示 if WD_memberchange_layout3::Faceview == true x = WD_memberchange_layout3::Faceview_x y = WD_memberchange_layout3::Faceview_y draw_actor_face(actor, x, y, 96) end #歩行グラフィックの表示 if WD_memberchange_layout3::Charaview == true x = WD_memberchange_layout3::Charaview_x y = WD_memberchange_layout3::Charaview_y draw_actor_graphic(actor, x, y) end #ステートの表示 if WD_memberchange_layout3::Stateview == true x = WD_memberchange_layout3::Stateview_x y = WD_memberchange_layout3::Stateview_y width = WD_memberchange_layout3::Stateview_width draw_actor_state(actor, x, y, width) end #名前の表示 if WD_memberchange_layout3::Nameview == true x = WD_memberchange_layout3::Nameview_x y = WD_memberchange_layout3::Nameview_y width = WD_memberchange_layout3::Nameview_width draw_actor_name(actor, x, y, width) end #クラスの表示 if WD_memberchange_layout3::Classview == true x = WD_memberchange_layout3::Classview_x y = WD_memberchange_layout3::Classview_y width = WD_memberchange_layout3::Classview_width draw_actor_class(actor, x, y, width) end #レベルの表示 if WD_memberchange_layout3::Lvview == true x = WD_memberchange_layout3::Lvview_x y = WD_memberchange_layout3::Lvview_y width = WD_memberchange_layout3::Lvview_width draw_actor_level(actor, x, y, width) end #HPゲージの表示 if WD_memberchange_layout3::Hpgaugeview == true x = WD_memberchange_layout3::Hpgaugeview_x y = WD_memberchange_layout3::Hpgaugeview_y width = WD_memberchange_layout3::Hpgaugeview_width draw_actor_hp(actor, x, y, width) end #MPゲージの表示 if WD_memberchange_layout3::Mpgaugeview == true x = WD_memberchange_layout3::Mpgaugeview_x y = WD_memberchange_layout3::Mpgaugeview_y width = WD_memberchange_layout3::Mpgaugeview_width draw_actor_mp(actor, x, y, width) end #パラメータの表示 if WD_memberchange_layout3::Parameterview1 == true x = WD_memberchange_layout3::Parameterview1_x y = WD_memberchange_layout3::Parameterview1_y width = WD_memberchange_layout3::Parameterview1_width draw_actor_parameter(actor, x, y, width, 0) end if WD_memberchange_layout3::Parameterview2 == true x = WD_memberchange_layout3::Parameterview2_x y = WD_memberchange_layout3::Parameterview2_y width = WD_memberchange_layout3::Parameterview2_width draw_actor_parameter(actor, x, y, width, 1) end if WD_memberchange_layout3::Parameterview3 == true x = WD_memberchange_layout3::Parameterview3_x y = WD_memberchange_layout3::Parameterview3_y width = WD_memberchange_layout3::Parameterview3_width draw_actor_parameter(actor, x, y, width, 2) end if WD_memberchange_layout3::Parameterview4 == true x = WD_memberchange_layout3::Parameterview4_x y = WD_memberchange_layout3::Parameterview4_y width = WD_memberchange_layout3::Parameterview4_width draw_actor_parameter(actor, x, y, width, 3) end if WD_memberchange_layout3::Parameterview5 == true x = WD_memberchange_layout3::Parameterview5_x y = WD_memberchange_layout3::Parameterview5_y width = WD_memberchange_layout3::Parameterview5_width draw_actor_parameter(actor, x, y, width, 4) end if WD_memberchange_layout3::Parameterview6 == true x = WD_memberchange_layout3::Parameterview6_x y = WD_memberchange_layout3::Parameterview6_y width = WD_memberchange_layout3::Parameterview6_width draw_actor_parameter(actor, x, y, width, 5) end #経験値の表示 if WD_memberchange_layout3::Exptotalview == true x = WD_memberchange_layout3::Exptotalview_x y = WD_memberchange_layout3::Exptotalview_y width = WD_memberchange_layout3::Exptotalview_width draw_exptotal_info(actor, x, y, width) end if WD_memberchange_layout3::Expnextview == true x = WD_memberchange_layout3::Expnextview_x y = WD_memberchange_layout3::Expnextview_y width = WD_memberchange_layout3::Expnextview_width draw_expnext_info(actor, x, y, width) end #装備品の表示 if WD_memberchange_layout3::Equipview1 == true x = WD_memberchange_layout3::Equipview1_x y = WD_memberchange_layout3::Equipview1_y width = WD_memberchange_layout3::Equipview1_width self.contents.font.color = system_color if actor.two_swords_style self.contents.draw_text(x, y, 92, WLH, Vocab::weapon1) else self.contents.draw_text(x, y, 92, WLH, Vocab::weapon) end draw_equip_name(actor.equips[0], x + 92 -4, y, width) end if WD_memberchange_layout3::Equipview2 == true x = WD_memberchange_layout3::Equipview2_x y = WD_memberchange_layout3::Equipview2_y width = WD_memberchange_layout3::Equipview2_width self.contents.font.color = system_color if actor.two_swords_style self.contents.draw_text(x, y, 92, WLH, Vocab::weapon2) else self.contents.draw_text(x, y, 92, WLH, Vocab::armor1) end draw_equip_name(actor.equips[1], x + 92 -4, y, width) end if WD_memberchange_layout3::Equipview3 == true x = WD_memberchange_layout3::Equipview3_x y = WD_memberchange_layout3::Equipview3_y width = WD_memberchange_layout3::Equipview3_width self.contents.font.color = system_color self.contents.draw_text(x, y, 92, WLH, Vocab::armor2) draw_equip_name(actor.equips[2], x + 92 -4, y, width) end if WD_memberchange_layout3::Equipview4 == true x = WD_memberchange_layout3::Equipview4_x y = WD_memberchange_layout3::Equipview4_y width = WD_memberchange_layout3::Equipview4_width self.contents.font.color = system_color self.contents.draw_text(x, y, 92, WLH, Vocab::armor3) draw_equip_name(actor.equips[3], x + 92 -4, y, width) end if WD_memberchange_layout3::Equipview5 == true x = WD_memberchange_layout3::Equipview5_x y = WD_memberchange_layout3::Equipview5_y width = WD_memberchange_layout3::Equipview5_width self.contents.font.color = system_color self.contents.draw_text(x, y, 92, WLH, Vocab::armor4) draw_equip_name(actor.equips[4], x + 92 -4, y, width) end #スキルの表示 if WD_memberchange_layout3::Skillview == true x = WD_memberchange_layout3::Skillview_x y = WD_memberchange_layout3::Skillview_y width = WD_memberchange_layout3::Skillview_width self.contents.font.color = system_color self.contents.draw_text(x, y, 92, WLH, Vocab::skill) maxskillnum = WD_memberchange_layout3::Skillview_column * WD_memberchange_layout3::Skillview_row for i in 0...actor.skills.size iy = i/WD_memberchange_layout3::Skillview_column ix = i%WD_memberchange_layout3::Skillview_column if actor.skills.size > maxskillnum if i < maxskillnum - 1 draw_skill_name(actor.skills[i], x + width*ix, y + WLH * (iy + 1), width) elsif i == maxskillnum - 1 self.contents.draw_text(x + width*ix + 20, y + WLH * (iy + 1), 92, WLH, "etc...") end else draw_skill_name(actor.skills[i], x + width*ix, y + WLH * (iy + 1), width) end end end @old_id = @id end @old_id = @id end #-------------------------------------------------------------------------- # ● アクターIDの受け渡し #-------------------------------------------------------------------------- def set_actorid(id) @id = id end #-------------------------------------------------------------------------- # ● ステータスウィンドウ更新 #-------------------------------------------------------------------------- def update super refresh if @id != @old_id #軽量化判定 end end #============================================================================== # ■ Window_SortStatus #------------------------------------------------------------------------------ #  選択しているソート機能を表示するウィンドウです。 #============================================================================== class Window_SortStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout4::Window_x y = WD_memberchange_layout4::Window_y width = WD_memberchange_layout4::Window_width height = WD_memberchange_layout4::Window_height super(x, y, width, height) @textwidth = width -32 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear sortname = WD_memberchange_ini::Sort_names[ $game_variables[WD_memberchange_ini::Sort_variable]] self.contents.draw_text(0, 0, @textwidth, WLH, sortname ,1) end end #============================================================================== # ■ Window_EliminateMember #------------------------------------------------------------------------------ #  アクター除籍の確認用ウィンドウです。 #============================================================================== class Window_EliminateMember < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout5::Window_x y = WD_memberchange_layout5::Window_y width = WD_memberchange_layout5::Window_width height = WD_memberchange_layout5::Window_height super(x, y, width, height) @index = 1 @column_max = WD_memberchange_layout5::Window_column refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [WD_memberchange_ini::Eliminate_command1, WD_memberchange_ini::Eliminate_command2] @item_max = @data.size self.contents.clear create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) rect.x += 4 rect.width -= -8 self.contents.clear_rect(rect) self.contents.draw_text(rect, @data[index], 0) end end #============================================================================== # ■ Window_ExtraText1-3 #------------------------------------------------------------------------------ #  一行テキストを表示するウィンドウです。 #============================================================================== class Window_ExtraText1 < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout6::Window_x y = WD_memberchange_layout6::Window_y width = WD_memberchange_layout6::Window_width height = WD_memberchange_layout6::Window_height super(x, y, width, height) @textwidth = width -32 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear text = (WD_memberchange_ini::Exwindow1_text).split(/\n/) for i in 0..text.size self.contents.draw_text(0, WLH*i, @textwidth, WLH, text[i] ,0) end end end class Window_ExtraText2 < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout7::Window_x y = WD_memberchange_layout7::Window_y width = WD_memberchange_layout7::Window_width height = WD_memberchange_layout7::Window_height super(x, y, width, height) @textwidth = width -32 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear text = (WD_memberchange_ini::Exwindow2_text).split(/\n/) for i in 0..text.size self.contents.draw_text(0, WLH*i, @textwidth, WLH, text[i] ,0) end end end class Window_ExtraText3 < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = WD_memberchange_layout8::Window_x y = WD_memberchange_layout8::Window_y width = WD_memberchange_layout8::Window_width height = WD_memberchange_layout8::Window_height super(x, y, width, height) @textwidth = width -32 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear text = (WD_memberchange_ini::Exwindow3_text).split(/\n/) for i in 0..text.size self.contents.draw_text(0, WLH*i, @textwidth, WLH, text[i] ,0) end end end