加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 guoxiaomi 于 2017-3-12 21:38 编辑
范例在 2 楼
仅对默认战斗有效。但是思路是可以拓展到其他的战斗里。我以为 1 个小时就能写完的……结果搞了快 3 个小时。。。
1 楼是行动前后调用公共事件
战斗前后调用在 7 楼
回合开始时调用公共事件在 8 楼
至此,给出了 5 个常见的需要调用公共事件的 “时间点”,可以对默认战斗进行方便又强力的改动。
修改在 Scene_Battle 4 的 71 行的 update_phase4 方法:
class Scene_Battle attr_reader :active_battler attr_reader :target_battlers #-------------------------------------------------------------------------- # ● 刷新画面 (主回合) #-------------------------------------------------------------------------- def update_phase4 case @phase4_step when 1 update_phase4_step1 if @phase4_step == 2 && @active_battler.exist? # 显示连续伤害时 执行 1 号公共事件 $game_system.battle_interpreter.setup($data_common_events[1].list, 0) end when 2 update_phase4_step2 when 3 update_phase4_step3 when 4 update_phase4_step4 when 5 update_phase4_step5 # 显示伤害数字时 执行 2 号公共事件 $game_system.battle_interpreter.setup($data_common_events[2].list, 0) when 6 update_phase4_step6 end end end
class Scene_Battle
attr_reader :active_battler
attr_reader :target_battlers
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合)
#--------------------------------------------------------------------------
def update_phase4
case @phase4_step
when 1
update_phase4_step1
if @phase4_step == 2 && @active_battler.exist?
# 显示连续伤害时 执行 1 号公共事件
$game_system.battle_interpreter.setup($data_common_events[1].list, 0)
end
when 2
update_phase4_step2
when 3
update_phase4_step3
when 4
update_phase4_step4
when 5
update_phase4_step5
# 显示伤害数字时 执行 2 号公共事件
$game_system.battle_interpreter.setup($data_common_events[2].list, 0)
when 6
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 处行动后的公共事件的最前面添加事件脚本,可以消除原来的伤害数字,假设消除的是第一个目标身上的伤害数字:
@battler = $scene.target_battlers[0] @battler.damage_pop = false # 猜猜这行注释干什么用?
@battler = $scene.target_battlers[0]
@battler.damage_pop = false
# 猜猜这行注释干什么用?
然后紧接着一个脚本:
@battler.damage = '无可奉告' @battler.damage_pop = true
@battler.damage = '无可奉告'
@battler.damage_pop = true
用来表示 BOSS 的深不可测
2. 不仅可以消除伤害数字,在第 2 处可以任意修改技能、物品的后续效果,比如:
$scene.target_battlers.each do |battler| if battler.hp == 0 && battler.state?(10) battler.hp = 1 end end
$scene.target_battlers.each do |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 |