设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 971|回复: 1
打印 上一主题 下一主题

待机脚本添加空选项

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-27
帖子
107
跳转到指定楼层
1
发表于 2009-4-4 09:48:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-4-4 20:41:20 | 只看该作者
的确挺麻烦,主要是因为这个脚本把待机的队员直接放到 $game_party.actors 中,在战斗之前从这个数组中删除不出场的队员,战斗结束添加回来……这可能是为了方便菜单状态窗口、存/读档窗口中显示整个队员数组以及队员数组元素的交换
如果想要将前线队员撤下而不是与候补交换,则必须考虑到逐个描绘 actor 信息的地方~因为撤下而不交换队员就会在 $game_party.actors 中产生一些空元素 nil,自然就不能描绘了
可以试试看下面这个,主要修改了 Window_MenuStatus 的队员交换,Window_Base 的 actor 信息描绘,Window_SaveFile 的行走图描绘和 Scene_Save 中保存 nil 元素:
  1. #==============================================================================
  2. # 本?本?自www.66RPG.com,使用和???保留此信息
  3. #==============================================================================  

  4. # ▼▲▼ XRXS26. 人物扩张系统 ver..05 ▼▲▼
  5. # by 桜雅 在土

  6. #==============================================================================
  7. # □ 初始化定义
  8. #==============================================================================
  9. module XRXS26
  10.   FRONT_MEMBER_LIMIT    = 4        # 战斗参战人数最大值
  11.   BACKWARD_MEMBER_LIMIT = 6       # 待机人数最大值  
  12.   BACKWARD_EXP_GAINABLE = true     # 待机人物是否获得经验
  13.   MENU_STATUS_STRETCH   = false    # 3人以下的时候,菜单是否拉伸大小
  14. end
  15. #------------------------------------------------------------------------------
  16. # 菜单页面状态
  17. #------------------------------------------------------------------------------
  18. class Window_MenuStatus < Window_Selectable
  19.   # 列数
  20.   COLUMN_MAX = 1
  21.   # 光标高度
  22.   CURSOR_HEIGHT = 96
  23.   # 一行的高度
  24.   LINE_HEIGHT = 116
  25. end
  26. #------------------------------------------------------------------------------
  27. # 菜??景
  28. #------------------------------------------------------------------------------
  29. class Scene_Menu
  30.   MENU_MEMBER_CHANGE_KEY_GO    = Input::RIGHT # 进入键
  31.   MENU_MEMBER_CHANGE_KEY_END   = Input::LEFT  # 离开键
  32.   MENU_MEMBER_CHANGE_INDEX_MIN = 0            # 可更换角色最小编号
  33.   FORCETOBATTLE_ACTORS         = []           # 不能待机的角色编号
  34.   UMBATTLABLE_ACTORS           = []           # 不能加入战斗的角色编号
  35.   UNMOVABLE_ACTORS             = []           # 不能移动的角色编号
  36. end
  37. #------------------------------------------------------------------------------
  38. #
  39. # 解説
  40. #   Game_Partyの @actors のうち先頭から↑FRONT_MEMBER_LIMIT番目までのアクターを
  41. #   戦闘メンバーとして、それ以上を待機メンバーとして扱います。
  42. #
  43. #==============================================================================
  44. # ■ Game_Party
  45. #==============================================================================
  46. class Game_Party
  47.   #--------------------------------------------------------------------------
  48.   # ○ インクルード
  49.   #--------------------------------------------------------------------------
  50.   include XRXS26
  51.   #--------------------------------------------------------------------------
  52.   # ○ 公開インスタンス変数
  53.   #--------------------------------------------------------------------------
  54.   attr_reader   :backword_actors          # 待機アクター
  55.   attr_accessor :front_size
  56.   #--------------------------------------------------------------------------
  57.   # ● オブジェクト初期化
  58.   #--------------------------------------------------------------------------
  59.   alias xrxs26_initialize initialize
  60.   def initialize
  61.     xrxs26_initialize
  62.     # 待機メンバー配列を初期化
  63.     @backword_actors = []
  64.     @front_size = 0
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● アクターを加える
  68.   #--------------------------------------------------------------------------
  69.   def add_actor(actor_id)
  70.     # アクターを取得
  71.     actor = $game_actors[actor_id]
  72.     # このアクターがパーティにいない場合
  73.     if not @actors.include?(actor)
  74.       # 満員でないならメンバーに追加
  75.       if @actors.size < (FRONT_MEMBER_LIMIT + BACKWARD_MEMBER_LIMIT)
  76.         if @front_size < FRONT_MEMBER_LIMIT
  77.           @front_size += 1
  78.         end
  79.         # # アクターを追加
  80.         @actors.push(actor)
  81.         # プレイヤーをリフレッシュ
  82.         $game_player.refresh
  83.       end
  84.     end
  85.   end
  86.   def refresh
  87.     new_actors = []
  88.     for i in [email protected]
  89.       if $data_actors[@actors[i].id] != nil
  90.         new_actors.push(@actors[i] == nil ? nil : $game_actors[@actors[i].id])
  91.       end
  92.     end
  93.     @actors = new_actors
  94.   end
  95.   def check_map_slip_damage
  96.     for actor in @actors
  97.       next if actor == nil
  98.       if actor.hp > 0 and actor.slip_damage?
  99.         actor.hp -= [actor.maxhp / 100, 1].max
  100.         if actor.hp == 0
  101.           $game_system.se_play($data_system.actor_collapse_se)
  102.         end
  103.         $game_screen.start_flash(Color.new(255,0,0,128), 4)
  104.         $game_temp.gameover = $game_party.all_dead?
  105.       end
  106.     end
  107.   end
  108. end
  109. class Window_Base
  110.   def draw_actor_name(actor, x, y)
  111.     return if actor == nil
  112.     self.contents.font.color = normal_color
  113.     self.contents.draw_text(x, y, 120, 32, actor.name)
  114.   end
  115.   def draw_actor_class(actor, x, y)
  116.     return if actor == nil
  117.     self.contents.font.color = normal_color
  118.     self.contents.draw_text(x, y, 236, 32, actor.class_name)
  119.   end
  120.   alias xrxs26_draw_actor_level draw_actor_level
  121.   def draw_actor_level(actor, x, y)
  122.     return if actor == nil
  123.     xrxs26_draw_actor_level(actor, x, y)
  124.   end
  125.   alias xrxs26_make_battler_state_text make_battler_state_text
  126.   def make_battler_state_text(battler, width, need_normal)
  127.     return if battler == nil   
  128.     xrxs26_make_battler_state_text(battler, width, need_normal)
  129.   end
  130.   def draw_actor_state(actor, x, y, width = 120)
  131.     return if actor == nil
  132.     text = make_battler_state_text(actor, width, true)
  133.     self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
  134.     self.contents.draw_text(x, y, width, 32, text)
  135.   end
  136.   alias xrxs26_draw_actor_hp draw_actor_hp
  137.   def draw_actor_hp(actor, x, y, width = 144)
  138.     return if actor == nil
  139.     xrxs26_draw_actor_hp(actor, x, y, width = 144)
  140.   end
  141.   alias xrxs26_draw_actor_sp draw_actor_sp
  142.   def draw_actor_sp(actor, x, y, width = 144)
  143.     return if actor == nil
  144.     xrxs26_draw_actor_sp(actor, x, y, width = 144)
  145.   end
  146. end

  147. class Scene_Save
  148.   def write_save_data(file)
  149.     characters = []
  150.     for i in 0...$game_party.actors.size
  151.       if $game_party.actors[i] == nil
  152.         characters.push(nil)
  153.       else
  154.         actor = $game_party.actors[i]
  155.         characters.push([actor.character_name, actor.character_hue])
  156.       end
  157.     end
  158.     # 寫入描繪遊戲存檔用的角色資料
  159.     Marshal.dump(characters, file)
  160.     # 寫入測量遊戲時間用的畫面計數
  161.     Marshal.dump(Graphics.frame_count, file)
  162.     # 增加 1 次存檔次數
  163.     $game_system.save_count += 1
  164.     # 儲存魔法編號
  165.     # (將編輯器儲存的值以隨機值取代)
  166.     $game_system.magic_number = $data_system.magic_number
  167.     # 寫入各種遊戲物件
  168.     Marshal.dump($game_system, file)
  169.     Marshal.dump($game_switches, file)
  170.     Marshal.dump($game_variables, file)
  171.     Marshal.dump($game_self_switches, file)
  172.     Marshal.dump($game_screen, file)
  173.     Marshal.dump($game_actors, file)
  174.     Marshal.dump($game_party, file)
  175.     Marshal.dump($game_troop, file)
  176.     Marshal.dump($game_map, file)
  177.     Marshal.dump($game_player, file)
  178.   end
  179. end
  180. class Window_SaveFile
  181.   def refresh
  182.     self.contents.clear
  183.     # 描繪檔案編號
  184.     self.contents.font.color = normal_color
  185.     name = "檔案 #{@file_index + 1}"
  186.     self.contents.draw_text(4, 0, 600, 32, name)
  187.     @name_width = contents.text_size(name).width
  188.     # 遊戲存檔存在的情況下
  189.     if @file_exist
  190.       # 描繪角色
  191.       for i in [email protected]
  192.         next if @characters[i] == nil
  193.         bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
  194.         cw = bitmap.rect.width / 4
  195.         ch = bitmap.rect.height / 4
  196.         src_rect = Rect.new(0, 0, cw, ch)
  197.         #x = 300 - @characters.size * 32 + i * 64 - cw / 2
  198.         x = i * 64
  199.         #p @characters[i], x
  200.         self.contents.blt(x, 68 - ch, bitmap, src_rect)
  201.       end
  202.       # 描繪遊戲時間
  203.       hour = @total_sec / 60 / 60
  204.       min = @total_sec / 60 % 60
  205.       sec = @total_sec % 60
  206.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  207.       self.contents.font.color = normal_color
  208.       self.contents.draw_text(4, 8, 600, 32, time_string, 2)
  209.       # 描繪時間字串
  210.       self.contents.font.color = normal_color
  211.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  212.       self.contents.draw_text(4, 40, 600, 32, time_string, 2)
  213.     end
  214.   end
  215. end
  216. #==============================================================================
  217. # ■ Spriteset_Battle
  218. #==============================================================================
  219. class Spriteset_Battle
  220.   #--------------------------------------------------------------------------
  221.   # ● インクルード
  222.   #--------------------------------------------------------------------------
  223.   include XRXS26
  224.   #--------------------------------------------------------------------------
  225.   # ● フレーム更新
  226.   #--------------------------------------------------------------------------
  227.   alias xrxs26_initialize initialize
  228.   def initialize
  229.     xrxs26_initialize
  230.     #
  231.     # 以下、五人目以降のアクタースプライトの追加処理---
  232.     #
  233.     # アクターが表示されるビューポートを、とりあえず先頭の人から取得しとく(素
  234.     actor_viewport = @actor_sprites[0].viewport
  235.     # 戦闘参加メンバーが5人以上の場合
  236.     if FRONT_MEMBER_LIMIT > 4
  237.       for i in 5..FRONT_MEMBER_LIMIT
  238.         # アクタースプライトを追加
  239.         @actor_sprites.push(Sprite_Battler.new(actor_viewport))
  240.         @actor_sprites[i-1].battler = $game_party.actors[i-1]
  241.       end
  242.     end
  243.     # ビューポートを更新
  244.     actor_viewport.update
  245.   end
  246. end
  247. #==============================================================================
  248. # ■ Scene_Battle
  249. #==============================================================================
  250. class Scene_Battle
  251.   #--------------------------------------------------------------------------
  252.   # ● インクルード
  253.   #--------------------------------------------------------------------------
  254.   include XRXS26
  255.   #--------------------------------------------------------------------------
  256.   # ● メイン処理 をパーティメンバー処理ではさむ
  257.   #--------------------------------------------------------------------------
  258.   alias xrxs26_main main
  259.   def main
  260.     # 待機メンバーへ退避----------
  261.     $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
  262.     $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
  263.     $game_party.actors.compact!
  264.     # メイン処理
  265.     xrxs26_main
  266.     # 待機メンバーから復帰
  267.     $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
  268.     $game_party.backword_actors.clear
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● アフターバトルフェーズ開始
  272.   #--------------------------------------------------------------------------
  273.   alias xrxs26_start_phase5 start_phase5
  274.   def start_phase5
  275.     # 「待機メンバー経験値獲得」が有効 and 待機アクターが一人以上いる
  276.     if BACKWARD_EXP_GAINABLE and $game_party.backword_actors.size >= 1
  277.       # 待機メンバーから復帰
  278.       $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
  279.       $game_party.backword_actors.clear
  280.       # 呼び戻す
  281.       xrxs26_start_phase5
  282.       # 待機メンバーへ退避----------
  283.       $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
  284.       $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
  285.       $game_party.actors.compact!
  286.     else
  287.       # 呼び戻す
  288.       xrxs26_start_phase5
  289.     end
  290.   end
  291. end
  292. # ▽△▽ XRXL 4. 第二カーソル 機構 ▽△▽
  293. # by 桜雅 在土
  294. #==============================================================================
  295. # --- XRXS. 第二カーソル 機構 ---
  296. #------------------------------------------------------------------------------
  297. #     ウィンドウに .index2 プロパティを追加します。
  298. #==============================================================================
  299. module XRXS_Cursor2
  300.   #--------------------------------------------------------------------------
  301.   # ● オブジェクト初期化
  302.   #--------------------------------------------------------------------------
  303.   def initialize(x, y, w, h)
  304.     super(x, y, h, w)
  305.     # 補助ウィンドウ(透明)を作成:カーソル専用
  306.     @xrxsc2_window = Window_Selectable.new(self.x, self.y, self.width, self.height)
  307.     @xrxsc2_window.opacity = 0
  308.     @xrxsc2_window.active = false
  309.     @xrxsc2_window.index = -1
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ○ 第二カーソルの設置
  313.   #--------------------------------------------------------------------------
  314.   def index2
  315.     return @xrxsc2_window.index
  316.   end
  317.   def index2=(index)
  318.     @xrxsc2_window.index = index
  319.     if index == -1
  320.       @xrxsc2_window.cursor_rect.empty
  321.     else
  322.       @xrxsc2_window.x = self.x
  323.       @xrxsc2_window.y = self.y
  324.       @xrxsc2_window.cursor_rect = self.cursor_rect
  325.     end
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ○ 先頭の行の設定
  329.   #--------------------------------------------------------------------------
  330.   def top_row=(row)
  331.     super
  332.     # 補助ウィンドウの oy を更新
  333.     pre_oy = @xrxsc2_window.oy
  334.     @xrxsc2_window.oy = self.oy
  335.     @xrxsc2_window.cursor_rect.y -= self.oy - pre_oy
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ○ 解放
  339.   #--------------------------------------------------------------------------
  340.   def dispose
  341.     @xrxsc2_window.dispose
  342.     super
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ○ X, Y 座標
  346.   #--------------------------------------------------------------------------
  347.   def x=(n)
  348.     super
  349.     @xrxsc2_window.x = self.x unless @xrxsc2_window.nil?
  350.   end
  351.   def y=(n)
  352.     super
  353.     @xrxsc2_window.y = self.y unless @xrxsc2_window.nil?
  354.   end
  355. end
  356. # ▼▲▼ XRXS26AX. +入れ替えメニュー ver.2 ▼▲▼ built 081113
  357. # by 桜雅 在土

  358. #==============================================================================
  359. # ■ Window_MenuStatus
  360. #==============================================================================
  361. class Window_MenuStatus < Window_Selectable
  362.   #--------------------------------------------------------------------------
  363.   # ○ インクルード
  364.   #--------------------------------------------------------------------------
  365.   include XRXS26
  366.   include XRXS_Cursor2
  367.   #--------------------------------------------------------------------------
  368.   # ● 公開インスタンス変数
  369.   #--------------------------------------------------------------------------
  370.   attr_reader   :column_max             # 列数
  371.   #--------------------------------------------------------------------------
  372.   # ● オブジェクト初期化
  373.   #--------------------------------------------------------------------------
  374.   def initialize
  375.     h = 480
  376.     if MENU_STATUS_STRETCH
  377.       h = FRONT_MEMBER_LIMIT * 116 + 16
  378.     end
  379.     super(0, 0, 480, h)
  380.     h = ($game_party.actors.size - 1) * LINE_HEIGHT + CURSOR_HEIGHT
  381.     self.contents = Bitmap.new(width - 32, h)
  382.     refresh
  383.     self.active = false
  384.     self.index = -1
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ○ 1 ページに表示できる行数の取得
  388.   #--------------------------------------------------------------------------
  389.   def page_row_max
  390.     if MENU_STATUS_STRETCH
  391.       return FRONT_MEMBER_LIMIT          # 戦闘パーティ最大数
  392.     else
  393.       return [FRONT_MEMBER_LIMIT, 4].max # 戦闘パーティ最大数(最低4)
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ○ 先頭の行の取得
  398.   #--------------------------------------------------------------------------
  399.   def top_row
  400.     # ウィンドウ内容の転送元 Y 座標を、1 行の高さ LINE_HEIGHT で割る
  401.     return self.oy / LINE_HEIGHT
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ○ 先頭の行の設定
  405.   #--------------------------------------------------------------------------
  406.   def top_row=(row)
  407.     super
  408.     self.oy = self.oy/32 * LINE_HEIGHT
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ● カーソルの矩形更新
  412.   #--------------------------------------------------------------------------
  413.   def update_cursor_rect
  414.     super
  415.     unless @index < 0
  416.       y = (self.cursor_rect.y + self.oy) * LINE_HEIGHT/32 - self.oy
  417.       self.cursor_rect.set(0, y, self.cursor_rect.width, CURSOR_HEIGHT)
  418.     end
  419.   end
  420. end
  421. #==============================================================================
  422. # ■ Scene_Menu
  423. #==============================================================================
  424. class Scene_Menu
  425.   #--------------------------------------------------------------------------
  426.   # ○ インクルード
  427.   #--------------------------------------------------------------------------
  428.   include XRXS26
  429.   #--------------------------------------------------------------------------
  430.   # ● フレーム更新
  431.   #--------------------------------------------------------------------------
  432.   alias xrxs26ax_update update
  433.   def update
  434.     # インデックスを保存
  435.     @status_index = @status_window.index
  436.     # 呼び戻す
  437.     xrxs26ax_update
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  441.   #--------------------------------------------------------------------------
  442.   alias xrxs26ax_update_command update_command
  443.   def update_command
  444.     # 呼び戻す
  445.     xrxs26ax_update_command
  446.     # 入れ替え移行キーが押されたとき、@command_window.indexが設定値以上
  447.     if Input.trigger?(MENU_MEMBER_CHANGE_KEY_GO) and
  448.        @command_window.index >= MENU_MEMBER_CHANGE_INDEX_MIN
  449.       # 決定 SE を演奏
  450.       $game_system.se_play($data_system.decision_se)
  451.       # カーソル位置を記憶
  452.       @command_index_before_menu_member_change = @command_window.index
  453.       # 入れ替えウィンドウへ移行
  454.       @command_window.active = false
  455.       @command_window.index = -1
  456.       @status_window.active = true
  457.       @status_window.index = 0
  458.     end
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● フレーム更新 (ステータスウィンドウがアクティブの場合)
  462.   #--------------------------------------------------------------------------
  463.   alias xrxs26ax_update_status update_status
  464.   def update_status
  465.     # 呼び戻す
  466.     if @command_window.index != -1
  467.       xrxs26ax_update_status
  468.       return
  469.     end
  470.     # B ボタンか入れ替え終了キーが押されたとき
  471.     if ((Input.trigger?(Input::B) or Input.trigger?(MENU_MEMBER_CHANGE_KEY_END)) and
  472.         @status_window.index2 == -1 and
  473.         @status_index%@status_window.column_max == 0)
  474.       # キャンセル SE を演奏
  475.       $game_system.se_play($data_system.cancel_se)
  476.       # コマンドウィンドウをアクティブにする
  477.       @command_window.active = true
  478.       @command_window.index = 0
  479.       @status_window.active = false
  480.       @status_window.index = -1
  481.       return
  482.     end
  483.     # B ボタンが押されたとき
  484.     if Input.trigger?(Input::B) and @status_window.index2 >= 0
  485.       @status_window.index = @status_window.index2
  486.       @status_window.index2 = -1
  487.       return
  488.     end
  489.     # 決定キーが押されたとき
  490.     if Input.trigger?(Input::C)
  491.       if @status_window.index2 == -1
  492.         if UNMOVABLE_ACTORS.include?($game_party.actors[@status_window.index].id)
  493.           # ブザー SE を演奏
  494.           $game_system.se_play($data_system.buzzer_se)
  495.           return
  496.         end
  497.         # 決定 SE を演奏
  498.         $game_system.se_play($data_system.decision_se)
  499.         # メンバーの入れ替え一人目の決定
  500.         @status_window.index2 = @status_window.index
  501.       else
  502.         if UNMOVABLE_ACTORS.include?($game_party.actors[@status_window.index].id)
  503.           # ブザー SE を演奏
  504.           $game_system.se_play($data_system.buzzer_se)
  505.           return
  506.         end
  507.         # どちらかが戦闘メンバー かつ どちらかが戦闘禁止アクター の場合
  508.         if (@status_window.index < FRONT_MEMBER_LIMIT or
  509.             @status_window.index2 < FRONT_MEMBER_LIMIT) and
  510.            (UMBATTLABLE_ACTORS.include?($game_party.actors[@status_window.index].id) or
  511.             UMBATTLABLE_ACTORS.include?($game_party.actors[@status_window.index2].id))
  512.           # ブザー SE を演奏
  513.           $game_system.se_play($data_system.buzzer_se)
  514.           return
  515.         end
  516.         # どちらかが待機メンバー かつ どちらかが待機禁止アクター の場合
  517.         if (@status_window.index >= FRONT_MEMBER_LIMIT or
  518.             @status_window.index2 >= FRONT_MEMBER_LIMIT) and
  519.            (FORCETOBATTLE_ACTORS.include?($game_party.actors[@status_window.index].id) or
  520.             FORCETOBATTLE_ACTORS.include?($game_party.actors[@status_window.index2].id))
  521.           # ブザー SE を演奏
  522.           $game_system.se_play($data_system.buzzer_se)
  523.           return
  524.         end
  525.         # 決定 SE を演奏
  526.         $game_system.se_play($data_system.decision_se)
  527.         # メンバーの入れ替え二人目の決定と入れ替えの実行
  528.         actor2 = $game_party.actors[@status_window.index]
  529.         actor = $game_party.actors[@status_window.index2]
  530.         $game_party.actors[@status_window.index2] = actor2
  531.         $game_party.actors[@status_window.index] = actor
  532.         ##########################################################
  533.         if @status_window.index >= FRONT_MEMBER_LIMIT or
  534.           @status_window.index2 >= FRONT_MEMBER_LIMIT
  535.           $game_party.front_size -= 1
  536.         end
  537.         bA = $game_party.actors[@status_window.index] == nil
  538.         bB = $game_party.actors[@status_window.index2] == nil
  539.         if (bA ^ bB) and (@status_window.index < FRONT_MEMBER_LIMIT or
  540.           @status_window.index2 < FRONT_MEMBER_LIMIT)
  541.           for i in 0...4
  542.             if $game_party.actors[i] == nil
  543.               for j in i + 1...4
  544.                 if $game_party.actors[j] != nil
  545.                   $game_party.actors[i] = $game_party.actors[j]
  546.                   $game_party.actors[j] = nil
  547.                   break
  548.                 end
  549.               end
  550.             end
  551.           end
  552.         end
  553.         ##########################################################
  554.         @status_window.index = @status_window.index2
  555.         @status_window.index2 = -1
  556.         # プレイヤーをリフレッシュ
  557.         $game_player.refresh
  558.         # ステータスウィンドウをリフレッシュ
  559.         @status_window.refresh
  560.       end
  561.       return
  562.     end
  563.   end
  564. end

  565. #============================================================================================
  566. # 本脚本来自www.66RPG.com,转载和使用请保留此信息
  567. #============================================================================================

  568. # ▼▲▼ XRXS26BX. +BUZZデザイン ▼▲▼ built 033109
  569. # by 桜雅 在土

  570. #==============================================================================
  571. # □ 初始化定义
  572. #==============================================================================
  573. class Window_MenuStatus < Window_Selectable
  574.   #
  575.   # 不显示能力值的角色编号
  576.   #
  577.   NO_PARAMETER_ACTORS = []
  578. end
  579. #==============================================================================
  580. # ■ Window_MenuStatus
  581. #==============================================================================
  582. class Window_MenuStatus < Window_Selectable
  583.   #--------------------------------------------------------------------------
  584.   # ○ インクルード
  585.   #--------------------------------------------------------------------------
  586.   include XRXS26
  587.   #--------------------------------------------------------------------------
  588.   # ● 公開インスタンス変数
  589.   #--------------------------------------------------------------------------
  590.   attr_reader   :newitem_window
  591.   attr_reader   :bottomkeyhelp_window
  592.   #--------------------------------------------------------------------------
  593.   # ● オブジェクト初期化
  594.   #--------------------------------------------------------------------------
  595.   alias xrxs26bx_initialize initialize
  596.   def initialize
  597.     # 呼び戻す
  598.     xrxs26bx_initialize
  599.     # 寄生してウィンドウを作成
  600.     # ボトルキーヘルプウィンドウ
  601.     @bottomkeyhelp_window = Window_BottomKeyHelp.new
  602.     @bottomkeyhelp_window.visible = false
  603.     # 設定変更
  604.     self.height   = 448
  605.     self.contents = Bitmap.new(width - 32, height - 32)
  606.     refresh
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # ● リフレッシュ
  610.   #--------------------------------------------------------------------------
  611.   def refresh
  612.     self.contents.clear
  613.     @item_max = 10#$game_party.actors.size
  614.     @column_max = 2
  615.     y = (FRONT_MEMBER_LIMIT+1)/2 * 64 + 28
  616.     self.contents.font.size = 16
  617.     self.contents.font.color = system_color
  618.     self.contents.draw_text(4, 0, 92, 28, "戰鬥人物:")
  619.     self.contents.draw_text(4, 175, 92, 28, "待機人物:")
  620.     for i in 0...$game_party.actors.size
  621.       ####################################
  622.       next if $game_party.actors[i] == nil
  623.       ####################################
  624.       x = 64 + i%2 * 224
  625.       y = i/2 *  72 + 24
  626.       actor = $game_party.actors[i]
  627.       if i >= FRONT_MEMBER_LIMIT
  628.         y += 32
  629.         self.contents.font.color = disabled_color
  630.         self.contents.draw_text(x, y, 120, 32, actor.name)
  631.       else
  632.         draw_actor_name(actor   , x     , y     )
  633.       end
  634.       draw_actor_graphic(actor, x - 40, y + 64)
  635.       unless NO_PARAMETER_ACTORS.include?(actor.id)
  636.         draw_actor_level(actor  , x + 94, y     )
  637.         draw_actor_hp(actor     , x, y + 16)
  638.         draw_actor_sp(actor     , x, y + 32)
  639.         draw_actor_state(actor  , x, y + 48)
  640.       end
  641.     end
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ○ フレーム更新
  645.   #--------------------------------------------------------------------------
  646.   def update
  647.     # ウィンドウを更新
  648.     @bottomkeyhelp_window.update
  649.     super
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ○ 解放
  653.   #--------------------------------------------------------------------------
  654.   def dispose
  655.     @bottomkeyhelp_window.dispose
  656.     super
  657.   end
  658.   #--------------------------------------------------------------------------
  659.   # ● カーソルの矩形更新
  660.   #--------------------------------------------------------------------------
  661.   def update_cursor_rect
  662.     if @index < 0
  663.       self.cursor_rect.empty
  664.     else
  665.       y = @index/2 * 72 + 28
  666.       if @index >= FRONT_MEMBER_LIMIT
  667.         y += 32
  668.       end
  669.       self.cursor_rect.set(@index%2 * 224, y, 224, 72)
  670.     end
  671.   end
  672. end
  673. #==============================================================================
  674. # ■ Scene_Menu
  675. #==============================================================================
  676. class Scene_Menu
  677.   #--------------------------------------------------------------------------
  678.   # ● フレーム更新
  679.   #--------------------------------------------------------------------------
  680.   alias xrxs26bx_update update
  681.   def update
  682.     # 登録
  683.     if @bottomkeyhelp_window.nil?
  684.       @bottomkeyhelp_window = @status_window.bottomkeyhelp_window
  685.       @bottomkeyhelp_window.visible = true
  686.       set_keyhelp1
  687.     end
  688.     # 呼び戻す
  689.     xrxs26bx_update
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  693.   #--------------------------------------------------------------------------
  694.   alias xrxs26bx_update_command update_command
  695.   def update_command
  696.     # 呼び戻す
  697.     xrxs26bx_update_command
  698.     # 入れ替え移行キーが押されたとき
  699.     if @command_window.index == -1 and @status_window.active
  700.       set_keyhelp2
  701.     end
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● フレーム更新 (ステータスウィンドウがアクティブの場合)
  705.   #--------------------------------------------------------------------------
  706.   alias xrxs26bx_update_status update_status
  707.   def update_status
  708.     # 保存
  709.     last_index = @status_window.index2
  710.     # 呼び戻す
  711.     xrxs26bx_update_status
  712.     #
  713.     if last_index != @status_window.index2
  714.       # 一人目を選択した場合
  715.       if @status_window.index2 >= 0
  716.         set_keyhelp3
  717.       else
  718.         set_keyhelp2
  719.       end
  720.     end
  721.     # 戻った場合
  722.     unless @status_window.active
  723.       set_keyhelp1
  724.     end
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # ○ キーヘルプを設定 1
  728.   #--------------------------------------------------------------------------
  729.   def set_keyhelp1
  730.     @bottomkeyhelp_window.clear
  731.     @bottomkeyhelp_window.add("B","關閉本窗口")
  732.     @bottomkeyhelp_window.add("C","確定")
  733.     @bottomkeyhelp_window.add("→","人物順序調整")
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ○ キーヘルプを設定 2
  737.   #--------------------------------------------------------------------------
  738.   def set_keyhelp2
  739.     @bottomkeyhelp_window.clear
  740.     @bottomkeyhelp_window.add("←,B","返回")
  741.     @bottomkeyhelp_window.add("C","第一個人物確定")
  742.   end
  743.   #--------------------------------------------------------------------------
  744.   # ○ キーヘルプを設定 3
  745.   #--------------------------------------------------------------------------
  746.   def set_keyhelp3
  747.     @bottomkeyhelp_window.clear
  748.     @bottomkeyhelp_window.add("B","返回")
  749.     @bottomkeyhelp_window.add("C","第二個人物確定")
  750.   end
  751. end



  752. #==============================================================================
  753. # □ Window_BottomKeyHelp
  754. #------------------------------------------------------------------------------
  755. #     画面下で操作説明をする透明なウィンドウです。
  756. #==============================================================================
  757. class Window_BottomKeyHelp < Window_Base
  758.   #--------------------------------------------------------------------------
  759.   # ○ オブジェクト初期化
  760.   #--------------------------------------------------------------------------
  761.   def initialize
  762.     super(0, 432, 640, 64)
  763.     self.contents = Bitmap.new(width - 32, height - 32)
  764.     self.opacity = 0
  765.     clear
  766.   end
  767.   #--------------------------------------------------------------------------
  768.   # ○ クリア
  769.   #--------------------------------------------------------------------------
  770.   def clear
  771.     self.contents.clear
  772.     @now_x = 608
  773.   end
  774.   #--------------------------------------------------------------------------
  775.   # ○ 追加
  776.   #--------------------------------------------------------------------------
  777.   def add(key, explanation)
  778.     # 計算
  779.     self.contents.font.size = 20
  780.     x  = self.contents.text_size(key).width
  781.     self.contents.font.size = 16
  782.     x += self.contents.text_size(explanation).width + 8
  783.     @now_x -= x
  784.     # 描写
  785.     self.contents.font.size = 20
  786.     self.contents.font.color = system_color
  787.     self.contents.draw_text(@now_x, 0, x, 32, key, 0)
  788.     self.contents.font.size = 16
  789.     self.contents.font.color = normal_color
  790.     self.contents.draw_text(@now_x, 0, x, 32, explanation, 2)
  791.     # 余白
  792.     @now_x -= 32
  793.   end
  794. end
复制代码

2009/04/06 编辑:上面这个脚本存在很多 BUG,更新之后的版本在这里:http://rpg.blue/viewthread.php?t ... 2D4%2D6+4%3A00%3A32

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-16 14:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表