Project1

标题: 如何可以实现金庸群侠传的队伍系统..? [打印本页]

作者: hkhkokai    时间: 2009-12-8 21:10
标题: 如何可以实现金庸群侠传的队伍系统..?
本帖最后由 hkhkokai 于 2009-12-12 13:20 编辑

就是在esc选单中可以要求离队
离队後可以在特定地方邀请他再次入队
等级不变      

这要如何实现呢 ="=
作者: hkhkokai    时间: 2009-12-9 13:16
没人回 q_q
自己推
作者: hkhkokai    时间: 2009-12-9 18:07
诚心再推  q_q
希望大大们能帮我一把
作者: 191136923    时间: 2009-12-9 19:14
oip;uo;yio;9i;y89;
作者: 191136923    时间: 2009-12-9 19:14
jkp' hu' 9 u '-0'80'yu7
作者: hkhkokai    时间: 2009-12-9 19:24
不帮忙也可以打个推字  不想打个推字也不用乱打字
你这样很没礼貌

我相信一定会有大大可以帮我的 q_q
作者: wangswz    时间: 2009-12-9 21:44
本帖最后由 wangswz 于 2009-12-9 21:48 编辑

http://rpg.blue/viewthread.php?t ... =%E9%98%9F%E4%BC%8D
  1. #
  2. #    特殊選択ウインドウ表示(RGSS2)
  3. #  (C)2008 TYPE74RX-T
  4. #
  5. # ★ カスタマイズポイント:19~21行目
  6. #
  7. # 改造箇所
  8. #・メッセージウインドウの全文字列の描画が終了するまで操作を無効に。
  9. #・選択肢ウインドウ消去のタイミングをメッセージ消去のタイミングと擬似的に同一に。
  10. #・項目決定時に強制的に文章送りをするように。

  11. #==============================================================================
  12. # ★ RX_T_SelectWindow
  13. #------------------------------------------------------------------------------
  14. #  特殊な選択ウインドウを表示するためのモジュールです。
  15. #==============================================================================

  16. module RX_T_SelectWindow
  17.   RX2c7_Width = 160 # 特殊選択ウインドウの幅
  18.   RX2c7_X = 384     # 特殊選択ウインドウの表示座標(X軸)
  19.   RX2c7_Y = 0       # 特殊選択ウインドウの表示座標(Y軸)
  20.   #--------------------------------------------------------------------------
  21.   # ● 開始処理
  22.   #--------------------------------------------------------------------------
  23.   def start
  24.     super
  25.     @rx_select_window = Window_Command.new(RX2c7_Width, $game_temp.rx_sel_commands)
  26.     @rx_select_window.x = RX2c7_X
  27.     @rx_select_window.y = RX2c7_Y
  28.     @rx_select_window.active = false
  29.     @rx_select_window.visible = false
  30.     @rx2c7_copy_commands = $game_temp.rx_sel_commands.dup
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 終了処理
  34.   #--------------------------------------------------------------------------
  35.   def terminate
  36.     super
  37.     @rx_select_window.dispose
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● フレーム更新
  41.   #--------------------------------------------------------------------------
  42.   def update
  43.     super
  44.     # 特殊選択ウインドウ表示フラグが立っていたら
  45.     if $game_message.visible and $game_temp.rx_sel_command
  46.       # コマンド内容が変化していればリメイク
  47.       unless @rx2c7_copy_commands == $game_temp.rx_sel_commands
  48.         @rx2c7_copy_commands = $game_temp.rx_sel_commands.dup
  49.         @rx_select_window.dispose
  50.         @rx_select_window = Window_Command.new(RX2c7_Width, $game_temp.rx_sel_commands)
  51.         @rx_select_window.x = RX2c7_X
  52.         @rx_select_window.y = RX2c7_Y
  53.       end
  54.       # コマンドを出現させる
  55.       @rx_select_window.active = true
  56.       @rx_select_window.visible = true
  57.       # メッセージの全ての文字列が表示終了後に選択を開始する
  58.       unless $game_temp.rx_select_window_open
  59.         @rx_select_window.update
  60.         update_rx_select_window
  61.       end
  62.     end
  63.     # 終了フラグが立っていればウインドウを消去
  64.     if $game_temp.rx_select_window_close
  65.       @rx_select_window.active = false
  66.       @rx_select_window.visible = false
  67.       $game_temp.rx_select_window_close = false
  68.     end
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ★ 特殊選択ウインドウ表示
  72.   #--------------------------------------------------------------------------
  73.   def update_rx_select_window
  74.     if Input.trigger?(Input::B)
  75.       $game_temp.rx_sel_command = false
  76.       Sound.play_cancel
  77.       # キャンセル時は選択結果を 0 に
  78.       $game_variables[$game_temp.rx_sel_variables] = 0
  79.       # メッセージウインドウ送りフラグをオン
  80.       $game_temp.rx_select_window_skip = true
  81.     elsif Input.trigger?(Input::C)
  82.       $game_temp.rx_sel_command = false
  83.       Sound.play_decision
  84.       # 指定の変数に選択結果を代入
  85.       $game_variables[$game_temp.rx_sel_variables] = @rx_select_window.index + 1
  86.       # メッセージウインドウ送りフラグをオン
  87.       $game_temp.rx_select_window_skip = true
  88.     end
  89.   end
  90. end

  91. #==============================================================================
  92. # ■ Game_Temp
  93. #------------------------------------------------------------------------------
  94. #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン
  95. # スタンスは $game_temp で参照されます。
  96. #==============================================================================

  97. class Game_Temp
  98.   #--------------------------------------------------------------------------
  99.   # ● 公開インスタンス変数
  100.   #--------------------------------------------------------------------------
  101.   attr_accessor :rx_select_window_open    # 選択ウインドウ表示開始中フラグ
  102.   attr_accessor :rx_select_window_close   # 選択ウインドウ消去フラグ
  103.   attr_accessor :rx_select_window_skip    # 特殊選択後のメッセージ送りフラグ
  104.   #--------------------------------------------------------------------------
  105.   # ● オブジェクト初期化
  106.   #--------------------------------------------------------------------------
  107.   alias rx_rgss2c7_initialize initialize
  108.   def initialize
  109.     # メソッドを呼び戻す
  110.     rx_rgss2c7_initialize
  111.     # ★ 特殊選択ウインドウ表示フラグ
  112.     @rx_sel_command = false
  113.     # ★ 特殊選択肢
  114.     @rx_sel_commands = []
  115.     # ★ 特殊選択ウインドウの選択結果を格納する変数番号
  116.     @rx_sel_variables = 1
  117.     # ★ 特殊選択ウインドウの選択結果を格納する変数番号
  118.     @rx_sel_variables = 1
  119.     # ★ 特殊選択ウインドウの表示開始中フラグ
  120.     @rx_select_window_open = false
  121.     # ★ 特殊選択ウインドウの消去フラグ
  122.     @rx_select_window_close = false
  123.     # ★ 特殊選択後のメッセージ送りフラグ
  124.     @rx_select_window_skip = false
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ★ 特殊選択ウインドウ表示フラグ
  128.   #--------------------------------------------------------------------------
  129.   def rx_sel_command
  130.     return @rx_sel_command
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ★ 特殊選択ウインドウ表示フラグの設定
  134.   #--------------------------------------------------------------------------
  135.   def rx_sel_command=(judge)
  136.     @rx_sel_command = judge
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ★ 特殊選択肢
  140.   #--------------------------------------------------------------------------
  141.   def rx_sel_commands
  142.     return @rx_sel_commands
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ★ 特殊選択肢の設定
  146.   #--------------------------------------------------------------------------
  147.   def rx_sel_commands=(commands)
  148.     @rx_sel_commands = commands
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ★ 特殊選択ウインドウの選択結果を格納する変数番号
  152.   #--------------------------------------------------------------------------
  153.   def rx_sel_variables
  154.     return @rx_sel_variables
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ★ 特殊選択ウインドウの選択結果を格納する変数番号の設定
  158.   #--------------------------------------------------------------------------
  159.   def rx_sel_variables=(variables)
  160.     @rx_sel_variables = variables
  161.   end
  162. end

  163. #==============================================================================
  164. # ■ Interpreter
  165. #------------------------------------------------------------------------------
  166. #  イベントコマンドを実行するインタプリタです。このクラスは Game_System クラ
  167. # スや Game_Event クラスの内部で使用されます。
  168. #==============================================================================

  169. class Game_Interpreter
  170.   #--------------------------------------------------------------------------
  171.   # ★ 注釈
  172.   #--------------------------------------------------------------------------
  173.   alias rx_rgss2c7_command_108 command_108
  174.   def command_108
  175.     # 特殊選択肢表示
  176.     if @parameters[0].include?("特殊选择:")
  177.       # 選択結果を格納する変数番号の取得と決定
  178.       rx_int = rx_get_str_arrays(@parameters[0])
  179.       $game_temp.rx_sel_variables = rx_int[0]
  180.       # 特殊選択ウインドウ表示フラグをオン
  181.       $game_temp.rx_sel_command = true
  182.       # 特殊選択ウインドウ表示表示開始中フラグオン
  183.       $game_temp.rx_select_window_open = true
  184.       # コマンドを含めた注釈の内容を全取得
  185.       str1 = rx_get_all_parameter(@parameters[0])
  186.       # コマンドから先の文字列を全取得
  187.       str2 = rx_get_all_str(str1, "特殊选择:")
  188.       # アクター名を表示する場合の処理
  189.       strray = rx_get_str_strrays(str2)
  190.       # 変数指定部分の要素を削除
  191.       strray.delete_at(0)
  192.       for i in 0...strray.size
  193.         if strray[i].include?("actorID")
  194.           # 注釈から数字の文字列のみ取得し、数字の配列として返す
  195.           name_id = rx_get_str_arrays(strray[i])
  196.           # 指定ミスを指摘する(0)
  197.           if name_id[0] == 0
  198.             print "指定のアクターIDが 0 です。"
  199.             exit
  200.           end
  201.           # 指定ミスを指摘する(設定数を超えた場合)
  202.           if name_id[0] >= $data_actors.size
  203.             print "設定されていないアクターID " + name_id[0].to_s + " を指定しています。"
  204.             exit
  205.           end
  206.           # アクター名を発言者名に代入(IDは直接指定値に依存)
  207.           strray[i] = $game_actors[name_id[0]].name
  208.         end
  209.         if strray[i].include?("Vactor")
  210.           # 注釈から数字の文字列のみ取得し、数字の配列として返す
  211.           var_id = rx_get_str_arrays(strray[i])
  212.           # 指定ミスを指摘する(0)
  213.           if $game_variables[var_id[0]] == 0
  214.             print "指定のアクターIDが 0 です。"
  215.             exit
  216.           end
  217.           # 指定ミスを指摘する(設定数を超えた場合)
  218.           if $game_variables[var_id[0]] >= $data_actors.size
  219.             print "設定されていないアクターID " + $game_variables[var_id[0]].to_s + " を指定しています。"
  220.             exit
  221.           end
  222.           # アクター名を発言者名に代入(IDは変数の内容に依存)
  223.           strray[i] = $game_actors[$game_variables[var_id[0]]].name
  224.         end
  225.       end
  226.       # コマンドを含めた注釈の内容から文字列のみ抜き出したものを配列化
  227.       $game_temp.rx_sel_commands = strray
  228.       # 継続(競合対策)
  229.       return true
  230.     end
  231.     # メソッドを呼び戻す
  232.     rx_rgss2c7_command_108
  233.   end
  234. end

  235. #==============================================================================
  236. # ■ Window_Base
  237. #------------------------------------------------------------------------------
  238. #  ゲーム中のすべてのウィンドウのスーパークラスです。
  239. #==============================================================================

  240. class Window_Base < Window
  241.   #--------------------------------------------------------------------------
  242.   # ● ウィンドウを閉じる
  243.   #--------------------------------------------------------------------------
  244.   alias rx_select_window_close close
  245.   def close
  246.     # ウインドウを閉じる際に選択肢ウインドウ消去フラグを立てる
  247.     $game_temp.rx_select_window_close = true
  248.     # メソッドを呼び戻す
  249.     rx_select_window_close
  250.   end
  251. end

  252. #==============================================================================
  253. # ■ Window_Message
  254. #------------------------------------------------------------------------------
  255. #  文章表示に使うメッセージウィンドウです。
  256. #==============================================================================

  257. class Window_Message < Window_Selectable
  258.   #--------------------------------------------------------------------------
  259.   # ● フレーム更新
  260.   #--------------------------------------------------------------------------
  261.   alias rx_select_window_update update
  262.   def update
  263.     # メソッドを呼び戻す
  264.     rx_select_window_update
  265.     # 全ての文字が表示完了していて選択肢表示中なら開始中フラグをオフにする
  266.     if $game_temp.rx_select_window_open && @text == nil
  267.       $game_temp.rx_select_window_open = false
  268.    end
  269.     # 選択ウインドウメッセージ送りフラグがオンならメッセージを送りをする
  270.     if $game_temp.rx_select_window_skip
  271.       self.pause = false
  272.       if @text != nil and not @text.empty?
  273.         new_page if @line_count >= MAX_LINE
  274.       else
  275.         terminate_message
  276.       end
  277.       # フラグを初期化
  278.       $game_temp.rx_select_window_skip = false
  279.     end
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● 改ページ処理
  283.   #--------------------------------------------------------------------------
  284.   alias rx_select_window_new_page new_page
  285.   def new_page
  286.     # 改ページ時に選択肢ウインドウ消去フラグを立てる
  287.     $game_temp.rx_select_window_close = true
  288.     # メソッドを呼び戻す
  289.     rx_select_window_new_page
  290.   end
  291. end
  292. #==============================================================================
  293. # ■ Scene_Map
  294. #------------------------------------------------------------------------------
  295. #  マップ画面の処理を行うクラスです。
  296. #==============================================================================

  297. class Scene_Map < Scene_Base
  298.   include RX_T_SelectWindow
  299. end
复制代码


这三个东西凑合着用 大概就能通过调用公共事件打造出选择队伍成员的画面了
截图里注释那行就是设置多分支的方法 第一个数字是返回选择的值给X变量
第二个就是数据库的ID角色名 第三个就是按变量给的值得出角色名 结合$game_variables[1] = $game_party.members[0].id  ..大概就是这样吧..
通过分支指定选择某队员 然后离队+打开开关   那些加入队员的事件就是当打开开关的时候出现之类的 不要初始化就好..
作者: hkhkokai    时间: 2009-12-10 05:50
现在没时间试
但大慨是如何使用的...?  看不懂 =w=""

是先按第一个所说的  先在选单中增加一个选项
选项指向公共事件 1  
然後事件1用条件分岐 @@?

第二个和第三个看不懂   /_\""
作者: hkhkokai    时间: 2009-12-11 05:52
试了一下 第二 三步还是不懂  =___=""
作者: wangswz    时间: 2009-12-11 09:12
条件分析不是最多只有4选项么
这个脚本就是改造成更多的选项分支 来帮助选择队友
而且设置的时候可以通过变量读取到队伍的构成情况
$game_variables[1] = $game_party.members[0].id #队首
先用rgss给变量1 2 3 4赋队伍中队员的ID值 然后通过那个注释语句的vactor1 vactor2 vactor3 vactor4
使选项变成队员名字
注释里的 1 就是指定1号变量来返回选择的值  值为0是取消分支对话框的时候
通过分支指定选择某队员 然后离队+打开开关   那些加入队员的事件就是当打开开关的时候出现
作者: hkhkokai    时间: 2009-12-11 12:18
不太懂...
让我理解一下

那个脚本加进了工程就不用再理他
然後  每一个队员进队的话就加上$game_variables[?] = $game_party.members[?].id 这段指令码
打?号的地方要自己设定?
然後想问一下公共事件要如何设置
不用选项分岐..?  就在标记那打vactor1之类的...?
作者: wangswz    时间: 2009-12-11 17:21
实现起来真没想象中容易..不过还好脚本知识不需要..
真相在此 菜单离队.rar (242.94 KB, 下载次数: 47)
作者: wangswz    时间: 2009-12-11 23:25
那个加入队员的第二页事件开启的开关要设置好。。。
只要在那个分支里调用一个公共事件 那个公共事件里判断变量值的ID是哪个角色 然后内嵌一个选择“对话 离开队伍”之类的就好了嘛。
作者: wangswz    时间: 2009-12-11 23:25
本帖最后由 wangswz 于 2009-12-12 02:15 编辑

卡 导致连贴 编辑之
作者: hkhkokai    时间: 2009-12-12 01:55
怎样用公共事件里判断变量值的ID是哪个角色  -3-"

对不起...  我用了rmvx不久而已    还十分迷惘 /_\""
作者: wangswz    时间: 2009-12-12 02:13
for i in 1..$game_party.members.size
$game_variables[i+1] = $game_party.members[i-1].id
end
开头的这个rgss 不是让 变量 获取了队伍角色的ID了么
。。接下来只要在选择完具体的人物时判断一下该变量的值 =哪个角色的ID 然后就是设置具体的对话了
比如 =4的时候是id为4的A角色的回答 =5 的时候是B角色的回答
作者: hkhkokai    时间: 2009-12-12 02:29
for i in 1..$game_party.members.size
$game_variables[i+1] = $game_party.members[i-1].id
end

这段是说
变量1 = 角色id?

那我呼叫出来的公共事件就是用条件分岐
如果变量1 = 3的话 就出现这样的对话
作者: wangswz    时间: 2009-12-12 02:41
本帖最后由 wangswz 于 2009-12-12 02:42 编辑

i+1。。。!!!!
for i in 1..$game_party.members.size
带入i循环的是 1到当前的队伍人数
$game_variables[i+1] = $game_party.members[i-1].id
第一次循环 就是把 队首0的角色ID赋值给2号变量
$game_variables[2]= $game_party.members[0].id

$game_party.members[1].id就是队伍的第二个成员ID
从0开始算  数组都这样

置顶贴
小幽的实用脚本手册
很有用
传送门http://rpg.blue/viewthread.php?tid=73347
作者: hkhkokai    时间: 2009-12-12 03:13
本帖最后由 hkhkokai 于 2009-12-12 03:27 编辑

对不起  图弄得比较差....

但我这样弄有没有错?

(先睡~

未命名.JPG (74.07 KB, 下载次数: 14)

未命名.JPG

作者: wangswz    时间: 2009-12-12 03:28
测试无误的话大概就是如此 同睡




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1