设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1999|回复: 11
打印 上一主题 下一主题

[已经解决] 如何实现事件触发后暂时消失,此后又能批量复原

[复制链接]

Lv5.捕梦者

梦石
24
星屑
7487
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

跳转到指定楼层
1
发表于 2022-4-21 11:46:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 纯属小虫 于 2022-4-22 16:16 编辑

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

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


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

已解决——

Lv3.寻梦者

梦石
0
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625
2
发表于 2022-4-21 12:22:26 | 只看该作者
本帖最后由 asukalin 于 2022-4-21 12:30 编辑

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



开始项目时预留1到100号开关专门用来标记,就不怕出错。
如果100个都用完了就再预留100个,例如501到600号开关。
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7487
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

3
 楼主| 发表于 2022-4-21 15:00:47 | 只看该作者
asukalin 发表于 2022-4-21 12:22
我能想到最简单的做法,还是在篝火处批量关闭《普通开关》

嗯嗯,这个方式是可以实现目的的,不过操作起来还是有些复杂。
比如如果制作了两个相同的敌人,就没法通过直接复制事件的方式编辑,而是复制了还要修改事件的末处理开关以及事件自身开关,会多两个步骤。
此外,还有可能记错或忘记自己的开关标记到哪个号了
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
4
发表于 2022-4-21 18:12:20 | 只看该作者
本帖最后由 灯笼菜刀王 于 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吧

点评

因为XP的F1里没有 delete_if, 怕ruby1.0没这方法=.=  发表于 2022-4-22 15:11
考虑执行性能,应该用Hash#delete_if  发表于 2022-4-22 14:09

评分

参与人数 1星屑 +100 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7487
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

5
 楼主| 发表于 2022-4-22 12:15:11 | 只看该作者
本帖最后由 纯属小虫 于 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 就可以了~~~
感谢前辈的帮助

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

点评

俄, 应该是 delete(i[0]) ,不过加菲兄说可以用delete_if, 那用这个效率点, 更新了下,试试吧  发表于 2022-4-22 15:13

评分

参与人数 1星屑 +20 收起 理由
RyanBern + 20 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
6
发表于 2022-4-22 16:54:41 | 只看该作者
我觉得明雷加上战斗胜利暂时消除事件,坐篝火用临时变量1、2记录篝火x,y坐标,黑屏播放me,随便跳转一个空白地图再回到刚才的坐标,系统自动就刷新暂时消除的所有事件了,这样更绿色。

点评

妙啊  发表于 2022-4-22 17:19
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7487
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

7
 楼主| 发表于 2022-4-22 17:25:24 | 只看该作者
89444640 发表于 2022-4-22 16:54
我觉得明雷加上战斗胜利暂时消除事件,坐篝火用临时变量1、2记录篝火x,y坐标,黑屏播放me,随便跳转一个空 ...

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

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

点评

哦明白了,这样可以避免换图来回自动刷新造成麻烦,也是个不错的方法  发表于 2022-4-23 05:32
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 20:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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