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

Project1

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

待机人物替补出场系统V0.4版(默认战斗+RTAB版)

 关闭 [复制链接]

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
跳转到指定楼层
1
发表于 2008-11-26 06:50:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
战斗人物死亡后待机人物替补出场系统
◎本系统的BUG 已获得改善◎

前言:
前阵子有人在 RMXP技术讨论区 提出可不可以实现战斗人物死亡后死亡后替补出场?
http://rpg.blue/viewthread.php?tid=110417
(不过那帖子已经被LZ结帖==)
今天在这裡发了一个比较正确的脚本系统可以解决,
脚本不长也不会太难,说出来比较有技术的地方只有....==
利用泡沫式排序的方法来替补出场。
系统效果:
当前线战斗成员全部灭亡时,
如果有待机人物,会以HP最大的成员往前面递补,
尽可能地递补直到前线战斗人数满,
全数成员HP為0时候,战斗失败.....
使用方法:
二版本都可使用 => 默认战斗、RTAB版
本脚已經配合 => 自定义战斗、待机人数,附赠菜单界面
http://rpg.blue/web/htm/news101.htm
先把第一脚本在Main脚本之前插入
再把第二脚本在Main脚本之前按insert

自定义战斗、待机人数,附赠菜单界面
(http://rpg.blue/web/htm/news101.htm):
  1. # ▼▲▼ XRXS26. 人物扩张系统 ver..05 ▼▲▼
  2. # by 桜雅 在土

  3. #==============================================================================
  4. # □ 初始化定义
  5. #==============================================================================
  6. module XRXS26
  7.   FRONT_MEMBER_LIMIT    = 4        # 战斗参战人数最大值
  8.   BACKWARD_MEMBER_LIMIT = 6       # 待机人数最大值  
  9.   BACKWARD_EXP_GAINABLE = true     # 待机人物是否获得经验
  10.   MENU_STATUS_STRETCH   = false    # 3人以下的时候,菜单是否拉伸大小
  11. end
  12. #------------------------------------------------------------------------------
  13. # 菜单页面状态
  14. #------------------------------------------------------------------------------
  15. class Window_MenuStatus < Window_Selectable
  16.   # 列数
  17.   COLUMN_MAX = 1
  18.   # 光标高度
  19.   CURSOR_HEIGHT = 96
  20.   # 一行的高度
  21.   LINE_HEIGHT = 116
  22. end
  23. #------------------------------------------------------------------------------
  24. # 菜??景
  25. #------------------------------------------------------------------------------
  26. class Scene_Menu
  27.   MENU_MEMBER_CHANGE_KEY_GO    = Input::RIGHT # 进入键
  28.   MENU_MEMBER_CHANGE_KEY_END   = Input::LEFT  # 离开键
  29.   MENU_MEMBER_CHANGE_INDEX_MIN = 0            # 可更换角色最小编号
  30.   FORCETOBATTLE_ACTORS         = []           # 不能待机的角色编号
  31.   UMBATTLABLE_ACTORS           = []           # 不能加入战斗的角色编号
  32.   UNMOVABLE_ACTORS             = []           # 不能移动的角色编号
  33. end
  34. #------------------------------------------------------------------------------
  35. #
  36. # 解説
  37. #   Game_Partyの @actors のうち先頭から↑FRONT_MEMBER_LIMIT番目までのアクターを
  38. #   戦闘メンバーとして、それ以上を待機メンバーとして扱います。
  39. #
  40. #==============================================================================
  41. # ■ Game_Party
  42. #==============================================================================
  43. class Game_Party
  44.   #--------------------------------------------------------------------------
  45.   # ○ インクルード
  46.   #--------------------------------------------------------------------------
  47.   include XRXS26
  48.   #--------------------------------------------------------------------------
  49.   # ○ 公開インスタンス変数
  50.   #--------------------------------------------------------------------------
  51.   attr_reader   :backword_actors          # 待機アクター
  52.   #--------------------------------------------------------------------------
  53.   # ● オブジェクト初期化
  54.   #--------------------------------------------------------------------------
  55.   alias xrxs26_initialize initialize
  56.   def initialize
  57.     xrxs26_initialize
  58.     # 待機メンバー配列を初期化
  59.     @backword_actors = []
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● アクターを加える
  63.   #--------------------------------------------------------------------------
  64.   def add_actor(actor_id)
  65.     # アクターを取得
  66.     actor = $game_actors[actor_id]
  67.     # このアクターがパーティにいない場合
  68.     if not @actors.include?(actor)
  69.       # 満員でないならメンバーに追加
  70.       if @actors.size < (FRONT_MEMBER_LIMIT + BACKWARD_MEMBER_LIMIT)
  71.         # # アクターを追加
  72.         @actors.push(actor)
  73.         # プレイヤーをリフレッシュ
  74.         $game_player.refresh
  75.       end
  76.     end
  77.   end
  78. end
  79. #==============================================================================
  80. # ■ Spriteset_Battle
  81. #==============================================================================
  82. class Spriteset_Battle
  83.   #--------------------------------------------------------------------------
  84.   # ● インクルード
  85.   #--------------------------------------------------------------------------
  86.   include XRXS26
  87.   #--------------------------------------------------------------------------
  88.   # ● フレーム更新
  89.   #--------------------------------------------------------------------------
  90.   alias xrxs26_initialize initialize
  91.   def initialize
  92.     xrxs26_initialize
  93.     #
  94.     # 以下、五人目以降のアクタースプライトの追加処理---
  95.     #
  96.     # アクターが表示されるビューポートを、とりあえず先頭の人から取得しとく(素
  97.     actor_viewport = @actor_sprites[0].viewport
  98.     # 戦闘参加メンバーが5人以上の場合
  99.     if FRONT_MEMBER_LIMIT > 4
  100.       for i in 5..FRONT_MEMBER_LIMIT
  101.         # アクタースプライトを追加
  102.         @actor_sprites.push(Sprite_Battler.new(actor_viewport))
  103.         @actor_sprites[i-1].battler = $game_party.actors[i-1]
  104.       end
  105.     end
  106.     # ビューポートを更新
  107.     actor_viewport.update
  108.   end
  109. end
  110. #==============================================================================
  111. # ■ Scene_Battle
  112. #==============================================================================
  113. class Scene_Battle
  114.   #--------------------------------------------------------------------------
  115.   # ● インクルード
  116.   #--------------------------------------------------------------------------
  117.   include XRXS26
  118.   #--------------------------------------------------------------------------
  119.   # ● メイン処理 をパーティメンバー処理ではさむ
  120.   #--------------------------------------------------------------------------
  121.   alias xrxs26_main main
  122.   def main
  123.     # 待機メンバーへ退避----------
  124.     $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
  125.     $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
  126.     $game_party.actors.compact!
  127.     # メイン処理
  128.     xrxs26_main
  129.     # 待機メンバーから復帰
  130.     $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
  131.     $game_party.backword_actors.clear
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● アフターバトルフェーズ開始
  135.   #--------------------------------------------------------------------------
  136.   alias xrxs26_start_phase5 start_phase5
  137.   def start_phase5
  138.     # 「待機メンバー経験値獲得」が有効 and 待機アクターが一人以上いる
  139.     if BACKWARD_EXP_GAINABLE and $game_party.backword_actors.size >= 1
  140.       # 待機メンバーから復帰
  141.       $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
  142.       $game_party.backword_actors.clear
  143.       # 呼び戻す
  144.       xrxs26_start_phase5
  145.       # 待機メンバーへ退避----------
  146.       $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
  147.       $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
  148.       $game_party.actors.compact!
  149.     else
  150.       # 呼び戻す
  151.       xrxs26_start_phase5
  152.     end
  153.   end
  154. end
  155. # ▽△▽ XRXL 4. 第二カーソル 機構 ▽△▽
  156. # by 桜雅 在土
  157. #==============================================================================
  158. # --- XRXS. 第二カーソル 機構 ---
  159. #------------------------------------------------------------------------------
  160. #     ウィンドウに .index2 プロパティを追加します。
  161. #==============================================================================
  162. module XRXS_Cursor2
  163.   #--------------------------------------------------------------------------
  164.   # ● オブジェクト初期化
  165.   #--------------------------------------------------------------------------
  166.   def initialize(x, y, w, h)
  167.     super(x, y, h, w)
  168.     # 補助ウィンドウ(透明)を作成:カーソル専用
  169.     @xrxsc2_window = Window_Selectable.new(self.x, self.y, self.width, self.height)
  170.     @xrxsc2_window.opacity = 0
  171.     @xrxsc2_window.active = false
  172.     @xrxsc2_window.index = -1
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ○ 第二カーソルの設置
  176.   #--------------------------------------------------------------------------
  177.   def index2
  178.     return @xrxsc2_window.index
  179.   end
  180.   def index2=(index)
  181.     @xrxsc2_window.index = index
  182.     if index == -1
  183.       @xrxsc2_window.cursor_rect.empty
  184.     else
  185.       @xrxsc2_window.x = self.x
  186.       @xrxsc2_window.y = self.y
  187.       @xrxsc2_window.cursor_rect = self.cursor_rect
  188.     end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ○ 先頭の行の設定
  192.   #--------------------------------------------------------------------------
  193.   def top_row=(row)
  194.     super
  195.     # 補助ウィンドウの oy を更新
  196.     pre_oy = @xrxsc2_window.oy
  197.     @xrxsc2_window.oy = self.oy
  198.     @xrxsc2_window.cursor_rect.y -= self.oy - pre_oy
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ○ 解放
  202.   #--------------------------------------------------------------------------
  203.   def dispose
  204.     @xrxsc2_window.dispose
  205.     super
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ○ X, Y 座標
  209.   #--------------------------------------------------------------------------
  210.   def x=(n)
  211.     super
  212.     @xrxsc2_window.x = self.x unless @xrxsc2_window.nil?
  213.   end
  214.   def y=(n)
  215.     super
  216.     @xrxsc2_window.y = self.y unless @xrxsc2_window.nil?
  217.   end
  218. end
  219. # ▼▲▼ XRXS26AX. +入れ替えメニュー ver.2 ▼▲▼ built 081113
  220. # by 桜雅 在土

  221. #==============================================================================
  222. # ■ Window_MenuStatus
  223. #==============================================================================
  224. class Window_MenuStatus < Window_Selectable
  225.   #--------------------------------------------------------------------------
  226.   # ○ インクルード
  227.   #--------------------------------------------------------------------------
  228.   include XRXS26
  229.   include XRXS_Cursor2
  230.   #--------------------------------------------------------------------------
  231.   # ● 公開インスタンス変数
  232.   #--------------------------------------------------------------------------
  233.   attr_reader   :column_max             # 列数
  234.   #--------------------------------------------------------------------------
  235.   # ● オブジェクト初期化
  236.   #--------------------------------------------------------------------------
  237.   def initialize
  238.     h = 480
  239.     if MENU_STATUS_STRETCH
  240.       h = FRONT_MEMBER_LIMIT * 116 + 16
  241.     end
  242.     super(0, 0, 480, h)
  243.     h = ($game_party.actors.size - 1) * LINE_HEIGHT + CURSOR_HEIGHT
  244.     self.contents = Bitmap.new(width - 32, h)
  245.     refresh
  246.     self.active = false
  247.     self.index = -1
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ○ 1 ページに表示できる行数の取得
  251.   #--------------------------------------------------------------------------
  252.   def page_row_max
  253.     if MENU_STATUS_STRETCH
  254.       return FRONT_MEMBER_LIMIT          # 戦闘パーティ最大数
  255.     else
  256.       return [FRONT_MEMBER_LIMIT, 4].max # 戦闘パーティ最大数(最低4)
  257.     end
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ○ 先頭の行の取得
  261.   #--------------------------------------------------------------------------
  262.   def top_row
  263.     # ウィンドウ内容の転送元 Y 座標を、1 行の高さ LINE_HEIGHT で割る
  264.     return self.oy / LINE_HEIGHT
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ○ 先頭の行の設定
  268.   #--------------------------------------------------------------------------
  269.   def top_row=(row)
  270.     super
  271.     self.oy = self.oy/32 * LINE_HEIGHT
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● カーソルの矩形更新
  275.   #--------------------------------------------------------------------------
  276.   def update_cursor_rect
  277.     super
  278.     unless @index < 0
  279.       y = (self.cursor_rect.y + self.oy) * LINE_HEIGHT/32 - self.oy
  280.       self.cursor_rect.set(0, y, self.cursor_rect.width, CURSOR_HEIGHT)
  281.     end
  282.   end
  283. end
  284. #==============================================================================
  285. # ■ Scene_Menu
  286. #==============================================================================
  287. class Scene_Menu
  288.   #--------------------------------------------------------------------------
  289.   # ○ インクルード
  290.   #--------------------------------------------------------------------------
  291.   include XRXS26
  292.   #--------------------------------------------------------------------------
  293.   # ● フレーム更新
  294.   #--------------------------------------------------------------------------
  295.   alias xrxs26ax_update update
  296.   def update
  297.     # インデックスを保存
  298.     @status_index = @status_window.index
  299.     # 呼び戻す
  300.     xrxs26ax_update
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  304.   #--------------------------------------------------------------------------
  305.   alias xrxs26ax_update_command update_command
  306.   def update_command
  307.     # 呼び戻す
  308.     xrxs26ax_update_command
  309.     # 入れ替え移行キーが押されたとき、@command_window.indexが設定値以上
  310.     if Input.trigger?(MENU_MEMBER_CHANGE_KEY_GO) and
  311.        @command_window.index >= MENU_MEMBER_CHANGE_INDEX_MIN
  312.       # 決定 SE を演奏
  313.       $game_system.se_play($data_system.decision_se)
  314.       # カーソル位置を記憶
  315.       @command_index_before_menu_member_change = @command_window.index
  316.       # 入れ替えウィンドウへ移行
  317.       @command_window.active = false
  318.       @command_window.index = -1
  319.       @status_window.active = true
  320.       @status_window.index = 0
  321.     end
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● フレーム更新 (ステータスウィンドウがアクティブの場合)
  325.   #--------------------------------------------------------------------------
  326.   alias xrxs26ax_update_status update_status
  327.   def update_status
  328.     # 呼び戻す
  329.     if @command_window.index != -1
  330.       xrxs26ax_update_status
  331.       return
  332.     end
  333.     # B ボタンか入れ替え終了キーが押されたとき
  334.     if ((Input.trigger?(Input::B) or Input.trigger?(MENU_MEMBER_CHANGE_KEY_END)) and
  335.         @status_window.index2 == -1 and
  336.         @status_index%@status_window.column_max == 0)
  337.       # キャンセル SE を演奏
  338.       $game_system.se_play($data_system.cancel_se)
  339.       # コマンドウィンドウをアクティブにする
  340.       @command_window.active = true
  341.       @command_window.index = 0
  342.       @status_window.active = false
  343.       @status_window.index = -1
  344.       return
  345.     end
  346.     # B ボタンが押されたとき
  347.     if Input.trigger?(Input::B) and @status_window.index2 >= 0
  348.       @status_window.index = @status_window.index2
  349.       @status_window.index2 = -1
  350.       return
  351.     end
  352.     # 決定キーが押されたとき
  353.     if Input.trigger?(Input::C)
  354.       if @status_window.index2 == -1
  355.         if UNMOVABLE_ACTORS.include?($game_party.actors[@status_window.index].id)
  356.           # ブザー SE を演奏
  357.           $game_system.se_play($data_system.buzzer_se)
  358.           return
  359.         end
  360.         # 決定 SE を演奏
  361.         $game_system.se_play($data_system.decision_se)
  362.         # メンバーの入れ替え一人目の決定
  363.         @status_window.index2 = @status_window.index
  364.       else
  365.         if UNMOVABLE_ACTORS.include?($game_party.actors[@status_window.index].id)
  366.           # ブザー SE を演奏
  367.           $game_system.se_play($data_system.buzzer_se)
  368.           return
  369.         end
  370.         # どちらかが戦闘メンバー かつ どちらかが戦闘禁止アクター の場合
  371.         if (@status_window.index < FRONT_MEMBER_LIMIT or
  372.             @status_window.index2 < FRONT_MEMBER_LIMIT) and
  373.            (UMBATTLABLE_ACTORS.include?($game_party.actors[@status_window.index].id) or
  374.             UMBATTLABLE_ACTORS.include?($game_party.actors[@status_window.index2].id))
  375.           # ブザー SE を演奏
  376.           $game_system.se_play($data_system.buzzer_se)
  377.           return
  378.         end
  379.         # どちらかが待機メンバー かつ どちらかが待機禁止アクター の場合
  380.         if (@status_window.index >= FRONT_MEMBER_LIMIT or
  381.             @status_window.index2 >= FRONT_MEMBER_LIMIT) and
  382.            (FORCETOBATTLE_ACTORS.include?($game_party.actors[@status_window.index].id) or
  383.             FORCETOBATTLE_ACTORS.include?($game_party.actors[@status_window.index2].id))
  384.           # ブザー SE を演奏
  385.           $game_system.se_play($data_system.buzzer_se)
  386.           return
  387.         end
  388.         # 決定 SE を演奏
  389.         $game_system.se_play($data_system.decision_se)
  390.         # メンバーの入れ替え二人目の決定と入れ替えの実行
  391.         actor2 = $game_party.actors[@status_window.index]
  392.         actor = $game_party.actors[@status_window.index2]
  393.         $game_party.actors[@status_window.index2] = actor2
  394.         $game_party.actors[@status_window.index] = actor
  395.         @status_window.index = @status_window.index2
  396.         @status_window.index2 = -1
  397.         # プレイヤーをリフレッシュ
  398.         $game_player.refresh
  399.         # ステータスウィンドウをリフレッシュ
  400.         @status_window.refresh
  401.       end
  402.       return
  403.     end
  404.   end
  405. end

  406. #============================================================================================
  407. # 本脚本来自www.66RPG.com,转载和使用请保留此信息
  408. #============================================================================================

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

  411. #==============================================================================
  412. # □ 初始化定义
  413. #==============================================================================
  414. class Window_MenuStatus < Window_Selectable
  415.   #
  416.   # 不显示能力值的角色编号
  417.   #
  418.   NO_PARAMETER_ACTORS = []
  419. end
  420. #==============================================================================
  421. # ■ Window_MenuStatus
  422. #==============================================================================
  423. class Window_MenuStatus < Window_Selectable
  424.   #--------------------------------------------------------------------------
  425.   # ○ インクルード
  426.   #--------------------------------------------------------------------------
  427.   include XRXS26
  428.   #--------------------------------------------------------------------------
  429.   # ● 公開インスタンス変数
  430.   #--------------------------------------------------------------------------
  431.   attr_reader   :newitem_window
  432.   attr_reader   :bottomkeyhelp_window
  433.   #--------------------------------------------------------------------------
  434.   # ● オブジェクト初期化
  435.   #--------------------------------------------------------------------------
  436.   alias xrxs26bx_initialize initialize
  437.   def initialize
  438.     # 呼び戻す
  439.     xrxs26bx_initialize
  440.     # 寄生してウィンドウを作成
  441.     # ボトルキーヘルプウィンドウ
  442.     @bottomkeyhelp_window = Window_BottomKeyHelp.new
  443.     @bottomkeyhelp_window.visible = false
  444.     # 設定変更
  445.     self.height   = 448
  446.     self.contents = Bitmap.new(width - 32, height - 32)
  447.     refresh
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● リフレッシュ
  451.   #--------------------------------------------------------------------------
  452.   def refresh
  453.     self.contents.clear
  454.     @item_max = $game_party.actors.size
  455.     @column_max = 2
  456.     y = (FRONT_MEMBER_LIMIT+1)/2 * 64 + 28
  457.     self.contents.font.size = 16
  458.     self.contents.font.color = system_color
  459.     self.contents.draw_text(4, 0, 92, 28, "戰鬥人物:")
  460.     self.contents.draw_text(4, 175, 92, 28, "待機人物:")
  461.     for i in 0...$game_party.actors.size
  462.       x = 64 + i%2 * 224
  463.       y = i/2 *  72 + 24
  464.       actor = $game_party.actors[i]
  465.       if i >= FRONT_MEMBER_LIMIT
  466.         y += 32
  467.         self.contents.font.color = disabled_color
  468.         self.contents.draw_text(x, y, 120, 32, actor.name)
  469.       else
  470.         draw_actor_name(actor   , x     , y     )
  471.       end
  472.       draw_actor_graphic(actor, x - 40, y + 64)
  473.       unless NO_PARAMETER_ACTORS.include?(actor.id)
  474.         draw_actor_level(actor  , x + 94, y     )
  475.         draw_actor_hp(actor     , x, y + 16)
  476.         draw_actor_sp(actor     , x, y + 32)
  477.         draw_actor_state(actor  , x, y + 48)
  478.       end
  479.     end
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ○ フレーム更新
  483.   #--------------------------------------------------------------------------
  484.   def update
  485.     # ウィンドウを更新
  486.     @bottomkeyhelp_window.update
  487.     super
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ○ 解放
  491.   #--------------------------------------------------------------------------
  492.   def dispose
  493.     @bottomkeyhelp_window.dispose
  494.     super
  495.   end
  496.   #--------------------------------------------------------------------------
  497.   # ● カーソルの矩形更新
  498.   #--------------------------------------------------------------------------
  499.   def update_cursor_rect
  500.     if @index < 0
  501.       self.cursor_rect.empty
  502.     else
  503.       y = @index/2 * 72 + 28
  504.       if @index >= FRONT_MEMBER_LIMIT
  505.         y += 32
  506.       end
  507.       self.cursor_rect.set(@index%2 * 224, y, 224, 72)
  508.     end
  509.   end
  510. end
  511. #==============================================================================
  512. # ■ Scene_Menu
  513. #==============================================================================
  514. class Scene_Menu
  515.   #--------------------------------------------------------------------------
  516.   # ● フレーム更新
  517.   #--------------------------------------------------------------------------
  518.   alias xrxs26bx_update update
  519.   def update
  520.     # 登録
  521.     if @bottomkeyhelp_window.nil?
  522.       @bottomkeyhelp_window = @status_window.bottomkeyhelp_window
  523.       @bottomkeyhelp_window.visible = true
  524.       set_keyhelp1
  525.     end
  526.     # 呼び戻す
  527.     xrxs26bx_update
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  531.   #--------------------------------------------------------------------------
  532.   alias xrxs26bx_update_command update_command
  533.   def update_command
  534.     # 呼び戻す
  535.     xrxs26bx_update_command
  536.     # 入れ替え移行キーが押されたとき
  537.     if @command_window.index == -1 and @status_window.active
  538.       set_keyhelp2
  539.     end
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # ● フレーム更新 (ステータスウィンドウがアクティブの場合)
  543.   #--------------------------------------------------------------------------
  544.   alias xrxs26bx_update_status update_status
  545.   def update_status
  546.     # 保存
  547.     last_index = @status_window.index2
  548.     # 呼び戻す
  549.     xrxs26bx_update_status
  550.     #
  551.     if last_index != @status_window.index2
  552.       # 一人目を選択した場合
  553.       if @status_window.index2 >= 0
  554.         set_keyhelp3
  555.       else
  556.         set_keyhelp2
  557.       end
  558.     end
  559.     # 戻った場合
  560.     unless @status_window.active
  561.       set_keyhelp1
  562.     end
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ○ キーヘルプを設定 1
  566.   #--------------------------------------------------------------------------
  567.   def set_keyhelp1
  568.     @bottomkeyhelp_window.clear
  569.     @bottomkeyhelp_window.add("B","關閉本窗口")
  570.     @bottomkeyhelp_window.add("C","確定")
  571.     @bottomkeyhelp_window.add("→","人物順序調整")
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ○ キーヘルプを設定 2
  575.   #--------------------------------------------------------------------------
  576.   def set_keyhelp2
  577.     @bottomkeyhelp_window.clear
  578.     @bottomkeyhelp_window.add("←,B","返回")
  579.     @bottomkeyhelp_window.add("C","第一個人物確定")
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ○ キーヘルプを設定 3
  583.   #--------------------------------------------------------------------------
  584.   def set_keyhelp3
  585.     @bottomkeyhelp_window.clear
  586.     @bottomkeyhelp_window.add("B","返回")
  587.     @bottomkeyhelp_window.add("C","第二個人物確定")
  588.   end
  589. end



  590. #==============================================================================
  591. # □ Window_BottomKeyHelp
  592. #------------------------------------------------------------------------------
  593. #     画面下で操作説明をする透明なウィンドウです。
  594. #==============================================================================
  595. class Window_BottomKeyHelp < Window_Base
  596.   #--------------------------------------------------------------------------
  597.   # ○ オブジェクト初期化
  598.   #--------------------------------------------------------------------------
  599.   def initialize
  600.     super(0, 432, 640, 64)
  601.     self.contents = Bitmap.new(width - 32, height - 32)
  602.     self.opacity = 0
  603.     clear
  604.   end
  605.   #--------------------------------------------------------------------------
  606.   # ○ クリア
  607.   #--------------------------------------------------------------------------
  608.   def clear
  609.     self.contents.clear
  610.     @now_x = 608
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ○ 追加
  614.   #--------------------------------------------------------------------------
  615.   def add(key, explanation)
  616.     # 計算
  617.     self.contents.font.size = 20
  618.     x  = self.contents.text_size(key).width
  619.     self.contents.font.size = 16
  620.     x += self.contents.text_size(explanation).width + 8
  621.     @now_x -= x
  622.     # 描写
  623.     self.contents.font.size = 20
  624.     self.contents.font.color = system_color
  625.     self.contents.draw_text(@now_x, 0, x, 32, key, 0)
  626.     self.contents.font.size = 16
  627.     self.contents.font.color = normal_color
  628.     self.contents.draw_text(@now_x, 0, x, 32, explanation, 2)
  629.     # 余白
  630.     @now_x -= 32
  631.   end
  632. end
复制代码

待机人物替补出场系统(默认战斗版):
  1. #==============================================================================
  2. # ■ 战斗人物死亡后待机人物替补出场
  3. #
  4. # §§  注意:本版本只適合 => 默认的战斗系统
  5. #------------------------------------------------------------------------------
  6. # 作者:TERENCE (龙皇)
  7. #
  8. # 本脚本请配合:自定义战斗、待机人数,附赠菜单界面
  9. # http://rpg.blue/web/htm/news101.htm
  10. #==============================================================================


  11. #==============================================================================
  12. # ■ Game_Party
  13. #------------------------------------------------------------------------------
  14. #  追加後補判定方法。
  15. #==============================================================================

  16. class Game_Party
  17.   #--------------------------------------------------------------------------
  18.   # ● 後補判定
  19.   #--------------------------------------------------------------------------
  20.   def replacement_need?
  21.     # 同伴中無人 HP 在 0 以上
  22.     for actor in @actors
  23.       if actor.hp > 0
  24.         return false
  25.       end
  26.     end
  27.     # 後補
  28.     return true
  29.   end
  30. end

  31. #==============================================================================
  32. # ■ Scene_Battle
  33. #------------------------------------------------------------------------------
  34. #  追加後補動作。
  35. #==============================================================================
  36. class Scene_Battle
  37.   alias replacement_judge judge
  38.   def judge
  39.     # 判斷战斗人物死亡后是否使待机人物替补出场
  40.     if $game_party.replacement_need?
  41.       # 待命成員復帰
  42.       $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
  43.       $game_party.backword_actors.clear
  44.       #--------------------------------------------------------------------------
  45.       # ● 泡沫式排序法
  46.       #--------------------------------------------------------------------------
  47.       for i in 1..$game_party.actors.size
  48.         for j in 1..$game_party.actors.size
  49.             if $game_party.actors[i-1].hp > $game_party.actors[j-1].hp
  50.               temp = $game_party.actors[i-1]
  51.               $game_party.actors[i-1] = $game_party.actors[j-1]
  52.               $game_party.actors[j-1] = temp
  53.             end
  54.         end
  55.       end
  56.       @wait_count = 2
  57.       # 視窗刷新
  58.       @status_window.refresh
  59.       # 待命成員退避
  60.       $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
  61.       $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
  62.       $game_party.actors.compact!  
  63.     end
  64.     replacement_judge   
  65.   end
  66. end
复制代码

待机人物替补出场系统(RTAB版):
  1. #==============================================================================
  2. # ■ 战斗人物死亡后待机人物替补出场
  3. #
  4. # §§  注意:本版本只適合 => RTAB战斗系统
  5. #------------------------------------------------------------------------------
  6. # 作者:TERENCE (龙皇)
  7. #
  8. # 本脚本请配合:自定义战斗、待机人数,附赠菜单界面
  9. #  http://rpg.blue/web/htm/news101.htm
  10. #
  11. # 战斗本脚本请配合:RTAB战斗系统原生版 Ver1.16
  12. #  http://rpg.blue/web/htm/news49.htm
  13. #==============================================================================


  14. #==============================================================================
  15. # ■ Game_Party
  16. #------------------------------------------------------------------------------
  17. #  追加後補判定方法。
  18. #==============================================================================

  19. class Game_Party
  20.   #--------------------------------------------------------------------------
  21.   # ● 後補判定
  22.   #--------------------------------------------------------------------------
  23.   def replacement_need?
  24.     # 同伴中無人 HP 在 0 以上
  25.     for actor in @actors
  26.       if actor.rest_hp > 0
  27.         return false
  28.       end
  29.     end
  30.     # 後補
  31.     return true
  32.   end
  33. end

  34. #==============================================================================
  35. # ■ Scene_Battle
  36. #------------------------------------------------------------------------------
  37. #  追加後補動作。
  38. #==============================================================================
  39. class Scene_Battle
  40.   alias replacement_judge judge
  41.   def judge
  42.     # 判斷战斗人物死亡后是否使待机人物替补出场
  43.     if $game_party.replacement_need?
  44.       # 待命成員復帰
  45.       $game_party.actors[$game_party.actors.size,0] = $game_party.backword_actors
  46.       $game_party.backword_actors.clear
  47.       #--------------------------------------------------------------------------
  48.       # ● 泡沫式排序法
  49.       #--------------------------------------------------------------------------
  50.       for i in 1..$game_party.actors.size
  51.         for j in 1..$game_party.actors.size
  52.             if $game_party.actors[i-1].hp > $game_party.actors[j-1].hp
  53.               temp = $game_party.actors[i-1]
  54.               $game_party.actors[i-1] = $game_party.actors[j-1]
  55.               $game_party.actors[j-1] = temp
  56.             end
  57.         end
  58.       end
  59.       atb_setup
  60.       @status_window.refresh
  61.       # 待命成員退避
  62.       $game_party.backword_actors[0,0] = $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT]
  63.       $game_party.actors[FRONT_MEMBER_LIMIT, BACKWARD_MEMBER_LIMIT] = nil
  64.       $game_party.actors.compact!
  65.     end
  66.     replacement_judge   
  67.   end
  68. end
复制代码

版本信息:
V0.1版:
递补排序错误版本

V0.2版:
修正递补排序错误

V0.4版:
追加 待机人物替补出场RTAB版本

范例工程--默认战斗替补出场:
http://rpg.blue/upload_program/d/TERENCE_Project0_108233788.rar
如果测试有错误请多多指教!

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
2
发表于 2008-11-26 23:16:27 | 只看该作者
谢谢 龙皇兄
可是 遗憾的是 我用的的确是rtab
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
3
发表于 2008-11-27 04:24:30 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
4
 楼主| 发表于 2008-11-27 07:26:21 | 只看该作者
以下引用水晶凌于2008-11-26 20:24:30的发言:
LZ,您的脚本如何禁止更换第一个角色?
.....
for i in 2..(FRONT_MEMBER_LIMIT+BACKWARD_MEMBER_LIMIT)
       if $game_party.actors.include?($game_actors) # 判别成员是否存在
         for j in 2..(FRONT_MEMBER_LIMIT+BACKWARD_MEMBER_LIMIT)
           if $game_party.actors.include?($game_actors[j]) # 判别成员是否存在
.....

如此一來
当前线战斗成员全部灭亡时,第一个角色是不被替补的!

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
5
发表于 2008-11-27 16:32:53 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
90
在线时间
216 小时
注册时间
2007-9-5
帖子
370
6
发表于 2008-11-27 17:02:08 | 只看该作者
可不可以改成这样:如果前线战斗成员只死了一个,后面待机的就自动补一个上来?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
7
发表于 2008-11-27 17:48:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
8
 楼主| 发表于 2008-11-27 18:00:05 | 只看该作者
以下引用水晶凌于2008-11-27 8:32:53的发言:
但是你这样改的话,在菜单界面还是可以更换的?!

首先在
自定义战斗、待机人数,附赠菜单界面里
http://rpg.blue/web/htm/news101.htm
有该句可以让你自定义
UNMOVABLE_ACTORS = [] # 不能移动的角色编号

以下引用水晶凌于2008-11-27 8:32:53的发言:
如果遇到同伴人数共有16个,但是队伍中只存在编号为1,3,6,7,8,9,11,15的同伴时,也就是编号并不连续的时候,判断$game_party.actors[i-1].hp这句就会出错,因为i-1这个编号的角色可能并不在任何队伍中!以上请教,谢谢!

这里并不会出错

$game_party.actors[编号A]
编号A跟数据库里的角色编号无关...
是跟加入队友的顺序有关

例如
队伍中只存在数据库里的编号为1,3,6,7,8,9,11,15的同伴

$game_party.actors[0] =存放=> 据库里的 编号1的同伴 所有相关的数据资料
$game_party.actors[1] =存放=> 据库里的 编号3的同伴 所有相关的数据资料
$game_party.actors[2] =存放=> 据库里的 编号6的同伴 所有相关的数据资料
$game_party.actors[3] =存放=> 据库里的 编号7的同伴 所有相关的数据资料
......
-----------------------
应该是这样吧...手边现在没RM去测试

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
9
发表于 2008-11-27 18:13:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
10
 楼主| 发表于 2008-11-27 21:05:28 | 只看该作者
汗~我竟然会出这种皮漏


sorry......sorry....pia....pia



#-------------------------------------------------------------------------
# ● 泡沫式排序法
#-------------------------------------------------------------------------
for i in 1..(FRONT_MEMBER_LIMIT+BACKWARD_MEMBER_LIMIT)
  if $game_party.actors.include?($game_actors) # 判别成员是否存在
    for j in 1..(FRONT_MEMBER_LIMIT+BACKWARD_MEMBER_LIMIT)
      if $game_party.actors.include?($game_actors[j]) # 判别成员是否存在
        if $game_party.actors[i-1].hp > $game_party.actors[j-1].hp
          temp = $game_party.actors[i-1]
          $game_party.actors[i-1] = $game_party.actors[j-1]
          $game_party.actors[j-1] = temp
        end
      end
    end
  end
end

修改成
#-------------------------------------------------------------------------
# ● 泡沫式排序法
#-------------------------------------------------------------------------
for i in 1..$game_party.actors.size
  for j in 1..$game_party.actors.size
    if $game_party.actors[i-1].hp > $game_party.actors[j-1].hp
      temp = $game_party.actors[i-1]
      $game_party.actors[i-1] = $game_party.actors[j-1]
      $game_party.actors[j-1] = temp
    end
  end
end

試試??

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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