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

Project1

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

[已经过期] 如何将此脚本加入菜单

[复制链接]

Lv1.梦旅人

梦石
0
星屑
70
在线时间
1083 小时
注册时间
2013-3-29
帖子
2394
跳转到指定楼层
1
发表于 2015-2-8 21:50:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
试过很多方法了 都会出错

脚本:
  1. #==============================================================================
  2. # □ パーティ編成システム (for VX Ace)
  3. #------------------------------------------------------------------------------
  4. # Version : 1_20111229
  5. # by サリサ・タイクーン
  6. # http://www.tycoon812.com/rgss/
  7. #==============================================================================
  8. $imported = {} if $imported.nil?
  9. $imported["CommandParty"] = true
  10. #==============================================================================
  11. # □ 素材スイッチ
  12. #==============================================================================
  13. $rgsslab = {} if $rgsslab == nil
  14. $rgsslab["队伍变更"] = true

  15. if $rgsslab["队伍变更"]

  16. #==============================================================================
  17. # □ カスタマイズポイント
  18. #==============================================================================
  19. module RGSSLAB end
  20. module RGSSLAB::Party_Organization_System
  21.   #--------------------------------------------------------------------------
  22.   # ○ 待機メンバーのソート機能
  23.   #    trueにすると、待機メンバーの加入・離脱・パーティ編成システム画面において
  24.   #    常にID順にソートされるようになります。
  25.   #--------------------------------------------------------------------------
  26.   SORT = true
  27.   #--------------------------------------------------------------------------
  28.   # ○ 強制フラグ
  29.   #    trueにすると、待機メンバーに加える際に、パーティメンバーにいる場合は
  30.   #    強制的に待機メンバーへ移動させます。
  31.   #    (falseにすると、移動しない代わりに待機メンバーに加える事ができません)
  32.   #--------------------------------------------------------------------------
  33.   FORCE = true
  34.   #--------------------------------------------------------------------------
  35.   # ○ パーティ編成画面の一行辺りの待機メンバーの人数
  36.   #    横に並べる際に、何人目で改行するのかを設定します。
  37.   #
  38.   #    空欄(それを選ぶと外れると言う意味)の分も含まれる為
  39.   #    正確には、現在の待機メンバー+1の数で割り当てられる事に
  40.   #    ご注意下さい。
  41.   #--------------------------------------------------------------------------
  42.   COLUMN_MAX = 9
  43.   #--------------------------------------------------------------------------
  44.   # ○ 外す事のできないアクターの設定
  45.   #    IMPOSSIBLLITYに外す事のできないアクターIDを記述します。
  46.   #
  47.   #    ここに記述されたアクターIDは、編成画面において
  48.   #    選択する事ができなくなります。
  49.   #
  50.   #    ・イベントコマンドのスクリプトでの変更方法
  51.   #     $game_system.rgsslab028.impossibillity = [アクターID, …]
  52.   #--------------------------------------------------------------------------
  53.   IMPOSSIBILLITY = []
  54. end

  55. # カスタマイズポイントは、ここまで

  56. #==============================================================================
  57. # □ RGSSLAB::Party_Organization_System [module]
  58. #==============================================================================
  59. module RGSSLAB::Party_Organization_System
  60.   #--------------------------------------------------------------------------
  61.   # ○ 素材設定用の定数定義
  62.   #--------------------------------------------------------------------------
  63.   MATERIAL_NAME = "队伍变更"
  64.   VERSION       = 1
  65.   RELEASE       = 20111229
  66. end

  67. #==============================================================================
  68. # ■ Game_System [class]
  69. #==============================================================================
  70. class Game_System
  71.   #--------------------------------------------------------------------------
  72.   # ● 公開インスタンス変数
  73.   #--------------------------------------------------------------------------
  74.   attr_accessor :rgsslab028
  75.   #--------------------------------------------------------------------------
  76.   # ● オブジェクト初期化 [エイリアス]
  77.   #--------------------------------------------------------------------------
  78.   alias party_organization_initialize initialize
  79.   def initialize
  80.     party_organization_initialize
  81.     @rgsslab028 = RgssLab_028.new
  82.   end
  83. end

  84. #==============================================================================
  85. # □ RgssLab_028 [class]
  86. #==============================================================================
  87. class RgssLab_028
  88.   #--------------------------------------------------------------------------
  89.   # ○ モジュールの設定
  90.   #--------------------------------------------------------------------------
  91.   RGSSLAB_028 = RGSSLAB::Party_Organization_System
  92.   #--------------------------------------------------------------------------
  93.   # ○ 公開インスタンス変数
  94.   #--------------------------------------------------------------------------
  95.   attr_accessor :impossibillity
  96.   #--------------------------------------------------------------------------
  97.   # ○ オブジェクト初期化
  98.   #--------------------------------------------------------------------------
  99.   def initialize
  100.     @impossibillity = RGSSLAB_028::IMPOSSIBILLITY
  101.   end
  102. end

  103. #==============================================================================
  104. # ■ Game_Party [class]
  105. #==============================================================================
  106. class Game_Party < Game_Unit
  107.   #--------------------------------------------------------------------------
  108.   # ○ モジュールの設定
  109.   #--------------------------------------------------------------------------
  110.   RGSSLAB_028 = RGSSLAB::Party_Organization_System
  111.   #--------------------------------------------------------------------------
  112.   # ● 公開インスタンス変数
  113.   #--------------------------------------------------------------------------
  114.   attr_reader :standby
  115.   attr_reader :actors
  116.   #--------------------------------------------------------------------------
  117.   # ● オブジェクト初期化 [エイリアス]
  118.   #--------------------------------------------------------------------------
  119.   alias party_organization_initialize initialize
  120.   def initialize
  121.     party_organization_initialize
  122.     @standby = []
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ○ メンバーの入れ替え
  126.   #     new_members : 新しいパーティメンバーの配列
  127.   #--------------------------------------------------------------------------
  128.   def all_members=(new_members)
  129.     @actors.clear
  130.     count = 0
  131.     for i in new_members
  132.       @actors[count] = i
  133.       count += 1
  134.     end
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○ 待機メンバーを加える
  138.   #     actor_id : アクター ID
  139.   #--------------------------------------------------------------------------
  140.   def add_actor_organization_system(actor_id)
  141.     @standby.push(actor_id) unless @standby.include?(actor_id) && @actors.include?(actor_id)
  142.     @standby.uniq!
  143.     standby_sort
  144.     $game_player.refresh
  145.     setup_pos if $rgsslab["阵形导入"] && $rgsslab["阵形实施"]
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ○ 待機メンバーを外す
  149.   #     actor_id : アクター ID
  150.   #--------------------------------------------------------------------------
  151.   def remove_actor_organization_system(actor_id)
  152.     @standby.delete(actor_id)
  153.     standby_sort
  154.     $game_player.refresh
  155.     setup_pos if $rgsslab["阵形导入"] && $rgsslab["阵形实施"]
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ○ 待機メンバーのソート
  159.   #--------------------------------------------------------------------------
  160.   def standby_sort
  161.     return unless RGSSLAB_028::SORT
  162.     @standby.sort!{|a, b|
  163.       a <=> b
  164.     }
  165.   end
  166. end

  167. #==============================================================================
  168. # ■ Game_Interpreter [class]
  169. #==============================================================================
  170. class Game_Interpreter
  171.   #--------------------------------------------------------------------------
  172.   # ○ モジュールの設定
  173.   #--------------------------------------------------------------------------
  174.   RGSSLAB_028 = RGSSLAB::Party_Organization_System
  175.   #--------------------------------------------------------------------------
  176.   # ○ 待機メンバーを加える
  177.   #     actor_id : アクターID
  178.   #--------------------------------------------------------------------------
  179.   def add_standby(actor_id)
  180.     return if actor_id < 1
  181.     $game_party.remove_actor(actor_id) if $game_party.actors.include?(actor_id) && RGSSLAB_028::FORCE && $game_party.actors.size > 1
  182.     $game_party.add_actor_organization_system(actor_id)
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ○ 待機メンバーを外す
  186.   #     actor_id : アクターID
  187.   #     back     : パーティ加入フラグ
  188.   #--------------------------------------------------------------------------
  189.   def remove_standby(actor_id, back = true)
  190.     return if actor_id < 1
  191.     $game_party.add_actor(actor_id) if back && $game_party.standby.include?(actor_id)
  192.     $game_party.remove_actor_organization_system(actor_id)
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ○ パーティ編成システムの呼び出し
  196.   #--------------------------------------------------------------------------
  197.   def call_standby
  198.     SceneManager.call(Scene_Party_Organization_System)
  199.     Fiber.yield
  200.   end
  201. end

  202. #==============================================================================
  203. # □ Window_Party_Organization_Help [class]
  204. #==============================================================================
  205. class Window_Party_Organization_Help < Window_Base
  206.   #--------------------------------------------------------------------------
  207.   # ● 公開インスタンス変数
  208.   #--------------------------------------------------------------------------
  209.   attr_accessor :text_index
  210.   #--------------------------------------------------------------------------
  211.   # ○ オブジェクト初期化 [オーバーライド]
  212.   #--------------------------------------------------------------------------
  213.   def initialize
  214.     super(0, 0, Graphics.width, fitting_height(1))
  215.     @text_index = 0
  216.     refresh
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ○ リフレッシュ
  220.   #--------------------------------------------------------------------------
  221.   def refresh
  222.     contents.clear
  223.     case @text_index
  224.     when 0
  225.       str  = "C按钮:决定 B按钮:编成终了"
  226.       rect = contents.text_size(str)
  227.     when 1
  228.       str  = "C按钮:决定 B按钮:取消"
  229.       rect = contents.text_size(str)
  230.     end
  231.     contents.draw_text(4, 0, rect.width, line_height, str)
  232.   end
  233. end

  234. #==============================================================================
  235. # □ Window_Party_Member
  236. #==============================================================================
  237. class Window_Party_Member < Window_Selectable
  238.   #--------------------------------------------------------------------------
  239.   # ○ オブジェクト初期化
  240.   #--------------------------------------------------------------------------
  241.   def initialize
  242.     max = $game_party.all_members.size + 1
  243.     @column_max   = max
  244.     @item_max     = max
  245.     super(0, 96, Graphics.width, 80)
  246.     self.opacity  = 0
  247.     self.index    = 0
  248.     self.z        = 101
  249.     refresh
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ○ 桁数の取得 [オーバーライド]
  253.   #--------------------------------------------------------------------------
  254.   def col_max
  255.     return @column_max
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ○ 項目数の取得 [オーバーライド]
  259.   #--------------------------------------------------------------------------
  260.   def item_max
  261.     return @item_max
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ○ リフレッシュ [オーバーライド]
  265.   #--------------------------------------------------------------------------
  266.   def refresh
  267.     contents.clear
  268.     for actor in $game_party.all_members do draw_actor(actor, actor.index) end
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ○ アクターグラフィックの描画
  272.   #     actor : アクター
  273.   #     index : 項目番号
  274.   #--------------------------------------------------------------------------
  275.   def draw_actor(actor, index)
  276.     if $game_system.rgsslab028.impossibillity.include?(actor.id)
  277.       draw_actor_graphic_impossibillity(actor, 16 + 48 * index, 40)
  278.     else
  279.       draw_actor_graphic(actor, 24 + 48 * index, 40)
  280.     end
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ○ 入れ替えのできないアクターの歩行グラフィック描画
  284.   #     actor : アクター
  285.   #     x     : 描画先 X 座標
  286.   #     y     : 描画先 Y 座標
  287.   #--------------------------------------------------------------------------
  288.   def draw_actor_graphic_impossibillity(actor, x, y)
  289.     return if actor.name == nil
  290.     bitmap = Cache.character(actor.character_name)
  291.     sign = actor.name[/^[\!\$]./]
  292.     if sign != nil and sign.include?(')
  293.       cw = bitmap.width / 3
  294.       ch = bitmap.height / 4
  295.     else
  296.       cw = bitmap.width / 12
  297.       ch = bitmap.height / 8
  298.     end
  299.     n = actor.character_index
  300.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  301.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, 64)
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ○ カーソルの更新 [オーバーライド]
  305.   #--------------------------------------------------------------------------
  306.   def update_cursor
  307.     if @index < 0
  308.       self.cursor_rect.empty
  309.     else
  310.       self.cursor_rect.set(@index * 48, 0, 48, 48)
  311.     end
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ○ 最大値の再設定
  315.   #--------------------------------------------------------------------------
  316.   def max_reset
  317.     @item_max = $game_party.members.size + 1
  318.   end
  319. end

  320. #==============================================================================
  321. # □ Window_Standby_Member [class]
  322. #==============================================================================
  323. class Window_Standby_Member < Window_Selectable
  324.   #--------------------------------------------------------------------------
  325.   # ○ モジュールの設定
  326.   #--------------------------------------------------------------------------
  327.   RGSSLAB_028 = RGSSLAB::Party_Organization_System
  328.   #--------------------------------------------------------------------------
  329.   # ○ オブジェクト初期化 [オーバーライド]
  330.   #--------------------------------------------------------------------------
  331.   def initialize
  332.     max = $game_party.standby.size
  333.     if max == 0
  334.       max = 1
  335.     else
  336.       max += 1
  337.     end
  338.     @column_max   = RGSSLAB_028::COLUMN_MAX
  339.     @item_max     = max
  340.     super(0, 208, Graphics.width, 128)
  341.     self.opacity  = 0
  342.     self.index    = -1
  343.     self.active   = false
  344.     self.z        = 101
  345.     refresh
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ○ 桁数の取得 [オーバーライド]
  349.   #--------------------------------------------------------------------------
  350.   def col_max
  351.     return @column_max
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 項目数の取得 [オーバーライド]
  355.   #--------------------------------------------------------------------------
  356.   def item_max
  357.     return @item_max
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ○ リフレッシュ [オーバーライド]
  361.   #--------------------------------------------------------------------------
  362.   def refresh
  363.     contents.clear
  364.     if @item_max > 0
  365.       self.contents = Bitmap.new(width - 32, row_max * 48)
  366.     end
  367.     count = 0
  368.     for actor in $game_party.standby
  369.       draw_actor($game_actors[actor], count)
  370.       count += 1
  371.     end
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ○ アクターグラフィックの描画
  375.   #     actor : アクター
  376.   #     index : 項目番号
  377.   #--------------------------------------------------------------------------
  378.   def draw_actor(actor, index)
  379.     draw_actor_graphic(actor, 24 + 48 * (index % @column_max), 40 + (index / @column_max * 48))
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ○ 先頭の行の取得 [オーバーライド]
  383.   #--------------------------------------------------------------------------
  384.   def top_row
  385.     return self.oy / line_height
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ○ 先頭の行の設定 [オーバーライド]
  389.   #     row : 先頭に表示する行
  390.   #--------------------------------------------------------------------------
  391.   def top_row=(row)
  392.     row = 0 if row < 0
  393.     row = row_max - 1 if row > row_max - 1
  394.     self.oy = row * line_height
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ○ 1 ページに表示できる行数の取得 [オーバーライド]
  398.   #--------------------------------------------------------------------------
  399.   def page_row_max
  400.     #return (height - padding - padding_bottom) / line_height
  401.     return height / line_height
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ○ カーソルの更新 [オーバーライド]
  405.   #--------------------------------------------------------------------------
  406.   def update_cursor
  407.     if @index < 0
  408.       self.cursor_rect.empty
  409.       return
  410.     end
  411.     row = @index / @column_max
  412.     if row < self.top_row
  413.       self.top_row = row
  414.     end
  415.     if row > self.top_row + (self.page_row_max - 1)
  416.       self.top_row = row - (self.page_row_max - 1)
  417.     end
  418.     x = @index % @column_max * 48
  419.     y = @index / @column_max * 48 - self.oy
  420.     self.cursor_rect.set(x, y, 48, 48)
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ○ 最大値の再設定
  424.   #--------------------------------------------------------------------------
  425.   def max_reset
  426.     max = $game_party.standby.size
  427.     if max == 0
  428.       max = 1
  429.     else
  430.       max += 1
  431.     end
  432.     @item_max     = max
  433.   end
  434. end

  435. #==============================================================================
  436. # □ Window_Actor_Information [class]
  437. #==============================================================================
  438. class Window_Actor_Information < Window_Base
  439.   #--------------------------------------------------------------------------
  440.   # ○ オブジェクト初期化 [オーバーライド]
  441.   #     actor : 一番最初のアクター情報
  442.   #--------------------------------------------------------------------------
  443.   def initialize(actor)
  444.     super(0, 322, Graphics.width, 78)
  445.     refresh(actor)
  446.   end
  447.   #--------------------------------------------------------------------------
  448.   # ○ リフレッシュ
  449.   #     actor : アクター情報
  450.   #--------------------------------------------------------------------------
  451.   def refresh(actor)
  452.     contents.clear
  453.     if actor != nil
  454.       actor = $game_actors[actor] if actor.is_a?(Numeric)
  455.       draw_actor_graphic(actor, 22, 48)
  456.       draw_actor_name(actor, 64, 0)
  457.       draw_actor_class(actor, 208, 0)
  458.       draw_actor_level(actor, 64, 24)
  459.       draw_actor_hp(actor, 208, 24)
  460.       draw_actor_mp(actor, 336, 24)
  461.     end
  462.   end
  463. end

  464. #==============================================================================
  465. # □ Window_Party_Organization [class]
  466. #==============================================================================
  467. class Window_Party_Organization < Window_Base
  468.   #--------------------------------------------------------------------------
  469.   # ○ オブジェクト初期化 [オーバーライド]
  470.   #--------------------------------------------------------------------------
  471.   def initialize
  472.     super(0, 48, Graphics.width, 274)
  473.     self.opacity = 255
  474.     refresh
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ○ リフレッシュ
  478.   #--------------------------------------------------------------------------
  479.   def refresh
  480.     contents.clear
  481.     contents.draw_text(4,   0, 155, line_height, "作战成员")
  482.     contents.draw_text(4, 112, 155, line_height, "待机" )
  483.   end
  484. end

  485. #==============================================================================
  486. # □ Scene_Party_Organization_System [class]
  487. #==============================================================================
  488. class Scene_Party_Organization_System < Scene_Base
  489.   #--------------------------------------------------------------------------
  490.   # ○ モジュールの設定
  491.   #--------------------------------------------------------------------------
  492.   RGSSLAB_028 = RGSSLAB::Party_Organization_System
  493.   #--------------------------------------------------------------------------
  494.   # ○ 開始処理
  495.   #--------------------------------------------------------------------------
  496.   def start
  497.     super
  498.     create_windows
  499.     @temporary_actor = nil
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ○ ウィンドウの作成
  503.   #--------------------------------------------------------------------------
  504.   def create_windows
  505.     @help_window                = Window_Party_Organization_Help.new
  506.     @party_member_window        = Window_Party_Member.new
  507.     @standby_member_window      = Window_Standby_Member.new
  508.     @information_window         = Window_Actor_Information.new($game_party.all_members[0])
  509.     @organization_window        = Window_Party_Organization.new
  510.     @party_member_window.active = true
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ○ フレーム更新
  514.   #--------------------------------------------------------------------------
  515.   def update
  516.     super
  517.     if @party_member_window.active
  518.       update_party_member_window
  519.       return
  520.     end
  521.     if @standby_member_window.active
  522.       update_standby_member_window
  523.       return
  524.     end
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ○ フレーム更新:パーティメンバーウィンドウ
  528.   #--------------------------------------------------------------------------
  529.   def update_party_member_window
  530.     @information_window.refresh($game_party.members[@party_member_window.index])
  531.     if Input.trigger?(Input::B)
  532.       Sound.play_cancel
  533.       SceneManager.return
  534.       return
  535.     end
  536.     if Input.trigger?(Input::C)
  537.       if $game_system.rgsslab028.impossibillity.include?($game_party.members[@party_member_window.index])
  538.         Sound.play_buzzer
  539.         return
  540.       end
  541.       Sound.play_ok
  542.       @temporary_actor = $game_party.members[@party_member_window.index]
  543.       @party_member_window.active = false
  544.       @standby_member_window.active = true
  545.       @standby_member_window.index = 0
  546.       @help_window.text_index = 1
  547.       @help_window.refresh
  548.       return
  549.     end
  550.   end
  551.   #--------------------------------------------------------------------------
  552.   # ○ フレーム更新:待機メンバーウィンドウ
  553.   #--------------------------------------------------------------------------
  554.   def update_standby_member_window
  555.     @information_window.refresh($game_party.standby[@standby_member_window.index])
  556.     if Input.trigger?(Input::B)
  557.       Sound.play_cancel
  558.       return_party_member_process
  559.       return
  560.     end
  561.     if Input.trigger?(Input::C)
  562.       temp = $game_party.standby[@standby_member_window.index]
  563.       if @temporary_actor != nil
  564.         if $game_party.standby[@standby_member_window.index] != nil
  565.           $game_party.standby[@standby_member_window.index] = @temporary_actor.id
  566.           temp_members = []
  567.           for i in $game_party.all_members
  568.             temp_members.push(i.id)
  569.           end
  570.           temp_members[@party_member_window.index] = temp
  571.           $game_party.all_members = temp_members
  572.         else         
  573.           if $game_party.members.size == 1
  574.             Sound.play_buzzer
  575.             return
  576.           end
  577.           temp = $game_party.members[@party_member_window.index]
  578.           $game_party.remove_actor($game_party.members[@party_member_window.index].id)
  579.           $game_party.add_actor_organization_system(temp.id)
  580.         end
  581.       else
  582.         if $game_party.standby[@standby_member_window.index] == nil
  583.           Sound.play_buzzer
  584.           return
  585.         end
  586.         $game_party.add_actor($game_party.standby[@standby_member_window.index])
  587.         $game_party.remove_actor_organization_system($game_party.standby[@standby_member_window.index])
  588.       end
  589.       Sound.play_ok
  590.       $game_party.standby_sort
  591.       $game_player.refresh
  592.       @party_member_window.refresh
  593.       @standby_member_window.refresh
  594.       return_party_member_process
  595.       return
  596.     end
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ○ パーティメンバーウィンドウ復帰処理
  600.   #--------------------------------------------------------------------------
  601.   def return_party_member_process
  602.     @temporary_actor = nil
  603.     @party_member_window.active = true
  604.     @standby_member_window.active = false
  605.     @standby_member_window.index = -1
  606.     @party_member_window.max_reset
  607.     @standby_member_window.max_reset
  608.     @help_window.text_index = 0
  609.     @help_window.refresh
  610.   end
  611. end

  612. end

  613. class Game_Unit
  614.   def battle_party_change?
  615.      if $game_party.standby.size > 1
  616.           return true
  617.         else
  618.           return false
  619.      end
  620.   end
  621. end

  622. class Scene_Battle
  623.     alias saba_kiseki_party_create_party_command_window create_party_command_window
  624.   def create_party_command_window
  625.     saba_kiseki_party_create_party_command_window
  626.     @party_command_window.set_handler(:party, method(:command_party))
  627.   end
  628.   
  629.   def command_party
  630.     SceneManager.call(Scene_Party_Organization_System)
  631.    
  632.   end
  633.   
  634. end

  635. class Window_PartyCommand
  636.   alias saba_kiseki_party_make_command_list make_command_list
  637.   def make_command_list
  638.     saba_kiseki_party_make_command_list
  639.     add_party_command
  640.   end
  641.   
  642.   def add_party_command
  643.     text="候补"
  644.     add_command(text, :party, $game_party.battle_party_change?)
  645.   end
  646. end
复制代码

坑的进度如上                                                                                                        点击↑

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21626
在线时间
9413 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2015-2-8 22:23:21 | 只看该作者
本帖最后由 喵呜喵5 于 2015-2-8 22:30 编辑

RUBY 代码复制
  1. class Window_MenuCommand
  2.   alias m5_20150208_add_original_commands add_original_commands
  3.   def add_original_commands
  4.     m5_20150208_add_original_commands
  5.     add_command("选项名称",   :m5_20150208)
  6.   end
  7. end
  8. class Scene_Menu
  9.   alias m5_20150208_create_command_window create_command_window
  10.   def create_command_window
  11.     m5_20150208_create_command_window   
  12.     @command_window.set_handler(:m5_20150208,
  13.       Proc.new{ SceneManager.call(Scene_Party_Organization_System)})
  14.   end  
  15. end
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22948
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
3
发表于 2015-2-8 22:42:08 | 只看该作者
本帖最后由 tseyik 于 2015-2-8 22:44 编辑

也可用
オリジナルサブメニュー(加入自作副指令,可加入多個自作副指令)
http://woodpenguin.web.fc2.com/rgss3/sub_menu.html
脚本中的
  List = [["コンフィング", 1, 2],
          ]
  改成
  List = [[" パーティ編成", 1, 2],
          ]
然後在公用事件1用脚本呼叫SceneManager.call(Scene_Party_Organization_System)
範本(這個是加了改変画面大小
https://rpg.blue/forum.php?mod=r ... 513&pid=2579564
  1. =begin

  2. ▼ オリジナルサブメニュー ver. 1.0

  3. RPGツクールVXAce用スクリプト

  4. 制作 : 木星ペンギン
  5. URL  : http://woodpenguin.blog.fc2.com/

  6. ------------------------------------------------------------------------------
  7. 概要

  8. □ コモンイベントで作成したオリジナルのサブメニュー画面が作成できます。

  9. ------------------------------------------------------------------------------
  10. 備考

  11.   □ コマンドは【並び替え】の下に追加されます。
  12.   
  13.   □ サブメニューの処理はイベントコマンドで実行されます。
  14.    ・メインのコモンイベントの処理が終了した時点で、前の画面に戻ります。
  15.    ・サブのコモンイベントは処理が終了しても最初から繰り返しません。
  16.   
  17.   □ イベントの移動などを実行した場合、新しくメニュー画面用のイベントが
  18.      生成されます。
  19.    ・座標 X:0 Y:0 にグラフィックを設定していない状態で生成されます。
  20.   
  21.   □ スクリプトコマンドで SceneManager.goto(Scene_Map) と実行すれば
  22.      マップ画面まで戻ることが出来ます。
  23.   
  24. =end
  25. module WdTk
  26. module SubMenu
  27.   #--------------------------------------------------------------------------
  28.   # ● 追加する項目の設定
  29.   #     配列にコマンド名、実行するコモンイベントID、
  30.   #   並列処理を行うコモンイベントIDの順に設定する。
  31.   #--------------------------------------------------------------------------
  32.   List = [["コンフィング", 1, 2],
  33.           ]
  34.   
  35.   
  36. #//////////////////////////////////////////////////////////////////////////////
  37. #
  38. # 以降、変更する必要なし
  39. #
  40. #//////////////////////////////////////////////////////////////////////////////
  41. end

  42.   @material ||= []
  43.   @material << :SubMenu
  44.   def self.include?(sym)
  45.     @material.include?(sym)
  46.   end
  47. end

  48. #==============================================================================
  49. # ■ Game_SubMenu_Character
  50. #==============================================================================
  51. class Game_SubMenu_Character < Game_Character
  52.   #--------------------------------------------------------------------------
  53.   # ● 通行可能判定
  54.   #--------------------------------------------------------------------------
  55.   def passable?(*)
  56.     return true
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 斜めの通行可能判定
  60.   #--------------------------------------------------------------------------
  61.   def diagonal_passable?(*)
  62.     return true
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 指定位置に移動
  66.   #--------------------------------------------------------------------------
  67.   def moveto(x, y)
  68.     @x = x
  69.     @y = y
  70.     @real_x = @x
  71.     @real_y = @y
  72.     @prelock_direction = 0
  73.     straighten
  74.     update_bush_depth
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 画面 X 座標の取得
  78.   #--------------------------------------------------------------------------
  79.   def screen_x
  80.     @real_x * 32 + 16
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 画面 Y 座標の取得
  84.   #--------------------------------------------------------------------------
  85.   def screen_y
  86.     @real_y * 32 + 32 - shift_y - jump_height
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● ジャンプ時の更新
  90.   #--------------------------------------------------------------------------
  91.   def update_jump
  92.     @jump_count -= 1
  93.     @real_x = (@real_x * @jump_count + @x) / (@jump_count + 1.0)
  94.     @real_y = (@real_y * @jump_count + @y) / (@jump_count + 1.0)
  95.     update_bush_depth
  96.     if @jump_count == 0
  97.       @real_x = @x
  98.       @real_y = @y
  99.     end
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 梯子判定
  103.   #--------------------------------------------------------------------------
  104.   def ladder?
  105.     return false
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 茂み判定
  109.   #--------------------------------------------------------------------------
  110.   def bush?
  111.     return false
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 地形タグの取得
  115.   #--------------------------------------------------------------------------
  116.   def terrain_tag
  117.     return 0
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● リージョン ID の取得
  121.   #--------------------------------------------------------------------------
  122.   def region_id
  123.     return 0
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● まっすぐに移動
  127.   #     d       : 方向(2,4,6,8)
  128.   #     turn_ok : その場での向き変更を許可
  129.   #--------------------------------------------------------------------------
  130.   def move_straight(d, turn_ok = true)
  131.     @move_succeed = passable?(@x, @y, d)
  132.     if @move_succeed
  133.       set_direction(d)
  134.       @x += d == 6 ? 1 : d == 4 ? -1 : 0
  135.       @y += d == 2 ? 1 : d == 8 ? -1 : 0
  136.       increase_steps
  137.     elsif turn_ok
  138.       set_direction(d)
  139.     end
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 斜めに移動
  143.   #     horz : 横方向(4 or 6)
  144.   #     vert : 縦方向(2 or 8)
  145.   #--------------------------------------------------------------------------
  146.   def move_diagonal(horz, vert)
  147.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  148.     if @move_succeed
  149.       @x += horz == 6 ? 1 : horz == 4 ? -1 : 0
  150.       @y += vert == 2 ? 1 : vert == 8 ? -1 : 0
  151.       increase_steps
  152.     end
  153.     set_direction(horz) if @direction == reverse_dir(horz)
  154.     set_direction(vert) if @direction == reverse_dir(vert)
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● X 方向の距離計算
  158.   #--------------------------------------------------------------------------
  159.   def distance_x_from(x)
  160.     @x - x
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● Y 方向の距離計算
  164.   #--------------------------------------------------------------------------
  165.   def distance_y_from(y)
  166.     @y - y
  167.   end
  168. end

  169. #==============================================================================
  170. # ■ Game_SubMenu_Interpreter
  171. #==============================================================================
  172. class Game_SubMenu_Interpreter < Game_Interpreter
  173.   #--------------------------------------------------------------------------
  174.   # ● イベントのセットアップ
  175.   #--------------------------------------------------------------------------
  176.   def setup(list, scene)
  177.     clear
  178.     @scene = scene
  179.     @list = list
  180.     create_fiber
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 実行
  184.   #--------------------------------------------------------------------------
  185.   def run
  186.     while @list[@index] do
  187.       execute_command
  188.       @index += 1
  189.     end
  190.     Fiber.yield
  191.     @fiber = nil
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 画面系コマンドの対象を取得
  195.   #--------------------------------------------------------------------------
  196.   def screen
  197.     @scene.screen
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● キャラクターの取得
  201.   #--------------------------------------------------------------------------
  202.   def get_character(param)
  203.     param > 0 ? @scene.get_event(param) : nil
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● コモンイベント
  207.   #--------------------------------------------------------------------------
  208.   def command_117
  209.     common_event = $data_common_events[@params[0]]
  210.     if common_event
  211.       child = Game_SubMenu_Interpreter.new(@depth + 1)
  212.       child.setup(common_event.list, @scene)
  213.       child.run
  214.     end
  215.   end
  216. end

  217. #==============================================================================
  218. # ■ Window_MenuCommand
  219. #==============================================================================
  220. class Window_MenuCommand
  221.   #--------------------------------------------------------------------------
  222.   # ○ 独自コマンドの追加用
  223.   #--------------------------------------------------------------------------
  224.   alias _wdtk_submenu_add_original_commands add_original_commands
  225.   def add_original_commands
  226.     WdTk::SubMenu::List.each {|com| add_command(com[0], :submenu) if com }
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ● 選択項目の名前を取得
  230.   #--------------------------------------------------------------------------
  231.   def current_name
  232.     current_data ? current_data[:name] : nil
  233.   end
  234. end

  235. #==============================================================================
  236. # ■ Spriteset_SubMenu
  237. #==============================================================================
  238. class Spriteset_SubMenu
  239.   #--------------------------------------------------------------------------
  240.   # ● オブジェクト初期化
  241.   #--------------------------------------------------------------------------
  242.   def initialize(scene)
  243.     @scene = scene
  244.     create_viewports
  245.     @character_sprites = []
  246.     @picture_sprites = []
  247.     update
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ● ビューポートの作成
  251.   #--------------------------------------------------------------------------
  252.   def create_viewports
  253.     @viewport1 = Viewport.new
  254.     @viewport2 = Viewport.new
  255.     @viewport2.z = 50
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 解放
  259.   #--------------------------------------------------------------------------
  260.   def dispose
  261.     dispose_characters
  262.     @picture_sprites.compact.each {|sprite| sprite.dispose }
  263.     dispose_viewports
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● キャラクタースプライトの解放
  267.   #--------------------------------------------------------------------------
  268.   def dispose_characters
  269.     @character_sprites.compact.each {|sprite| sprite.dispose }
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● ビューポートの解放
  273.   #--------------------------------------------------------------------------
  274.   def dispose_viewports
  275.     @viewport1.dispose
  276.     @viewport2.dispose
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● フレーム更新
  280.   #--------------------------------------------------------------------------
  281.   def update
  282.     update_characters
  283.     update_pictures
  284.     update_viewports
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● キャラクタースプライトの更新
  288.   #--------------------------------------------------------------------------
  289.   def update_characters
  290.     @scene.events.each do |i, event|
  291.       @character_sprites[i] ||= Sprite_Character.new(@viewport1, event)
  292.       @character_sprites[i].update
  293.     end
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● ピクチャスプライトの更新
  297.   #--------------------------------------------------------------------------
  298.   def update_pictures
  299.     @scene.screen.pictures.each do |pic|
  300.       @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
  301.       @picture_sprites[pic.number].update
  302.     end
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● ビューポートの更新
  306.   #--------------------------------------------------------------------------
  307.   def update_viewports
  308.     @viewport1.tone.set(@scene.screen.tone)
  309.     @viewport1.ox = @scene.screen.shake
  310.     @viewport2.color.set(@scene.screen.flash_color)
  311.     @viewport1.update
  312.     @viewport2.update
  313.   end
  314. end


  315. #==============================================================================
  316. # ■ Scene_Menu
  317. #==============================================================================
  318. class Scene_Menu
  319.   #--------------------------------------------------------------------------
  320.   # ○ コマンドウィンドウの作成
  321.   #--------------------------------------------------------------------------
  322.   alias _wdtk_submenu_create_command_window create_command_window
  323.   def create_command_window
  324.     _wdtk_submenu_create_command_window
  325.     @command_window.set_handler(:submenu, method(:command_submenu))
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● コマンド[サブメニュー]
  329.   #--------------------------------------------------------------------------
  330.   def command_submenu
  331.     param = WdTk::SubMenu::List.assoc(@command_window.current_name)
  332.     if param
  333.       SceneManager.call(Scene_ExSubMenu)
  334.       SceneManager.scene.prepare(*param)
  335.     else
  336.       @command_window.activate
  337.     end
  338.   end
  339. end

  340. #==============================================================================
  341. # ■ Scene_ExSubMenu
  342. #==============================================================================
  343. class Scene_ExSubMenu < Scene_MenuBase
  344.   #--------------------------------------------------------------------------
  345.   # ● 公開インスタンス変数
  346.   #--------------------------------------------------------------------------
  347.   attr_reader   :screen
  348.   attr_reader   :events
  349.   #--------------------------------------------------------------------------
  350.   # ● 準備
  351.   #--------------------------------------------------------------------------
  352.   def prepare(menu_name, main_id, sub_id)
  353.     @screen = Game_Screen.new
  354.     @main_interpreter = Game_SubMenu_Interpreter.new
  355.     common_event = $data_common_events[main_id]
  356.     @main_interpreter.setup(common_event.list, self) if common_event
  357.     @sub_interpreter = Game_SubMenu_Interpreter.new
  358.     common_event = $data_common_events[sub_id]
  359.     @sub_interpreter.setup(common_event.list, self) if common_event
  360.     @events = {}
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● 開始処理
  364.   #--------------------------------------------------------------------------
  365.   def start
  366.     super
  367.     @spriteset = Spriteset_SubMenu.new(self)
  368.     create_message_window
  369.     create_scroll_text_window
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 終了前処理
  373.   #--------------------------------------------------------------------------
  374.   def pre_terminate
  375.     super
  376.     pre_battle_scene if SceneManager.scene_is?(Scene_Battle)
  377.     pre_title_scene  if SceneManager.scene_is?(Scene_Title)
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 終了処理
  381.   #--------------------------------------------------------------------------
  382.   def terminate
  383.     super
  384.     @spriteset.dispose
  385.     perform_battle_transition if SceneManager.scene_is?(Scene_Battle)
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● フレーム更新(基本)
  389.   #--------------------------------------------------------------------------
  390.   def update_basic
  391.     super
  392.     @main_interpreter.update
  393.     return return_scene unless @main_interpreter.running?
  394.     @sub_interpreter.update
  395.     @events.each_value {|event| event.update }
  396.     @spriteset.update
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● 汎用フェード処理
  400.   #--------------------------------------------------------------------------
  401.   def fade_loop(duration)
  402.     duration.times do |i|
  403.       yield 255 * (i + 1) / duration
  404.       update_basic
  405.     end
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 画面のフェードイン
  409.   #--------------------------------------------------------------------------
  410.   def fadein(duration)
  411.     fade_loop(duration) {|v| Graphics.brightness = v }
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● 画面のフェードアウト
  415.   #--------------------------------------------------------------------------
  416.   def fadeout(duration)
  417.     fade_loop(duration) {|v| Graphics.brightness = 255 - v }
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● メッセージウィンドウの作成
  421.   #--------------------------------------------------------------------------
  422.   def create_message_window
  423.     @message_window = Window_Message.new
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● スクロール文章ウィンドウの作成
  427.   #--------------------------------------------------------------------------
  428.   def create_scroll_text_window
  429.     @scroll_text_window = Window_ScrollText.new
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● バトル画面遷移の前処理
  433.   #--------------------------------------------------------------------------
  434.   def pre_battle_scene
  435.     Graphics.update
  436.     Graphics.freeze
  437.     @spriteset.dispose_characters
  438.     BattleManager.save_bgm_and_bgs
  439.     BattleManager.play_battle_bgm
  440.     Sound.play_battle_start
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ● タイトル画面遷移の前処理
  444.   #--------------------------------------------------------------------------
  445.   def pre_title_scene
  446.     fadeout(60)
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 戦闘前トランジション実行
  450.   #--------------------------------------------------------------------------
  451.   def perform_battle_transition
  452.     Graphics.transition(60, "Graphics/System/BattleStart", 100)
  453.     Graphics.freeze
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● イベントの取得
  457.   #--------------------------------------------------------------------------
  458.   def get_event(event_id)
  459.     @events[event_id] ||= Game_SubMenu_Character.new
  460.   end
  461. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 16:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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