Project1

标题: 有没有可能拦截地图事件,并在此前线执行一段代码? [打印本页]

作者: 寒凌天    时间: 2019-10-13 18:13
标题: 有没有可能拦截地图事件,并在此前线执行一段代码?
本帖最后由 寒凌天 于 2019-10-14 07:46 编辑

比如001地图的ID005事件,我知道了001和005这两个关键变量,在脚本里某处加个识别代码,判断有人运行这个位置的事件后,在此之前先执行一段代码?

就是说我想做个判定,在有人执行了某地图某特定位置的地图事件后,我能获知这个信息,并在他执行地图信息之前,先执行我自己的一段代码

可以实现吗?不过不能修改地图文件,只能在脚本或者公共事件里修改。

我自己开发了一款MOD,但是要改地图上的一些文件,不过随着游戏版本的更新,每次更新我都要再改一遍,因为改的地方多,所以特别麻烦。

假如我能在不改地图文件的情况下,识别玩家所选的地图事件是不是我MOD涉及的事件,我就能提前执行代码,实现不该地图完成效果。
作者: ppspssss    时间: 2019-10-13 19:11
本帖最后由 ppspssss 于 2019-10-13 21:48 编辑

看不懂你說什么,表达不清楚, 建議去整理好再問 ,
作者: 寒凌天    时间: 2019-10-14 07:43
ppspssss 发表于 2019-10-13 19:11
看不懂你說什么,表达不清楚, 建議去整理好再問 ,

谢谢建议,我已经做了补充说明。
我是说我想做个判定,在有人执行了某地图某特定位置的地图事件后,我能获知这个信息,并在他执行地图信息之前,先执行我自己的一段代码
作者: 张咚咚    时间: 2019-10-14 09:01
本帖最后由 张咚咚 于 2019-10-14 15:46 编辑
  1. $map_event_proc = {
  2.   :map => {
  3.     1 => {
  4.       1 => proc{ p '1号地图1号事件执行前' },
  5.       2 => proc{ p '1号地图2号事件执行前' },
  6.     },
  7.   },
  8.   :common_event => {
  9.     1 => proc{ p '1号公共事件执行前' },
  10.     2 => proc{ p '2号公共事件执行前' },
  11.   },
  12. }
  13. class Interpreter
  14.   alias qqeat_start_before_interpreter_setup setup
  15.   def setup(list, event_id)
  16.     if list.is_a?(RPG::CommonEvent)
  17.       common_event_id = list.id
  18.       list = list.list
  19.     end
  20.     qqeat_start_before_interpreter_setup(list, event_id)
  21.     if common_event_id
  22.       proc = $map_event_proc[:common_event][common_event_id]
  23.       proc.call if proc
  24.     else
  25.       proc = $map_event_proc[:map][@map_id]
  26.       proc[@event_id].call if proc and proc[@event_id]
  27.     end
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 公共事件
  31.   #--------------------------------------------------------------------------
  32.   def command_117
  33.     # 获取公共事件
  34.     common_event = $data_common_events[@parameters[0]]
  35.     # 公共事件有效的情况下
  36.     if common_event != nil
  37.       # 生成子解释器
  38.       @child_interpreter = Interpreter.new(@depth + 1)
  39.       @child_interpreter.setup(common_event, @event_id)
  40.     end
  41.     # 继续
  42.     return true
  43.   end
  44. end
复制代码

作者: 寒凌天    时间: 2019-10-14 09:52
张咚咚 发表于 2019-10-14 09:01

哇!厉害啊,不愧是大神!能不能再请教个问题……
想要运行的地图事件因为“未满足出现条件”而未显示时,能不能让它出来,并执行上面你说的这个代码?
我说的出来,意思是类似给地图事件上添加新的没有出现条件的事件页……
前提还是不能修改地图文件……
作者: 寒凌天    时间: 2019-10-14 11:56
本帖最后由 寒凌天 于 2019-10-14 12:38 编辑
张咚咚 发表于 2019-10-14 09:01


不是……每个地图事件不是都可以设置出现条件吗?比如某开关为ON时出现,或者变量为多少时出现。
我想不管它满足不满足事件的出现条件,都可以强制出现,并执行我的代码,大神有办法么?


还有,公共事件能不能也拦截,并提前执行某代码?




例外,你之前告诉我的代码没有运行成功呢,请问是哪里出的问题?

QQ图片20191014123711.png (12.89 KB, 下载次数: 12)

QQ图片20191014123711.png

2.png (4.33 KB, 下载次数: 18)

2.png

作者: fux2    时间: 2019-10-14 13:03
寒凌天 发表于 2019-10-14 11:56
不是……每个地图事件不是都可以设置出现条件吗?比如某开关为ON时出现,或者变量为多少时出现。
我想不 ...

脚本放在最下方main以上,不知道你放在什么地方的,至少不能在Interpreter上方
作者: 寒凌天    时间: 2019-10-14 13:41
本帖最后由 寒凌天 于 2019-10-14 13:43 编辑
fux2 发表于 2019-10-14 13:03
脚本放在最下方main以上,不知道你放在什么地方的,至少不能在Interpreter上方 ...


非常感谢,我按照你的指点把代码移动到了Main的上方、Interpreter的下方,(以前是在最上面)。

现在可以打开程序主页面了(以前打不开),但是在点完读取存档后,还是会报错,错误提示就是中间的那个提示,为了节省空间我P成了一个图

请教一下问题出在哪里?

另外,我把该代码和Interpreter同名类整合到了一起,但是还是会报错,报错提示是一模一样的……

QQ图片20191014133602.png (35.69 KB, 下载次数: 15)

QQ图片20191014133602.png





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