- 累计送礼:
 - 0 个
 
 - 累计收礼:
 - 0 个
 
 TA的每日心情  | 开心 2025-10-18 22:41 | 
|---|
 
  签到天数: 165 天 连续签到: 1 天 [LV.7]常住居民III 
  
管理员 
    
    
        - VIP
 
        - 6 
 
     
    
        - 卡币
 
        - 14829 
 
     
    
        - OK点
 
        - 16 
 
     
    
    - 推广点
 
    - 0 
 
     
	
    - 同能卷
 
    - 0 
 
     
  
	- 积分
 - 17954
 
 
  
 
  
 | 
 
玩空轨的时候发现他即使战斗失败也会弹出个选单让你从新战斗。接着就有了这个。插入以下脚本到mian以前。本脚本与绝大多数战斗脚本冲突(- - 这不是废话么)。仅作参考。实用价值估计不大。喜欢这个效果的可以按照我的这个修改战斗脚本。废话完毕 
顺便贴个范例: http://rpg.blue/upload_program/d ... ��项_114912608.rar
 - PLACE = ""#==============================================================================# ■ Scene_Map#------------------------------------------------------------------------------#  处理地图画面的类。#==============================================================================class Scene_Map  #--------------------------------------------------------------------------  # ● 调用战斗  #--------------------------------------------------------------------------  def call_battle    # 清除战斗调用标志    $game_temp.battle_calling = false    # 清除菜单调用标志    $game_temp.menu_calling = false    $game_temp.menu_beep = false    # 生成遇敌计数    $game_player.make_encounter_count    # 记忆地图 BGM 、停止 BGM    $game_temp.map_bgm = $game_system.playing_bgm    $game_system.bgm_stop    # 演奏战斗开始 SE    $game_system.se_play($data_system.battle_start_se)    # 演奏战斗 BGM    $game_system.bgm_play($game_system.battle_bgm)    # 矫正主角姿势    $game_player.straighten    # 切换到战斗画面    $scene = Scene_Battle.new    # 自动存档    file = File.open(PLACE+"BattleAuto.rxdata", "wb")     #生成描绘存档文件用的角色图形    characters = []    for i in 0...$game_party.actors.size      actor = $game_party.actors[i]      characters.push([actor.character_name, actor.character_hue, actor.id, actor.battler_name, actor.battler_hue])    end    # 写入描绘存档文件用的角色数据    Marshal.dump(characters, file)    # 写入测量游戏时间用画面计数    Marshal.dump(Graphics.frame_count, file)    # 增加 1 次存档次数    $game_system.save_count += 1    # 保存魔法编号    # (将编辑器保存的值以随机值替换)    $game_system.magic_number = $data_system.magic_number    # 写入各种游戏对像    Marshal.dump($game_system, file)    Marshal.dump($game_switches, file)    Marshal.dump($game_variables, file)    Marshal.dump($game_self_switches, file)    Marshal.dump($game_screen, file)    Marshal.dump($game_actors, file)    Marshal.dump($game_party, file)    Marshal.dump($game_troop, file)    Marshal.dump($game_map, file)    Marshal.dump($game_player, file)    file.close    endend#==============================================================================# ■ Scene_Battle (分割定义 1)#------------------------------------------------------------------------------#  处理战斗画面的类。#==============================================================================class Scene_Battle  #--------------------------------------------------------------------------  # ● 主处理  #--------------------------------------------------------------------------  def main    # 初始化战斗用的各种暂时数据    $game_temp.in_battle = true    $game_temp.battle_turn = 0    $game_temp.battle_event_flags.clear    $game_temp.battle_abort = false    $game_temp.battle_main_phase = false    $game_temp.battleback_name = $game_map.battleback_name    $game_temp.forcing_battler = nil    # 初始化战斗用事件解释器    $game_system.battle_interpreter.setup(nil, 0)    # 准备队伍    @troop_id = $game_temp.battle_troop_id    $game_troop.setup(@troop_id)    # 生成角色命令窗口    s1 = $data_system.words.attack    s2 = $data_system.words.skill    s3 = $data_system.words.guard    s4 = $data_system.words.item    @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])    @actor_command_window.y = 160    @actor_command_window.back_opacity = 160    @actor_command_window.active = false    @actor_command_window.visible = false    # 生成其它窗口    @party_command_window = Window_PartyCommand.new    @help_window = Window_Help.new    @help_window.back_opacity = 160    @help_window.visible = false    @status_window = Window_BattleStatus.new    @message_window = Window_Message.new    # 生成活动块    @spriteset = Spriteset_Battle.new    # 初始化等待计数    @wait_count = 0    # 执行过渡    if $data_system.battle_transition == ""      Graphics.transition(20)    else      Graphics.transition(40, "Graphics/Transitions/" +        $data_system.battle_transition)    end    # 开始自由战斗回合    start_phase1    # 主循环    loop do      # 刷新游戏画面      Graphics.update      # 刷新输入信息      Input.update      # 刷新画面      update      # 如果画面切换的话就中断循环      if $scene != self        break      end    end    # 刷新地图    $game_map.refresh    # 准备过渡    Graphics.freeze    # 释放窗口    @actor_command_window.dispose    @party_command_window.dispose    @help_window.dispose    @status_window.dispose    @message_window.dispose    if @skill_window != nil      @skill_window.dispose    end    if @item_window != nil      @item_window.dispose    end    if @result_window != nil      @result_window.dispose    end    # 释放活动块    @spriteset.dispose    # 标题画面切换中的情况    if $scene.is_a?(Scene_Title)      # 淡入淡出画面      Graphics.transition      Graphics.freeze    end    # 战斗测试或者游戏结束以外的画面切换中的情况    if $BTEST and not $scene.is_a?(Scene_Gameover)      $scene = nil    end  end  #--------------------------------------------------------------------------  # ● 胜负判定  #--------------------------------------------------------------------------  def judge    # 全灭判定是真、并且同伴人数为 0 的情况下    if $game_party.all_dead? or $game_party.actors.size == 0      $game_system.me_play($data_system.gameover_me)      Audio.bgm_stop      # 允许失败的情况下      if $game_temp.battle_can_lose        # 还原为战斗开始前的 BGM        $game_system.bgm_play($game_temp.map_bgm)        # 战斗结束        battle_end(2)        # 返回 true        return true      else      @loseselect_window = Window_Command.new(160, ["重新开始", "放弃选择"])      @loseselect_window.z = 501      @loseselect_window.x = 240      @loseselect_window.y = 160      @loseselect_window.active = true      @loseselect_window.visible = true      @loseselect_window.index = 0       @loseselect_window.x = 240      @loseselect_window.y = 160      end      return true    end    # 如果存在任意 1 个敌人就返回 false    for enemy in $game_troop.enemies      if enemy.exist?        return false      end    end    # 开始结束战斗回合 (胜利)    start_phase5    # 返回 true    return true  end  # 刷新选项  def update_loseselect      @loseselect_window.update  if Input.trigger?(Input::C)    $game_system.se_play($data_system.decision_se)    if @loseselect_window.index == 0    file = File.open(PLACE + "BattleAuto.rxdata", "rb")    read_save_data(file)    file.close    # 还原 BGM、BGS    $game_system.bgm_play($game_system.playing_bgm)    $game_system.bgs_play($game_system.playing_bgs)    # 刷新地图 (执行并行事件)    $game_map.update    # 切换到地图画面    Graphics.transition(20)     @loseselect_window.visible = false     @loseselect_window.active = false     @loseselect_window.visible = false     $scene = Scene_Battle.new   elsif @loseselect_window.index == 1     @loseselect_window.visible = false     @loseselect_window.active = false     @loseselect_window.visible = false     $scene = Scene_Gameover.new   end  end end # 读取自动存档  def read_save_data(file)    # 读取描绘存档文件用的角色数据    characters = Marshal.load(file)    # 读取测量游戏时间用画面计数    Graphics.frame_count = Marshal.load(file)    # 读取各种游戏对像    $game_system        = Marshal.load(file)    $game_switches      = Marshal.load(file)    $game_variables     = Marshal.load(file)    $game_self_switches = Marshal.load(file)    $game_screen        = Marshal.load(file)    $game_actors        = Marshal.load(file)    $game_party         = Marshal.load(file)    $game_troop         = Marshal.load(file)    $game_map           = Marshal.load(file)    $game_player        = Marshal.load(file)    # 魔法编号与保存时有差异的情况下    # (加入编辑器的编辑过的数据)    if $game_system.magic_number != $data_system.magic_number      # 重新装载地图      $game_map.setup($game_map.map_id)      $game_player.center($game_player.x, $game_player.y)    end    # 刷新同伴成员    $game_party.refresh  end  #--------------------------------------------------------------------------  # ● 战斗结束  #     result : 結果 (0:胜利 1:失败 2:逃跑)  #--------------------------------------------------------------------------  def battle_end(result)    # 清除战斗中标志    $game_temp.in_battle = false    # 清除全体同伴的行动    $game_party.clear_actions    # 解除战斗用状态    for actor in $game_party.actors      actor.remove_states_battle    end    # 清除敌人    $game_troop.enemies.clear    # 调用战斗返回调用    if $game_temp.battle_proc != nil      $game_temp.battle_proc.call(result)      $game_temp.battle_proc = nil    end    # 切换到地图画面    $scene = Scene_Map.new  end  #--------------------------------------------------------------------------  # ● 设置战斗事件  #--------------------------------------------------------------------------  def setup_battle_event    # 正在执行战斗事件的情况下    if $game_system.battle_interpreter.running?      return    end    # 搜索全部页的战斗事件    for index in 0...$data_troops[@troop_id].pages.size      # 获取事件页      page = $data_troops[@troop_id].pages[index]      # 事件条件可以参考 c      c = page.condition      # 没有指定任何条件的情况下转到下一页      unless c.turn_valid or c.enemy_valid or             c.actor_valid or c.switch_valid        next      end      # 执行完毕的情况下转到下一页      if $game_temp.battle_event_flags[index]        next      end      # 确认回合条件      if c.turn_valid        n = $game_temp.battle_turn        a = c.turn_a        b = c.turn_b        if (b == 0 and n != a) or           (b > 0 and (n < 1 or n < a or n % b != a % b))          next        end      end      # 确认敌人条件      if c.enemy_valid        enemy = $game_troop.enemies[c.enemy_index]        if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp          next        end      end      # 确认角色条件      if c.actor_valid        actor = $game_actors[c.actor_id]        if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp          next        end      end      # 确认开关条件      if c.switch_valid        if $game_switches[c.switch_id] == false          next        end      end      # 设置事件      $game_system.battle_interpreter.setup(page.list, 0)      # 本页的范围是 [战斗] 或 [回合] 的情况下      if page.span  0      # 减少等待计数      @wait_count -= 1      return    end    # 强制行动的角色存在、    # 并且战斗事件正在执行的情况下    if $game_temp.forcing_battler == nil and       $game_system.battle_interpreter.running?      return    end    # 回合分支    case @phase    when 1  # 自由战斗回合      update_phase1    when 2  # 同伴命令回合      update_phase2    when 3  # 角色命令回合      update_phase3    when 4  # 主回合      update_phase4    when 5  # 战斗结束回合      update_phase5    end  endend复制代码
 
  复制代码             本帖来自P1论坛作者玄月,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=118574  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。  |   
 
		
		
		 
 
 |