#============================================================================== # ■ アクター量産スクリプト Ver 0.50 #------------------------------------------------------------------------------ #  2014.8.7 # 作成者:フーマ # URL:http://masaf126.blog110.fc2.com/ #============================================================================== =begin  アクターを量産するスクリプト。  メンバーの入れ替えで同一キャラを何体も増やせる。  名前の変更は、名前入力の処理で選択したアクターが一番目のアクターならパーティー の2番目のアクターの名前が変更できる。以下略。  メンバーの入れ替えで指定したキャラはすべて消える。 =end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias old_initialize initialize def initialize old_initialize end #-------------------------------------------------------------------------- # ● 全メンバーの取得[変更] #-------------------------------------------------------------------------- def all_members ret = [] @actors.each_with_index{|id,i| ret.push($game_actors[id,i]) } return ret end #-------------------------------------------------------------------------- # ● アクターを加える[変更] #-------------------------------------------------------------------------- def add_actor(actor_id) @actors.push(actor_id) $game_player.refresh $game_map.need_refresh = true end #-------------------------------------------------------------------------- # ● アクターを外す[変更] #-------------------------------------------------------------------------- def remove_actor(actor_id) @actors.delete(actor_id) $game_player.refresh $game_map.need_refresh = true end #-------------------------------------------------------------------------- # ● メニュー画面で選択中のアクターを取得 #-------------------------------------------------------------------------- def menu_actor $game_actors[@menu_actor_id] || members[0] end #-------------------------------------------------------------------------- # ● メニュー画面で選択中のアクターを設定[変更] #-------------------------------------------------------------------------- def menu_actor=(actor) @menu_actor_id = actor end #-------------------------------------------------------------------------- # ● メニュー画面で次のアクターを選択[変更] #-------------------------------------------------------------------------- def menu_actor_next index = @menu_actor_id || -1 index = (index + 1) % members.size self.menu_actor = index end #-------------------------------------------------------------------------- # ● メニュー画面で前のアクターを選択[変更] #-------------------------------------------------------------------------- def menu_actor_prev index = @menu_actor_id || 1 index = (index + members.size - 1) % members.size self.menu_actor = index end #-------------------------------------------------------------------------- # ● スキル/アイテムの使用対象となったアクターを取得 #-------------------------------------------------------------------------- def target_actor $game_actors[@target_actor_id] || members[0] end #-------------------------------------------------------------------------- # ● スキル/アイテムの使用対象となったアクターを設定 #-------------------------------------------------------------------------- def target_actor=(actor) @target_actor_id = actor end #-------------------------------------------------------------------------- # ● 初期パーティのセットアップ #-------------------------------------------------------------------------- def setup_starting_members @actors = $data_system.party_members.clone end #-------------------------------------------------------------------------- # ● 順序入れ替え[変更] #-------------------------------------------------------------------------- def swap_order(index1, index2) @actors[index1], @actors[index2] = @actors[index2], @actors[index1] $game_actors.swap(index1,index2) $game_player.refresh end end class Game_Actors #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize @data = [] end #-------------------------------------------------------------------------- # ● アクターの取得[変更] #-------------------------------------------------------------------------- def [](actor_id,i=-1) # return nil unless $data_actors[actor_id] if i == -1 @data[actor_id] else @data[i] ||= Game_Actor.new(actor_id) end end #-------------------------------------------------------------------------- # ● アクターの並べ替え[追加] #-------------------------------------------------------------------------- def swap(index1,index2) @data[index1], @data[index2] = @data[index2], @data[index1] end end class Window_Base < Window #-------------------------------------------------------------------------- # ● アクター n 番の名前を取得 #-------------------------------------------------------------------------- def actor_name(n) actor = n >= 1 ? $data_actors[n] : nil actor ? actor.name : "" end #-------------------------------------------------------------------------- # ● 名前の描画 #-------------------------------------------------------------------------- def draw_actor_name(actor, x, y, width = 112) # p actor change_color(hp_color(actor)) draw_text(x, y, width, line_height, actor.name) end end class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # ● 決定ボタンが押されたときの処理[変更] #-------------------------------------------------------------------------- def process_ok super $game_party.menu_actor = index end #-------------------------------------------------------------------------- # ● 項目の描画[変更] #-------------------------------------------------------------------------- def draw_item(index) actor = $game_party.members[index] enabled = $game_party.battle_members.include?(actor) rect = item_rect(index) draw_item_background(index) draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled) draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2) end end class Scene_MenuBase < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_background @actor = $game_party.menu_actor end #-------------------------------------------------------------------------- # ● 次のアクターに切り替え[変更] #-------------------------------------------------------------------------- def next_actor @actor = $game_actors[$game_party.menu_actor_next] on_actor_change end #-------------------------------------------------------------------------- # ● 前のアクターに切り替え[変更] #-------------------------------------------------------------------------- def prev_actor @actor = $game_actors[$game_party.menu_actor_prev] on_actor_change end end class Window_Status < Window_Selectable #-------------------------------------------------------------------------- # ● アクターの設定 #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # ● ブロック 1 の描画 #-------------------------------------------------------------------------- def draw_block1(y) draw_actor_name(@actor, 4, y) draw_actor_class(@actor, 128, y) draw_actor_nickname(@actor, 288, y) end end class Scene_Status < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super @status_window = Window_Status.new(@actor) @status_window.set_handler(:cancel, method(:return_scene)) @status_window.set_handler(:pagedown, method(:next_actor)) @status_window.set_handler(:pageup, method(:prev_actor)) end #-------------------------------------------------------------------------- # ● アクターの切り替え #-------------------------------------------------------------------------- def on_actor_change @status_window.actor = @actor @status_window.activate end end