Project1

标题: 关于强制行动带有公共事件的技能的bug及其修正方案 [打印本页]

作者: 叶子    时间: 2011-12-15 03:36
标题: 关于强制行动带有公共事件的技能的bug及其修正方案
本帖最后由 叶子 于 2011-12-15 03:43 编辑

战斗事件执行过程中,如果有强制行动的指令,并且这个指令是立即执行带有公共事件的技能或物品的话,会造成技能施放完毕后剩余的战斗事件不被执行的bug

例如在默认工程队伍【幽灵*2】里面设置如下战斗事件:
【条件:回合1  距离:战斗】
强制行动:[1:幽灵],[十字斩],随机,立即执行
显示文章:幽灵十字斩あああああああああ!!!

在特技【57:十字斩】里面设置特技公共事件为001(公共事件是否有内容没有关系)

设置完毕进行战斗测试,第一回合幽灵强制使用十字斩攻击,攻击完毕后不会显示“幽灵十字斩あああああああああ!!!”。也就是说,强制行动下面所有的事件指令都被忽略了

BUG原因为Scene_Battle 4中执行行动附带的公共事件时,会抹除原来的事件指令列表。见Scene_Battle 4第440行:
  1.   #--------------------------------------------------------------------------
  2.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  3.   #--------------------------------------------------------------------------
  4.   def update_phase4_step6
  5.     # 清除强制行动对像的战斗者
  6.     $game_temp.forcing_battler = nil
  7.     # 公共事件 ID 有效的情况下
  8.     if @common_event_id > 0
  9.       # 设置事件
  10.       common_event = $data_common_events[@common_event_id]
  11.       $game_system.battle_interpreter.setup(common_event.list, 0)
  12.     end
  13.     # 移至步骤 1
  14.     @phase4_step = 1
  15.   end
复制代码
其中 battle_interpreter.setup 会将原来正在执行的战斗事件指令列表清空。



修正方案
将 Scene_Battle 4 def update_phase4_step6 (447行)中
  1. $game_system.battle_interpreter.setup(common_event.list, 0)
复制代码
替换成
  1.       if $game_system.battle_interpreter.running?
  2.         $game_system.battle_interpreter.instance_variable_get(:@parameters)[0] = @common_event_id # 设置公共事件ID
  3.         $game_system.battle_interpreter.command_117 # 通过子解释器调用公共事件
  4.       else
  5.         $game_system.battle_interpreter.setup(common_event.list, 0)
  6.       end
复制代码
备注:
· 这个BUG适用于RMXP,至于其他版本的RM,手头上没程序,不清楚,望热心的同学帮忙补充一下
· 修正方案没有提供傻瓜式补丁的原因是各种战斗脚本太多,补丁的话只对应默认RM脚本。只要找到设置行动附带公共事件的地方,这个修正应该适合大部分战斗脚本

作者: 阿尔西斯的马甲    时间: 2011-12-19 10:57
凌空挽尊!
其实事件流也有解决方案。就是设置十字斩技能公共事件中,如果开关打开,那么
显示文章:幽灵十字斩あああああああああ!!!
在战斗事件中设置打开开关后再强制行动




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