Jump to content
模组网
icedream

【Creation Kit 学习指南 25】非线性任务

Recommended Posts

概述

本章将讲解在不同情况下我们创建动态任务内容的灵活系统,并参考和使用它。

你将学到:

  • 如何用条件填写别名
  • 如何动态填写基于其它数据的别名
趣味性

迄今为止我们编写的内容并不是很出色。比如结构太简单、任务太单调、剧情太狗血。总而言之无特别之处,在此就不一一指出了。但是我们必须予以改变。

这里我们要使别名更能体现出角色类型--任务功能取决于别名而非基于的角色,我们可以使其在体现出功能的情况下应用于任何角色。这是一个强有力的想法,并能使我们借助程序来阐述故事。

想象一下我们如何在此任务中创建随机剧情:

  • 地下城改变: 将护身符给一个随机选择的地下城BOSS。由于选择系统更偏向于玩家未涉足的地方,因此可能将它布置到一个新的地方!
  • 不同受害者: 我们可以从世界中任意选择一个角色作为丢失护身符的人--或者只选择独处的黑暗精灵,或者只从东境地区选择,等等。我们可以使其常规化或特殊化(种类数量以录制的声音种类为上限)。
等等, 等等, 等等.

举个例子,我们只需更改地下城的位置就可以了。

条件别名

一个重要的技巧是创建一个以“种子别名”为基础的发散任务。记住,这不是我们发现的那个盗贼--我们只需要知道在玩家地图中添加什么标记,这意味着我们必须知道用什么地下城。因此我们需要担心有关其的三个别名,但是它们都需要依赖盗贼的初始三个选择。然而由于技术上的原因,我们通常从位置处开始(告诉游戏选取哪个BOSS的位置,然后再分配盗贼)。在这种情况下,位置就是“种子别名”。当你在发散的内容中找寻bug时,你就会知道种子别名的重要性了。

点击别名标签,然后右击新建一个别名并命名为"ThiefLocation",位置别名含有一些地方的数据并是“材料”的集合。例如,所处位置可能包含一些生物或者是城市的一部分,或者是特殊区域,或者有一个大门,或者是一个BOSS。我们可以用条件语句测试一些数据并找到一个合适的地点。我们添加的首要条件是"LocationHasRefType",从下拉目录中选择“Boss”。这个条件为真,并针对任何关键字为BOSS的角色。

第二个我们要添加的条件是"LocationHasKeyword",这个将测试位置数据(相对于包括的角色)。此时关键字是"LocTypeBanditCamp"。

如果你对定义数据感兴趣,请点击位置和关键字。
正如你所预计的那样,这2个条件将过滤掉所有强盗阵营以外的BOSS。游戏将从可用位置随机选择一个。

最后,点击窗口顶部的“保留位置”引用--这将会预防任何包括任务运行时使用的位置的发散内容。新的位置别名应如下所示:

gallery_1_72_44375.png

关闭窗口。以下内容很重要:盗贼位置别名将会高亮,使用左箭头按键将它移动到盗贼别名上方。因为别名将自上而下填写,所以顺序很重要,由于盗贼基于别名实现,因此接下来将会讲到。

依赖别名

打开盗贼别名"ThiefLocation",先前它指向一个特殊的引用,但是我们将有所改变并分割我们找到的位置。点击“位置别名引用”的录音按钮,这将会打开位置潜在包含的引用。从首个下拉目录中选择"ThiefLocation",然后从下拉引用类型中选择"Boss"。(注意如果没有选择包括BOSS的位置,那么此别名将会填写失败。如果所有别名填写失败,那么任务将不会开始,因此任务无法开始时首先从这里找问题。如果你需要使别名空白,请标记“选填”。)

现在我们需要对地图标记设置别名。那么设置至少一个别名,并命名为"LocationMarker"。这也是有条件的--如下所示:

  • GetInCurrentLocAlias: 盗贼位置
  • GetIsId: 地图标记
最后,我们需要改变20阶段的脚本,添加地图标记而非我们先前设置的代码。因此阶段20的脚本如下所示:

SetObjectiveCompleted(10)
SetObjectiveDisplayed(20)
 
Alias_ThiefLocation.GetReference().AddToMap()
增加趣味性

现在我们已经对任务添加一个发散元素。你应该移除任何有关瑞驰之风巢穴的特殊内容(例如:Bendu可能不需要关心它的名称)。否则,任务会很普通!

如果你照着任务目标教程操作,你会发现没有任何目标实际是引用到Reachwind Eyrie的,所以这边没有什么变化,但如果我们想要任务目标告诉玩家盗贼在哪边,甚至当我们也不知道呢?在我们现有的基础上这其实是很容易实现的。首先,回到ThiefLocation别名并勾选'Stores Text'。然后,返回到任务目标标签,修改目标索引10的显示内容:修改 "Kill the thief" 为"Kill the thief at <Alias=ThiefLocation>"

插入别名到文本就是这么简单。我们不需要检查别名是否已勾选,因为(假设我们没有在别名中勾选Optional选择框)如果没有,任务就不会开始。更多高级信息,你可以查看Text Replacement页面。

特别强调

... 除了将盗贼脚本在盗贼基本目标中保留,而非对其使用适当的别名。现在如果你从开始制作任务数据的中心别名,那么它将会变得很简单!你知道如何清理它吗?那么现在开始吧!

更多内容

如果你已经有Creation Kit任务系统的所有基本图形应用程序包,那么就可以进入任务管理器的学习....

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...