Project1

标题: 如何实现事件触发后暂时消失,此后又能批量复原 [打印本页]

作者: 纯属小虫    时间: 2022-4-21 11:46
标题: 如何实现事件触发后暂时消失,此后又能批量复原
本帖最后由 纯属小虫 于 2022-4-22 16:16 编辑

想制作一个像黑魂那样,坐火之后会复原所有怪物的系统。
现有的《暂时消除事件》只要过了地图就会重新刷新
用《独立开关》不便于批量重新打开
用《普通开关》的话,量太大了,而且不大好控制

有没有什么办法,在事件末尾加上  《指令A》  ,让它暂时消失,并储存(记录)在《暂时消失库》里
然后要唤出这些消失库的事件时,执行  《指令B》  就能实现重新打开这一批事件?


篝火刷怪工程文件:
https://rpg.blue/forum.php?mod=attachment&aid=Mzg4MzkyfDYwNWI4NDcyM2ZhM2E0N2VlNDU0YTM5NzY5YjBhNThhfDE3MTYzNDkxMzA%3D&request=yes&_f=.zip

已解决——

作者: asukalin    时间: 2022-4-21 12:22
本帖最后由 asukalin 于 2022-4-21 12:30 编辑

我能想到最简单的做法,还是在篝火处批量关闭《普通开关》



开始项目时预留1到100号开关专门用来标记,就不怕出错。
如果100个都用完了就再预留100个,例如501到600号开关。
作者: 纯属小虫    时间: 2022-4-21 15:00
asukalin 发表于 2022-4-21 12:22
我能想到最简单的做法,还是在篝火处批量关闭《普通开关》

嗯嗯,这个方式是可以实现目的的,不过操作起来还是有些复杂。
比如如果制作了两个相同的敌人,就没法通过直接复制事件的方式编辑,而是复制了还要修改事件的末处理开关以及事件自身开关,会多两个步骤。
此外,还有可能记错或忘记自己的开关标记到哪个号了
作者: 灯笼菜刀王    时间: 2022-4-21 18:12
本帖最后由 灯笼菜刀王 于 2022-4-22 15:14 编辑
  1. class Interpreter
  2.   def command_123
  3.     if @event_id > 0
  4.       a = (@parameters[1] == 0)
  5.       if a and @parameters[0] == "D" and $game_map.events[
  6.       @event_id].instance_variable_get(:@event).name.include?("[刷怪]")
  7.         a = "ref"
  8.       end
  9.       key = [$game_map.map_id, @event_id,@parameters[0]]
  10.       $game_self_switches[key] = a
  11.     end
  12.     $game_map.need_refresh = true
  13.     return true
  14.   end
  15. end

  16. class Game_SelfSwitches
  17.   def [](key)
  18.     return @data[key] ? true : false
  19.   end
  20.   def refresh_enemy
  21.     @data.delete_if{|a,b|b=="ref"}
  22.   end
  23. end
复制代码


塞到main前试试

然后  $game_self_switches.refresh_enemy  用这个命令, 可以把"所有名字里带有 [刷怪] 的事件的独立开关D关闭"

没测试, 应该不会出BUG吧
作者: 纯属小虫    时间: 2022-4-22 12:15
本帖最后由 纯属小虫 于 2022-4-22 16:12 编辑
灯笼菜刀王 发表于 2022-4-21 18:12
塞到main前试试

然后  $game_self_switches.refresh_enemy  用这个命令, 可以把"所有名字里带有 [刷怪]  ...


稍微解读了一下,感觉思路好棒,使用起来应该也很灵活
不过刚才实机测试了一下,$game_self_switches.refresh_enemy 那个命令木有反应
盲猜可能是23行不能用“delete”?
我把工程附件发头上了,还请指教一下






可以的,更新之后能够实现了,不过还有个小缺陷,当篝火跟怪物在同一个图的时候没法即时刷新,得换图

我在 @data.delete_if{|a,b|b=="ref"} 后面加上了 $game_map.need_refresh = true 就可以了~~~
感谢前辈的帮助

修正后的代码(顶楼工程文件已经更新)

作者: 89444640    时间: 2022-4-22 16:54
我觉得明雷加上战斗胜利暂时消除事件,坐篝火用临时变量1、2记录篝火x,y坐标,黑屏播放me,随便跳转一个空白地图再回到刚才的坐标,系统自动就刷新暂时消除的所有事件了,这样更绿色。
作者: 纯属小虫    时间: 2022-4-22 17:25
89444640 发表于 2022-4-22 16:54
我觉得明雷加上战斗胜利暂时消除事件,坐篝火用临时变量1、2记录篝火x,y坐标,黑屏播放me,随便跳转一个空 ...

hhhh~黑屏播放ME很带感~~~

嘛~~不过,做这个的意义,其实是为了换图不会刷新事件,只有坐火才会刷新事件。
应用场景有点像DNF打怪这种副本,在副本内杀掉的怪不会刷新(即使换图也不会),而重新进图之后,各种怪物和资源会重置~~这样一来副本就可以方便重复挑战了~~




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