| 
 
| 赞 | 1 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 5885 |  
| 最后登录 | 2012-3-23 |  
| 在线时间 | 24 小时 |  
 Lv1.梦旅人 
	梦石0 星屑73 在线时间24 小时注册时间2008-8-4帖子113 | 
3楼
 
 
 楼主|
发表于 2009-9-28 15:46:09
|
只看该作者 
| 本帖最后由 zoeylau 于 2009-9-29 15:38 编辑 
 #==============================================================================
 # 本脚本来自www.66RPG.com,使用和转载请保留此信息
 #==============================================================================
 
 # ▼▲▼ XRXS26. 人物扩张系统 ver..05 ▼▲▼
 # by 桜雅 在土
 
 #==============================================================================
 # □ 初始化定义
 #==============================================================================
 module XRXS26
 FRONT_MEMBER_LIMIT    = 4        # 战斗参战人数最大值
 BACKWARD_MEMBER_LIMIT = 4        # 待机人数最大值
 BACKWARD_EXP_GAINABLE = true     # 待机人物是否获得经验
 MENU_STATUS_STRETCH   = false    # 3人以下的时候,菜单是否拉伸大小
 end
 #------------------------------------------------------------------------------
 # 菜单页面状态
 #------------------------------------------------------------------------------
 class Window_MenuStatus < Window_Selectable
 # 列数
 COLUMN_MAX = 1
 # 光标高度
 CURSOR_HEIGHT = 96
 # 一行的高度
 LINE_HEIGHT = 116
 end
 #------------------------------------------------------------------------------
 # 菜单场景
 #------------------------------------------------------------------------------
 class Scene_Menu
 MENU_MEMBER_CHANGE_KEY_GO    = Input::RIGHT # 进入键
 MENU_MEMBER_CHANGE_KEY_END   = Input::LEFT  # 离开键
 MENU_MEMBER_CHANGE_INDEX_MIN = 0            # 可更换角色最小编号
 FORCETOBATTLE_ACTORS         = []           # 不能待机的角色编号
 UMBATTLABLE_ACTORS           = []           # 不能加入战斗的角色编号
 UNMOVABLE_ACTORS             = []           # 不能移动的角色编号
 end
 #------------------------------------------------------------------------------
 #
 # 解説
 #    Game_Partyの @actors のうち先頭から↑FRONT_MEMBER_LIMIT番目までのアクターを
 #   戦闘メンバーとして、それ以上を待機メンバーとして扱います。
 #
 #==============================================================================
 # ■ Game_Party
 #==============================================================================
 class Game_Party
 #--------------------------------------------------------------------------
 # ○ インクルード
 #--------------------------------------------------------------------------
 include XRXS26
 #--------------------------------------------------------------------------
 # ○ 公開インスタンス変数
 #--------------------------------------------------------------------------
 attr_reader   :backword_actors          # 待機アクター
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 alias xrxs26_initialize initialize
 def initialize
 xrxs26_initialize
 # 待機メンバー配列を初期化
 @backword_actors = []
 end
 #--------------------------------------------------------------------------
 # ● アクターを加える
 #--------------------------------------------------------------------------
 def add_actor(actor_id)
 # アクターを取得
 actor = $game_actors[actor_id]
 # このアクターがパーティにいない場合
 if not @actors.include?(actor)
 # 満員でないならメンバーに追加
 if @actors.size < (FRONT_MEMBER_LIMIT + BACKWARD_MEMBER_LIMIT)
 # アクターを追加
 @actors.push(actor)
 # プレイヤーをリフレッシュ
 $game_player.refresh
 end
 end
 end
 end
 #==============================================================================
 # ■ Spriteset_Battle
 #==============================================================================
 class Spriteset_Battle
 #--------------------------------------------------------------------------
 # ● インクルード
 #--------------------------------------------------------------------------
 include XRXS26
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 alias xrxs26_initialize initialize
 def initialize
 xrxs26_initialize
 #
 # 以下、五人目以降のアクタースプライトの追加処理---
 #
 # アクターが表示されるビューポートを、とりあえず先頭の人から取得しとく(素
 actor_viewport = @actor_sprites[0].viewport
 # 戦闘参加メンバーが5人以上の場合
 if FRONT_MEMBER_LIMIT > 4
 for i in 5..FRONT_MEMBER_LIMIT
 # アクタースプライトを追加
 @actor_sprites.push(Sprite_Battler.new(actor_viewport))
 @actor_sprites[i-1].battler = $game_party.actors[i-1]
 end
 end
 # ビューポートを更新
 actor_viewport.update
 end
 end
 #==============================================================================
 # ■ Scene_Battle
 #==============================================================================
 class Scene_Battle
 #--------------------------------------------------------------------------
 # ● インクルード
 #--------------------------------------------------------------------------
 include XRXS26
 #--------------------------------------------------------------------------
 # ● メイン処理 をパーティメンバー処理ではさむ
 #--------------------------------------------------------------------------
 alias xrxs26_main main
 def main
 # 待機メンバーへ退避----------
 $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
 $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
 $game_party.actors.compact!
 # メイン処理
 xrxs26_main
 # 待機メンバーから復帰
 $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
 $game_party.backword_actors.clear
 end
 #--------------------------------------------------------------------------
 # ● アフターバトルフェーズ開始
 #--------------------------------------------------------------------------
 alias xrxs26_start_phase5 start_phase5
 def start_phase5
 # 「待機メンバー経験値獲得」が有効 and 待機アクターが一人以上いる
 if BACKWARD_EXP_GAINABLE and $game_party.backword_actors.size >= 1
 # 待機メンバーから復帰
 $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
 $game_party.backword_actors.clear
 # 呼び戻す
 xrxs26_start_phase5
 # 待機メンバーへ退避----------
 $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
 $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
 $game_party.actors.compact!
 else
 # 呼び戻す
 xrxs26_start_phase5
 end
 end
 end
 # ▽△▽ XRXL 4. 第二カーソル 機構 ▽△▽
 # by 桜雅 在土
 
 #==============================================================================
 # --- XRXS. 第二カーソル 機構 ---
 #------------------------------------------------------------------------------
 #     ウィンドウに .index2 プロパティを追加します。
 #==============================================================================
 module XRXS_Cursor2
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 def initialize(x, y, w, h)
 super(x, y, h, w)
 # 補助ウィンドウ(透明)を作成:カーソル専用
 @xrxsc2_window = Window_Selectable.new(self.x, self.y, self.width, self.height)
 @xrxsc2_window.opacity = 0
 @xrxsc2_window.active = false
 @xrxsc2_window.index = -1
 end
 #--------------------------------------------------------------------------
 # ○ 第二カーソルの設置
 #--------------------------------------------------------------------------
 def index2
 return @xrxsc2_window.index
 end
 def index2=(index)
 @xrxsc2_window.index = index
 if index == -1
 @xrxsc2_window.cursor_rect.empty
 else
 @xrxsc2_window.x = self.x
 @xrxsc2_window.y = self.y
 @xrxsc2_window.cursor_rect = self.cursor_rect
 end
 end
 #--------------------------------------------------------------------------
 # ○ 先頭の行の設定
 #--------------------------------------------------------------------------
 def top_row=(row)
 super
 # 補助ウィンドウの oy を更新
 pre_oy = @xrxsc2_window.oy
 @xrxsc2_window.oy = self.oy
 @xrxsc2_window.cursor_rect.y -= self.oy - pre_oy
 end
 #--------------------------------------------------------------------------
 # ○ 解放
 #--------------------------------------------------------------------------
 def dispose
 @xrxsc2_window.dispose
 super
 end
 #--------------------------------------------------------------------------
 # ○ X, Y 座標
 #--------------------------------------------------------------------------
 def x=(n)
 super
 @xrxsc2_window.x = self.x unless @xrxsc2_window.nil?
 end
 def y=(n)
 super
 @xrxsc2_window.y = self.y unless @xrxsc2_window.nil?
 end
 end
 # ▼▲▼ XRXS26AX. +入れ替えメニュー ver.2 ▼▲▼ built 081113
 # by 桜雅 在土
 
 #==============================================================================
 # ■ Window_MenuStatus
 #==============================================================================
 class Window_MenuStatus < Window_Selectable
 #--------------------------------------------------------------------------
 # ○ インクルード
 #--------------------------------------------------------------------------
 include XRXS26
 include XRXS_Cursor2
 #--------------------------------------------------------------------------
 # ● 公開インスタンス変数
 #--------------------------------------------------------------------------
 attr_reader   :column_max             # 列数
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 def initialize
 h = 480
 if MENU_STATUS_STRETCH
 h = FRONT_MEMBER_LIMIT * 116 + 16
 end
 super(0, 0, 480, h)
 h = ($game_party.actors.size - 1) * LINE_HEIGHT + CURSOR_HEIGHT
 self.contents = Bitmap.new(width - 32, h)
 refresh
 self.active = false
 self.index = -1
 end
 #--------------------------------------------------------------------------
 # ○ 1 ページに表示できる行数の取得
 #--------------------------------------------------------------------------
 def page_row_max
 if MENU_STATUS_STRETCH
 return FRONT_MEMBER_LIMIT          # 戦闘パーティ最大数
 else
 return [FRONT_MEMBER_LIMIT, 4].max # 戦闘パーティ最大数(最低4)
 end
 end
 #--------------------------------------------------------------------------
 # ○ 先頭の行の取得
 #--------------------------------------------------------------------------
 def top_row
 # ウィンドウ内容の転送元 Y 座標を、1 行の高さ LINE_HEIGHT で割る
 return self.oy / LINE_HEIGHT
 end
 #--------------------------------------------------------------------------
 # ○ 先頭の行の設定
 #--------------------------------------------------------------------------
 def top_row=(row)
 super
 self.oy = self.oy/32 * LINE_HEIGHT
 end
 #--------------------------------------------------------------------------
 # ● カーソルの矩形更新
 #--------------------------------------------------------------------------
 def update_cursor_rect
 super
 unless @index < 0
 y = (self.cursor_rect.y + self.oy) * LINE_HEIGHT/32 - self.oy
 self.cursor_rect.set(0, y, self.cursor_rect.width, CURSOR_HEIGHT)
 end
 end
 end
 #==============================================================================
 # ■ Scene_Menu
 #==============================================================================
 class Scene_Menu
 #--------------------------------------------------------------------------
 # ○ インクルード
 #--------------------------------------------------------------------------
 include XRXS26
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 alias xrxs26ax_update update
 def update
 # インデックスを保存
 @status_index = @status_window.index
 # 呼び戻す
 xrxs26ax_update
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
 #--------------------------------------------------------------------------
 alias xrxs26ax_update_command update_command
 def update_command
 # 呼び戻す
 xrxs26ax_update_command
 # 入れ替え移行キーが押されたとき、@command_window.indexが設定値以上
 if Input.trigger?(MENU_MEMBER_CHANGE_KEY_GO) and
 @command_window.index >= MENU_MEMBER_CHANGE_INDEX_MIN
 # 決定 SE を演奏
 $game_system.se_play($data_system.decision_se)
 # カーソル位置を記憶
 @command_index_before_menu_member_change = @command_window.index
 # 入れ替えウィンドウへ移行
 @command_window.active = false
 @command_window.index = -1
 @status_window.active = true
 @status_window.index = 0
 end
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (ステータスウィンドウがアクティブの場合)
 #--------------------------------------------------------------------------
 alias xrxs26ax_update_status update_status
 def update_status
 # 呼び戻す
 if @command_window.index != -1
 xrxs26ax_update_status
 return
 end
 # B ボタンか入れ替え終了キーが押されたとき
 if ((Input.trigger?(Input::B) or Input.trigger?(MENU_MEMBER_CHANGE_KEY_END)) and
 @status_window.index2 == -1 and
 @status_index%@status_window.column_max == 0)
 # キャンセル SE を演奏
 $game_system.se_play($data_system.cancel_se)
 # コマンドウィンドウをアクティブにする
 @command_window.active = true
 @command_window.index = 0
 @status_window.active = false
 @status_window.index = -1
 return
 end
 # B ボタンが押されたとき
 if Input.trigger?(Input::B) and @status_window.index2 >= 0
 @status_window.index = @status_window.index2
 @status_window.index2 = -1
 return
 end
 # 決定キーが押されたとき
 if Input.trigger?(Input::C)
 if @status_window.index2 == -1
 if UNMOVABLE_ACTORS.include?($game_party.actors[@status_window.index].id)
 # ブザー SE を演奏
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 # 決定 SE を演奏
 $game_system.se_play($data_system.decision_se)
 # メンバーの入れ替え一人目の決定
 @status_window.index2 = @status_window.index
 else
 if UNMOVABLE_ACTORS.include?($game_party.actors[@status_window.index].id)
 # ブザー SE を演奏
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 # どちらかが戦闘メンバー かつ どちらかが戦闘禁止アクター の場合
 if (@status_window.index < FRONT_MEMBER_LIMIT or
 @status_window.index2 < FRONT_MEMBER_LIMIT) and
 (UMBATTLABLE_ACTORS.include?($game_party.actors[@status_window.index].id) or
 UMBATTLABLE_ACTORS.include?($game_party.actors[@status_window.index2].id))
 # ブザー SE を演奏
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 # どちらかが待機メンバー かつ どちらかが待機禁止アクター の場合
 if (@status_window.index >= FRONT_MEMBER_LIMIT or
 @status_window.index2 >= FRONT_MEMBER_LIMIT) and
 (FORCETOBATTLE_ACTORS.include?($game_party.actors[@status_window.index].id) or
 FORCETOBATTLE_ACTORS.include?($game_party.actors[@status_window.index2].id))
 # ブザー SE を演奏
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 # 決定 SE を演奏
 $game_system.se_play($data_system.decision_se)
 # メンバーの入れ替え二人目の決定と入れ替えの実行
 actor2 = $game_party.actors[@status_window.index]
 actor = $game_party.actors[@status_window.index2]
 $game_party.actors[@status_window.index2] = actor2
 $game_party.actors[@status_window.index] = actor
 @status_window.index = @status_window.index2
 @status_window.index2 = -1
 # プレイヤーをリフレッシュ
 $game_player.refresh
 # ステータスウィンドウをリフレッシュ
 @status_window.refresh
 end
 return
 end
 end
 end
 | 
 |