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

Project1

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

[已经解决] 脚本里如何调用事件和事件命令

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
跳转到指定楼层
1
发表于 2015-2-20 21:33:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x

我想在脚本里调用事件,这样写:

module TestModule
  def self.TestFunc
    Mess_Text.write("My Test Success !!!")
    $game_temp.reserve_common_event(1)
  end
end

结果执行时报错:

["Z", #<NoMethodError: undefined method 'reserve_common_event' for # <Game_Temp:0x4f9b0d8>>]

怎么办?

我看了这两个贴:

https://rpg.blue/forum.php?mod=viewthread&tid=369340
https://rpg.blue/thread-245258-1-1.html

都说只要一句 $game_temp.reserve_common_event(事件id) 就行了,但实际不行?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
2
 楼主| 发表于 2015-2-20 21:39:40 | 只看该作者
另外,公共事件编辑器里提供很多“事件指令”,如“显示文章”、“显示选择项”等:



我能用脚本调用这些事件指令吗?如果能,怎么调用?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
3
 楼主| 发表于 2015-2-20 21:52:03 | 只看该作者
改写成这样:

class Interpreter
  def TestFunc()
    Mess_Text.write("My Test Success !!!")
    $game_temp.reserve_common_event(1)
  end
end

也不行,报错:


["Z", #<NoMethodError: undefined method 'reserve_common_event' for # <Game_Temp:0x4f9cfc8>>]

怎么办?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
4
 楼主| 发表于 2015-2-20 21:54:44 | 只看该作者
而且游戏里一报错就没完没了弹框,只能用任务管理器强制结束游戏,郁闷.............
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
5
 楼主| 发表于 2015-2-20 22:05:14 | 只看该作者
唔,用 $game_temp.common_event_id = 事件ID 就行了.....

但是,编辑公共事件用的“事件指令”,能用脚本调用吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
6
 楼主| 发表于 2015-2-21 04:54:19 | 只看该作者
我看到这个贴子,说似乎可以这样:

http://forums.rpgmakerweb.com/in ... uivalent-of-events/

但缺乏例子啊,还是不懂怎么弄..............
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
7
 楼主| 发表于 2015-2-21 09:29:02 | 只看该作者
被扣分了............但无人回答我的问题??
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
8
 楼主| 发表于 2015-2-21 09:35:24 | 只看该作者
这个贴我也看了:
https://rpg.blue/thread-368281-1-1.html

还是弄不清怎么在脚本里调用事件指令,需要实例啊实例~~~~~~~~
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

9
发表于 2015-2-21 10:38:28 | 只看该作者
本帖最后由 RyanBern 于 2015-2-21 10:44 编辑

LZ从昨晚到现在发了不少帖,问题我稍后回答,LZ是新人,先给LZ纠正一下发帖规范。
在提问区里面,对连帖的处理虽然不像在水区那样严厉,但是连帖也是不好的。所以发帖的时候要尽量避免连帖,否则版主可能会前来扣分。
如果你发帖之后,想要对自己的帖子进行补充,不要连帖。你刚发的帖子下面有一个【编辑】按钮,你可以编辑你自己发过的帖子,在里面补充你想要的内容。不要担心帖子沉底问题,如果你问题描述清楚是有人过来回答的。

然后我说一下LZ提出的问题。用脚本调用事件其实不是非常的简单,因为RMXP的事件都是封包好的,如果用脚本写往往比较困难。调用公共事件的方法,可以直接写$game_temp.common_event_id = id,也可以仿照Interpreter3里面的def command_117去调用。二者有微小的差别(差别在于二者公共事件的深度不同)。
RUBY 代码复制
  1. ev = $data_common_events[1]
  2. if ev != nil
  3.   @child_interpreter = Interpreter.new(@depth + 1)
  4.   @child_interpreter.setup(ev.list, @event_id)
  5. end

至于调用事件指令,其实这只是对部分事件指令而言的,像调用“显示选择项”这种事件指令,实现起来是非常麻烦的。LZ提供的那个网站上面的帖子,其实是“Script call equivalent of events”,翻译过来就是“事件指令的脚本等价调用”。那个帖子说的不是用脚本直接调用事件,而是说某些事件指令的内容,如果换成脚本写法应该怎么写。例如,事件指令【开关操作】,换成脚本就是$game_switches[n] = true/false。但是比较复杂的指令,如“显示选择项”,用脚本写的话就会非常麻烦,因为你要考虑选择项的文字,每个选择项的分支,取消的场合,还有缩进(indent)问题,这些东西用事件脚本是写不下的。
如果实现事件和脚本的完全调用,你可以自己用脚本写事件的数据结构,然后吧这个数据结构放到@map_interpreter里面跑,其原理就是你用脚本生成了一个真正的事件一样,而不是“脚本的等价写法”,不过,搞清事件的数据结构本身就是个很麻烦的事情,而且把RMXP事件编辑器的工作转移到脚本上也会十分不便。

点评

其实是一个意思了,处于@child_interpreter中的公共事件会立即执行,这也相当于深度+1,我一开始说的不太详细  发表于 2015-2-21 11:37
差别在于公共事件的执行时机(立即执行/等事件处理结束后执行)  发表于 2015-2-21 11:02
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
10
 楼主| 发表于 2015-2-21 11:06:17 | 只看该作者
RyanBern 发表于 2015-2-21 10:38
LZ从昨晚到现在发了不少帖,问题我稍后回答,LZ是新人,先给LZ纠正一下发帖规范。
在提问区里面,对连帖的 ...

我想用脚本来调用事件指令的原因是,不能把单独一个公共事件导入/导出游戏(做补丁/MOD需要),这里有详述:

https://rpg.blue/thread-376786-1-1.html

有没有解决办法?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 12:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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