Zh/Left 4 Dead 2/Scripting/Director Scripts: Difference between revisions
m (Setting bug notice hidetested=1 param on page where the bug might not need tested in param specified) |
mNo edit summary |
||
Line 20: | Line 20: | ||
{{note|如果脚本位于子目录中,则与<code>BeginScriptedPanicEvent</code>一起使用的脚本将无法工作,即使你能在其他脚本的上下文中使用子目录. 它们必须位于vscripts文件夹下,否则它们只会简单地以1个阶段1秒的延迟运作.}} | {{note|如果脚本位于子目录中,则与<code>BeginScriptedPanicEvent</code>一起使用的脚本将无法工作,即使你能在其他脚本的上下文中使用子目录. 它们必须位于vscripts文件夹下,否则它们只会简单地以1个阶段1秒的延迟运作.}} | ||
== | == 通用脚本与尸潮 == | ||
当导演系统执行<code>BeginScript</code>输入时,指定的脚本便会运行,直到新的脚本被执行。或者脚本也可通过<code>EndScript</code>输入来手动结束. 除非改变了导演设置,否则游戏模式照常运行。 | 当导演系统执行<code>BeginScript</code>输入时,指定的脚本便会运行,直到新的脚本被执行。或者脚本也可通过<code>EndScript</code>输入来手动结束. 除非改变了导演设置,否则游戏模式照常运行。 | ||
尸潮事件可以通过操纵感染者和特感的数量上限以及游戏节奏来实现。 | |||
<code>c2m4_barns_onslaught.nut</code> (附注释): | <code>c2m4_barns_onslaught.nut</code> (附注释): | ||
Line 29: | Line 29: | ||
Msg("Initiating Onslaught\n"); | Msg("Initiating Onslaught\n"); | ||
DirectorOptions <- | DirectorOptions <- | ||
{ | { | ||
//允许BOSS感染者 (false = 允许 ; true = 禁止) | //允许BOSS感染者 (false = 允许 ; true = 禁止) | ||
Line 38: | Line 38: | ||
//LockTempo = true | //LockTempo = true | ||
// | // 设置感染者的产生时间间隔. 感染者只有在节奏处于BUILD_UP状态时才会产生. | ||
MobSpawnMinTime = 1 | MobSpawnMinTime = 1 | ||
MobSpawnMaxTime = 1 | MobSpawnMaxTime = 1 | ||
// | // 每波尸潮产生多少感染者. | ||
MobMinSize = 30 | MobMinSize = 30 | ||
MobMaxSize = 30 | MobMaxSize = 30 | ||
MobMaxPending = 30 | MobMaxPending = 30 | ||
// 修改SUSTAIN_PEAK 和 RELAX | // 修改SUSTAIN_PEAK 和 RELAX 状态的时间长度以缩短感染者产生的时间间隔. | ||
SustainPeakMinTime = 5 | SustainPeakMinTime = 5 | ||
SustainPeakMaxTime = 10 | SustainPeakMaxTime = 10 | ||
Line 68: | Line 68: | ||
} | } | ||
Director.ResetMobTimer() // | Director.ResetMobTimer() // 将感染者产生计时器归零(只在节奏未锁定时有意义). | ||
Director.PlayMegaMobWarningSounds() // 即将尸潮音效. | Director.PlayMegaMobWarningSounds() // 即将尸潮音效. | ||
</source>}} | </source>}} | ||
Line 77: | Line 77: | ||
结局的导演脚本通常从 <code><''map name''>_finale.nut</code> 中被加载. 脚本化的尸潮事件则可以从 {{L|info_director}} 的 <code>BeginScriptedPanicEvent</code> 输入中被执行. | 结局的导演脚本通常从 <code><''map name''>_finale.nut</code> 中被加载. 脚本化的尸潮事件则可以从 {{L|info_director}} 的 <code>BeginScriptedPanicEvent</code> 输入中被执行. | ||
{{bug|hidetested=1|当trigger_finale被设置成针对一个特定的脚本时, 它将失去作用.}} | {{bug|hidetested=1|当trigger_finale被设置成针对一个特定的脚本时, 它将失去作用.}} | ||
阶段的类型有四种 (其他值会打断结局并使得玩家直接成功获救(ESCAPE)): | 阶段的类型有四种 (其他值会打断结局并使得玩家直接成功获救(ESCAPE)): | ||
Line 84: | Line 83: | ||
*DELAY - 间歇, 数值是进入下一阶段前等待的秒数. | *DELAY - 间歇, 数值是进入下一阶段前等待的秒数. | ||
*SCRIPTED (也叫ONSLAUGHT) - 数值是要调用的VScript的脚本名或者"" (这样设置的的话导演系统将不做任何行为), 如果在这里乱写的话你的游戏就会崩溃. 你的脚本会负责发送 <code>EndCustomScriptedStage</code> 输入给导演系统 (你选择的目标, 比如某个确切的触发量, 计时器, 随机值, 等等.). {{L|trigger_finale}} 输入 <code>AdvanceFinaleState</code> 应该也能工作. 否则, '''尸潮事件不会结束''' | *SCRIPTED (也叫ONSLAUGHT) - 数值是要调用的VScript的脚本名或者"" (这样设置的的话导演系统将不做任何行为), 如果在这里乱写的话你的游戏就会崩溃. 你的脚本会负责发送 <code>EndCustomScriptedStage</code> 输入给导演系统 (你选择的目标, 比如某个确切的触发量, 计时器, 随机值, 等等.). {{L|trigger_finale}} 输入 <code>AdvanceFinaleState</code> 应该也能工作. 否则, '''尸潮事件不会结束''' | ||
一个关于自定义结局脚本的例子: | 一个关于自定义结局脚本的例子: | ||
Line 94: | Line 92: | ||
SCRIPTED <- 3 | SCRIPTED <- 3 | ||
DirectorOptions <- | DirectorOptions <- | ||
{ | { | ||
//----------------------------------------------------- | //----------------------------------------------------- | ||
Line 133: | Line 131: | ||
{ | { | ||
printl( "Beginning custom finale stage " + num + " of type " + type ); | printl( "Beginning custom finale stage " + num + " of type " + type ); | ||
MapScript.DirectorOptions.CommonLimit <- num * 10 // | MapScript.DirectorOptions.CommonLimit <- num * 10 // 随着阶段线性增加10个感染者. | ||
}</source>}} | }</source>}} | ||
Line 142: | Line 140: | ||
*'''<code>void Update()</code>''' | *'''<code>void Update()</code>''' | ||
: | :如果在导演脚本中定义了<code>Update()</code>函数,它会像<code>Think()</code>函数一样重复运行,但只有在通过{{L|trigger_finale}}触发结局时才会运行。如果有多个运行中的脚本定义了它,它们都会被调用。Update()的使用也在"Bleed Out"突变模式(mutation3.nut)中被发现,但需要进一步测试以查看其行为是否与结局期间相同。 | ||
=== 结局脚本专属 === | === 结局脚本专属 === | ||
*'''<code>void OnBeginCustomFinaleStage(int ''num'', int ''type'')</code>''' | *'''<code>void OnBeginCustomFinaleStage(int ''num'', int ''type'')</code>''' | ||
: | :如果定义了,将在每个阶段改变时被调用,带有阶段编号和类型,这是你在阶段之间更改导演选项(生成方向等)的方式。<code>num</code>指的是导演传递的结局阶段编号,<code>type</code>是阶段类型(PANIC, TANK等)。 | ||
*'''<code>function OnChangeFinaleMusic()</code>''' | *'''<code>function OnChangeFinaleMusic()</code>''' | ||
:{{todo| | :{{todo|确认类别/工作}} | ||
*'''<code>function OnChangeFinaleStage(?)</code>''' | *'''<code>function OnChangeFinaleStage(?)</code>''' | ||
:{{todo| | :{{todo|确认类别/工作}} | ||
== 导演设置 == | == 导演设置 == | ||
Line 159: | Line 157: | ||
{{note|在模式和地图脚本中, 应当使用SessionOptions表来影响导演系统, 或者用MutationOptions/MapOptions 表来初始化数值. DirectorOptions表可以被地图事件复写或者重设, 如果你在结局阶段写了一个新的DirectorOptions表则将会使得结局脚本失效.}} | {{note|在模式和地图脚本中, 应当使用SessionOptions表来影响导演系统, 或者用MutationOptions/MapOptions 表来初始化数值. DirectorOptions表可以被地图事件复写或者重设, 如果你在结局阶段写了一个新的DirectorOptions表则将会使得结局脚本失效.}} | ||
更多关于导演设置的信息可以查阅[http://forums.steampowered.com/forums/showthread.php?t=1238461 Steam论坛]. | 更多关于导演设置的信息可以查阅[http://forums.steampowered.com/forums/showthread.php?t=1238461 Steam论坛]. | ||
{{Warning|鉴于该区域有太多的互动方式,你必须小心地进行设置,以确保设置符合你所需要的结果。同时,如果设置后的导演设置没有起到预期的效果,说明它们之间可能存在冲突。你需要确保你的逻辑无误或者设置一些机制来避免冲突。}} | {{Warning|鉴于该区域有太多的互动方式,你必须小心地进行设置,以确保设置符合你所需要的结果。同时,如果设置后的导演设置没有起到预期的效果,说明它们之间可能存在冲突。你需要确保你的逻辑无误或者设置一些机制来避免冲突。}} | ||
{{Warning|绝对不要使用 '''{{=}}''' 操作符来控制Director. 请使用 '''<-'''. 它们的区别在于语义. 如果你用了{{=}}, 而该值又未声明,则会抛出错误. 而<-, 在另一方面, 能够顺便创建不存在的数值.}} | {{Warning|绝对不要使用 '''{{=}}''' 操作符来控制Director. 请使用 '''<-'''. 它们的区别在于语义. 如果你用了{{=}}, 而该值又未声明,则会抛出错误. 而<-, 在另一方面, 能够顺便创建不存在的数值.}} | ||
{{note|默认值(Default values)只是给你提供参考,而并非意味着DirectorOption中的变量默认就是这些值.}} | {{note|默认值(Default values)只是给你提供参考,而并非意味着DirectorOption中的变量默认就是这些值.}} | ||
Line 175: | Line 169: | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>AddToSpawnTimer</code> | |<code>AddToSpawnTimer</code> | ||
Line 208: | Line 202: | ||
|int | |int | ||
| | | | ||
| | |已经安全的nav区域重新填充感染者的百分比机会(0-100) | ||
|- | |- | ||
|<code>DisallowThreatType</code> | |<code>DisallowThreatType</code> | ||
Line 253: | Line 247: | ||
|bool | |bool | ||
| | | | ||
|或许会阻止BOSS沿着nav产生. {{todo| | |或许会阻止BOSS沿着nav产生. {{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>InfectedFlags</code> | |<code>InfectedFlags</code> | ||
Line 283: | Line 277: | ||
|int | |int | ||
| | | | ||
| | |应该是感染者再生后的速度之类的 (也就是下一只感染者). | ||
|- | |- | ||
|<code>MobSpawnMaxTime</code> | |<code>MobSpawnMaxTime</code> | ||
Line 298: | Line 292: | ||
|int | |int | ||
| | | | ||
| | |当尸潮的感染者数量小于此数时,尸潮背景音乐停止 | ||
|- | |- | ||
|<code>MusicDynamicMobSpawnSize</code> | |<code>MusicDynamicMobSpawnSize</code> | ||
|int | |int | ||
|25 | |25 | ||
| | |当尸潮感染者数量大于此数时播放尸潮背景音乐 | ||
|- | |- | ||
|<code>MusicDynamicMobStopSize</code> | |<code>MusicDynamicMobStopSize</code> | ||
|int | |int | ||
| | | | ||
| | |当尸潮的感染者数量达到这个数值时停止播放音乐 | ||
|- | |- | ||
|<code>NumReservedWanderers</code> | |<code>NumReservedWanderers</code> | ||
Line 323: | Line 317: | ||
|int | |int | ||
| | | | ||
| | |只在夹击战中有效. | ||
|- | |- | ||
|<code>PausePanicWhenRelaxing</code> | |<code>PausePanicWhenRelaxing</code> | ||
|bool | |bool | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>PreferredMobDirection</code> | |<code>PreferredMobDirection</code> | ||
|int | |int | ||
| | | | ||
|{{note| | |{{note|这应该是感染者尸潮的产生方位}}有效标签: <code>SPAWN_ABOVE_SURVIVORS, SPAWN_ANYWHERE, SPAWN_BEHIND_SURVIVORS, SPAWN_FAR_AWAY_FROM_SURVIVORS, SPAWN_IN_FRONT_OF_SURVIVORS, SPAWN_LARGE_VOLUME, SPAWN_NEAR_IT_VICTIM, SPAWN_NO_PREFERENCE</code> | ||
{{note|<code>SPAWN_NEAR_IT_VICTIM</code> 在结局前不存在并且会导致出错, 所以我们可以猜测应该是导演系统在结局开始时选择了某人作为它(victim). <code>SPAWN_LARGE_VOLUME</code> 就是那个让你离DC(DC指的应该是死亡中心)的结局一英里远的东西.}} | {{note|<code>SPAWN_NEAR_IT_VICTIM</code> 在结局前不存在并且会导致出错, 所以我们可以猜测应该是导演系统在结局开始时选择了某人作为它(victim). <code>SPAWN_LARGE_VOLUME</code> 就是那个让你离DC(DC指的应该是死亡中心)的结局一英里远的东西.}} | ||
|- | |- | ||
Line 339: | Line 333: | ||
|[[Left 4 Dead 2/Script Functions#Vector|Vector]] | |[[Left 4 Dead 2/Script Functions#Vector|Vector]] | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作; 在dash模式中被使用了}} | ||
|- | |- | ||
|<code>PreferredMobPositionRange</code> | |<code>PreferredMobPositionRange</code> | ||
|int | |int | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作; 在dash模式中被使用了}} | ||
|- | |- | ||
|<code>PreferredSpecialDirection</code> | |<code>PreferredSpecialDirection</code> | ||
Line 375: | Line 369: | ||
|bool | |bool | ||
| | | | ||
|尸潮是否能与Tank并存. {{todo| | |尸潮是否能与Tank并存. {{todo|确认类别/工作; 可能是结局专属的功能}} | ||
|- | |- | ||
|<code>ShouldAllowSpecialsWithTank</code> | |<code>ShouldAllowSpecialsWithTank</code> | ||
|bool | |bool | ||
| | | | ||
|是否允许特感与Tank并存. {{todo| | |是否允许特感与Tank并存. {{todo|确认类别/工作; 可能是结局专属的功能}} | ||
|- | |- | ||
|<code>ShouldConstrainLargeVolumeSpawn</code> | |<code>ShouldConstrainLargeVolumeSpawn</code> | ||
|bool | |bool | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>ShouldIgnoreClearStateForSpawn</code> | |<code>ShouldIgnoreClearStateForSpawn</code> | ||
|bool | |bool | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>SpawnBehindSurvivorsDistance</code> | |<code>SpawnBehindSurvivorsDistance</code> | ||
Line 400: | Line 394: | ||
| | | | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>SpecialInitialSpawnDelayMax</code> | |<code>SpecialInitialSpawnDelayMax</code> | ||
Line 435: | Line 429: | ||
|float | |float | ||
|1.0 | |1.0 | ||
|(mutation1.nut Last Man on Earth) {{todo| | |(mutation1.nut Last Man on Earth) {{todo|确认类别}} | ||
|- | |- | ||
|<code>TankRunSpawnDelay</code> | |<code>TankRunSpawnDelay</code> | ||
|float | |float | ||
|15 | |15 | ||
|单位秒 (mutation19.nut Taaannnkk!) {{todo| | |单位秒 (mutation19.nut Taaannnkk!) {{todo|确认类别}} | ||
|- | |- | ||
|<code>TempHealthDecayRate</code> | |<code>TempHealthDecayRate</code> | ||
Line 465: | Line 459: | ||
|bool | |bool | ||
|false | |false | ||
| | |允许感染者在处于雾区的幸存者的视线内产生. | ||
|- | |- | ||
|<code>ZombieSpawnRange</code> | |<code>ZombieSpawnRange</code> | ||
|float | |float | ||
| | | | ||
| | |感染者最多可以从距离幸存者多远的地方产生. | ||
|- | |- | ||
|<code>ZombieTankHealth</code> | |<code>ZombieTankHealth</code> | ||
Line 481: | Line 475: | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>BileMobSize</code> | |<code>BileMobSize</code> | ||
| int | | int | ||
| | | | ||
| | |胆汁瓶爆炸之后产生的感染者数量。似乎只在结局中有效。死亡中心和牺牲这两个地图中使用了这个变量。 | ||
|- | |- | ||
|<code>BoomerLimit</code> | |<code>BoomerLimit</code> | ||
Line 504: | Line 498: | ||
|int | |int | ||
|30 | |30 | ||
| | |最多允许多少感染者同时存在. | ||
|- | |- | ||
|<code>DominatorLimit</code> | |<code>DominatorLimit</code> | ||
|int | |int | ||
| | | | ||
|最多允许多少Hunters, Smokers, Jockeys和 Chargers同时存在. {{todo| | |最多允许多少Hunters, Smokers, Jockeys和 Chargers同时存在. {{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>HunterLimit</code> | |<code>HunterLimit</code> | ||
Line 529: | Line 523: | ||
|int | |int | ||
| | | | ||
|一次尸潮最多产生多少感染者.{{note| | |一次尸潮最多产生多少感染者.{{note|优先级可能高于<code>MobMaxSize</code>}} | ||
|- | |- | ||
|<code>MobMaxPending</code> | |<code>MobMaxPending</code> | ||
|int | |int | ||
| | | | ||
| | |当尸潮的感染者数量超过<code>CommonLimit</code>时最多有多少感染者可以暂时等待生成. | ||
|- | |- | ||
|<code>MobMaxSize</code> | |<code>MobMaxSize</code> | ||
Line 554: | Line 548: | ||
|int | |int | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作; 可能是夹击战结局专属的功能}} | ||
|- | |- | ||
|<code>SmokerLimit</code> | |<code>SmokerLimit</code> | ||
Line 580: | Line 574: | ||
{{todo}} | {{todo}} | ||
''' | '''参见 {{L|L4D2_EMS/Appendix:_Spawning_Infected}}''' | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>PanicSpecialsOnly</code> | |<code>PanicSpecialsOnly</code> | ||
|bool | |bool | ||
| | | | ||
| | |恐慌事件应在完成特感后结束,而不是等待大型尸潮。 | ||
|- | |- | ||
|<code>PanicWavePauseMax</code> | |<code>PanicWavePauseMax</code> | ||
|float | |float | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>PanicWavePauseMin</code> | |<code>PanicWavePauseMin</code> | ||
|float | |float | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>ScriptedStageType</code> | |<code>ScriptedStageType</code> | ||
|int | |int | ||
| | | | ||
| | |下一个要运行的阶段类型。参见{{L|L4D2_EMS/StageTypeAppendix}}了解阶段类型的描述。 | ||
|- | |- | ||
|<code>ScriptedStageValue</code> | |<code>ScriptedStageValue</code> | ||
|int | |int | ||
| | | | ||
| | |取决于阶段类型。 | ||
|- | |- | ||
|<code>SpawnDirectionCount</code> | |<code>SpawnDirectionCount</code> | ||
| | | | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>SpawnDirectionMask</code> | |<code>SpawnDirectionMask</code> | ||
|int | |int | ||
| | | | ||
| | |一个位字段(使用<code>SPAWNDIR_N, _NE, _E</code>等)指定导演从相对于地图中名为<code>Compass</code>的实体的方向生成。专为类似生存模式的游戏模式设计。参见{{L|L4D2_EMS/Appendix:_Spawning_Infected}}。 | ||
|- | |- | ||
|<code>SpawnSetPosition</code> | |<code>SpawnSetPosition</code> | ||
|[[Left 4 Dead 2/Script Functions#Vector|Vector]] | |[[Left 4 Dead 2/Script Functions#Vector|Vector]] | ||
| | | | ||
| | |当<code>SpawnSetRule</code>设置为<code>SPAWN_POSITIONAL</code>时,感染者可以生成的区域中心点。 | ||
|- | |- | ||
|<code>SpawnSetRadius</code> | |<code>SpawnSetRadius</code> | ||
|int | |int | ||
| | | | ||
| | |当<code>SpawnSetRule</code>设置为<code>SPAWN_POSITIONAL</code>时,感染者可以从中心点生成多远。 | ||
|- | |- | ||
|<code>SpawnSetRule</code> | |<code>SpawnSetRule</code> | ||
|int | |int | ||
| | | | ||
| | |覆盖使用的生成模式。似乎在结局中无效。有效标志有:<code>SPAWN_ANYWHERE, SPAWN_FINALE, SPAWN_BATTLEFIELD, SPAWN_SURVIVORS, SPAWN_POSITIONAL</code> | ||
|- | |- | ||
|<code>TotalBoomers</code> | |<code>TotalBoomers</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的Boomer数量。 | ||
|- | |- | ||
|<code>TotalChargers</code> | |<code>TotalChargers</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的Charger数量。 | ||
|- | |- | ||
|<code>TotalHunters</code> | |<code>TotalHunters</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的Hunter数量。 | ||
|- | |- | ||
|<code>TotalJockeys</code> | |<code>TotalJockeys</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的Jockey数量。 | ||
|- | |- | ||
|<code>TotalSmokers</code> | |<code>TotalSmokers</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的Smoker数量。 | ||
|- | |- | ||
|<code>TotalSpecials</code> | |<code>TotalSpecials</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的特感总数。 | ||
|- | |- | ||
|<code>TotalSpitters</code> | |<code>TotalSpitters</code> | ||
|int | |int | ||
| | | | ||
| | |一波中允许的Spitter数量。 | ||
|} | |} | ||
*'''function <code>void g_ModeScript::GetNextStage()</code> ''' | *'''function <code>void g_ModeScript::GetNextStage()</code> ''' | ||
: | : 当导演想要一个新阶段时调用。可以使用<code>Director.ForceNextStage()</code>强制调用。 | ||
=== 结局专属/相关 === | === 结局专属/相关 === | ||
Line 682: | Line 675: | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>''A''_CustomFinale_StageCount</code> | |<code>''A''_CustomFinale_StageCount</code> | ||
Line 710: | Line 703: | ||
|bool | |bool | ||
| | | | ||
|可能用于强制执行结局出生行为但并不进入结局阶段。 {{todo| | |可能用于强制执行结局出生行为但并不进入结局阶段。 {{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>HordeEscapeCommonLimit</code> | |<code>HordeEscapeCommonLimit</code> | ||
Line 729: | Line 722: | ||
=== 夹击战专属/相关 === | === 夹击战专属/相关 === | ||
这些选项特定于夹击战结局。大多数可以在director_gauntlet.nut中找到。 | |||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>CustomTankKiteDistance</code> | |<code>CustomTankKiteDistance</code> | ||
|int | |int | ||
|3000 | |3000 | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|} | |} | ||
;''' | ;'''移动奖励相关选项''' | ||
: | :当幸存者在夹击战目标方面没有进展时,移动奖励会连续增加尸潮之间的延迟。当前奖励值每秒递减,当达到0时允许生成尸潮。当生成尸潮时,当前奖励重置为移动奖励值。移动奖励按设定的时间间隔增加,并在幸存者跨越移动阈值时重置,然后递增。使用<code>director_debug 1</code>查看这些值。 | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>GauntletMovementThreshold</code> | |<code>GauntletMovementThreshold</code> | ||
|float | |float | ||
| | | | ||
| | |幸存者可以前进的流程单位数量,然后移动奖励重置。 | ||
|- | |- | ||
|<code>GauntletMovementTimerLength</code> | |<code>GauntletMovementTimerLength</code> | ||
|float | |float | ||
| | | | ||
| | |每次移动奖励增加之间的时间间隔,以秒为单位。 | ||
|- | |- | ||
|<code>GauntletMovementBonus</code> | |<code>GauntletMovementBonus</code> | ||
|float | |float | ||
| | | | ||
| | |初始值,以及移动奖励每个时间间隔增加的数量,以秒为单位。 | ||
|- | |- | ||
|<code>GauntletMovementBonusMax</code> | |<code>GauntletMovementBonusMax</code> | ||
|float | |float | ||
| | | | ||
| | |移动奖励可以达到的最大值。 | ||
|} | |} | ||
Line 777: | Line 770: | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>TankHitDamageModifierVersus</code> | |<code>TankHitDamageModifierVersus</code> | ||
Line 790: | Line 783: | ||
|int | |int | ||
|30 | |30 | ||
| | |允许玩家感染者重生前的最大时间(秒)。 | ||
|- | |- | ||
|<code>ZombieGhostDelayMin</code> | |<code>ZombieGhostDelayMin</code> | ||
|int | |int | ||
|20 | |20 | ||
| | |允许玩家感染者重生前的最小时间(秒)。 | ||
|} | |} | ||
Line 801: | Line 794: | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>ScavengeClusterBonusTime</code> | |<code>ScavengeClusterBonusTime</code> | ||
|float | |float | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>ScavengeRoundInitialTime</code> | |<code>ScavengeRoundInitialTime</code> | ||
|float | |float | ||
| | | | ||
|{{todo| | |{{todo|确认类别/工作}} | ||
|- | |- | ||
|<code>ScavengeScoreBonusTime</code> | |<code>ScavengeScoreBonusTime</code> | ||
|float | |float | ||
| | | | ||
|( | |(用于 mutation13.nut Follow the Liter) | ||
|} | |} | ||
=== | === 生存模式专属/相关 === | ||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>SurvivalSetupTime</code> | |<code>SurvivalSetupTime</code> | ||
|float | |float | ||
| | | | ||
|( | |(用于 mutation15.nut 的生存对抗模式,设置时间为90秒) | ||
|} | |} | ||
=== 突变模式专属/相关 === | === 突变模式专属/相关 === | ||
其中一些值是全局值的突变特定值(cm_CommonLimit,cm_MaxSpecials等),因此如果您正在制作突变模式,请使用它们,以防任何地图脚本更改全局值。 | |||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>cm_AggressiveSpecials</code> | |<code>cm_AggressiveSpecials</code> | ||
Line 853: | Line 846: | ||
|bool | |bool | ||
|true | |true | ||
| | |允许药丸转换为医疗包。 | ||
|- | |- | ||
|<code>cm_AllowSurvivorRescue</code> | |<code>cm_AllowSurvivorRescue</code> | ||
Line 863: | Line 856: | ||
|bool | |bool | ||
|false | |false | ||
| | |当被特感击倒时立即复活幸存者。 | ||
|- | |- | ||
|<code>cm_AutoSpawnInfectedGhosts</code> | |<code>cm_AutoSpawnInfectedGhosts</code> | ||
Line 893: | Line 886: | ||
|int | |int | ||
|false | |false | ||
| | |当第一个幸存者到达逃生载具时结束逃生。 | ||
|- | |- | ||
|<code>cm_frustrationTimer</code> | |<code>cm_frustrationTimer</code> | ||
Line 948: | Line 941: | ||
| | | | ||
| | | | ||
| | |用于清道夫模式油桶逐个生成。 | ||
|- | |- | ||
|<code>cm_SpecialRespawnInterval</code> | |<code>cm_SpecialRespawnInterval</code> | ||
Line 973: | Line 966: | ||
| | | | ||
| | | | ||
| | |用于 Taaank! 突变模式 (mutation19.nut)。 | ||
|- | |- | ||
|<code>cm_TempHealthOnly</code> | |<code>cm_TempHealthOnly</code> | ||
Line 997: | Line 990: | ||
=== 无用设置 === | === 无用设置 === | ||
这些似乎不被导演读取。 | |||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 名称 | ||
! | ! 类型 | ||
! | ! 默认值 | ||
! | ! 描述 | ||
|- | |- | ||
|<code>ActiveChallenge</code> | |<code>ActiveChallenge</code> | ||
|bool | |bool | ||
|false | |false | ||
| | |激活突变模式。似乎在EMS更新后已过时。 | ||
|- | |- | ||
|<code>MegaMobMaxSize</code> | |<code>MegaMobMaxSize</code> | ||
|int | |int | ||
| | | | ||
| | |恐慌事件期间生成的总感染者的最大数量。2014.04.29 不起作用。 | ||
|- | |- | ||
|<code>MegaMobMinSize</code> | |<code>MegaMobMinSize</code> | ||
|int | |int | ||
| | | | ||
| | |恐慌事件期间生成的总感染者的最小数量。2014.04.29 不起作用。 | ||
|} | |} | ||
=== 钩子函数 === | === 钩子函数 === | ||
这些函数被放置在DirectorOptions表中,并在地图加载时被调用。 | |||
{| class="standard-table" style="width: 100%;" | {| class="standard-table" style="width: 100%;" | ||
! | ! 函数 | ||
! | ! 签名 | ||
! | ! 描述 | ||
|- | |- | ||
| <code>AllowWeaponSpawn</code> | | <code>AllowWeaponSpawn</code> | ||
| <code>bool AllowWeaponSpawn(string ''classname'')</code> | | <code>bool AllowWeaponSpawn(string ''classname'')</code> | ||
| | | 返回给定类名是否允许生成,被多个突变模式使用。 | ||
|- | |- | ||
| <code>ConvertWeaponSpawn</code> | | <code>ConvertWeaponSpawn</code> | ||
| <code>string ConvertWeaponSpawn(string ''classname'')</code> | | <code>string ConvertWeaponSpawn(string ''classname'')</code> | ||
| | | 将给定类名的武器生成转换为另一个,被多个突变模式使用。 | ||
|- | |- | ||
| <code>ConvertZombieClass</code> | | <code>ConvertZombieClass</code> | ||
| <code>int ConvertZombieClass(''infectedClass'')</code> | | <code>int ConvertZombieClass(''infectedClass'')</code> | ||
| | | 将一个生成转换为另一个,被 Taaannnk!! 突变模式使用 (mutation19.nut)。 | ||
|- | |- | ||
| <code>GetDefaultItem</code> | | <code>GetDefaultItem</code> | ||
| <code>string GetDefaultItem(index)</code> | | <code>string GetDefaultItem(index)</code> | ||
| | | 使用递增索引重复调用。返回武器名称的字符串以使其成为幸存者的默认物品,或返回0以结束迭代。 | ||
|- | |- | ||
| <code>ShouldAvoidItem</code> | | <code>ShouldAvoidItem</code> | ||
| <code>bool ShouldAvoidItem(string ''classname'')</code> | | <code>bool ShouldAvoidItem(string ''classname'')</code> | ||
| {{todo| | | {{todo|可能是与机器人相关或生成相关的函数}} | ||
|} | |} | ||
== 枚举 == | == 枚举 == | ||
* | *导演枚举 {{note|这些是(或部分是)'''脚本特定的''',因此有重复的值。}} | ||
**ALLOW_BASH_ALL = 0 | **ALLOW_BASH_ALL = 0 | ||
**ALLOW_BASH_NONE = 2 | **ALLOW_BASH_NONE = 2 |
Latest revision as of 23:26, 3 October 2025

You can help by updating the translation.
Also, please make sure the article complies with the alternate languages guide.
求生之路2导演脚本 是主要用于影响人工智能导演系统(AI Director)的行为的 脚本 . 它们被广泛用于自定义结局和尸潮事件.
本页面内容由Dazai Nerau译自英文版页面 . 欢迎任何人补充新内容或者修改其中的错误.
用法
执行导演脚本的方式是向 info_director 实体进行输入(input). 一个导演设置
表用于给导演系统所使用的变量提供新的临时值. 其他额外的命令可以通过Director
对象访问.

输入
BeginScript <script name>
- 执行一个普通的导演脚本, 比如为了onslaught事件而设计的脚本.
EndScript
- 停止执行脚本并重置导演系统设置中的变量值.
BeginScriptedPanicEvent <script name>
- 执行一次脚本化的尸潮

BeginScriptedPanicEvent
一起使用的脚本将无法工作,即使你能在其他脚本的上下文中使用子目录. 它们必须位于vscripts文件夹下,否则它们只会简单地以1个阶段1秒的延迟运作.通用脚本与尸潮
当导演系统执行BeginScript
输入时,指定的脚本便会运行,直到新的脚本被执行。或者脚本也可通过EndScript
输入来手动结束. 除非改变了导演设置,否则游戏模式照常运行。
尸潮事件可以通过操纵感染者和特感的数量上限以及游戏节奏来实现。
c2m4_barns_onslaught.nut
(附注释):
Msg("Initiating Onslaught\n");
DirectorOptions <-
{
//允许BOSS感染者 (false = 允许 ; true = 禁止)
ProhibitBosses = false
//锁定游戏节奏 (true = 锁定 ; false = 不锁定)
//一般的地图没有必要锁定游戏节奏,除非你需要大量地无限制地刷尸潮,就像大灾变那样
//LockTempo = true
// 设置感染者的产生时间间隔. 感染者只有在节奏处于BUILD_UP状态时才会产生.
MobSpawnMinTime = 1
MobSpawnMaxTime = 1
// 每波尸潮产生多少感染者.
MobMinSize = 30
MobMaxSize = 30
MobMaxPending = 30
// 修改SUSTAIN_PEAK 和 RELAX 状态的时间长度以缩短感染者产生的时间间隔.
SustainPeakMinTime = 5
SustainPeakMaxTime = 10
IntensityRelaxThreshold = 0.99
RelaxMinInterval = 1
RelaxMaxInterval = 5
RelaxMaxFlowTravel = 50
//特感设置
SpecialRespawnInterval = 1.0
SmokerLimit = 2
JockeyLimit = 0
BoomerLimit = 0
HunterLimit = 2
ChargerLimit = 1
// 有效产生区域
PreferredMobDirection = SPAWN_NO_PREFERENCE
ZombieSpawnRange = 2000
}
Director.ResetMobTimer() // 将感染者产生计时器归零(只在节奏未锁定时有意义).
Director.PlayMegaMobWarningSounds() // 即将尸潮音效.
结局与脚本化的尸潮事件
结局与脚本化的尸潮事件包含了数种被设置于DirectorOptions
之中的不同的阶段.
结局的导演脚本通常从 <map name>_finale.nut
中被加载. 脚本化的尸潮事件则可以从 info_director 的 BeginScriptedPanicEvent
输入中被执行.

阶段的类型有四种 (其他值会打断结局并使得玩家直接成功获救(ESCAPE)):
- PANIC - 尸潮, 数值是感染者的波数.
- TANK - 产生tank, 数值是产生tank的数量.
- DELAY - 间歇, 数值是进入下一阶段前等待的秒数.
- SCRIPTED (也叫ONSLAUGHT) - 数值是要调用的VScript的脚本名或者"" (这样设置的的话导演系统将不做任何行为), 如果在这里乱写的话你的游戏就会崩溃. 你的脚本会负责发送
EndCustomScriptedStage
输入给导演系统 (你选择的目标, 比如某个确切的触发量, 计时器, 随机值, 等等.). trigger_finale 输入AdvanceFinaleState
应该也能工作. 否则, 尸潮事件不会结束
一个关于自定义结局脚本的例子:
ERROR <- -1
PANIC <- 0
TANK <- 1
DELAY <- 2
SCRIPTED <- 3
DirectorOptions <-
{
//-----------------------------------------------------
A_CustomFinale_StageCount = 8 // 阶段的数量. 用于计算对抗得分.
A_CustomFinale1 = PANIC
A_CustomFinaleValue1 = 2 // 两拨尸潮.
A_CustomFinale2 = DELAY
A_CustomFinaleValue2 = 12 // 延迟12秒进入下一阶段.
A_CustomFinale3 = TANK
A_CustomFinaleValue3 = 3 // 3只tank!
A_CustomFinale4 = DELAY
A_CustomFinaleValue4 = 12 // 等一段时间.
A_CustomFinale5 = SCRIPTED
A_CustomFinaleValue5 = "my_scripted_stage.nut" // 运行自定义脚本.
A_CustomFinale6 = DELAY
A_CustomFinaleValue6 = 15 // 等它个15秒.
A_CustomFinale7 = TANK
A_CustomFinaleValue7 = 1 // tank什么的可以再来一只.
A_CustomFinale8 = DELAY
A_CustomFinaleValue8 = 10 // 再撑10秒 ... 获救!
//-----------------------------------------------------
CommonLimit = 10
SpecialRespawnInterval = 25
}
function OnBeginCustomFinaleStage( num, type ) // 这个函数会在每个阶段开始时被调用.
{
printl( "Beginning custom finale stage " + num + " of type " + type );
MapScript.DirectorOptions.CommonLimit <- num * 10 // 随着阶段线性增加10个感染者.
}
智能的剧情性节奏(Adaptive Dramatic Pacing)
回调
void Update()
- 如果在导演脚本中定义了
Update()
函数,它会像Think()
函数一样重复运行,但只有在通过trigger_finale 触发结局时才会运行。如果有多个运行中的脚本定义了它,它们都会被调用。Update()的使用也在"Bleed Out"突变模式(mutation3.nut)中被发现,但需要进一步测试以查看其行为是否与结局期间相同。
结局脚本专属
void OnBeginCustomFinaleStage(int num, int type)
- 如果定义了,将在每个阶段改变时被调用,带有阶段编号和类型,这是你在阶段之间更改导演选项(生成方向等)的方式。
num
指的是导演传递的结局阶段编号,type
是阶段类型(PANIC, TANK等)。
function OnChangeFinaleMusic()
- 待完善: 确认类别/工作
function OnChangeFinaleStage(?)
- 待完善: 确认类别/工作
导演设置
DirectorOptions
表里的各种变量就是用来让你随便改的。

更多关于导演设置的信息可以查阅Steam论坛.



通用
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
AddToSpawnTimer
|
|||
AllowCrescendoEvents
|
bool | ||
AllowWitchesInCheckpoints
|
bool | ||
AlwaysAllowWanderers
|
bool | ||
BuildUpMinInterval
|
|||
ClearedWandererRespawnChance
|
int | 已经安全的nav区域重新填充感染者的百分比机会(0-100) | |
DisallowThreatType
|
int | 禁止BOSS感染者在合作模式的threat 区域中产生. 有效类型: ZOMBIE_WITCH, ZOMBIE_TANK
| |
FallenSurvivorPotentialQuantity
|
int | 总共有多少倒地的幸存者能出生. | |
FallenSurvivorSpawnChance
|
float | [0...1] | |
FarAcquireRange
|
int | 2500 | 感染者能识别人类的最大距离. |
NearAcquireRange
|
int | 200 | 感染者能识别人类的最近距离. |
FarAcquireTime
|
float | 5.0 | 感染者识别人类需要花费的最长时间 |
NearAcquireTime
|
float | 0.5 | 感染者识别人类需要花费的最短时间 |
GasCansOnBacks
|
bool | 将Hard Rain的油罐放在生还者的背上 | |
IgnoreNavThreatAreas
|
bool | 或许会阻止BOSS沿着nav产生. 待完善: 确认类别/工作
| |
InfectedFlags
|
int | 赋予新产生的感染者一些标签,标签包括: INFECTED_FLAG_CANT_SEE_SURVIVORS, INFECTED_FLAG_CANT_HEAR_SURVIVORS, INFECTED_FLAG_CANT_FEEL_SURVIVORS
| |
IntensityRelaxAllowWanderersThreshold
|
float | ||
IntensityRelaxThreshold
|
float | 在允许Peak转换为Relax之前,所有幸存者必须低于此强度(除了正常的峰值计时器) | |
JournalString
|
string | 待完善: 在抵抗模式中有用,似乎构建了某种表.
| |
LockTempo
|
bool | false | 尸潮产生的节奏是这样的: BUILD_UP -> 产生尸潮 -> SUSTAIN_PEAK -> RELAX -> 再次 BUILD_UP . 设置LockTempo = true 会移除 "SUSTAIN_PEAK -> RELAX -> BUILD_UP" 使你的尸潮无延迟地直接产生. |
MobRechargeRate
|
int | 应该是感染者再生后的速度之类的 (也就是下一只感染者). | |
MobSpawnMaxTime
|
int | 180-240 | 两波尸潮产生的最大时间间隔(单位秒).默认值取决于难度. |
MobSpawnMinTime
|
int | 90-120 | 两波尸潮产生的最小时间间隔(单位秒). 默认值取决于难度. |
MusicDynamicMobScanStopSize
|
int | 当尸潮的感染者数量小于此数时,尸潮背景音乐停止 | |
MusicDynamicMobSpawnSize
|
int | 25 | 当尸潮感染者数量大于此数时播放尸潮背景音乐 |
MusicDynamicMobStopSize
|
int | 当尸潮的感染者数量达到这个数值时停止播放音乐 | |
NumReservedWanderers
|
int | 不能因成为尸潮而消失的闲逛感染者的数量 | |
NoMobSpawns
|
bool | false | 防止产生新的尸潮. 并不重设计时器, 并且会暂挂已经出生的感染者. |
PanicForever
|
int | 只在夹击战中有效. | |
PausePanicWhenRelaxing
|
bool | 待完善: 确认类别/工作
| |
PreferredMobDirection
|
int | ![]() SPAWN_ABOVE_SURVIVORS, SPAWN_ANYWHERE, SPAWN_BEHIND_SURVIVORS, SPAWN_FAR_AWAY_FROM_SURVIVORS, SPAWN_IN_FRONT_OF_SURVIVORS, SPAWN_LARGE_VOLUME, SPAWN_NEAR_IT_VICTIM, SPAWN_NO_PREFERENCE
![]() SPAWN_NEAR_IT_VICTIM 在结局前不存在并且会导致出错, 所以我们可以猜测应该是导演系统在结局开始时选择了某人作为它(victim). SPAWN_LARGE_VOLUME 就是那个让你离DC(DC指的应该是死亡中心)的结局一英里远的东西. | |
PreferredMobPosition
|
Vector | 待完善: 确认类别/工作; 在dash模式中被使用了
| |
PreferredMobPositionRange
|
int | 待完善: 确认类别/工作; 在dash模式中被使用了
| |
PreferredSpecialDirection
|
int | ![]() ![]() PreferredMobDirection 同样适用于此,但它还多出了如下两个标签,目前尚不清楚这两个标签是不是多余的.
SPAWN_SPECIALS_ANYWHERE, SPAWN_SPECIALS_IN_FRONT_OF_SURVIVORS | |
ProhibitBosses
|
bool | 禁止导演系统产生Witch和Tank. 只在合作模式中有效. | |
RelaxMaxFlowTravel
|
float | 在节奏从RELAX转换到BUILD_UP的期间生还者可以前进多远![]() | |
RelaxMaxInterval
|
float | RELAX节奏持续的最大时间![]() | |
RelaxMinInterval
|
float | RELAX节奏持续的最小时间![]() | |
ShouldAllowMobsWithTank
|
bool | 尸潮是否能与Tank并存. 待完善: 确认类别/工作; 可能是结局专属的功能
| |
ShouldAllowSpecialsWithTank
|
bool | 是否允许特感与Tank并存. 待完善: 确认类别/工作; 可能是结局专属的功能
| |
ShouldConstrainLargeVolumeSpawn
|
bool | 待完善: 确认类别/工作
| |
ShouldIgnoreClearStateForSpawn
|
bool | 待完善: 确认类别/工作
| |
SpawnBehindSurvivorsDistance
|
前提是PreferredSpecialDirection = SPAWN_BEHIND_SURVIVORS
| ||
SpecialInfectedAssault
|
待完善: 确认类别/工作
| ||
SpecialInitialSpawnDelayMax
|
float | ||
SpecialInitialSpawnDelayMin
|
float | ||
SpecialRespawnInterval
|
float | 一个特感通道产生一个特感的冷却时间. | |
SurvivorMaxIncapacitatedCount
|
int | 死前倒地的幸存者的最大数量. | |
SustainPeakMaxTime
|
float | 单位分钟 | |
SustainPeakMinTime
|
float | 单位分钟 | |
TankHitDamageModifierCoop
|
float | 1.0 | (mutation1.nut Last Man on Earth) 待完善: 确认类别
|
TankRunSpawnDelay
|
float | 15 | 单位秒 (mutation19.nut Taaannnkk!) 待完善: 确认类别
|
TempHealthDecayRate
|
float | 0.27 | 0.27 是 pain_pills_decay_rate 默认的, 数值越高衰减越快.
|
WanderingZombieDensityModifier
|
float | 1.0 | 流浪感染者的乘数. |
ZombieDiscardRange
|
int | 待完善: 可能是流浪感染者消失的范围
| |
ZombieDontClear
|
|||
ZombieSpawnInFog
|
bool | false | 允许感染者在处于雾区的幸存者的视线内产生. |
ZombieSpawnRange
|
float | 感染者最多可以从距离幸存者多远的地方产生. | |
ZombieTankHealth
|
int | 设置Tank的生命值. |
限制出生
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
BileMobSize
|
int | 胆汁瓶爆炸之后产生的感染者数量。似乎只在结局中有效。死亡中心和牺牲这两个地图中使用了这个变量。 | |
BoomerLimit
|
int | 1 | 最多允许多少Boomer同时存在. |
ChargerLimit
|
int | 1 | 最多允许多少Charger同时存在. |
CommonLimit
|
int | 30 | 最多允许多少感染者同时存在. |
DominatorLimit
|
int | 最多允许多少Hunters, Smokers, Jockeys和 Chargers同时存在. 待完善: 确认类别/工作
| |
HunterLimit
|
int | 1 | 最多允许多少Hunter同时存在. |
JockeyLimit
|
int | 1 | 最多允许多少Jockey同时存在. |
MaxSpecials
|
int | 2 | 导演系统最多允许多少种特感同时存在. |
MegaMobSize
|
int | 一次尸潮最多产生多少感染者.![]() MobMaxSize | |
MobMaxPending
|
int | 当尸潮的感染者数量超过CommonLimit 时最多有多少感染者可以暂时等待生成.
| |
MobMaxSize
|
int | 30 | 一次尸潮最多产生多少感染者. |
MobMinSize
|
int | 10 | 一次尸潮最少产生多少感染者. |
MobSpawnSize
|
int | 一次尸潮中感染者的静态数量. 优先级高于MobMinSize 和MobMinSize .
| |
PreTankMobMax
|
int | 待完善: 确认类别/工作; 可能是夹击战结局专属的功能
| |
SmokerLimit
|
int | 1 | 最多允许多少Smoker同时存在. |
SpitterLimit
|
int | 1 | 最多允许多少Spitter同时存在. |
TankLimit
|
int | 1 | 最多允许多少Tank同时存在. |
WitchLimit
|
int | 1 | 最多允许多少Witch同时存在. |
EMS阶段专属
[待完善]
参见 L4D2_EMS/Appendix:_Spawning_Infected
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
PanicSpecialsOnly
|
bool | 恐慌事件应在完成特感后结束,而不是等待大型尸潮。 | |
PanicWavePauseMax
|
float | 待完善: 确认类别/工作
| |
PanicWavePauseMin
|
float | 待完善: 确认类别/工作
| |
ScriptedStageType
|
int | 下一个要运行的阶段类型。参见L4D2_EMS/StageTypeAppendix 了解阶段类型的描述。 | |
ScriptedStageValue
|
int | 取决于阶段类型。 | |
SpawnDirectionCount
|
待完善: 确认类别/工作
| ||
SpawnDirectionMask
|
int | 一个位字段(使用SPAWNDIR_N, _NE, _E 等)指定导演从相对于地图中名为Compass 的实体的方向生成。专为类似生存模式的游戏模式设计。参见L4D2_EMS/Appendix:_Spawning_Infected 。
| |
SpawnSetPosition
|
Vector | 当SpawnSetRule 设置为SPAWN_POSITIONAL 时,感染者可以生成的区域中心点。
| |
SpawnSetRadius
|
int | 当SpawnSetRule 设置为SPAWN_POSITIONAL 时,感染者可以从中心点生成多远。
| |
SpawnSetRule
|
int | 覆盖使用的生成模式。似乎在结局中无效。有效标志有:SPAWN_ANYWHERE, SPAWN_FINALE, SPAWN_BATTLEFIELD, SPAWN_SURVIVORS, SPAWN_POSITIONAL
| |
TotalBoomers
|
int | 一波中允许的Boomer数量。 | |
TotalChargers
|
int | 一波中允许的Charger数量。 | |
TotalHunters
|
int | 一波中允许的Hunter数量。 | |
TotalJockeys
|
int | 一波中允许的Jockey数量。 | |
TotalSmokers
|
int | 一波中允许的Smoker数量。 | |
TotalSpecials
|
int | 一波中允许的特感总数。 | |
TotalSpitters
|
int | 一波中允许的Spitter数量。 |
- function
void g_ModeScript::GetNextStage()
- 当导演想要一个新阶段时调用。可以使用
Director.ForceNextStage()
强制调用。
结局专属/相关
通常一个结局会包含X个阶段. DirectorOptions中的一些变量只能用于结局阶段. 在脚本中也能定义多阶段结局, 只要在选项开头冠以A_, B_, C_ 等等
即可
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
A_CustomFinale_StageCount
|
int | 阶段数量. 需要设置对抗得分才能正常运行. | |
A_CustomFinaleX
|
int | 阶段类型 (包含PANIC, SCRIPTED (AKA ONSLAUGHT), DELAY, TANK), X是阶段数. 也用于脚本化尸潮. | |
A_CustomFinaleValueX
|
* | 值取决于上面的阶段类型. 也用于脚本化尸潮. 请看上方的举例. | |
A_CustomFinaleMusicX
|
string | Soundscript 引入游戏. 例如, A_CustomFinaleMusic1 = "C2M5.BadManTank2" . 注意 c2m5_concert_finale.nut 不使用此方法,而是选择使用地图中的实体. 在c2m5 的脚本中 A_CustomFinaleMusic4 = "" , 意味着实际上没有歌曲通过脚本自动播放.
| |
EnforceFinaleNavSpawnRules
|
bool | 可能用于强制执行结局出生行为但并不进入结局阶段。 待完善: 确认类别/工作
| |
HordeEscapeCommonLimit
|
逃离阶段允许的感染者数量. | ||
EscapeSpawnTanks
|
bool | 是否在逃离阶段中产生Tank. 待完善: 可能与EMS阶段有关
| |
MinimumStageTime
|
int | 在结束之前允许SCRIPTED阶段运行的最短时间. |
夹击战专属/相关
这些选项特定于夹击战结局。大多数可以在director_gauntlet.nut中找到。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
CustomTankKiteDistance
|
int | 3000 | 待完善: 确认类别/工作
|
- 移动奖励相关选项
- 当幸存者在夹击战目标方面没有进展时,移动奖励会连续增加尸潮之间的延迟。当前奖励值每秒递减,当达到0时允许生成尸潮。当生成尸潮时,当前奖励重置为移动奖励值。移动奖励按设定的时间间隔增加,并在幸存者跨越移动阈值时重置,然后递增。使用
director_debug 1
查看这些值。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
GauntletMovementThreshold
|
float | 幸存者可以前进的流程单位数量,然后移动奖励重置。 | |
GauntletMovementTimerLength
|
float | 每次移动奖励增加之间的时间间隔,以秒为单位。 | |
GauntletMovementBonus
|
float | 初始值,以及移动奖励每个时间间隔增加的数量,以秒为单位。 | |
GauntletMovementBonusMax
|
float | 移动奖励可以达到的最大值。 |
对抗模式专属/相关
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
TankHitDamageModifierVersus
|
float | 1.0 | |
ZombieGhostDelayMax
|
int | 30 | 允许玩家感染者重生前的最大时间(秒)。 |
ZombieGhostDelayMin
|
int | 20 | 允许玩家感染者重生前的最小时间(秒)。 |
清道夫模式专属/相关
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
ScavengeClusterBonusTime
|
float | 待完善: 确认类别/工作
| |
ScavengeRoundInitialTime
|
float | 待完善: 确认类别/工作
| |
ScavengeScoreBonusTime
|
float | (用于 mutation13.nut Follow the Liter) |
生存模式专属/相关
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
SurvivalSetupTime
|
float | (用于 mutation15.nut 的生存对抗模式,设置时间为90秒) |
突变模式专属/相关
其中一些值是全局值的突变特定值(cm_CommonLimit,cm_MaxSpecials等),因此如果您正在制作突变模式,请使用它们,以防任何地图脚本更改全局值。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
cm_AggressiveSpecials
|
bool | true | |
cm_AllowPillConversion
|
bool | true | 允许药丸转换为医疗包。 |
cm_AllowSurvivorRescue
|
bool | ||
cm_AutoReviveFromSpecialIncap
|
bool | false | 当被特感击倒时立即复活幸存者。 |
cm_AutoSpawnInfectedGhosts
|
bool | ||
cm_BaseCommonAttackDamage
|
|||
cm_BaseSpecialLimit
|
int | ||
cm_CommonLimit
|
int | ||
cm_DominatorLimit
|
int | ||
cm_FirstManOut
|
int | false | 当第一个幸存者到达逃生载具时结束逃生。 |
cm_frustrationTimer
|
|||
cm_HeadshotOnly
|
|||
cm_HealingGnome
|
|||
cm_InfiniteFuel
|
(mutation7.nut Chainsaw Massacre) | ||
cm_MaxSpecials
|
|||
cm_NoRescueClosets
|
|||
cm_NoSurvivorBots
|
|||
cm_ProhibitBosses
|
|||
cm_ShouldEscortHumanPlayers
|
|||
cm_ShouldHurry
|
|||
cm_SingleScavengeCluster
|
用于清道夫模式油桶逐个生成。 | ||
cm_SpecialRespawnInterval
|
|||
cm_SpecialSlotCountdownTime
|
|||
cm_SpecialsRetreatToCover
|
|||
cm_TankLimit
|
|||
cm_TankRun
|
用于 Taaank! 突变模式 (mutation19.nut)。 | ||
cm_TempHealthOnly
|
|||
cm_VIPTarget
|
|||
cm_WanderingZombieDensityModifier
|
|||
cm_WitchLimit
|
无用设置
这些似乎不被导演读取。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
ActiveChallenge
|
bool | false | 激活突变模式。似乎在EMS更新后已过时。 |
MegaMobMaxSize
|
int | 恐慌事件期间生成的总感染者的最大数量。2014.04.29 不起作用。 | |
MegaMobMinSize
|
int | 恐慌事件期间生成的总感染者的最小数量。2014.04.29 不起作用。 |
钩子函数
这些函数被放置在DirectorOptions表中,并在地图加载时被调用。
函数 | 签名 | 描述 |
---|---|---|
AllowWeaponSpawn
|
bool AllowWeaponSpawn(string classname)
|
返回给定类名是否允许生成,被多个突变模式使用。 |
ConvertWeaponSpawn
|
string ConvertWeaponSpawn(string classname)
|
将给定类名的武器生成转换为另一个,被多个突变模式使用。 |
ConvertZombieClass
|
int ConvertZombieClass(infectedClass)
|
将一个生成转换为另一个,被 Taaannnk!! 突变模式使用 (mutation19.nut)。 |
GetDefaultItem
|
string GetDefaultItem(index)
|
使用递增索引重复调用。返回武器名称的字符串以使其成为幸存者的默认物品,或返回0以结束迭代。 |
ShouldAvoidItem
|
bool ShouldAvoidItem(string classname)
|
待完善: 可能是与机器人相关或生成相关的函数
|
枚举
- 导演枚举
注意:这些是(或部分是)脚本特定的,因此有重复的值。
- ALLOW_BASH_ALL = 0
- ALLOW_BASH_NONE = 2
- ALLOW_BASH_PUSHONLY = 1
- BOT_CANT_FEEL = 4
- BOT_CANT_HEAR = 2
- BOT_CANT_SEE = 1
- BOT_CMD_ATTACK = 0
- BOT_CMD_MOVE = 1
- BOT_CMD_RESET = 3
- BOT_CMD_RETREAT = 2
- BOT_QUERY_NOTARGET = 1
- DMG_BLAST = 64
- DMG_BLAST_SURFACE = 134217728
- DMG_BUCKSHOT = 536870912
- DMG_BULLET = 2
- DMG_BURN = 8
- DMG_HEADSHOT = 1073741824
- DMG_MELEE = 2097152
- DMG_STUMBLE = 33554432
- FINALE_CUSTOM_CLEAROUT = 11
- FINALE_CUSTOM_DELAY = 10
- FINALE_CUSTOM_PANIC = 7
- FINALE_CUSTOM_SCRIPTED = 9
- FINALE_CUSTOM_TANK = 8
- FINALE_FINAL_BOSS = 5
- FINALE_GAUNTLET_1 = 0
- FINALE_GAUNTLET_2 = 3
- FINALE_GAUNTLET_BOSS = 16
- FINALE_GAUNTLET_BOSS_INCOMING = 15
- FINALE_GAUNTLET_ESCAPE = 17
- FINALE_GAUNTLET_HORDE = 13
- FINALE_GAUNTLET_HORDE_BONUSTIME = 14
- FINALE_GAUNTLET_START = 12
- FINALE_HALFTIME_BOSS = 2
- FINALE_HORDE_ATTACK_1 = 1
- FINALE_HORDE_ATTACK_2 = 4
- FINALE_HORDE_ESCAPE = 6
- HUD_FAR_LEFT = 7
- HUD_FAR_RIGHT = 8
- HUD_FLAG_ALIGN_CENTER = 512
- HUD_FLAG_ALIGN_LEFT = 256
- HUD_FLAG_ALIGN_RIGHT = 768
- HUD_FLAG_ALLOWNEGTIMER = 128
- HUD_FLAG_AS_TIME = 16
- HUD_FLAG_BEEP = 4
- HUD_FLAG_BLINK = 8
- HUD_FLAG_COUNTDOWN_WARN = 32
- HUD_FLAG_NOBG = 64
- HUD_FLAG_NOTVISIBLE = 16384
- HUD_FLAG_POSTSTR = 2
- HUD_FLAG_PRESTR = 1
- HUD_FLAG_TEAM_INFECTED = 2048
- HUD_FLAG_TEAM_MASK = 3072
- HUD_FLAG_TEAM_SURVIVORS = 1024
- HUD_LEFT_BOT = 1
- HUD_LEFT_TOP = 0
- HUD_MID_BOT = 3
- HUD_MID_BOX = 9
- HUD_MID_TOP = 2
- HUD_RIGHT_BOT = 5
- HUD_RIGHT_TOP = 4
- HUD_SCORE_1 = 11
- HUD_SCORE_2 = 12
- HUD_SCORE_3 = 13
- HUD_SCORE_4 = 14
- HUD_SCORE_TITLE = 10
- HUD_SPECIAL_COOLDOWN = 4
- HUD_SPECIAL_MAPNAME = 6
- HUD_SPECIAL_MODENAME = 7
- HUD_SPECIAL_ROUNDTIME = 5
- HUD_SPECIAL_TIMER0 = 0
- HUD_SPECIAL_TIMER1 = 1
- HUD_SPECIAL_TIMER2 = 2
- HUD_SPECIAL_TIMER3 = 3
- HUD_TICKER = 6
- INFECTED_FLAG_CANT_FEEL_SURVIVORS = 32768
- INFECTED_FLAG_CANT_HEAR_SURVIVORS = 16384
- INFECTED_FLAG_CANT_SEE_SURVIVORS = 8192
- IN_ATTACK = 1
- IN_ATTACK2 = 2048
- IN_BACK = 16
- IN_CANCEL = 64
- IN_DUCK = 4
- IN_FORWARD = 8
- IN_JUMP = 2
- IN_LEFT = 512
- IN_RELOAD = 8192
- IN_RIGHT = 1024
- IN_USE = 32
- SCRIPTED_SPAWN_BATTLEFIELD = 2
- SCRIPTED_SPAWN_FINALE = 0
- SCRIPTED_SPAWN_POSITIONAL = 3
- SCRIPTED_SPAWN_SURVIVORS = 1
- SCRIPT_SHUTDOWN_EXIT_GAME = 4
- SCRIPT_SHUTDOWN_LEVEL_TRANSITION = 3
- SCRIPT_SHUTDOWN_MANUAL = 0
- SCRIPT_SHUTDOWN_ROUND_RESTART = 1
- SCRIPT_SHUTDOWN_TEAM_SWAP = 2
- SPAWNDIR_E = 4
- SPAWNDIR_N = 1
- SPAWNDIR_NE = 2
- SPAWNDIR_NW = 128
- SPAWNDIR_S = 16
- SPAWNDIR_SE = 8
- SPAWNDIR_SW = 32
- SPAWNDIR_W = 64
- SPAWN_ABOVE_SURVIVORS = 6
- SPAWN_ANYWHERE = 0
- SPAWN_BATTLEFIELD = 2
- SPAWN_BEHIND_SURVIVORS = 1
- SPAWN_FAR_AWAY_FROM_SURVIVORS = 5
- SPAWN_FINALE = 0
- SPAWN_IN_FRONT_OF_SURVIVORS = 7
- SPAWN_LARGE_VOLUME = 9
- SPAWN_NEAR_IT_VICTIM = 2
- SPAWN_NEAR_POSITION = 10
- SPAWN_NO_PREFERENCE = -1
- SPAWN_POSITIONAL = 3
- SPAWN_SPECIALS_ANYWHERE = 4
- SPAWN_SPECIALS_IN_FRONT_OF_SURVIVORS = 3
- SPAWN_SURVIVORS = 1
- SPAWN_VERSUS_FINALE_DISTANCE = 8
- STAGE_CLEAROUT = 4
- STAGE_DELAY = 2
- STAGE_ESCAPE = 7
- STAGE_NONE = 9
- STAGE_PANIC = 0
- STAGE_RESULTS = 8
- STAGE_SETUP = 5
- STAGE_TANK = 1
- TIMER_COUNTDOWN = 2
- TIMER_COUNTUP = 1
- TIMER_DISABLE = 0
- TIMER_SET = 4
- TIMER_STOP = 3
- TRACE_MASK_ALL = -1
- TRACE_MASK_NPC_SOLID = 33701899
- TRACE_MASK_PLAYER_SOLID = 33636363
- TRACE_MASK_SHOT = 1174421507
- TRACE_MASK_VISIBLE_AND_NPCS = 33579137
- TRACE_MASK_VISION = 33579073
- UPGRADE_EXPLOSIVE_AMMO = 1
- UPGRADE_INCENDIARY_AMMO = 0
- UPGRADE_LASER_SIGHT = 2
- ZOMBIE_BOOMER = 2
- ZOMBIE_CHARGER = 6
- ZOMBIE_HUNTER = 3
- ZOMBIE_JOCKEY = 5
- ZOMBIE_NORMAL = 0
- ZOMBIE_SMOKER = 1
- ZOMBIE_SPITTER = 4
- ZOMBIE_TANK = 8
- ZOMBIE_WITCH = 7
- ZSPAWN_MOB = 10
- ZSPAWN_MUDMEN = 12
- ZSPAWN_WITCHBRIDE = 11