Jump to content
模组网
icedream

【Creation Kit 学习指南 22】任务别名

Recommended Posts

概述
本章针对别名的高级用户,讲解这种数据结构更高级的用法。

你将学到:

  • 如何使用条件别名
  • 如何适当的用别名组织任务逻辑

失误
到现在为止,我们已经出现失误。
当然并非完全错误,只是因为用我们的逻辑方式思考主文件 - 这使得难以追查问题并作出改正。 (软件工程师将会调用这个坏的封装)。
试想一下:目前在Bendu的脚本中将他的死亡事件GSQ01设置阶段200,从而使其处于孤立的情况下。试想一下,如果Bendu不是我们刚刚创建的那个角色。如果另一个任务要使用他,设计师将有可能修改我们的脚本,或添加另一个脚本。如果他是一个普通角色,他的名字中也不会有“GSQ”,这意味着很难追查出“我的GSQ任务失败的脚本在哪里?”
同样的问题出现在护身符和盗贼。显然我们当前的设置运作良好,但是能不能使我们的任务更完美?当然,通过使用别名,我们就可以做到这一点!
别名使用
我们可以将别名比作一个在任务中有特殊作用的角色。这些角色在任务期间以人物或目标的形式出现,并能在任务完成时自动作废。它能使设计干净整洁清晰明了。
打开我们在任务设计系列教程中制作的GSQBenduOlo,然后进入自由结局,这里也有一个解决他死亡问题的脚本,或者必须标记。这些都是只含有少量信息的特殊任务,如果任务GSQ01并不存在,我们就无视上述内容。由于回答是"no",所以清理这些基本目标:取消选择“必要的”选项,并使用脚本区域的“移除”按钮清除基本角色的脚本。
现在打开关于目标的任务设计基础的章节。然后,我们有意忽略大多数这么大的窗口和里面的东西,然而我们只完成了一小部分。
gallery_1_72_30806.png
仔细观察,我们会发现很多熟悉的要素。这里有一个脚本面板、一个包堆栈、一个详细目录等等。我们可以按照在基本目标区域的做法来对待它,然后给一个角色填写别名,他将按照有关别名的数据呈现出来。更重要的是,当一个任务停止运行时,所有关于这个任务的别名都将从目标中移除。
这是一个重要的概念,再次提醒一遍:只有在任务运行时,别名中的角色才会按照数据呈现出来。一旦任务中止,角色将解除别名。(也可能在任务运行时清除别名并解除与角色的关联)
这种方式有很多好处:

  • 编写的脚本将只面向特定的任务,可以在调试时更为简单方便。
  • 我们可以创建只控制任务中角色的任务专用包。(注意:别名包堆栈在角色普通包堆栈的上方,因此别名包有优先权。)
  • 我们也可以应用任务期间的咒文(包括被动技能)和派系,这样能使角色的行为给人留下深刻印象,特别在战斗中。
  • 如果任务改变而且要用到另外一个角色,我们只需改变这个角色的目标并使一切正常工作

事实上转换别名目标更为简单,而且能更好的练习使用GetIsAliasRef而非GetIsID来创建对话条件。在这种情况下,我们必须重新审视所有对话并用"GetIsAliasRef Bendu == 1"替换"GetIsID GSQBenduOlo == 1"。

一个已经用到的概念是物品清单:任何进入角色物品清单的东西都将解除别名。(你当然可以移除一个脚本,但是要三思而后行)
修复角色
说了这么多,接下来通过修复Bendu的别名来体现Bendu在任务中的功能。在此,有2种方法:
角色不死
你可以通过点击别名窗口上方的必要选项,然后Bendu在使用这个别名时不可能被杀死。当任务中止时,他会解除这个别名并回到凡人状态。
处理角色死亡问题
我们也可以通过脚本处理Bendu死亡问题,方法和先前处理基本目标的方法一样。注意,我们要更改脚本的第一行,因为我们要链接一个引用别名而非一个角色。我们要制作一个名为"GSQQuestgiver"的脚本,如下所示:
Scriptname GSQQuestgiver extends ReferenceAlias
 
Event OnDeath(Actor akKiller)
    if (!GetOwningQuest().IsCompleted())
        GetOwningQuest().SetStage(200)
    endif
EndEvent

注意现在我们没有将这个任务设置为属性;每一个引用别名都知道它所包含的任务,因此我们添加GetOwningQuest()
现在,设置一个角色死亡的阶段是一个极其普遍的工作,因此不必对此特别制作一个专用的脚本。当你通过点击添加按钮对别名添加脚本时,要先寻找开头是"default"的脚本--这是执行普通工作的脚本。一般都可以通过名称判断,因此你可以通过它们调用的内容判断其用途。在此情况下,我们需要"defaultSetStageOnDeathRefAlias",并设定属性为:

  • myQST: GSQ01
  • preReqStage: <空白>
  • StageToSet: 200

(通过使用默认的脚本,我们可以大幅缩减游戏中脚本的数量,从而优化占用空间。由于我们制作面向PC的MOD,因此可以忽略)
改变名称
注意:你也可以改变别名中的引用的名称,因此玩家可以看到不同的文本。你可以按照你期望的文本设定信息,并从别名窗口顶部显示的名称下拉菜单中选择。
gallery_1_72_3038.png
默认状态下,一旦你对引用设定一个新的显示名称,它将保留它直到任务结束。这将不会导致玩家再次返回清理过的地下城时看到以前杀死的敌人的尸体。你可以点击右上方的"清理移除的名称"选项框来使这个行为优先。

别名的包堆栈将在角色的普通包堆栈的上方,实际上高于它。

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