Project1

标题: 可不可以实现死亡后替补出场 [打印本页]

作者: 卓越大白痴    时间: 2008-11-19 21:14
标题: 可不可以实现死亡后替补出场
比如队伍里有12个角色 战斗时前4个出场 全灭后不结束游戏而是后4个脚色登场
继续游戏  我用的是人物扩张脚本
  1. # ▼▲▼ XRXS26. 人物扩张系统 ver..05 ▼▲▼
  2. # by 桜雅 在土

  3. #==============================================================================
  4. # □ 初始化定义
  5. #==============================================================================
  6. module XRXS26
  7.   FRONT_MEMBER_LIMIT    = 4        # 战斗参战人数最大值
  8.   BACKWARD_MEMBER_LIMIT = 4        # 待机人数最大值
  9.   BACKWARD_EXP_GAINABLE = true     # 待机人物是否获得经验
  10.   MENU_STATUS_STRETCH   = false    # 3人以下的时候,菜单是否拉伸大小
  11. end#==============================================================================
  12. # ■ Scene_Battle (分割定义 1)
  13. #------------------------------------------------------------------------------
  14. #  处理战斗画面的类。
  15. #==============================================================================

  16. class Scene_Battle
  17.   #--------------------------------------------------------------------------
  18.   # ● 主处理
  19.   #--------------------------------------------------------------------------
  20.   def main
  21.     # 初始化战斗用的各种暂时数据
  22.     $game_temp.in_battle = true
  23.     $game_temp.battle_turn = 0
  24.     $game_temp.battle_event_flags.clear
  25.     $game_temp.battle_abort = false
  26.     $game_temp.battle_main_phase = false
  27.     $game_temp.battleback_name = $game_map.battleback_name
  28.     $game_temp.forcing_battler = nil
  29.     # 初始化战斗用事件解释器
  30.     $game_system.battle_interpreter.setup(nil, 0)
  31.     # 准备队伍
  32.     @troop_id = $game_temp.battle_troop_id
  33.     $game_troop.setup(@troop_id)
  34.     # 生成角色命令窗口
  35.     s1 = $data_system.words.attack
  36.     s2 = $data_system.words.skill
  37.     s3 = $data_system.words.guard
  38.     s4 = $data_system.words.item
  39.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  40.     @actor_command_window.y = 160
  41.     @actor_command_window.back_opacity = 160
  42.     @actor_command_window.active = false
  43.     @actor_command_window.visible = false
  44.     # 生成其它窗口
  45.     @party_command_window = Window_PartyCommand.new
  46.     @help_window = Window_Help.new
  47.     @help_window.back_opacity = 160
  48.     @help_window.visible = false
  49.     @status_window = Window_BattleStatus.new
  50.     @message_window = Window_Message.new
  51.     # 生成活动块
  52.     @spriteset = Spriteset_Battle.new
  53.     # 初始化等待计数
  54.     @wait_count = 0
  55.     # 执行过渡
  56.     if $data_system.battle_transition == ""
  57.       Graphics.transition(20)
  58.     else
  59.       Graphics.transition(40, "Graphics/Transitions/" +
  60.         $data_system.battle_transition)
  61.     end
  62.     # 开始自由战斗回合
  63.     start_phase1
  64.     # 主循环
  65.     loop do
  66.       # 刷新游戏画面
  67.       Graphics.update
  68.       # 刷新输入信息
  69.       Input.update
  70.       # 刷新画面
  71.       update
  72.       # 如果画面切换的话就中断循环
  73.       if $scene != self
  74.         break
  75.       end
  76.     end
  77.     # 刷新地图
  78.     $game_map.refresh
  79.     # 准备过渡
  80.     Graphics.freeze
  81.     # 释放窗口
  82.     @actor_command_window.dispose
  83.     @party_command_window.dispose
  84.     @help_window.dispose
  85.     @status_window.dispose
  86.     @message_window.dispose
  87.     if @skill_window != nil
  88.       @skill_window.dispose
  89.     end
  90.     if @item_window != nil
  91.       @item_window.dispose
  92.     end
  93.     if @result_window != nil
  94.       @result_window.dispose
  95.     end
  96.     # 释放活动块
  97.     @spriteset.dispose
  98.     # 标题画面切换中的情况
  99.     if $scene.is_a?(Scene_Title)
  100.       # 淡入淡出画面
  101.       Graphics.transition
  102.       Graphics.freeze
  103.     end
  104.     # 战斗测试或者游戏结束以外的画面切换中的情况
  105.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  106.       $scene = nil
  107.     end
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 胜负判定
  111.   #--------------------------------------------------------------------------
  112.   def judge
  113.     # 全灭判定是真、并且同伴人数为 0 的情况下
  114.     if $game_party.all_dead? or $game_party.actors.size == 0
  115.       # 允许失败的情况下
  116.       if $game_temp.battle_can_lose
  117.         # 还原为战斗开始前的 BGM
  118.         $game_system.bgm_play($game_temp.map_bgm)
  119.         # 战斗结束
  120.         battle_end(2)
  121.         # 返回 true
  122.         return true
  123.       end
  124.       # 设置游戏结束标志
  125.       $game_temp.gameover = true
  126.       # 返回 true
  127.       return true
  128.     end
  129.     # 如果存在任意 1 个敌人就返回 false
  130.     for enemy in $game_troop.enemies
  131.       if enemy.exist?
  132.         return false
  133.       end
  134.     end
  135.     # 开始结束战斗回合 (胜利)
  136.     start_phase5
  137.     # 返回 true
  138.     return true
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 战斗结束
  142.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  143.   #--------------------------------------------------------------------------
  144.   def battle_end(result)
  145.     # 清除战斗中标志
  146.     $game_temp.in_battle = false
  147.     # 清除全体同伴的行动
  148.     $game_party.clear_actions
  149.     # 解除战斗用状态
  150.     for actor in $game_party.actors
  151.       actor.remove_states_battle
  152.     end
  153.     # 清除敌人
  154.     $game_troop.enemies.clear
  155.     # 调用战斗返回调用
  156.     if $game_temp.battle_proc != nil
  157.       $game_temp.battle_proc.call(result)
  158.       $game_temp.battle_proc = nil
  159.     end
  160.     # 切换到地图画面
  161.     $scene = Scene_Map.new
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 设置战斗事件
  165.   #--------------------------------------------------------------------------
  166.   def setup_battle_event
  167.     # 正在执行战斗事件的情况下
  168.     if $game_system.battle_interpreter.running?
  169.       return
  170.     end
  171.     # 搜索全部页的战斗事件
  172.     for index in 0...$data_troops[@troop_id].pages.size
  173.       # 获取事件页
  174.       page = $data_troops[@troop_id].pages[index]
  175.       # 事件条件可以参考 c
  176.       c = page.condition
  177.       # 没有指定任何条件的情况下转到下一页
  178.       unless c.turn_valid or c.enemy_valid or
  179.              c.actor_valid or c.switch_valid
  180.         next
  181.       end
  182.       # 执行完毕的情况下转到下一页
  183.       if $game_temp.battle_event_flags[index]
  184.         next
  185.       end
  186.       # 确认回合条件
  187.       if c.turn_valid
  188.         n = $game_temp.battle_turn
  189.         a = c.turn_a
  190.         b = c.turn_b
  191.         if (b == 0 and n != a) or
  192.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  193.           next
  194.         end
  195.       end
  196.       # 确认敌人条件
  197.       if c.enemy_valid
  198.         enemy = $game_troop.enemies[c.enemy_index]
  199.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  200.           next
  201.         end
  202.       end
  203.       # 确认角色条件
  204.       if c.actor_valid
  205.         actor = $game_actors[c.actor_id]
  206.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  207.           next
  208.         end
  209.       end
  210.       # 确认开关条件
  211.       if c.switch_valid
  212.         if $game_switches[c.switch_id] == false
  213.           next
  214.         end
  215.       end
  216.       # 设置事件
  217.       $game_system.battle_interpreter.setup(page.list, 0)
  218.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  219.       if page.span <= 1
  220.         # 设置执行结束标志
  221.         $game_temp.battle_event_flags[index] = true
  222.       end
  223.       return
  224.     end
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 刷新画面
  228.   #--------------------------------------------------------------------------
  229.   def update
  230.     # 执行战斗事件中的情况下
  231.     if $game_system.battle_interpreter.running?
  232.       # 刷新解释器
  233.       $game_system.battle_interpreter.update
  234.       # 强制行动的战斗者不存在的情况下
  235.       if $game_temp.forcing_battler == nil
  236.         # 执行战斗事件结束的情况下
  237.         unless $game_system.battle_interpreter.running?
  238.           # 继续战斗的情况下、再执行战斗事件的设置
  239.           unless judge
  240.             setup_battle_event
  241.           end
  242.         end
  243.         # 如果不是结束战斗回合的情况下
  244.         if @phase != 5
  245.           # 刷新状态窗口
  246.           @status_window.refresh
  247.         end
  248.       end
  249.     end
  250.     # 系统 (计时器)、刷新画面
  251.     $game_system.update
  252.     $game_screen.update
  253.     # 计时器为 0 的情况下
  254.     if $game_system.timer_working and $game_system.timer == 0
  255.       # 中断战斗
  256.       $game_temp.battle_abort = true
  257.     end
  258.     # 刷新窗口
  259.     @help_window.update
  260.     @party_command_window.update
  261.     @actor_command_window.update
  262.     @status_window.update
  263.     @message_window.update
  264.     # 刷新活动块
  265.     @spriteset.update
  266.     # 处理过渡中的情况下
  267.     if $game_temp.transition_processing
  268.       # 清除处理过渡中标志
  269.       $game_temp.transition_processing = false
  270.       # 执行过渡
  271.       if $game_temp.transition_name == ""
  272.         Graphics.transition(20)
  273.       else
  274.         Graphics.transition(40, "Graphics/Transitions/" +
  275.           $game_temp.transition_name)
  276.       end
  277.     end
  278.     # 显示信息窗口中的情况下
  279.     if $game_temp.message_window_showing
  280.       return
  281.     end
  282.     # 显示效果中的情况下
  283.     if @spriteset.effect?
  284.       return
  285.     end
  286.     # 游戏结束的情况下
  287.     if $game_temp.gameover
  288.       # 切换到游戏结束画面
  289.       $scene = Scene_Gameover.new
  290.       return
  291.     end
  292.     # 返回标题画面的情况下
  293.     if $game_temp.to_title
  294.       # 切换到标题画面
  295.       $scene = Scene_Title.new
  296.       return
  297.     end
  298.     # 中断战斗的情况下
  299.     if $game_temp.battle_abort
  300.       # 还原为战斗前的 BGM
  301.       $game_system.bgm_play($game_temp.map_bgm)
  302.       # 战斗结束
  303.       battle_end(1)
  304.       return
  305.     end
  306.     # 等待中的情况下
  307.     if @wait_count > 0
  308.       # 减少等待计数
  309.       @wait_count -= 1
  310.       return
  311.     end
  312.     # 强制行动的角色存在、
  313.     # 并且战斗事件正在执行的情况下
  314.     if $game_temp.forcing_battler == nil and
  315.        $game_system.battle_interpreter.running?
  316.       return
  317.     end
  318.     # 回合分支
  319.     case @phase
  320.     when 1  # 自由战斗回合
  321.       update_phase1
  322.     when 2  # 同伴命令回合
  323.       update_phase2
  324.     when 3  # 角色命令回合
  325.       update_phase3
  326.     when 4  # 主回合
  327.       update_phase4
  328.     when 5  # 战斗结束回合
  329.       update_phase5
  330.     end
  331.   end
  332. end
复制代码
[LINE]1,#dddddd[/LINE]此贴于 2008-11-20 11:38:54 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-11-23 14:51:45 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 天圣的马甲    时间: 2008-11-19 21:39
全灭判定记得好像在Scene_Battle的def judge吧……在那里添加脚本把不在队伍的角色替换入队吧- -
作者: 卓越大白痴    时间: 2008-11-19 21:48
怎莫做呢 可不可以说详细点 谢谢
作者: 木葬枫    时间: 2008-11-19 21:51
代码复制
  1.  


用这个框住。
作者: typhon_524    时间: 2008-11-19 21:54
当队伍中编号为0123的角色全灭,那么原来的4号替换0号位置,5号替换1号位置,6号替换2号位置,7号替换3号位置,也可以在数据库敌人队伍的战斗事件中添加以下脚本:距离回合
但是如果前四个没死的话,那些候补角色要给个状态使之无敌、让敌人无视、换上来的时候再去除这个状态,否则还没出场也会挨打。


Scene_Battle 1里  
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
  def update  下面添加:
if $game_party.actors[0].states.include?(1) and $game_party.actors[1].states.include?(1) and $game_party.actors[2].states.include?(1) and $game_party.actors[3].states.include?(1)
a = $game_party.actors[0]
$game_party.actors[0] = $game_party.actors[
4]
$game_party.actors[4] = a
a = $game_party.actors[1]
$game_party.actors[1] = $game_party.actors[
5]
$game_party.actors[5] = a
a = $game_party.actors[2]
$game_party.actors[2] = $game_party.actors[
6]
$game_party.actors[6] = a
a = $game_party.actors[3]
$game_party.actors[3] = $game_party.actors[
7]
$game_party.actors[7] = a
end
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 卓越大白痴    时间: 2008-11-21 02:15

莫非传说之无字天书乎
524
战斗时少了个人 其他的解决不能
作者: 小东东仔    时间: 2008-11-22 19:10
强悍的脚本就能解决。。问问脚本高手。。可能有解决办法!




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