Minecraft(我的世界)中文论坛

标题: [Wiki][多人插件] BetonQuest-具体任务Wiki翻译 第三章:快速入门教程-对话前的基础

作者: Smokey_Days    时间: 2017-2-8 13:08
标题: [Wiki][多人插件] BetonQuest-具体任务Wiki翻译 第三章:快速入门教程-对话前的基础
本帖最后由 Smokey_Days 于 2017-4-22 14:15 编辑

第一步:了解怎样设置对话

...尽管有无数的事物需要了解,但是急切的人们总想要先看看,这些事物有何利处...

在你安装插件后,你可能想要做的第一件事,就是看看这个插件的效果。如果你想这么做,那么阅读第一步来预览最终效果。如果你不想这么做,那么还是请阅读第一步,因为这样你能大概了解插件运作机制并且当你配置完插件后开始使用时你才会知道怎么使用。
如果你想使用背包GUI进行对话,那么请打开config.yml并将default_conversation_IO更改为chest,之后保存配置并在服务器上输入/q reload命令。

当你完成上述步骤后,登陆服务器,在任何位置放一个(硬化)粘土块,在它的上方放一个头(比如苦力怕的头),并在(硬化)粘土块的一侧放置一个告示牌。在告示牌的第一行和第二行写上:

  1. [NPC]
  2. Innkeeper
复制代码

完成。现在右键点击NPC的头,如果没出错,那么就应该开始对话了。如果没有,请检查您是否正确放置NPC。
接下来就享受吧!问他要一些任务,他会让你去砍树。你可以键入/journal以获取日记并查看新条目。现在,不要试图作弊,因为如果你放下木块然后挖掉,系统就不会计数。你必须要找到树,砍倒它。如果你在创造模式并且只是为了测试,那么给自己16块原木。现在你可以回到Innkeeper那儿,把木头给他,然后你会收到奖励。

体验了这个插件的神奇,那就学完这个快速入门教程,接着你就可以制作出像它一样的对话!


事件&条件

现在你已经体验了一个(看起来)简单的任务,那么就花时间开始学习如何写出类似的任务吧!让我们从事件开始。我们不会直接开始写对话,因为事件和条件是对话的基础,所以你需要先了解他们。您可以在“参考”一章中了解事件的相关信息。赶快阅读本教程,这样你就能尽快写任务!



事件



让我们在默认包中打开events.yml文件。在末尾添加:

  1. foo: message Hellow world!
复制代码
*注意,此处应当使用英文半角冒号而非中文冒号!

这是一条事件的范例代码。 BetonQuest将通过这条代码来确定事件类型和事件内容。 foo 是名字,message 是类型,Hello world! 则定义了将显示怎样的消息。在这种情况下,如果你运行事件 foo,它就会发送给你一条内容为Hello world!的信息。现在保存文件,输入
  1. /q reload
复制代码

命令重载插件,重载后输入
  1. /q e <玩家名> foo
复制代码

命令,那么系统将为该玩家运行事件。(qquest的别称,eevent的别称,<玩家名>中应当填写你的游戏名,foo是我们刚刚创建的事件的名称)此后该玩家的聊天框将显示出一条内容为 Hellow world! 的白色消息。

让我们再制作一个稍微复杂点的事件。传送似乎是个很复杂的事件。正如你可以在事件列表中看到的,它需要一个参数,那就是坐标。按F3并查看您当前的坐标(它显示在左边,由三个数字表示,分别有xyz)。现在在events.yml中添加另一行:

  1. bar: teleport 100;200;300;world
复制代码

并用此前F3中得到的x替换100y替换200z替换300。世界需要被你当前的世界名字取代。保存文件,重新加载插件并使用之前提到的命令格式运行此事件。它应该传送你之前指定的位置。

恭喜,您刚刚创建了你的第一个事件。如果想继续尝试其他类型的事件,您可以在事件列表一章中找到它们。一旦您大概掌握了,我们就可以开始学习“条件”了。



条件


打开conditions.yml文件并在末尾添加这样一行字:

  1. foo: location 100;200;300;world;5
复制代码

你也看到了,我使用相同的事件和条件名称。它们并没有任何直接联系,条件名称和事件名称是分开储存和引用的,因此您可以把他们命名为相同的名字,这没有任何问题。现在让我们看看指令字符串。正如你所猜测的,location,坐标,是条件的类型之一。这意味着我们将检查玩家是否在该位置附近(您最好把位置更改为您现在所处在的位置,这样您就不必传送过去测试辣~)。注意,在位置参数的结尾有一个额外的参数—— 5 ,这个数字意味着模糊度,意思就是你不必完全跑到那个位置,你只要到达指定坐标附近就达成条件了。这里的设置意味着你只要在目标点周围五格内,你就已达成这个条件。好的,保存文件并重新加载插件。

现在来到您在condition文件中指定的坐标,站在这个指定坐标上。 键入
  1. /q c <玩家名> foo
复制代码

命令(ccondition的别称)。那么你应该可以看到“检查条件吧啦吧啦吧啦: true”...嗯别管前面了,我们应当注意最后一个词,true(真)。这意味着你已经满足你之前设定的条件:你站在目标坐标的五格之内。现在移动2格,并再次输入这条命令。你应该仍然满足条件;移动四格,再试试,那么它就应该显示false(假)。你现在在这个5块半径之外。明白了么?完美。

现在我将向你展示这些条件的最简单的使用。再次打开events.yml文件,并在foo这一行代码的末尾添加
  1. conditions:foo
复制代码

顺便说一句,将原来的foo事件重命名为baz,这样你就不容易混淆它们(不是因为插件BUG,是为了防止混淆!)。现在你应该有类似这样的代码:

  1. baz: message Hello world! conditions:foo
复制代码

现在,只有当你满足foo的时候,你才能运行事件baz。重新加载插件,走出条件范围,输入指令运行baz,但是并没有卵用——什么事情都没有发生。那是因为你不满足条件foo。再次进入条件范围,尝试再次运行该事件。它应正常地显示Hello world!信息。

这是非常有趣的功能,我们可以通过这个实现很多功能,但问题是:比如你想实现一个禁区,使玩家们在这里面收不到消息?别担心,你不必指定“反地点”条件或类似的蛋疼玩意儿。你可以简单地使用条件非门。“!”,也就是英文感叹号,这使得条件进行反判断——例如,在下面实例中,只有当玩家不满足foo的时候,事件才能运行;如果满足了,事件就不能运行。那么打开events.yml并在foo之前添加一个英文感叹号,因此它看起来像
  1. baz: message Hello world! conditions:!foo
复制代码

这条代码意味着“如果不满足foo条件,才能显示消息Hello world!”。保存文件,重载插件,进入游戏,并在条件范围内外运行事件,以了解它的工作原理。


标签基础

现在你知道如何使用事件和条件,我会告诉你什么是标签。创建两个新事件:
  1. add_beton_tag: tag add beton
  2. del_beton_tag: tag del beton
复制代码
用事件的功能给事件命名是个好习惯。想象你有100个事件,接着把它们分别命名为,foo24bar65baz12这样的名字,你会很快迷失在其中。所以,add_beton_tag事件在这里是添加beton标签给玩家,del_beton_tag删除这个标签。保存文件,重新加载插件并运行此事件。没有任何事发生...吗? 输入
  1. /q t <玩家名>
复制代码

命令(ttags的别称)。它应该显示一个几乎空荡荡的列表。现在重点放在default.beton这个标签上,其余的标签是用作Innkeeper默认任务的。好的,default是标签所在的包的名称,而betonadd_beton_tag事件中定义的标签的名称。现在运行del_beton_tag事件。猜猜会发生什么?default.beton从列表中消失了!它消失了!
这样,你知道了如何添加和删除标签。
我学会了,但是并没有什么卵用

错了,错误之大莫过于此。事实上,标签是BetonQuest中最强大的功能之一。它们只需要使用标签条件(这也是条件的一种)。打开conditions.yml并在末尾添加以下文字:
  1. has_beton_tag: tag beton
复制代码

正如你可以所想的,tag是条件的类型(与标签事件的类型名相同,但是这两个是完全不同的东西 - 一个是事件,另一个是条件),beton是标签的名称。你不必指定default.beton,也就是包名,但如果你需要引到其他包的话,那么请指定一下。现在保存,重新加载并用命令检测是否具有该条件。它应该显示为false,因为您已经使用del_beton_tag事件删除了标签。那么试试使用add_beton_tag事件再次添加标签,并再次通过指令检查has_beton_tag条件,那么现在它会显示true

现在你可能明白标签系统是多么强大而有用。例如,你可以在玩家第一次与NPC进行会话时设置一个标签,如果NPC下次谈话时看到该标签,他就会跟玩家说不同的话,例如“欢迎回来”。标签是“主线任务”功能的核心,可以通过标签制作各种一次性任务。


制定目标

是时候写几个目标了!打开targets.yml文件并添加一行:
  1. kill_creepers: mobkill creeper 3 events:bar conditions:has_beton_tag
复制代码


现在让我们分析一下这段话。 kill_creepers是目标的名称,依然按照功能命名法给它命名。 mobkill 是一种目标类型。在这种情况下,为了完成目标,玩家将不得不杀死一些生物。creeper (苦力怕)是生物的一种,我们知道这些怪物必须是爬行者。 3是数量。这意味着玩家必须杀死3只苦力怕。events:bar意味着一旦玩家杀死那些爬行动物,就会运行bar事件(还记得之前那个传送事件么?)。conditions:has_beton_tag告诉我们,玩家必须有beton标签,在有标签的时候杀苦力怕才会计数。保存文件,重载插件,进入服务器然后输入
  1. / q o <玩家名> add kill_creepers
复制代码

o就是objectiveadd令插件增加一个目标)。

现在你可以检查你是否真的有这个目标,输入:
  1. /q o <玩家名>
复制代码

这条命令将显示你所有当前的目标。它应该显示default.kill_creepers,完美。
现在我们进入下一步,删除beton标签(是的,删除!),接着找些苦力怕来玩♂玩。杀了三只苦力怕,你发现“诶,怎么什么事都没有发生?。这是因为你并没有满足条件has_beton_tag,所以目标系统就不计算你的进度。现在再次添加标签,接着再找一些苦力怕来搞♂搞,搞死三只苦力怕之后,你就会被系统传送到bar事件中设置的位置。

恭喜,现在你知道了怎样使用目标系统。你可以考虑试试其他类型的目标,因为目标在你的任务中是最经常使用的。一旦你觉得你准备好了,那么翻到下一章,我们将开始学习制作你的第一个对话

想要跟踪本帖的,请在下方回复或评分
  1. 这wiki翻译不错,我想订阅
复制代码
这样在每次更新时我会@你

@1345979462
@lsz7575
@光の旋律

注:foo,bar,baz是编程界中命名的方式,无意义,类似于张三李四王五这样的东西
[groupid=1330]PluginsCDTribe[/groupid]
作者: 我是小童鞋    时间: 2017-2-8 13:15
怎么这么麻烦(不喜欢看 事件,条件 像java一样)
倒不如把 事件,条件 换成有趣的词(因为我觉得 事件,条件 太木头了,像机器一样无味)
作者: Smokey_Days    时间: 2017-2-8 13:51
我是小童鞋 发表于 2017-2-8 13:15
怎么这么麻烦(不喜欢看 事件,条件 像java一样)
倒不如把 事件,条件 换成有趣的词(因为我觉得 事件,条 ...

...有趣?
那你觉得什么词比较有趣...
还有就是,用这样的翻译难道不是为了方便理解、记忆、沟通么?
把event翻译为事或者易先生,把condition翻译为允或者常先生,这样就会更有趣了?
只不过是当时笑笑,用起来难道不会更难受
作者: Rolas    时间: 2017-2-8 14:01
今日没人气系列.
正在研究BetonQuest插件.
这WiKi翻译对我很有帮助,我想 吃章鱼 订阅!
作者: lsz7575    时间: 2017-2-9 16:42
我是小童鞋 发表于 2017-2-8 13:15
怎么这么麻烦(不喜欢看 事件,条件 像java一样)
倒不如把 事件,条件 换成有趣的词(因为我觉得 事件,条 ...

换成有趣的词..你举个能换成什么词的例子啊...

条件 ,事件,这不是挺好理解的吗?

整成杀马特到头来看都看不懂...
作者: lsz7575    时间: 2017-2-9 16:45
翻译得很棒,期待下期````
作者: 光の旋律    时间: 2017-2-13 16:23
delay目标在1.7里好像有问题,目标开始之后就会立即完成,没有延迟...
作者: 大力水手    时间: 2017-2-28 22:39
非常细致的讲解,感谢~!
作者: Yexiaolu    时间: 2017-3-8 12:22
我想问一下对话检查的地方有点需要加一个小感叹号是什么意思
作者: Smokey_Days    时间: 2017-3-8 12:32
Yexiaolu 发表于 2017-3-8 12:22
我想问一下对话检查的地方有点需要加一个小感叹号是什么意思

= =
!是非门符号,在条件前加上这个,意味着——
当这个条件不达成的时候,才能开启该对话
作者: Yexiaolu    时间: 2017-3-8 12:38
Smokey_Days 发表于 2017-3-8 12:32
= =
!是非门符号,在条件前加上这个,意味着——
当这个条件不达成的时候,才能开启该对话 ...

就是说玩家没有被标记上这个条件就不给触发下面的事件?    但对话还是可以继续?
作者: Smokey_Days    时间: 2017-3-8 12:41
Yexiaolu 发表于 2017-3-8 12:38
就是说玩家没有被标记上这个条件就不给触发下面的事件?    但对话还是可以继续? ...

= =不对不对
是指反转条件
怎么说呢?两下半说不清
这样吧,你发到问答版/看私信吧
右上角有个叫“消息”的按钮
作者: 迷の十六    时间: 2017-3-12 16:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: 杜文杰    时间: 2017-4-22 14:13
纠正一个错误:放置粘土块是无法构成NPC的,应为硬化粘土。。。试了半天得出的结果
作者: 风女i    时间: 2017-5-3 05:11
首先,其实真的辛苦您写了这么多,挺不容易的。但是其实从我这样的来学东西的人眼里看来,写的太过繁琐,其实可以写的通俗点,就像平时跟朋友开玩笑说话那样。虽然这样显得不专业,但是这么多内容,好几篇看多了确实这样也会比较轻松。谢谢!
作者: a2260661546    时间: 2017-5-14 15:01
按你的要求操作并没有成功生成NPC
作者: AK_shen    时间: 2017-5-14 16:13
神不神奇我到不知道
反正我在我放置黏土块控制台就一直在刷ERROR
每动一下就不停的刷,往死里刷
版本1.7.10 Thermos核心
嗯就这样,怎么解决?
作者: Smokey_Days    时间: 2017-5-15 18:23
AK_shen 发表于 2017-5-14 16:13
神不神奇我到不知道
反正我在我放置黏土块控制台就一直在刷ERROR
每动一下就不停的刷,往死里刷

所以还是试试Citizen吧
作者: Smokey_Days    时间: 2017-5-15 18:23
a2260661546 发表于 2017-5-14 15:01
按你的要求操作并没有成功生成NPC

emm请注意NPC的ID
作者: Dihun    时间: 2017-7-5 13:13
我配置了打不开npc的怎么破
作者: 1134516880    时间: 2017-8-9 13:06
如果默认就是使用背包GUI进行对话  如何更改成敲数字的模式?
作者: Krito    时间: 2018-7-28 08:56
楼主  foo: location 100;200;300;world;5   不对
修改下 容易误导新人把  教程卡到这里 会以为自己出了错
foo: location 100;200;300;world 5  正确
foo: location 100;200;300;world;5  错误
作者: 暗影魔导    时间: 2018-8-4 21:06
如果你想使用背包GUI进行对话,那么请打开config.yml并将default_conversation_IO更改为chest,之后保存配置并在服务器上输入/q reload命令。
这句话到底啥意思,是default_conversation_IO:chest还是将default_conversation_IO改成chest
作者: nja2106820    时间: 2018-9-5 15:52
/q item 木头

SI_QMN5(EM6I_28[Q58BS45.png (26.98 KB, 下载次数: 1)

SI_QMN5(EM6I_28[Q58BS45.png

作者: 叽叽小石头    时间: 2018-9-5 19:44
nja2106820 发表于 2018-9-5 15:52
/q item 木头

/q item {包.物品名称}这样能行吧
/q item default.木头
作者: nja2106820    时间: 2018-9-6 01:29
PY狗 发表于 2018-9-5 19:44
/q item {包.物品名称}这样能行吧
/q item default.木头



作者: Sakur9    时间: 2018-9-6 08:09
很棒。
作者: j531065605    时间: 2018-10-19 14:27
这wiki翻译不错,我想订阅
作者: j531065605    时间: 2018-10-19 18:10
这wiki翻译不错,我想订阅
作者: j531065605    时间: 2018-10-20 08:57
这wiki翻译不错,我想订阅
作者: gxy7459652    时间: 2018-12-5 23:41
厉害的少年
作者: 栀栀太坏了    时间: 2019-12-1 19:15
是时候写几个目标了!打开targets.yml文件并添加一行:


应该改成

是时候写几个目标了!打开objectives.yml文件并添加一行:


我看的时候愣是没找着target.yml。。

作者: huangwu07    时间: 2019-12-1 23:41
Krito 发表于 2018-7-28 08:56
楼主  foo: location 100;200;300;world;5   不对
修改下 容易误导新人把  教程卡到这里 会以为自己出了错 ...

没看到你的回复之前,我一直在想,为什么总是false,我对来对去,一直是false,服务器重启客户端重启。
最后才看到你的回复,world 后边不用加“;”

确实应该是 location  100;200;300;world  5 ,感谢大佬
作者: Krito    时间: 2019-12-3 02:12
huangwu07 发表于 2019-12-1 23:41
没看到你的回复之前,我一直在想,为什么总是false,我对来对去,一直是false,服务器重启客户端重启。
...

我曾经因为这个问题 苦苦弄了2天才弄明白