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

Project1

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

[已经过期] 如何让指定角色不离队?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
439 小时
注册时间
2013-3-2
帖子
710
跳转到指定楼层
1
发表于 2014-2-12 13:01:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 guoyq1988 于 2014-2-12 13:06 编辑

请问用了下面的脚本,怎么让指定的角色不离队(不变为休战)?
  1. #-----------------------------------------------------------------------------
  2. # 队伍系统 Ver 1.0 (附带整合游戏主菜单)
  3. #-----------------------------------------------------------------------------
  4. # 类似于Aveyond的队伍系统(根据阿月系列的游戏产生的灵感)
  5. # 作者:RyanBern
  6. #-----------------------------------------------------------------------------
  7. # 功能特色:
  8. #-----------------------------------------------------------------------------
  9. # 1.更改队伍中成员的最大数量,有四名出战队员,但是替补队员可以有很多个。
  10. # 2.改编自默认脚本,极大程度上和原来脚本兼容,应该没有很严重的冲突。
  11. # 3.为队伍增加“领队”角色,作为“领队”的成员在地图上显示他的图形,“领队”必须出战。
  12. # 4.只有出战队员才能获得经验奖励,替补队员不能获得作战奖励。
  13. # 5.如果队伍的出战队员全部阵亡,则直接判定玩家全灭,不管有无替补队员。
  14. # 6.事件编译器中,对全体同伴的处理均包括对替补队员的处理。
  15. #-----------------------------------------------------------------------------
  16. # 使用方法:
  17. #-----------------------------------------------------------------------------
  18. # 1.粘贴到默认脚本后面,Main组前面即可。
  19. # 2.作为leader的成员必须是作战队员,如果想替换下该队员,请先改变leader。
  20. # 3.被换下的成员会自动成为替补队员名单的最后一名。
  21. # 4.游戏系统因人而异,如果你改过Scene_Menu,可能会和你更改的脚本冲突。
  22. #   这个我没有办法做成放到每一个游戏系统都合适的脚本,还请自行修改。
  23. #   如果没改过太多的脚本,没有问题。
  24. #-----------------------------------------------------------------------------
  25. class Game_Party
  26.   attr_accessor :leader
  27.   attr_accessor :reserved_actors
  28.   alias old_ini initialize
  29.   def initialize
  30.     @leader = nil
  31.     @reserved_actors = []
  32.     old_ini
  33.   end
  34.   # 重置@reserved_actors
  35.   def adjust
  36.     if @reserved_actors == nil
  37.       @reserved_actors = []
  38.     end
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # 设置领队
  42.   #   index : 角色在@actors中的序号,注意并非角色在数据库中的id
  43.   #--------------------------------------------------------------------------
  44.   def set_leader(index)
  45.     @leader = @actors[index]
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # 获取领队在@actors的index
  49.   #--------------------------------------------------------------------------
  50.   def leader_judge
  51.     for i in [email protected]
  52.       if @leader.id == @actors[i].id
  53.         return i
  54.       end
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 加入同伴
  59.   #     actor_id : 角色 ID
  60.   #--------------------------------------------------------------------------
  61.   def add_actor(actor_id)
  62.     adjust
  63.     # 获取角色
  64.     actor = $game_actors[actor_id]
  65.     # 除非本角色不在队伍中
  66.     unless @actors.include?(actor) or @reserved_actors.include?(actor)
  67.       # 添加角色
  68.       if @actors.size < 4
  69.         # 人数未满就放到@actors中
  70.         @actors.push(actor)
  71.       else
  72.         # 人数满了就放到@reserved_actors中
  73.         @reserved_actors.push(actor)
  74.       end
  75.       # 设置领队(队伍从无人变有人)
  76.       if @actors.size == 1
  77.         @leader = @actors[0]
  78.       end
  79.       # 还原主角
  80.       $game_player.refresh
  81.     end
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 角色离开
  85.   #     actor_id : 角色 ID
  86.   #--------------------------------------------------------------------------
  87.   def remove_actor(actor_id)
  88.     adjust
  89.     # 判定角色是否是领队
  90.     lead = $game_party.leader_judge
  91.     flag = false
  92.     if $game_party.actors[lead].id == actor_id
  93.       flag = true
  94.     end
  95.     # 删除角色
  96.     @actors.delete($game_actors[actor_id])
  97.     # 如果领队离开
  98.     if flag
  99.       # 如果删除之后出现无人出战的情况
  100.       if @actors.size == 0
  101.         # 替补队员名单有人的情况下
  102.         if @reserved_actors.size > 0
  103.           # 将@reserved_actors中的第一个移动到@actors中
  104.           @actors.push(@reserved_actors.shift)
  105.           # 设置领队
  106.           @leader = @actors[0]
  107.         else
  108.           @leader = nil
  109.         end
  110.       else
  111.         @leader = @actors[0]
  112.       end
  113.     end
  114.     # 还原主角
  115.     $game_player.refresh
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 设置初期同伴
  119.   #--------------------------------------------------------------------------
  120.   def setup_starting_members
  121.     @actors = []
  122.     for i in $data_system.party_members
  123.       @actors.push($game_actors[i])
  124.     end
  125.     unless @actors.empty?
  126.       set_leader(0)
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 全灭判定
  131.   #--------------------------------------------------------------------------
  132.   def all_dead?
  133.     # 同伴人数为 0 的情况下
  134.     if $game_party.actors.size == 0
  135.       return false
  136.     end
  137.     # 同伴中无人 HP 在 0 以上
  138.     for actor in @actors
  139.       if actor.hp > 0
  140.         return false
  141.       end
  142.     end
  143.     # 全灭
  144.     return true
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 检查连续伤害 (地图用)
  148.   #--------------------------------------------------------------------------
  149.   def check_map_slip_damage
  150.     for actor in @actors + @reserved_actors
  151.       if actor.hp > 0 and actor.slip_damage?
  152.         actor.hp -= [actor.maxhp / 100, 1].max
  153.         if actor.hp == 0
  154.           $game_system.se_play($data_system.actor_collapse_se)
  155.         end
  156.         $game_screen.start_flash(Color.new(255,0,0,128), 4)
  157.         $game_temp.gameover = $game_party.all_dead?
  158.       end
  159.     end
  160.   end
  161. end

  162. class Game_Player
  163.   #--------------------------------------------------------------------------
  164.   # ● 刷新
  165.   #--------------------------------------------------------------------------
  166.   def refresh
  167.     # 同伴人数为 0 的情况下
  168.     if $game_party.actors.size == 0 or $game_party.leader == nil
  169.       # 清除角色的文件名及对像
  170.       @character_name = ""
  171.       @character_hue = 0
  172.       # 分支结束
  173.       return
  174.     end
  175.     # 获取带头的角色
  176.     if $game_party.leader != nil
  177.       actor = $game_party.leader
  178.       # 设置角色的文件名及对像
  179.       @character_name = actor.character_name
  180.       @character_hue = actor.character_hue
  181.       # 初始化不透明度和合成方式子
  182.       [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
  183.       @blend_type = 0
  184.     end
  185.   end
  186. end

  187. class Window_Base < Window
  188.   def draw_actor_leader(x, y)
  189.     if $game_party.leader == nil
  190.       return
  191.     end
  192.     a = $game_party.leader_judge
  193.     self.contents.font.color = normal_color
  194.     self.contents.draw_text(x, y + a * 116, 64, 32, "领队",2)
  195.   end
  196. end

  197. class Window_MenuStatus < Window_Selectable
  198.   alias old_refresh refresh
  199.   def refresh
  200.     old_refresh
  201.     draw_actor_leader(384,0)
  202.   end
  203. end

  204. #==============================================================================
  205. # ■ Window_Selectable
  206. #------------------------------------------------------------------------------
  207. #  拥有光标的移动以及滚动功能的窗口类。
  208. #==============================================================================

  209. class Window_Selectable < Window_Base
  210.   #--------------------------------------------------------------------------
  211.   # ● 定义实例变量
  212.   #--------------------------------------------------------------------------
  213.   attr_reader   :index                    # 光标位置
  214.   attr_reader   :help_window              # 帮助窗口
  215.   attr_accessor :row_height               # 行高
  216.   #--------------------------------------------------------------------------
  217.   # ● 初始画对像
  218.   #     x      : 窗口的 X 坐标
  219.   #     y      : 窗口的 Y 坐标
  220.   #     width  : 窗口的宽
  221.   #     height : 窗口的高
  222.   #     row_height : 行高 默认是32
  223.   #--------------------------------------------------------------------------
  224.   def initialize(x, y, width, height, row_height=32)
  225.     super(x, y, width, height)
  226.     @item_max = 1
  227.     @column_max = 1
  228.     [url=home.php?mod=space&uid=370741]@Index[/url] = -1
  229.     @row_height = row_height
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 设置光标的位置
  233.   #     index : 新的光标位置
  234.   #--------------------------------------------------------------------------
  235.   def index=(index)
  236.     [url=home.php?mod=space&uid=370741]@Index[/url] = index
  237.     # 刷新帮助文本 (update_help 定义了继承目标)
  238.     if self.active and @help_window != nil
  239.       update_help
  240.     end
  241.     # 刷新光标矩形
  242.     update_cursor_rect
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 获取行数
  246.   #--------------------------------------------------------------------------
  247.   def row_max
  248.     # 由项目数和列数计算出行数
  249.     return (@item_max + @column_max - 1) / @column_max
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 获取开头行
  253.   #--------------------------------------------------------------------------
  254.   def top_row
  255.     # 将窗口内容的传送源 Y 坐标、1 行的高 row_height 等分
  256.     return self.oy / @row_height
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 设置开头行
  260.   #     row : 显示开头的行
  261.   #--------------------------------------------------------------------------
  262.   def top_row=(row)
  263.     # row 未满 0 的场合更正为 0
  264.     if row < 0
  265.       row = 0
  266.     end
  267.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  268.     if row > row_max - 1
  269.       row = row_max - 1
  270.     end
  271.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  272.     self.oy = row * @row_height
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● 获取 1 页可以显示的行数
  276.   #--------------------------------------------------------------------------
  277.   def page_row_max
  278.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 row_height
  279.     return (self.height - 32) / @row_height
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● 获取 1 页可以显示的项目数
  283.   #--------------------------------------------------------------------------
  284.   def page_item_max
  285.     # 将行数 page_row_max 乘上列数 @column_max
  286.     return page_row_max * @column_max
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 帮助窗口的设置
  290.   #     help_window : 新的帮助窗口
  291.   #--------------------------------------------------------------------------
  292.   def help_window=(help_window)
  293.     @help_window = help_window
  294.     # 刷新帮助文本 (update_help 定义了继承目标)
  295.     if self.active and @help_window != nil
  296.       update_help
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 更新光标举行
  301.   #--------------------------------------------------------------------------
  302.   def update_cursor_rect
  303.     # 光标位置不满 0 的情况下
  304.     if @index < 0
  305.       self.cursor_rect.empty
  306.       return
  307.     end
  308.     # 获取当前的行
  309.     row = @index / @column_max
  310.     # 当前行被显示开头行前面的情况下
  311.     if row < self.top_row
  312.       # 从当前行向开头行滚动
  313.       self.top_row = row
  314.     end
  315.     # 当前行被显示末尾行之后的情况下
  316.     if row > self.top_row + (self.page_row_max - 1)
  317.       # 从当前行向末尾滚动
  318.       self.top_row = row - (self.page_row_max - 1)
  319.     end
  320.     # 计算光标的宽
  321.     cursor_width = self.width / @column_max - 32
  322.     # 计算光标坐标
  323.     x = @index % @column_max * (cursor_width + 32)
  324.     y = @index / @column_max * @row_height - self.oy
  325.     # 更新国标矩形
  326.     self.cursor_rect.set(x, y, cursor_width, @row_height)
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 刷新画面
  330.   #--------------------------------------------------------------------------
  331.   def update
  332.     super
  333.     # 可以移动光标的情况下
  334.     if self.active and @item_max > 0 and @index >= 0
  335.       # 方向键下被按下的情况下
  336.       if Input.repeat?(Input::DOWN)
  337.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  338.         # 或光标位置在(项目数-列数)之前的情况下
  339.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  340.            @index < @item_max - @column_max
  341.           # 光标向下移动
  342.           $game_system.se_play($data_system.cursor_se)
  343.           @index = (@index + @column_max) % @item_max
  344.         end
  345.       end
  346.       # 方向键上被按下的情况下
  347.       if Input.repeat?(Input::UP)
  348.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  349.         # 或光标位置在列之后的情况下
  350.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  351.            @index >= @column_max
  352.           # 光标向上移动
  353.           $game_system.se_play($data_system.cursor_se)
  354.           @index = (@index - @column_max + @item_max) % @item_max
  355.         end
  356.       end
  357.       # 方向键右被按下的情况下
  358.       if Input.repeat?(Input::RIGHT)
  359.         # 列数为 2 以上并且、光标位置在(项目数 - 1)之前的情况下
  360.         if @column_max >= 2 and @index < @item_max - 1
  361.           # 光标向右移动
  362.           $game_system.se_play($data_system.cursor_se)
  363.           @index += 1
  364.         end
  365.       end
  366.       # 方向键左被按下的情况下
  367.       if Input.repeat?(Input::LEFT)
  368.         # 列数为 2 以上并且、光标位置在 0 之后的情况下
  369.         if @column_max >= 2 and @index > 0
  370.           # 光标向左移动
  371.           $game_system.se_play($data_system.cursor_se)
  372.           @index -= 1
  373.         end
  374.       end
  375.       # R 键被按下的情况下
  376.       if Input.repeat?(Input::R)
  377.         # 显示的最后行在数据中最后行上方的情况下
  378.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  379.           # 光标向后移动一页
  380.           $game_system.se_play($data_system.cursor_se)
  381.           @index = [@index + self.page_item_max, @item_max - 1].min
  382.           self.top_row += self.page_row_max
  383.         end
  384.       end
  385.       # L 键被按下的情况下
  386.       if Input.repeat?(Input::L)
  387.         # 显示的开头行在位置 0 之后的情况下
  388.         if self.top_row > 0
  389.           # 光标向前移动一页
  390.           $game_system.se_play($data_system.cursor_se)
  391.           @index = [@index - self.page_item_max, 0].max
  392.           self.top_row -= self.page_row_max
  393.         end
  394.       end
  395.     end
  396.     # 刷新帮助文本 (update_help 定义了继承目标)
  397.     if self.active and @help_window != nil
  398.       update_help
  399.     end
  400.     # 刷新光标矩形
  401.     update_cursor_rect
  402.   end
  403. end
  404. #==============================================================================
  405. # ■ Window_PartyMembers
  406. #------------------------------------------------------------------------------
  407. #  显示非领队队员概况的窗口。
  408. #==============================================================================

  409. class Window_PartyMembers < Window_Selectable
  410.   #--------------------------------------------------------------------------
  411.   # ● 初始化目标
  412.   #--------------------------------------------------------------------------
  413.   def initialize
  414.     super(80, 0, 480, 480, 112)
  415.     $game_party.adjust
  416.     @item_max = $game_party.actors.size + $game_party.reserved_actors.size - 1
  417.     @column_max  = 1
  418.     self.contents = Bitmap.new(width - 32, @item_max == 0 ? height - 32 : @item_max * 112)
  419.     self.contents.clear
  420.     @data = $game_party.actors + $game_party.reserved_actors
  421.     @data.sort!{ |a,b| a.id - b.id }
  422.     a = $game_party.leader_judge
  423.     @data.delete($game_party.actors[a])
  424.     refresh
  425.     self.index = 0
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● 刷新
  429.   #--------------------------------------------------------------------------
  430.   def refresh
  431.     self.contents.clear
  432.     for i in 0...@item_max
  433.       x = 64
  434.       y = i * 112
  435.       actor = @data[i]
  436.       if $game_party.actors.include?(actor)
  437.         self.contents.font.color = normal_color
  438.         self.contents.draw_text(320, y, 128, 32, "战斗", 2)
  439.       else
  440.         self.contents.font.color = disabled_color
  441.         self.contents.draw_text(320, y, 128, 32, "休战", 2)
  442.       end
  443.       draw_actor_graphic(actor, x - 40, y + 80)
  444.       draw_actor_name(actor, x, y)
  445.       draw_actor_class(actor, x + 144, y)
  446.       draw_actor_level(actor, x, y + 32)
  447.       draw_actor_state(actor, x + 90, y + 32)
  448.       draw_actor_exp(actor, x, y + 64)
  449.       draw_actor_hp(actor, x + 236, y + 32)
  450.       draw_actor_sp(actor, x + 236, y + 64)
  451.     end
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # 获取当前光标所指的角色
  455.   #--------------------------------------------------------------------------
  456.   def current_actor
  457.     return @data[@index]
  458.   end
  459. end

  460. class Interpreter
  461.   #--------------------------------------------------------------------------
  462.   # ● 角色用 iterate (考虑全体同伴)
  463.   #     parameter : 1 以上为 ID、0 为全体
  464.   #--------------------------------------------------------------------------
  465.   def iterate_actor(parameter)
  466.     # 全体同伴的情况下
  467.     if parameter == 0
  468.       # 同伴全体循环
  469.       for actor in $game_party.actors + $game_party.reserved_actors
  470.         # 评价块
  471.         yield actor
  472.       end
  473.     # 单体角色的情况下
  474.     else
  475.       # 获取角色
  476.       actor = $game_actors[parameter]
  477.       # 获取角色
  478.       yield actor if actor != nil
  479.     end
  480.   end
  481. end

  482. class Scene_Party
  483.   def main
  484.     $game_party.adjust
  485.     @members_window = Window_PartyMembers.new
  486.     # 执行过渡
  487.     Graphics.transition
  488.     # 主循环
  489.     loop do
  490.       # 刷新游戏画面
  491.       Graphics.update
  492.       # 刷新输入情报
  493.       Input.update
  494.       # 刷新画面
  495.       update
  496.       # 如果画面切换的话就中断循环
  497.       if $scene != self
  498.         break
  499.       end
  500.     end
  501.     # 准备过渡
  502.     Graphics.freeze
  503.     # 释放窗口
  504.     @members_window.dispose
  505.   end
  506.   
  507.   def update
  508.     @members_window.update
  509.     if Input.trigger?(Input::B)
  510.       # 演奏取消 SE
  511.       $game_system.se_play($data_system.cancel_se)
  512.       $scene = Scene_Menu.new(3)
  513.       return
  514.     end
  515.     if Input.trigger?(Input::C)
  516.       cur_actor = @members_window.current_actor
  517.       if cur_actor == nil
  518.         $game_system.se_play($data_system.buzzer_se)
  519.         return
  520.       end
  521.       if($game_party.actors.include?(cur_actor))
  522.         $game_system.se_play($data_system.decision_se)
  523.         $game_party.reserved_actors.push(cur_actor)
  524.         $game_party.actors.delete(cur_actor)
  525.         @members_window.refresh
  526.       else
  527.         if $game_party.actors.size < 4
  528.           $game_system.se_play($data_system.decision_se)
  529.           $game_party.actors.push(cur_actor)
  530.           $game_party.reserved_actors.delete(cur_actor)
  531.           @members_window.refresh
  532.         else
  533.           $game_system.se_play($data_system.buzzer_se)
  534.         end
  535.       end
  536.     end
  537.   end
  538. end

  539. #==============================================================================
  540. # ■ Scene_Menu
  541. #------------------------------------------------------------------------------
  542. #  处理菜单画面的类。
  543. #==============================================================================

  544. class Scene_Menu
  545.   #--------------------------------------------------------------------------
  546.   # ● 初始化对像
  547.   #     menu_index : 命令光标的初期位置
  548.   #--------------------------------------------------------------------------
  549.   def initialize(menu_index = 0)
  550.     @menu_index = menu_index
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # ● 主处理
  554.   #--------------------------------------------------------------------------
  555.   def main
  556.     # 生成命令窗口
  557.     s1 = $data_system.words.item
  558.     s2 = $data_system.words.skill
  559.     s3 = $data_system.words.equip
  560.     s4 = "队伍"
  561.     s5 = "领队"
  562.     s6 = "状态"
  563.     s7 = "存档"
  564.     s8 = "读档"
  565.     s9 = "退出"
  566.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7, s8, s9])
  567.     @command_window.index = @menu_index
  568.     # 同伴人数为 0 的情况下
  569.     if $game_party.actors.size == 0
  570.       # 物品、特技、装备、状态无效化
  571.       @command_window.disable_item(0)
  572.       @command_window.disable_item(1)
  573.       @command_window.disable_item(2)
  574.       @command_window.disable_item(3)      
  575.       @command_window.disable_item(4)
  576.       @command_window.disable_item(5)
  577.     end
  578.     # 禁止存档的情况下
  579.     if $game_system.save_disabled
  580.       # 存档无效
  581.       @command_window.disable_item(6)
  582.     end
  583.     # 生成游戏时间窗口
  584.     #@playtime_window = Window_PlayTime.new
  585.     #@playtime_window.x = 0
  586.     #@playtime_window.y = 430
  587.     # 生成步数窗口
  588.     @steps_window = Window_Steps.new
  589.     @steps_window.x = 0
  590.     @steps_window.y = 320
  591.     # 生成金钱窗口
  592.    # @gold_window = Window_Gold.new
  593.    # @gold_window.x = 0
  594.     #@gold_window.y = 416
  595.     # 生成状态窗口
  596.     @status_window = Window_MenuStatus.new
  597.     @status_window.x = 160
  598.     @status_window.y = 0
  599.     # 生成坐标窗口
  600.     #@xy_window = Window_xy.new
  601.     #@xy_window.x = 0
  602.     #@xy_window.y = 380
  603.     # 执行过渡
  604.     Graphics.transition
  605.     # 主循环
  606.     loop do
  607.       # 刷新游戏画面
  608.       Graphics.update
  609.       # 刷新输入信息
  610.       Input.update
  611.       # 刷新画面
  612.       update
  613.       # 如果切换画面就中断循环
  614.       if $scene != self
  615.         break
  616.       end
  617.     end
  618.     # 准备过渡
  619.     Graphics.freeze
  620.     # 释放窗口
  621.     @command_window.dispose
  622. #    @playtime_window.dispose
  623.     @steps_window.dispose
  624. #    @gold_window.dispose
  625.     #@xy_window.dispose
  626.     @status_window.dispose
  627.   end
  628.   #--------------------------------------------------------------------------
  629.   # ● 刷新画面
  630.   #--------------------------------------------------------------------------
  631.   def update
  632.     # 刷新窗口
  633.     @command_window.update
  634. #    @playtime_window.update
  635.     @steps_window.update
  636.     #@gold_window.update
  637.     #@xy_window.update
  638.     @status_window.update
  639.     # 命令窗口被激活的情况下: 调用 update_command
  640.     if @command_window.active
  641.       update_command
  642.       return
  643.     end
  644.     # 状态窗口被激活的情况下: 调用 update_status
  645.     if @status_window.active
  646.       update_status
  647.       return
  648.     end
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ● 刷新画面 (命令窗口被激活的情况下)
  652.   #--------------------------------------------------------------------------
  653.   def update_command
  654.     # 按下 B 键的情况下
  655.     if Input.trigger?(Input::B)
  656.       # 演奏取消 SE
  657.       $game_system.se_play($data_system.cancel_se)
  658.       # 切换的地图画面############
  659.       $scene = Scene_Map.new
  660.       return
  661.     end
  662.     # 按下 C 键的情况下
  663.     if Input.trigger?(Input::C)
  664.       # 同伴人数为 0、存档、游戏结束以外的场合
  665.       if $game_party.actors.size == 0 and @command_window.index < 4
  666.         # 演奏冻结 SE
  667.         $game_system.se_play($data_system.buzzer_se)
  668.         return
  669.       end
  670.       # 命令窗口的光标位置分支(修改)
  671.       case @command_window.index
  672.       when 0  # 物品
  673.         # 演奏确定 SE
  674.         $game_system.se_play($data_system.decision_se)
  675.         # 切换到物品画面
  676.         $scene = Scene_Item.new
  677.       when 1  # 特技
  678.         # 演奏确定 SE
  679.         $game_system.se_play($data_system.decision_se)
  680.         # 激活状态窗口
  681.         @command_window.active = false
  682.         @status_window.active = true
  683.         @status_window.index = 0
  684.       when 2  # 装备
  685.         # 演奏确定 SE
  686.         $game_system.se_play($data_system.decision_se)
  687.         # 激活状态窗口
  688.         @command_window.active = false
  689.         @status_window.active = true
  690.         @status_window.index = 0
  691.       when 4  # 领队
  692.         # 演奏确定 SE
  693.         $game_system.se_play($data_system.decision_se)
  694.         # 激活状态窗口
  695.         @command_window.active = false
  696.         @status_window.active = true
  697.         @status_window.index = 0
  698.        when 3  # 队伍
  699.         # 演奏确定 SE
  700.         $game_system.se_play($data_system.decision_se)
  701.         # 切换到队员画面
  702.         $scene = Scene_Party.new
  703.        when 5  # 状态
  704.         # 演奏确定 SE
  705.         $game_system.se_play($data_system.decision_se)
  706.         # 激活状态窗口
  707.         @command_window.active = false
  708.         @status_window.active = true
  709.         @status_window.index = 0
  710.        when 6  # 存档
  711.          #禁止存档的情况下
  712.         if $game_system.save_disabled
  713.            #演奏冻结 SE
  714.           $game_system.se_play($data_system.buzzer_se)
  715.           return
  716.        end
  717.          #演奏确定 SE
  718.         $game_system.se_play($data_system.decision_se)
  719.          #切换到存档画面
  720.         $scene = Scene_Save.new
  721.        when 7  # 读档
  722.         #演奏确定 SE
  723.         $game_system.se_play($data_system.decision_se)
  724.         $load_calling = true
  725.         #切换到读档画面
  726.         $scene = Scene_Load.new
  727.        when 8  # 游戏结束
  728.         # 演奏确定 SE
  729.         $game_system.se_play($data_system.decision_se)
  730.         # 切换到游戏结束画面
  731.         $scene = Scene_End.new
  732.       end
  733.       return
  734.     end
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ● 刷新画面 (状态窗口被激活的情况下)
  738.   #--------------------------------------------------------------------------
  739.   def update_status
  740.     # 按下 B 键的情况下
  741.     if Input.trigger?(Input::B)
  742.       # 演奏取消 SE
  743.       $game_system.se_play($data_system.cancel_se)
  744.       # 激活命令窗口
  745.       @command_window.active = true
  746.       @status_window.active = false
  747.       @status_window.index = -1
  748.       return
  749.     end
  750.     # 按下 C 键的情况下
  751.     if Input.trigger?(Input::C)
  752.       # 命令窗口的光标位置分支
  753.       case @command_window.index
  754.       when 1  # 特技
  755.         # 本角色的行动限制在 2 以上的情况下
  756.         if $game_party.actors[@status_window.index].restriction >= 2
  757.           # 演奏冻结 SE
  758.           $game_system.se_play($data_system.buzzer_se)
  759.           return
  760.         end
  761.         # 演奏确定 SE
  762.         $game_system.se_play($data_system.decision_se)
  763.         # 切换到特技画面
  764.         $scene = Scene_Skill.new(@status_window.index)
  765.       when 2  # 装备
  766.         # 演奏确定 SE
  767.         $game_system.se_play($data_system.decision_se)
  768.         # 切换的装备画面
  769.         $scene = Scene_Equip.new(@status_window.index)
  770.       when 4  # 领队
  771.         # 演奏确定 SE
  772.         $game_system.se_play($data_system.decision_se)
  773.         $game_party.set_leader(@status_window.index)
  774.         $game_player.refresh
  775.         @status_window.refresh
  776.       when 5  # 状态
  777.         # 演奏确定 SE
  778.         $game_system.se_play($data_system.decision_se)
  779.         # 切换到状态画面
  780.         $scene = Scene_Status.new(@status_window.index)
  781.       end
  782.       return
  783.     end
  784.   end
  785. end

  786. class Scene_Status
  787.   #--------------------------------------------------------------------------
  788.   # ● 刷新画面
  789.   #--------------------------------------------------------------------------
  790.   def update
  791.     # 按下 B 键的情况下
  792.     if Input.trigger?(Input::B)
  793.       # 演奏取消 SE
  794.       $game_system.se_play($data_system.cancel_se)
  795.       # 切换到菜单画面
  796.       $scene = Scene_Menu.new(5)
  797.       return
  798.     end
  799.     # 按下 R 键的情况下
  800.     if Input.trigger?(Input::R)
  801.       # 演奏光标 SE
  802.       $game_system.se_play($data_system.cursor_se)
  803.       # 移至下一位角色
  804.       @actor_index += 1
  805.       @actor_index %= $game_party.actors.size
  806.       # 切换到别的状态画面
  807.       $scene = Scene_Status.new(@actor_index)
  808.       return
  809.     end
  810.     # 按下 L 键的情况下
  811.     if Input.trigger?(Input::L)
  812.       # 演奏光标 SE
  813.       $game_system.se_play($data_system.cursor_se)
  814.       # 移至上一位角色
  815.       @actor_index += $game_party.actors.size - 1
  816.       @actor_index %= $game_party.actors.size
  817.       # 切换到别的状态画面
  818.       $scene = Scene_Status.new(@actor_index)
  819.       return
  820.     end
  821.   end
  822. end

  823. class Scene_Save
  824.   #--------------------------------------------------------------------------
  825.   # ● 取消时的处理
  826.   #--------------------------------------------------------------------------
  827.   def on_cancel
  828.     # 演奏取消 SE
  829.     $game_system.se_play($data_system.cancel_se)
  830.     # 如果被事件调用
  831.     if $game_temp.save_calling
  832.       # 清除存档调用标志
  833.       $game_temp.save_calling = false
  834.       # 切换到地图画面
  835.       $scene = Scene_Map.new
  836.       return
  837.     end
  838.     # 切换到菜单画面
  839.     $scene = Scene_Menu.new(6)
  840.   end
  841. end

  842. class Scene_Load
  843.   #--------------------------------------------------------------------------
  844.   # ● 取消时的处理
  845.   #--------------------------------------------------------------------------
  846.   def on_cancel
  847.     # 演奏取消 SE
  848.     $game_system.se_play($data_system.cancel_se)
  849.     # 切换到标题画面
  850.     if $load_calling == true
  851.       $load_calling = false
  852.       $scene = Scene_Menu.new(7)
  853.     else
  854.       $scene = Scene_Title.new
  855.     end
  856.   end
  857. end

  858. class Scene_End
  859.   #--------------------------------------------------------------------------
  860.   # ● 刷新画面
  861.   #--------------------------------------------------------------------------
  862.   def update
  863.     # 刷新命令窗口
  864.     @command_window.update
  865.     # 按下 B 键的情况下
  866.     if Input.trigger?(Input::B)
  867.       # 演奏取消 SE
  868.       $game_system.se_play($data_system.cancel_se)
  869.       # 切换到菜单画面
  870.       $scene = Scene_Menu.new(8)
  871.       return
  872.     end
  873.     # 按下 C 键的场合下
  874.     if Input.trigger?(Input::C)
  875.       # 命令窗口光标位置分支
  876.       case @command_window.index
  877.       when 0  # 返回标题画面
  878.         command_to_title
  879.       when 1  # 退出
  880.         command_shutdown
  881.       when 2  # 取消
  882.         command_cancel
  883.       end
  884.       return
  885.     end
  886.   end
  887.   #--------------------------------------------------------------------------
  888.   # ● 选择命令 [取消] 时的处理
  889.   #--------------------------------------------------------------------------
  890.   def command_cancel
  891.     # 演奏确定 SE
  892.     $game_system.se_play($data_system.decision_se)
  893.     # 切换到菜单画面
  894.     $scene = Scene_Menu.new(8)
  895.   end
  896. end
复制代码

   
【RMXP共享】50个脚本整合的系统

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
2
发表于 2014-2-12 19:00:57 | 只看该作者
本帖最后由 恋′挂机 于 2014-2-12 20:04 编辑
  1. class Game_Party
  2.   alias remove_actor_old_a remove_actor
  3.   def remove_actor(actor_id)
  4.     不可离队的角色id数组 = [1, 2, 3] # 1 2 3 角色不可离队
  5.     return if 不可离队的角色id数组.include? actor_id
  6.     remove_actor_old_a(actor_id)
  7.   end
  8. end
复制代码
回复报错问题

我这里测试是没有问题的
放在main前(除main外所有脚本最下方)看看会不会报错

点评

160行和190行报错  发表于 2014-2-12 19:40
回复 支持 反对

使用道具 举报

Lv1.梦旅人 (暗夜天使)

梦石
0
星屑
60
在线时间
936 小时
注册时间
2008-2-14
帖子
973

开拓者

3
发表于 2014-2-12 20:13:30 | 只看该作者
本帖最后由 断电 于 2014-2-12 20:15 编辑

将原脚本529行-543行的
  1. if($game_party.actors.include?(cur_actor))
  2.         $game_system.se_play($data_system.decision_se)
  3.         $game_party.reserved_actors.push(cur_actor)
  4.         $game_party.actors.delete(cur_actor)
  5.         @members_window.refresh
  6.       else
  7.         if $game_party.actors.size < 4
  8.           $game_system.se_play($data_system.decision_se)
  9.           $game_party.actors.push(cur_actor)
  10.           $game_party.reserved_actors.delete(cur_actor)
  11.           @members_window.refresh
  12.         else
  13.           $game_system.se_play($data_system.buzzer_se)
  14.         end
  15.       end
复制代码
替换为
  1.       if($game_party.actors.include?(cur_actor))####修改标记
  2.         if cur_actor.id == 1 ##不可休战的角色ID(数据库中ID)
  3.           $game_system.se_play($data_system.buzzer_se)
  4.           @members_window.refresh
  5.         else
  6.         $game_system.se_play($data_system.decision_se)
  7.         $game_party.reserved_actors.push(cur_actor)
  8.         $game_party.actors.delete(cur_actor)
  9.          @members_window.refresh
  10.         end
  11.       else
  12.         if $game_party.actors.size < 4
  13.           if cur_actor.id == 1  ##不可休战的角色ID(数据库中ID)
  14.           $game_system.se_play($data_system.buzzer_se)
  15.           @members_window.refresh
  16.           else
  17.           $game_system.se_play($data_system.decision_se)
  18.           $game_party.reserved_actors.push(cur_actor)
  19.           $game_party.actors.delete(cur_actor)
  20.           end
  21.           $game_system.se_play($data_system.decision_se)
  22.           $game_party.actors.push(cur_actor)
  23.           $game_party.reserved_actors.delete(cur_actor)
  24.           @members_window.refresh
  25.         else
  26.           $game_system.se_play($data_system.buzzer_se)
  27.         end
  28. end
复制代码

点评

你自己检查一下可能是多一个少一个end的问题……一会儿发个工程范例给你吧  发表于 2014-2-12 21:06
541行发生syntaxError  发表于 2014-2-12 20:24
接稿,UI(已接)/立绘(已接)
无偿/有偿皆可,有偿速度会更快^q^
作品请见相册,有意请发私信:)
回复 支持 反对

使用道具 举报

Lv1.梦旅人 (暗夜天使)

梦石
0
星屑
60
在线时间
936 小时
注册时间
2008-2-14
帖子
973

开拓者

4
发表于 2014-2-12 21:42:28 | 只看该作者
这样是不是连贴了
Project2.zip (208.46 KB, 下载次数: 27)
搜索“不可休战的角色id”,把注释对应的数字修改成你需要的就行了。
【擅自加了一个提示

点评

就连一帖还是为了回答问题又不会怀孕……(雾)  发表于 2014-4-21 18:37
谢谢,不纯水的好像没事吧?  发表于 2014-2-13 13:42

评分

参与人数 2星屑 +184 收起 理由
myownroc + 180 认可答案
guoyq1988 + 4 认可答案

查看全部评分

接稿,UI(已接)/立绘(已接)
无偿/有偿皆可,有偿速度会更快^q^
作品请见相册,有意请发私信:)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 20:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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