现在你已经认识了BetonQuest的强大功能,并理解了事件,条件和目标,是时候开始写你的第一个对话了。default包中有一个conversation目录。它包含一个单独的文件,innkeeper.yml。这是与Innkeeper的谈话,他要求你砍一些树。打开它,我们将使用它作为参考。现在创建一个新文件,让我们把它命名为miner.yml。现在输入(不要复制粘贴,你首先要学会怎么敲代码)到文件:
- quester: Miner
- first: greeting
- NPC_options:
- greeting:
- text: 你好,旅行者!
复制代码
这是最基本的对话。名为Miner的NPC在开始对话时将使用greeting选项,这意味着他会说“你好,旅行者!”然后对话将结束,因为没有定义玩家选项。
现在你需要连接NPC与对话。你得借助main.yml文件。打开它,你可以看到,inkeeper.yml对话被链接到名叫Innkeeper的NPC。这是你写在告示牌上的那个,还记得吗?现在,在Innkeeper下面添加一行:Miner: miner.yml,保存文件并重新加载服务器。这将链接我们的新对话与名为“Miner”的NPC。在服务器上建一个新的NPC,给它放上一个带有“Miner”名字的牌子,然后点击头部。
猜猜什么,对话开始了!。矿工刚才说了“你好,旅行者!。意料之中。
现在打开对话文件并继续编辑它(依然要手动,别复制粘贴!)写成这样:
- NPC_options:
- greeting:
- text: 你好,旅行者!
- pointers: hello, bye
- player_options:
- hello:
- text: 你也好!
- bye:
- text: 抱歉我得先走了。
复制代码
保存文件时,重新加载插件并再次启动对话,您会注意到有两个选项供您选择:“你也好!” 和 “抱歉我得先走了。”但是选择其中任何一个选项都会结束对话,因为这些选项没有指向到任何NPC的话。
现在添加一个新的NPC选项,例如weather,后方写上文本“天气不错”。并使hello的玩家选项指向它。这样当你保存并重新加载后,当你选择“你好!”的时候,Miner会说:“天气不错”, 我想你应该明白了它的工作原理。
- NPC_options:
- greeting:
- text: Hi there, traveler!
- pointers: hello, bye
- weather:
- text: 天气不错
- player_options:
- hello:
- text: Hello!
- pointer: weather
- bye:
- text: I need to go, sorry.
复制代码
现在,每次你和矿工谈话,他都会说同样的话,这虽然已经不错了,但是我们还可以做得更好些。能不能让矿工在第二次对话的时候,记起我们的名字,然后打开完全不同的对话呢?可以。我们可以通过标签来实现。还记得上一章学的么?定义meet_miner事件和has_met_miner条件。当你和矿工谈话时,系统会检查你是否见过他。如果你没有见过他,他就会在和你谈话中认识你(就是之前写的那段对话),如果你见过他,那么他就能喊出你的名字
现在,将问候NPC选项重命名为first_greeting。添加meet_miner事件和has_met_miner条件(其中条件在使用时否定,因为此选项应该只显示如果玩家还没有见过矿工)。您将需要使用''(英文单引号),因为字符串不能以YAML中的感叹号开头。(切记是英文感叹号!)修改后,前一段应该看起来像这样:
- first: first_greeting
- NPC_options:
- first_greeting:
- text: Hi there, traveler!
- condition: '!has_met_miner'
- event: meet_miner
- pointers: hello, bye
复制代码
这意味着:如果玩家没有满足has_met_miner条件(意味着他没有标签,因为他还没有和NPC对话过),应该触发first_greeting。当触发此选项时,这个选项又将触发meet_miner事件为玩家添加标签,并让玩家选择hello和bye选项。好的,但如果玩家再次遇到矿工,这一次,has_met_miner条件被触发了(或者说没有满足这个条件的否定项)会发生什么?在first中的第一个NPC选项如果不满足条件,NPC将尝试使用first设置中定义的下一个选项。这个选项还不存在,所以让我们添加它。
- first: first_greeting,regular_greeting
- NPC_options:
- regular_greeting:
- text: Hi %player%!
- pointers: hello, bye
复制代码 (中间省略了一段,末尾省略了一段)
此选项不需要满足任何条件,因此如果first_greeting不满足条件,NPC将始终选择此选项。现在来研究一下%player%。这是一个变量。在这个地方它会显示你的名字。在后面的某个章节,你可以查看全部可用的变量。好的,保存并重新加载并开始对话。如果你做的一切都正确,第一次谈话时,矿工会把你当做路人来交谈,而你第二次与他谈话时,他就会使用你的Minecraft名字来问候你。
这是您创建的整个对话,您如果确定自己正确理解一切,可以对照一下答案:
- quester: Miner
- first: first_greeting,regular_greeting
- NPC_options:
- first_greeting:
- text: Hi there, traveler!
- condition: '!has_met_miner'
- event: meet_miner
- pointers: hello, bye
- regular_greeting:
- text: Hi %player%!
- pointers: hello, bye
- weather:
- text: Nice weather.
- player_options:
- hello:
- text: Hello!
- pointer: weather
- bye:
- text: I need to go, sorry.
复制代码
现在你应该用这个对话进行更多的实验,你通过研究之前的innkeeper.yml来获取更多信息,一步一步地理解对话是怎么运作的。请你自己研究并练习,模仿innkeeper.yml,写一个任务——矿工让玩家去挖矿,然后冶炼成铁锭,之后做成一套铁盔甲并交给他。你也许想要阅览“参考”的那几章来明白如何设置“提交物品”事件以及如何给玩家的日记添加条目。
如果你想使用NPC来替代那个丑不拉几的粘土怪,你也可以在随后的几个章节里找到你需要的信息。想查找更多的事件、条件、目标和变量,你可以查看他们的列表(紧跟在参考后) |
|
|