为避免大家在每个敌群事件中逐个插入公共事件的繁琐操作,这里分享两个RMXP战斗系统的实用脚本技巧,分别对应战斗正式开始前与战斗结算结束后两个节点,自动执行指定公共事件
依旧仅需修改原生代码即可实现
战斗开始:
Scene_Battle 1 46~52行
RUBY 代码 - # 执行过渡
- if$data_system.battle_transition == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $data_system.battle_transition)
- end
复制代码
下面插入
RUBY 代码 - # ★ 战斗开场执行公共事件
- common_event_id = 1# 可以改成你想要执行的公共事件 ID
- $game_system.battle_interpreter.setup($data_common_events[common_event_id].list, 0)
- loopdo
- @message_window.update
- $game_system.battle_interpreter.update
- Graphics.update
- Input.update
- breakunless$game_system.battle_interpreter.running?
- end
- @status_window.refresh# 执行完自动刷新状态栏
复制代码
公共事件中可以输入的指令:
开关变量、更改状态、增减HP/SP、增减物品/金钱、播放音效/战斗动画、等待
禁止输入:
地图专属指令(移动角色、设置移动路线、场所移动、更改地图设置等等),此类指令在战斗场景无对应执行对象,会失效甚至报错
战斗结束:
这个有些麻烦,因为需要考虑胜利、失败、以及逃跑的场合,因此这3处都需要加
Scene_Battle 1 114~120行
RUBY 代码 - def judge
- # 全灭判定是真、并且同伴人数为 0 的情况下
- if$game_party.all_dead? or$game_party.actors.size == 0
- # 允许失败的情况下
- if$game_temp.battle_can_lose
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
复制代码
依旧是Scene_Battle 1 131~136行
RUBY 代码 - # 如果存在任意 1 个敌人就返回 false
- for enemy in$game_troop.enemies
- if enemy.exist?
- returnfalse
- end
- end
复制代码
Scene_Battle 2 114~115行
RUBY 代码
的下面,这3处全部要加
RUBY 代码 - $game_temp.common_event_id = 2
复制代码
由于执行时机在战斗结束后已经返回地图了,所以应该没什么限制了
本帖来自P1论坛作者无忧谷主幻,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=498997 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |