查看: 100|回复: 0

[转载发布] 默认战斗中调用公共事件

[复制链接]
  • TA的每日心情
    开心
    前天 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月九日(秋) | 显示全部楼层 |阅读模式
    范例在 2 楼

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

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

    战斗前后调用在 7 楼

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


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

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

    RUBY 代码
    1. class Scene_Battle  
    2.   attr_reader :active_battler
    3.   attr_reader :target_battlers
    4.   #--------------------------------------------------------------------------
    5.   # ● 刷新画面 (主回合)
    6.   #--------------------------------------------------------------------------
    7.   def update_phase4   
    8.     case@phase4_step
    9.     when1      
    10.       update_phase4_step1
    11.       if@phase4_step == 2 && @active_battler.exist?
    12.         # 显示连续伤害时 执行 1 号公共事件
    13.         $game_system.battle_interpreter.setup($data_common_events[1].list, 0)
    14.       end
    15.     when2
    16.       update_phase4_step2
    17.     when3
    18.       update_phase4_step3
    19.     when4
    20.       update_phase4_step4
    21.     when5
    22.       update_phase4_step5
    23.       # 显示伤害数字时 执行 2 号公共事件
    24.       $game_system.battle_interpreter.setup($data_common_events[2].list, 0)
    25.     when6
    26.       update_phase4_step6
    27.     end   
    28.   end  
    29. 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 代码
    1. @battler = $scene.target_battlers[0]
    2. @battler.damage_pop = false
    3. # 猜猜这行注释干什么用?
    复制代码
    然后紧接着一个脚本:
    RUBY 代码
    1. @battler.damage = '无可奉告'
    2. @battler.damage_pop = true
    复制代码
    用来表示 BOSS 的深不可测
    2. 不仅可以消除伤害数字,在第 2 处可以任意修改技能、物品的后续效果,比如:
    RUBY 代码
    1. $scene.target_battlers.eachdo |battler|
    2. if battler.hp == 0 && battler.state?(10)
    3.   battler.hp = 1
    4. end
    5. 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在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-12 06:35 , Processed in 0.047874 second(s), 41 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表