Zh/L4D Level Design/Finale Events Part 2

译者：joyo_a（百度ID）
== 创建一个逃生载具 ==
现在，让我们制作逃生载具。
在求生之路中，四个官方战役各有不同的逃生载具：一架直升机、一艘船、一架飞机和一辆APC装甲车。
逃生载具实际上可以是任何东西。它甚至可以只是一个房间，里面有一个门在救援结束时打开。
在tutorial_standards地图中，一辆地铁车被用作逃生载具，所以你可以看到如何在地图中移动一个对象。
=== 放置一个prop_dynamic ===
为了让自己的地铁作为逃生载具，你首先需要放置地铁模型。我们要放置一个prop_dynamic而不是一个prop_static，这样它就会移动。
转到Entity Tool并从Objects下拉菜单中选择“prop_dynamic”。
打开其属性，然后点击World model行并点击右边的Browse按钮。
在Filter中输入“subway”并选择模型“props_unique\subwaycar_all_onetexture.mdl”。
点击OK。
关闭属性窗口。
我们现在拥有我们将用于逃生载具的模型。现在我们需要笔刷实体来移动模型。它被称为func_tracktrain。
=== 创建一个func_tracktrain ===
进入Block Tool。
在顶部视图中，绘制大约与地铁车厢大小相同的笔刷，然后按键创建它。
在侧面或正面视图中，收缩刷子使它刚好在地铁车厢的地板的下方。
在笔刷仍然被选中的情况下，点击Texture栏中的Browse按钮。
在过滤器（Filter）中输入“nodraw”并选择纹理“tools/toolsnodraw”。
双击它使其成为当前纹理。
点击工具栏中的Apply current texture工具将其应用到所选择的笔刷。
在笔刷仍然被选中的情况下，按+。
* 更改Class为“func_tracktrain”。单击应用（Apply）以查看func_tracktrain的属性。
* 更改Name为“train”。
* 更改First Stop Target为“train_track01”。
* 更改Max Speed为“25”。
* 更改Height above track为“0”
切换到Flags选项卡。
* 勾选No User Control复选框。
* 勾选Fixed Orientation复选框。
* 勾选Is unblockable by player复选框。
点击Apply并关闭窗口。
=== 添加path_track实体 ===
现在我们需要创建路径来让地铁移动。
进入Entity Tool并从Objects下拉菜单中选择“path_track”。
在镜头视图中将path_track放在靠近地铁车厢中央的地方并使用+打开其属性。
更改Name为“train_track01”。
更改Next Stop Target为“train_track02”。
点击Apply并关闭属性窗口。
在侧面或正面视图中，将path_track移动到func_tracktrain笔刷的正中间。你可以通过点击func_tracktrain并寻找辅助节点（默认情况下放置在中间位置）来找到此确切位置。你可以移动辅助节点，但请确保path_track能移动到该辅助节点所在的位置。
回到Entity Tool并放置另一个path_track到你想让地铁移动到幸存者搭乘的地方。
打开其属性并更改Name为“train_track02”和更改Next Stop Target为“train_track03”。
回到Entity Tool，放置第三个path_track到你想让地铁移动到可以逃离地图的地方。
打开其属性并更改Name为“train_track03”。
=== 将prop_dynamic关联到func_tracktrain ===
返回到prop_dynamic地铁车厢模型并打开其属性。
更改Parent为“train”。这将地铁车厢模型关联到func_tracktrain。每当func_tracktrain移动时，地铁车厢模型将随之移动。
现在，我们需要trigger_multiple来检查所有幸存者是否在地铁上。
== 创建trigger_multiple ==
用Block Tool绘制一个笔刷，里面包含在地铁车厢内的用来搭载幸存者的位置。
点击Texture栏中的Browse按钮。
在过滤器（Filter）中输入“trigger”并选择“tools/toolstrigger”纹理。
双击它使其成为当前纹理。
应用纹理到选择的笔刷。
按+使其成为笔刷实体。
更改Class为“trigger_multiple”并点击Apply以显示trigger_multiple属性。
* 更改Name为“train_trigger”。
* 更改Start Disabled为“Yes”。
* 更改Entire Team Number为“Survivor”。
切换到Flags选项卡。
确保复选框Clients已被勾选。
切换到Outputs选项卡。
添加以下输出：
* My output named：“OnEntireTeamStartTouch”
* Targets entities named：“train_continue_relay”
* Via this input：“Trigger”
当所有幸存者都接触到它时，该触发器将发送一个触发输出到一个名为“train_continue_relay”的logic_relay。
现在，我们来设置logic_relay中当幸存者接触该触发器时应该发生的所有东西。
在Entity Tool中，从Objects下拉菜单中选择“logic_relay”。
在镜头视图中将logic_relay放在“train_trigger”的附近，然后打开其属性。
更改Name为“train_continue_relay”。
切换到Outputs选项卡。
添加以下输出：
* My output named：“OnTrigger”
* Targets entities named：“train”
* Via this input：“StartForward”
添加以下输出：
* My output named：“OnTrigger”
* Targets entities named：“radio”
* Via this input：“FinaleEscapeForceSurvivorPositions”
这意味着，当所有幸存且未倒下的幸存者都接触了“train_trigger”时，地铁将继续向前移动，而logic_relay也将幸存者传送到安全的位置。
当逃脱发生时，我们需要放置info_survivor_positions到他们将要传送的地方。
== 放置info_survivor_positions ==
转到Entity Tool并从Objects下拉菜单中选择“info_survivor_position”。
在镜头视图中放置4个到他们不被感染者阵营接触的地方。
这可能需要你为他们在地图中建立一个小容器，如tutorial_standards.vmf所示。
打开每个属性。
将第一个的Name更改为“train_survivor_pos1”。
将第二个的Name更改为“train_survivor_pos2”。
将第二个的Order更改为“2”。
将第三个的Name更改为“train_survivor_pos3”。
将第三个的Order更改为“3”。
将第四个的Name更改为“train_survivor_pos4”。
将第四个的Order更改为“4”。
== 完成逃生载具 ==
回到“train_track02”并打开它的属性。
切换到Outputs选项卡。
在tutorial_standards地图里，还有其他输出挂钩到门来打开，如果感染者在路径上他们则被杀死，如果幸存者在路径上则被推开到路径外。现在忽略这些，只需添加以下输出：
添加以下输出：
* My output named：“OnPass”
* Targets entities named：“train”
* Via this input：“Stop”
当地铁到达这个搭载幸存者的地方的path_track时会停止地铁移动。
添加以下输出：
* My output named：“OnPass”
* Targets entities named：“train_trigger”
* Via this input：“Enable”
这是启用trigger_multiple的输出。
添加以下输出：
* My output named：“OnPass”
* Targets entities named：“radio”
* Via this input：“FinaleEscapeVehicleReadyForSurvivors”
这将告诉幸存者电脑到达标有“RESCUE_VEHICLE”属性的导航区域。
我们还需要向func_tracktrain发送输入以便从起始位置出发到搭载幸存者的位置。
进入Entity Tool并从Objects拉菜单中选择“logic_relay”。
将其放在“train_continue_relay”实体附近并打开其属性。
更改Name为“train_start_relay”。
切换到Outputs选项卡。
添加以下输出：
* My output named：“OnTrigger”
* Targets entities named：“train”
* Via this input：“StartForward”
点击Apply并关闭属性窗口。
现在，回到trigger_finale（电台模型）并再次打开它的属性。
添加以下输出：
* My output named：“FinaleEscapeStarted”
* Targets entities named：“train_start_relay”
* Via this input：“Trigger”
当救援的逃脱阶段开始时trigger_finale会启动地铁。
我们仍然需要一个输出到trigger_finale来告诉它逃脱成功。
转到Entity Tool并从Objects列表中选择“logic_relay”。
在镜头视图中放置它并打开其属性。
更改Name为“train_end_relay”。
切换到Outputs选项卡。
添加以下输出：
* My output named：“OnTrigger”
* Targets entities named：“radio”
* Via this input：“FinaleEscapeFinished”
* After a delay in seconds：“2”
这将告诉trigger_finale幸存者在被触发之后的2秒内逃脱。
回到“train_continue_relay”并打开其属性。
切换到Outputs选项卡。
添加以下输出：
* My output named：“OnTrigger”
* Targets entities named：“train_end_relay”
* Via this input：“Trigger”
我们可以在这里建立FinaleEscapeFinished输出，但是我们正在准备为“train_end_relay”添加其他内容。
=== 更新导航 ===
我们现在需要更新导航以包含RESCUE_VEHICLE区域。
按保存并编译地图。
当地图加载后，按进入导航编辑模式。
使用noclip 来到达地铁车厢搭载幸存者的地方。你会注意到地铁车厢在起始位置。你不必通过启动救援来让地铁到达搭载的位置。
只需调用控制台并输入“ent_fire train_start_relay trigger”，然后按。
一旦地铁车厢到达位置，你可以在里面放置一个nav_mark_walkable并使用nav_generate_incremental 为其建立导航网格。
确保地铁车厢内的导航区域连接到地图中剩余的区域。
你应该看到连接这些区域的浅蓝色（青色）线。
如果这些区域未连接，请选择要连接的两个区域，然后使用nav_connect 。
选择地铁车厢内的所有导航区域并在控制台中输入“mark RESCUE_VEHICLE”以标记该属性。
这些都是一个正常工作的救援事件所必要的东西。现在，我们可以为救援事件添加一些可选的元素。