Jump to content
模组网
icedream

【Creation Kit 学习指南 16】对话

Recommended Posts

概述
本章将讲解如何在任务"Bendu Olo's Only Hope"中添加对话。

你将学到:

  • 如何在Creation Kit中创建对话。
  • 如何采用脚本实现通过对话选项触发事件。

对话视图
Skyrim提供可视界面系统从而使你能看到你创建的对话。

如果你使用过辐射3或更早的对话创作系统,你就会发现对话依旧在玩家对话标签下。(事实上,视图就是系统华丽的前端)

开始使用这些视图,找到任务(GSQ01)并双击打开任务窗口。然后点击对话视图标签。你的窗口将如下所示:
gallery_1_72_5562.png
打开新的视图,在窗口左边右击并选择“新建”。你将迅速给这个视图一个ID,然后任务ID将自动作为这个视图ID的前缀。这个视图是"GSQ01BenduView",点击并选择它。
如果没有在视图中添加任何东西,那么它将一片空白。右击空白处并选择"创建分支"。你应该立即对这个分支命名为"GSQ01MeetingBenduBranch"。再一次命名一个话题(你也可以使用默认的名称"GSQ01MeetingBenduBranchTopic"),然后点击Enter键,你将看到一系列对你来说并不重要的矩形。
gallery_1_72_3739.png
现在,我们必须解释一些专业术语:

  • 回答: NPC说的简单的一行话,限制150字以内。它能展现出NPC的性格和感情。
  • 消息: 一个环境下回答的集合。如果一个角色一次又一次回答出不同的话,那么这是包含这些不同回答的消息。
  • 话题: MPC在特定环境下说出的消息的集合,经常是对特殊对话选择的回应。
  • 分支: 是由玩家对话组成的话题的集合。

经过不断的点击鼠标和点击键盘,我们终于创建一个分支并自动创建一个话题。不过目前这个话题不包括任何消息。
gallery_1_72_38065.png
话题
双击话题打开话题窗口.
gallery_1_72_6395.png
这里我们需要谨慎处理"话题文本"区域。这里有玩家和NPC交谈时的对话选项。我们要让玩家成为一个被大家理解的热心肠冒险家,因此输入"Do you need help with anything?"
双击消息框,我们开始编写NPC的回答。
gallery_1_72_9314.png
在"回答文本"区域输入:"Why, yes, now that you mention it. Some dirty thief has made off with my amulet. Would you be so kind as to... ahem... fetch it back?"
点击窗口底部的确认按钮两次。窗口消失,你将看到话题消息窗口。

当你第一次点击回答窗口的“确认”按钮时,编辑器将会对你输入的内容进行拼写检查。如果你能准确无误地输入,那么第一次按将不会做任何事。


话题消息
gallery_1_72_18503.png
在这个窗口中有很多信息,但是大多数对我们来说是多余的。我们现在需要注意的是中间的状态桌面。我们要让表示消息的那个变窄。如果我们使状态保持空白并点击“确认”,每一个NPC都会有一个相同的话题"Do you need help with anything?"
右击状态列表并选择“新建”,对消息创建第一个状态。
gallery_1_72_10362.png
每一个状态都是独立的判断真假的选项。如果列表中的所有状态都是有效的,那么消息也是有效的。我们第一个状态将简单地限制谁可以说这句话。"GetIsID"是默认的选项,因为它普遍被应用于对话状态中。点击中间的显示"无效"的按钮,我们就能选择适当的角色。在下拉目录中选择"GSQBenduOlo"并点击“确定”。
gallery_1_72_5351.png
点击状态窗口上的“确定”来关闭它,然后你将在列表中看到它。现在只有Bendu能说它,但是我们不希望他每时每刻都说;只在给玩家任务时说。因此我们必须添加更多的状态。右击状态列表并再次选择“新建”。
我们必须按照当前任务阶段来限制对话。所以点击状态函数下拉并选择“获取阶段”(GetStage)(你能通过输入首字母G来直接找到并选择)。现在点击"无效"按钮设定参数,将产生一个任务列表(获取阶段状态只针对这个任务)。从目录选择"GSQ01"并点击“确认”。
现在它将显示任务进行阶段的状态。由于我们知道任务开始阶段是0,我们可以通过"=="来判段数值是否为"0",也可以将其设定为0,但是如果我们在开始阶段前添加阶段将会破坏状态。安全的方法是判断当前阶段是否小于10,因此设定数值"10"并从判断列表中选择"<"。
gallery_1_72_11417.png

注意你能通过"←"和"→"键或状态窗口左下角的左右箭头按钮对状态重新排序。虽然在此案例中排序并不重要,但是在通过“与”“或”逻辑判断状态时将用到。

我们最后的话题消息应如下所示:
gallery_1_72_50109.png
点击“确定”关闭话题消息窗口,然后再次点击“确定”关闭话题窗口。
链接对话
最后,我们回到对话视图!新的对话将显示出来。如果你想看到所有的文本,点击视图底部的“显示全部文本”选项框。
gallery_1_72_2712.png
Bendu将会按照设定提问,我们要选择一个回答,右击分支区域选择“添加话题”,(如果没有出现下拉菜单,你可能没有右击到分支区域)
接下来将打开另一个话题窗口。你要对此设置一个ID;"GSQ01MeetingBenduYes"是你选择同意帮助,话题文本输入"Sure, I can do that."(我当然会做),并双击消息窗口来制作回答。文本输入"Oh, thank you so much. It's been taken to Reachwind Eyrie. Please hurry! I'll give you twice what it's worth!"(太感谢你了,它在苍原之风洞穴。快点!我将给你双倍赏金!)这时你点击确定,拼写检查将解释"Reachwind"。点击忽略按钮跳过,多次点击确定,你将返回话题消息窗口。
确定无误后,再次双击回答文本并返回。注意窗口底部的声音文件列表。
gallery_1_72_1742.png
由于你没有给对话设定任何条件,游戏将认为每个人都能说它,并对每种声音类型都使用。这对于硬盘空间是一个极大的浪费并浪费时间制作不必要的声音文件(如果你打算录制声音)。所以关闭窗口并对GSQBenduOlo添加条件GetIsID(就如我们对先前话题消息所做的一样)。现在再次观察回答,你将发现它只有一个声音类型MaleDarkElf,只列出一个文件。
gallery_1_72_4411.png
现在在话题消息窗口中点击确定,然后话题窗口将回到对话视图中。你将看到悬浮在分支上的新话题。
gallery_1_72_16496.png
现在我们能在对话视图中布置这些话题。在运行时,游戏不会考虑这些位置,这只是为设计者提供方便。所以从上方工具栏拖动新话题到方便的位置。
制作更多的话题,现在制作话题"Sorry, not right now."(对不起,现在不行),设置Bendu回答"Well, fine then.",不要忘记在话题消息中添加条件GetIsID。一切完成,对话框视图将如下所示:
gallery_1_72_12723.png
所有这些话题存在于分支中,但是游戏并不知道它们之间的关系。我们将要把它们链接在一起点击GSQ01MeetingBenduBranchTopic使其起作用。然后多次点击此行的文本(当鼠标指针经过它时将变成小手)并将一行拖动至GSQ01MeetingBenduYes。重复相同步骤,将每一行从原先话题拖至GSQ01MeetingBenduNo话题。
gallery_1_72_15270.png
现在,当玩家选择"Do you need help with anything?",Bendu将按照玩家的选择作出对应的回答,选择已链接对应的话题。
对话脚本
现在我们将给对话添加脚本系统,但是这并不难,所以不必担心它晦涩难懂。
现在我们已经完成对话的编写,但是游戏并没有对不同的选项对应适当的结果。我们要让主角回答"Yes"的时候接受这个任务并自动进入下一个阶段。
在 GSQ01MeetingBenduYes话题下双击文本"Oh, thank you..."。(注意:这将会跳过话题窗口直接打开消息窗口)
在窗口底部,你将看到标记着“开始”和“结束”的脚本区域。开始脚本在NPC开始说话时运行,结束脚本在NPC结束说话时运行。(在脚本术语中,这些脚本的小碎片被称为“脚本片段”)
在结束区域,输入脚本命令:

GetOwningQuest().SetObjectiveDisplayed(10)
GetOwningQuest().SetStage(10)

SetStage(10) 控制台党肯定很熟悉,设置当前的任务阶段为10
GetOwningQuest() 这部分表示此任务包含这个对话。(有时你希望一段话在不同的剧情中使用,我们就要特殊对待)

如果你点击“编译”,你将看到“脚本名称”下出现一些内容。你可以忽略它。(如果你输入错误内容,编辑器将告诉你)
如果你打算关闭窗口,你先要确定脚本应如下所示:
gallery_1_72_14699.png
如果一切无误,关闭窗口。一切顺利的话你将注意到对话视图,有一个"[s]"出现在消息文本的前方,因此我们可以很容易地看出哪些对话已与游戏逻辑关联,而不必打开每个去检查。
分支和条件
刚刚我们只是给对话创建分支。默认它是“顶级”分支(这就是它在视图中显示橙色的原因)。你现在不必担心其它类型的分支;只需要知道顶级分支是角色和玩家对话时优先说的。
话题有一个橙黄色栏,在它顶部是分支起始话题。当角色决定对玩家提供哪些选项时,它将寻找起始话题并立即呈现给玩家。如果你对先前内容还有印象,你会想到我们曾对起始话题(任务阶段小于10)设定条件。一旦玩家选择接受任务,任务阶段将跳至10,这意味着起始话题不再有效;它将不再出现在角色的话题列表中。
非起始话题将会有一个更小的状态列表,由于它们只在起始话题对于分支有效的情况下实现。这是我们经常把它们限定给一个特殊NPC的原因,因为这样我们就不必做更多的声音文件。对于游戏而言,此举也能避免问题的产生。
一旦玩家选择一个没有链接的话题,游戏将再次查找有效顶级话题并从中选择一个给玩家。一旦全部无效,NPC将中止与玩家的对话。
进行测试
加载游戏和你的插件,然后会见Bendu。(记住,控制台输入COC MixwaterMillWorkersHouse)他将对你说些什么。
gallery_1_72_55484.png
现在对话还有以下少许问题:

  • 直接地闪入下一个选项列表。(由于没有任何音频文件,如果没有字幕,你将不知道他说什么;但如果你打开字幕,它将快得你无法阅读。)
  • 如果你拒绝帮助,他将直接回到同样的顶级话题,你会对此感到奇怪。

幸运的是这些能轻松被解决。
录制临时音频
打开GSQ01MeetingBenduBranchTopic并进入它的对话窗口。在窗口底部,你将看到“录制”按钮。
gallery_1_72_15225.jpg
如果你的话筒和电脑相连,点击该按钮并开始录音。如果你不想录音(条件不具备或对自己的声音没信心),你可以录制一段无声音频,为角色朗读对话提供时间。点击保存按钮保存文件。
对其它2个话题采用相同的步骤。(要有感情地录制声音。Bendu的情绪将体现在声音里。)
如果没有话题了。点击文本框并输入"Goodbye",这将使角色终止对话,因此在输入这句话后你不必在话题列表中结束。(你也要对"Yes"话题设置一个goodbye。由于Bendu现在只有顶级话题,这因此显得并不重要,因为我们知道在此他没有别的话可说。但是如果在其它任务中他有对话,那么这将使玩家感到困惑。)
额外对话
现在,让我们设计一个在主角完成任务后和他的对话。
在对话视图中,右击创建一个新分支,并根据起始话题的默认名称命名为"GSQ01BenduFinishBranch",接下来在话题文本框中输入"I've brought your amulet."(我取回了你的护身符)给予其满意的回答(主角走之前他说"I hope you gave that thief a good thrashing!"(我希望你完全战胜这些贼))。这需要2个限制条件;一个是对Bendu的限制,另一个是限制任务阶段为30。最后,设置一个Goodbye,这是任务阶段为40时我们要说的。
现在结果应如下图所示:
gallery_1_72_23152.png
如果我们没有得到护身符,任务就不可能从10阶段跳至30阶段,因此测试需要做很多工作!

我们还要做更多的工作以及不必要的数据处理,从而使角色说的话更简单明了。这部分的复杂性是有历史的--因为它是从晨风的基础文本对话系统演变而来的,这个系统错综复杂且无指引。但同样的系统处理多重角色时仍用相同的对话、战吼、问候、回答等等。灵活有时意味着复杂。
通过一系列练习,所有这些将成为角色第二特征。你能逐步掌握并最终得心应手地运用对话系统。

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...