じ☆ve冰风 发表于 2024-4-20 02:13:21

默认战斗中调用公共事件

范例在 2 楼

仅对默认战斗有效。但是思路是可以拓展到其他的战斗里。我以为 1 个小时就能写完的……结果搞了快 3 个小时。。。

1 楼是行动前后调用公共事件

战斗前后调用在 7 楼

回合开始时调用公共事件在 8 楼

至此,给出了 5 个常见的需要调用公共事件的 “时间点”,可以对默认战斗进行方便又强力的改动。

修改在 Scene_Battle 4 的 71 行的 update_phase4 方法:

RUBY 代码
class Scene_Battle
attr_reader :active_battler
attr_reader :target_battlers
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合)
#--------------------------------------------------------------------------
def update_phase4   
    case@phase4_step
    when1      
      update_phase4_step1
      if@phase4_step == 2 && @active_battler.exist?
      # 显示连续伤害时 执行 1 号公共事件
      $game_system.battle_interpreter.setup($data_common_events.list, 0)
      end
    when2
      update_phase4_step2
    when3
      update_phase4_step3
    when4
      update_phase4_step4
    when5
      update_phase4_step5
      # 显示伤害数字时 执行 2 号公共事件
      $game_system.battle_interpreter.setup($data_common_events.list, 0)
    when6
      update_phase4_step6
    end   
end
end


1. 选取的 2 个时机,都是显示伤害数字的时候,这样的话就可以顺利播放动画
2. 要保留原来显示的伤害数字,得在公共事件里添加等待命令让原来的伤害数字先显示完毕,再显示新的伤害数字(比如“伤害处理”)。否则新的伤害数字会立即覆盖掉正在显示的伤害数字。要判断是否有伤害数字待显示,用 battler.damage_pop
3. 第 1 处的公共事件,在角色行动前。
    3.1 参见Scene_Battle 4 的 make_action_orders 中把所有的单位都加入了行动列表,所以每个行动者都会正常执行 phase4_step1 并进入 phase4_step2。
    3.2 由于添加了 @active_battler.exist? 的判断,行动者被隐藏,或者死亡,第 1 处的公共事件就不会发动。不存在的此行动者在 phase4_step2 一开始就会立即结束自己的回合。
    3.3 @hidden属性 = true 的角色被隐藏(比如中途出现的敌人),但是也会执行 phase4_step1 ,所以同样会受到“持续伤害”和“状态移除”的效果。
4. 第 2 处的公共事件,在角色行动后。再然后才是物品、技能的公共事件,在 phase4_step6 结束后执行
5. 使用 $scene.active_battler 和 $scene.target_battlers 获取行动者和目标对象数组,但是注意第 1 处是没有 $scene.target_battlers 的。
6. 尚不清楚与战斗事件各条件的先后顺序,待测试。适当设置事件触发条件应该无冲突都能触发。


需要播放动画、等待、显示文字的时候,公共事件比Ruby代码好使。在这里添加一些判断也可以制造特殊的战斗效果。

第 1 处行动前的公共事件的可能用途比较容易想到,比如角色每次行动时会回复HP/SP。此外,由于这里尚未执行行动,可以修改 @active_battler.current_action 使得接下来的行动方式、目标发生改变。

第 2 处行动后的公共事件,看上去似乎可以用物品、技能的公共事件代替。实际上并不是这样。这里举 2 个例子:
1. 在第 2 处行动后的公共事件的最前面添加事件脚本,可以消除原来的伤害数字,假设消除的是第一个目标身上的伤害数字:
RUBY 代码
@battler = $scene.target_battlers
@battler.damage_pop = false
# 猜猜这行注释干什么用?
然后紧接着一个脚本:
RUBY 代码
@battler.damage = '无可奉告'
@battler.damage_pop = true
用来表示 BOSS 的深不可测
2. 不仅可以消除伤害数字,在第 2 处可以任意修改技能、物品的后续效果,比如:
RUBY 代码
$scene.target_battlers.eachdo |battler|
if battler.hp == 0 && battler.state?(10)
battler.hp = 1
end
end
这样就能使附加上 10 号状态的角色 hp 至少为 1,制造出“薄葬”的效果。
如果在物品、技能附带公共事件里添加这段代码,是没有“薄葬”效果的。原因是在 phase4_step5 结束后,尚未进入 phase4_step6 执行物品、技能公共事件就已经结算了hp = 0的死亡效果。
同样,在这里也可以轻易的给出击杀者,或者制造魔法盾等等丰富多彩的技能

关于这些想法,最初是从 sailcat 的脚本里得到启发。原帖见这里:https://rpg.blue/forum.php?mod=viewthread&tid=31747
             本帖来自P1论坛作者jiushiainilip19,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=399295若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 默认战斗中调用公共事件