Project1

标题: 如何用脚本调用“显示选择项”事件指令? [打印本页]

作者: cimmy210    时间: 2015-2-21 06:03
标题: 如何用脚本调用“显示选择项”事件指令?
我想用脚本调用“显示选择项”事件指令:




查到 Interpreter 3 里有定义:

def command_102
    # 文章已经设置过 message_text 的情况下
    if $game_temp.message_text != nil
      # 结束
      return false
    end
    # 设置信息结束后待机和返回调用标志
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    # 设置选择项
    $game_temp.message_text = ""
    $game_temp.choice_start = 0
    setup_choices(@parameters)
    # 继续
    return true
end

请问这个具体怎么用?怎么给参数?能否给个具体调用的实例?
作者: cimmy210    时间: 2015-2-21 06:06
为什么我想在脚本里调用事件指令呢?一个重要原因是公共事件无法备份出来,辛辛苦苦做的事件,一个误操作就可能没了...............
作者: cimmy210    时间: 2015-2-21 06:29
另外,我用

$game_temp.message_text = ""
$game_temp.message_text = "Game Text"
#后续脚本...

成功调用了“显示文章”事件指令,但每次显示时, "Game Text" 都会向右移位一点,而且不等我按键关闭显示框,后续脚本就会立即接着运行,这是怎么回事??
作者: cimmy210    时间: 2015-2-21 07:14
又试过用这种方法显示文章:

    @list[0].parameters[0] = "Game Text"
    command_101

第一次调用时成功,第二次则报错:

["Z", #<NoMethodError: undefined method '+' for nil:NilClass>]

为什么?
作者: RyanBern    时间: 2015-2-21 10:39
上一帖我已经说明,显示选择项的调用比较麻烦。
显示文章的调用方法可以是这样:
RUBY 代码复制
  1. $game_temp.message_text = "Game Text"
  2. @message_waiting = true
  3. $game_temp.message_proc = Proc.new { \
  4. @message_waiting = false }


作者: taroxd    时间: 2015-2-21 10:57
本帖最后由 taroxd 于 2015-2-21 11:05 编辑
RyanBern 发表于 2015-2-21 10:39
上一帖我已经说明,显示选择项的调用比较麻烦。
显示文章的调用方法可以是这样:
$game_temp.message_text  ...


显示选项可以参考这个姿势(确实麻烦):
https://rpg.blue/thread-374907-1-1.html

那段脚本都是字符串处理,可能看得比较累。在 VA 中事件转译器的 DEBUG 常量设为 true 可以在控制台中看到对应的脚本(缩进很乱,但比直接看脚本要直观)
显示选项的处理上,XP 和 VA 相差应该不多的
作者: cimmy210    时间: 2015-2-21 11:12
RyanBern 发表于 2015-2-21 10:39
上一帖我已经说明,显示选择项的调用比较麻烦。
显示文章的调用方法可以是这样:
$game_temp.message_text  ...

一楼的脚本里就是这样写的,但每次显示 "Game Text" 都会向右移动一段距离,而且不等我按键关闭文章框,后续的脚本就会运行,这和在事件编辑器里弄的效果大不一样啊,怎么办?
作者: cimmy210    时间: 2015-2-21 11:17
taroxd 发表于 2015-2-21 10:57
显示选项可以参考这个姿势(确实麻烦):
https://rpg.blue/thread-374907-1-1.html

此脚本能把数据库里的公共事件都转译成纯脚本?RPG Maker XP 能用吗?
作者: cimmy210    时间: 2015-2-21 11:31
taroxd 发表于 2015-2-21 10:57
显示选项可以参考这个姿势(确实麻烦):
https://rpg.blue/thread-374907-1-1.html

.rvproj2 文件,RMXP 无法打开?看不到里面的东西啊~
作者: RyanBern    时间: 2015-2-21 11:34
cimmy210 发表于 2015-2-21 11:12
一楼的脚本里就是这样写的,但每次显示 "Game Text" 都会向右移动一段距离,而且不等我按键关闭文章框, ...


我这里没有出什么问题。
用脚本处理事件的时候,最好一条脚本只处理一个事件,后续脚本另外开一条脚本指令。
作者: cimmy210    时间: 2015-2-21 11:46
RyanBern 发表于 2015-2-21 11:34
我这里没有出什么问题。
用脚本处理事件的时候,最好一条脚本只处理一个事件,后续脚本另外开一条脚本指 ...

我不是在事件编辑器里插入脚本,是在脚本编辑器里,定义一个函数,里面写了这样的语句,然后每次调用这个函数,显示出来的“Game Text”都会右移一点,而且不等我按键,这些语句后面的语句就接着运行了。
作者: taroxd    时间: 2015-2-21 11:52
cimmy210 发表于 2015-2-21 11:46
我不是在事件编辑器里插入脚本,是在脚本编辑器里,定义一个函数,里面写了这样的语句,然后每次调用这个 ...

这里又不是事件解释器。“等待”的功能也需要你自己实现。
作者: RyanBern    时间: 2015-2-21 11:56
cimmy210 发表于 2015-2-21 11:46
我不是在事件编辑器里插入脚本,是在脚本编辑器里,定义一个函数,里面写了这样的语句,然后每次调用这个 ...



定义之后你是在何处调用的?是在事件编辑器里面还是其他位置?再详细说明一下。
我这里并未出现每次往右移动的现象。
作者: cimmy210    时间: 2015-2-21 11:58
本帖最后由 cimmy210 于 2015-2-21 12:03 编辑
RyanBern 发表于 2015-2-21 11:56
定义之后你是在何处调用的?是在事件编辑器里面还是其他位置?再详细说明一下。
我这里并未出现每次往 ...


定义之后在公共事件里反复调用这个函数。

事件截图:



只有一句话。

这个事件会多次反复调用。
作者: cimmy210    时间: 2015-2-21 11:59
taroxd 发表于 2015-2-21 11:52
这里又不是事件解释器。“等待”的功能也需要你自己实现。

    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }

这个就是等待吧,但问题是后面的语句没有等待,立即继续执行了..........
作者: RyanBern    时间: 2015-2-21 12:13
cimmy210 发表于 2015-2-21 11:58
定义之后在公共事件里反复调用这个函数。

事件截图:

我的公共事件定义如下:

在地图事件中调用公共事件如下:

暂时没发现什么问题。
作者: cimmy210    时间: 2015-2-21 12:18
RyanBern 发表于 2015-2-21 12:13
我的公共事件定义如下:

在地图事件中调用公共事件如下:

我的这个公共事件关联了一个物品,在游戏中用热键反复激活这个物品,就会反复调用此公共事件。
作者: cimmy210    时间: 2015-2-21 12:22
RyanBern 发表于 2015-2-21 11:34
我这里没有出什么问题。
用脚本处理事件的时候,最好一条脚本只处理一个事件,后续脚本另外开一条脚本指 ...

这样写效果也一样。

将这个公共事件关联一个物品,在游戏中用热键反复激活这个物品,结果每次"Game Text"都会向右移
作者: gonglinyuan    时间: 2015-2-21 15:06
事件使用脚本来实现的

相关事件细节在脚本的 Interpreter 里面
作者: 布冷.逆天    时间: 2015-2-21 17:31
我也想学,不过我的是增减exp,
class Xin_Shijian     
$game_variables[1] = "text"#设置文章
def command_102
    # 文章已经设置过 message_text 的情况下
    if $game_temp.message_text != nil
      # 结束
      return false
    end
    # 设置信息结束后待机和返回调用标志
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    # 设置选择项
    $game_temp.message_text = ""
    $game_temp.choice_start = 0
    setup_choices(@parameters)
    # 继续
    return true
end
$data_common_events[1]=Xin_Shijian.new
我的QQ:1417912437,我们可以讨论
作者: 573932914    时间: 2015-2-24 09:41
还可以用@command_window = Window_Command.new(160, [s1, s2, s3, ......sn])然后判断按下每个键的情况




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