求生之路2 导演脚本

From Valve Developer Community
Revision as of 15:06, 24 July 2019 by Dazainerau (talk | contribs) (通用脚本与僵尸围攻)

Jump to: navigation, search
English


<Squirrel Language><Left 4 Dead 2> 求生之路2导演脚本 是主要用于影响人工智能导演系统(AI Director)的行为的 脚本. 它们被广泛用于自定义结局和尸潮事件.

本页面内容由Dazai Nerau译自英文版页面. 欢迎任何人补充新内容或者修改其中的错误.

用法

执行导演脚本的方式是向 info_director 实体进行输入(input). 一个导演设置表用于给导演系统所使用的变量提供新的临时值. 其他额外的命令可以通过Director对象访问. Warning: 一次只能同时执行一个导演脚本!

输入

BeginScript <script name>
执行一个普通的导演脚本, 比如为了onslaught事件而设计的脚本.
EndScript
停止执行脚本并重置导演系统设置中的变量值.
BeginScriptedPanicEvent <script name>
执行一次脚本化的尸潮
Note:如果脚本位于子目录中,则与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_directorBeginScriptedPanicEvent 输入中被执行.

Bug: 当trigger_finale被设置成针对一个特定的脚本时, 它将失去作用.


阶段的类型有四种 (其他值会打断结局并使得玩家直接成功获救(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 // Increase commons by 10 linearly with stages.
}

智能的剧情性节奏(Adaptive Dramatic Pacing)

To do: Add info from [1]

回调

  • void Update()
If you define an Update() function in your Director Script, it will run repeatedly much like a Think() function, but ONLY a finale via trigger_finale is triggered, if you have multiple scripts that are running that define it, they all will be called. The use of Update() is also found in the Bleed Out mutation (mutation3.nut), but needs further testing to see see if it behaves the same way like during a finale.

结局脚本专属

  • void OnBeginCustomFinaleStage(int num, int type)
If defined, will be called on every stage change with the number, and type, this is how you would change director options between stages (spawn directions, etc). num refers to the finale stage number passed by the director and type is the stage type (PANIC, TANK, etc.).
  • function OnChangeFinaleMusic()
To do: confirm category/working
  • function OnChangeFinaleStage(?)
To do: confirm category/working

导演设置

DirectorOptions表里的各种变量就是用来让你随便改的。

Note:在模式和地图脚本中, 应当使用SessionOptions表来影响导演系统, 或者用MutationOptions/MapOptions 表来初始化数值. DirectorOptions表可以被地图事件复写或者重设, 如果你在结局阶段写了一个新的DirectorOptions表则将会使得结局脚本失效.


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


注意: 鉴于该区域有太多的互动方式
你必须小心地进行设置,以确保设置符合你所需要的结果。
同时,如果设置后的导演设置没有起到预期的效果,说明它们之间可能存在冲突。你需要确保你的逻辑无误或者设置一些机制来避免冲突。
注意: 绝对不要使用 = 操作符来控制Director. 请使用 <-. 它们的区别在于语义. 如果你用了=, 而该值又未声明,则会抛出错误. 而<-, 在另一方面, 能够顺便创建不存在的数值.


Note:默认值(Default values)只是给你提供参考,而并非意味着DirectorOption中的变量默认就是这些值.

通用

Name Type Default value Description
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产生. To do: confirm category/working
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 To do: 在抵抗模式中有用,似乎构建了某种表.
LockTempo bool false 尸潮产生的节奏是这样的: BUILD_UP -> 产生尸潮 -> SUSTAIN_PEAK -> RELAX -> 再次 BUILD_UP . 设置LockTempo = true 会移除 "SUSTAIN_PEAK -> RELAX -> BUILD_UP" 使你的尸潮无延迟地直接产生.
MobRechargeRate int emmm应该是普通僵尸再生后的速度之类的 (也就是下一只僵尸).
MobSpawnMaxTime int 180-240 两波尸潮产生的最大时间间隔(单位秒).默认值取决于难度.
MobSpawnMinTime int 90-120 两波尸潮产生的最小时间间隔(单位秒). 默认值取决于难度.
MusicDynamicMobScanStopSize int 当尸潮的僵尸数量小于此数时,尸潮背景音乐停止
MusicDynamicMobSpawnSize int 25 当尸潮僵尸数量大于此数时播放尸潮背景音乐
MusicDynamicMobStopSize int 当尸潮的僵尸数量达到这个数值时停止播放音乐
NumReservedWanderers int 不能因成为尸潮而消失的闲逛感染者的数量
NoMobSpawns bool false 防止产生新的尸潮. 并不重设计时器, 并且会暂挂已经出生的感染者.
PanicForever int 只在gauntlets中有效.
PausePanicWhenRelaxing bool To do: confirm category/working
PreferredMobDirection int
Note:这应该是普感尸潮的产生方位
有效标签: 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
Note:SPAWN_NEAR_IT_VICTIM 在结局前不存在并且会导致出错, 所以我们可以猜测应该是导演系统在结局开始时选择了某人作为它(victim). SPAWN_LARGE_VOLUME 就是那个让你离DC(DC指的应该是死亡中心)的结局一英里远的东西.
PreferredMobPosition Vector To do: confirm category/working; 在dash模式中被使用了
PreferredMobPositionRange int To do: confirm category/working; 在dash模式中被使用了
PreferredSpecialDirection int
Note:这应该是特感的产生方位
Note:PreferredMobDirection同样适用于此,但它还多出了如下两个标签,目前尚不清楚这两个标签是不是多余的. SPAWN_SPECIALS_ANYWHERE, SPAWN_SPECIALS_IN_FRONT_OF_SURVIVORS
ProhibitBosses bool 禁止导演系统产生Witch和Tank. 只在合作模式中有效.
RelaxMaxFlowTravel float 在节奏从RELAX转换到BUILD_UP的期间生还者可以前进多远
Note:单位应该是英寸
RelaxMaxInterval float RELAX节奏持续的最大时间
Note:单位应该是秒
RelaxMinInterval float RELAX节奏持续的最小时间
Note:单位应该是秒
ShouldAllowMobsWithTank bool 尸潮是否能与Tank并存. To do: confirm category/working; 可能是结局专属的功能
ShouldAllowSpecialsWithTank bool 是否允许特感与Tank并存. To do: confirm category/working; 可能是结局专属的功能
ShouldConstrainLargeVolumeSpawn bool To do: confirm category/working
ShouldIgnoreClearStateForSpawn bool To do: confirm category/working
SpawnBehindSurvivorsDistance 前提是PreferredSpecialDirection = SPAWN_BEHIND_SURVIVORS
SpecialInfectedAssault To do: confirm category/working
SpecialInitialSpawnDelayMax float
SpecialInitialSpawnDelayMin float
SpecialRespawnInterval float 一个特感通道产生一个特感的冷却时间.
SurvivorMaxIncapacitatedCount int 死前倒地的幸存者的最大数量.
SustainPeakMaxTime float 单位分钟
SustainPeakMinTime float 单位分钟
TankHitDamageModifierCoop float 1.0 (mutation1.nut Last Man on Earth) To do: confirm category
TankRunSpawnDelay float 15 单位秒 (mutation19.nut Taaannnkk!) To do: confirm category
TempHealthDecayRate float 0.27 0.27 是 pain_pills_decay_rate 默认的, 数值越高衰减越快.
WanderingZombieDensityModifier float 1.0 流浪感染者的乘数.
ZombieDiscardRange int To do: 可能是流浪感染者消失的范围
ZombieDontClear
ZombieSpawnInFog bool false 允许僵尸在处于雾区的幸存者的视线内产生.
ZombieSpawnRange float 僵尸最多可以从距离幸存者多远的地方产生.
ZombieTankHealth int 设置Tank的生命值.

限制出生

Name Type Default value Description
BileMobSize int 胆汁瓶爆炸之后产生的僵尸数量。似乎只在结局中有效。死亡中心和牺牲这两个地图中使用了这个变量。
BoomerLimit int 1 最多允许多少Boomer同时存在.
ChargerLimit int 1 最多允许多少Charger同时存在.
CommonLimit int 30 最多允许多少普感同时存在.
DominatorLimit int 最多允许多少Hunters, Smokers, Jockeys和 Chargers同时存在. To do: confirm category/working
HunterLimit int 1 最多允许多少Hunter同时存在.
JockeyLimit int 1 最多允许多少Jockey同时存在.
MaxSpecials int 2 导演系统最多允许多少种特感同时存在.
MegaMobSize int 一次尸潮最多产生多少感染者.
Note:emmm?优先级可能高于MobMaxSize,我猜
MobMaxPending int 当尸潮的僵尸数量超过CommonLimit时最多有多少感染者可以暂时等待生成.
MobMaxSize int 30 一次尸潮最多产生多少感染者.
MobMinSize int 10 一次尸潮最少产生多少感染者.
MobSpawnSize int 一次尸潮中感染者的静态数量. 优先级高于MobMinSizeMobMinSize.
PreTankMobMax int To do: confirm category/working; 可能是gauntlet结局专属的功能
SmokerLimit int 1 最多允许多少Smoker同时存在.
SpitterLimit int 1 最多允许多少Spitter同时存在.
TankLimit int 1 最多允许多少Tank同时存在.
WitchLimit int 1 最多允许多少Witch同时存在.

EMS阶段专属

To do

See L4D2_EMS/Appendix:_Spawning_Infected


Name Type Default value Description
PanicSpecialsOnly bool The Panic should end when we finish with Specials, not wait for the MegaMob.
PanicWavePauseMax float To do: confirm category/working
PanicWavePauseMin float To do: confirm category/working
ScriptedStageType int The type of stage to run next. See L4D2_EMS/StageTypeAppendix for a description of stage types.
ScriptedStageValue int Dependant on the stage type.
SpawnDirectionCount To do: confirm category/working
SpawnDirectionMask int A bitfield (using SPAWNDIR_N, _NE, _E, etc) of directors to spawn from _relative to_ a map entity named Compass in your map. Designed for Survival-like game modes. See L4D2_EMS/Appendix:_Spawning_Infected.
SpawnSetPosition Vector The center point of the area infected can spawn in, when SpawnSetRule is set to SPAWN_POSITIONAL.
SpawnSetRadius int How far from the center point infected can spawn, when SpawnSetRule is set to SPAWN_POSITIONAL.
SpawnSetRule int Overrides the mode of spawning used. Seems to be non-functional in finales. Valid flags are: SPAWN_ANYWHERE, SPAWN_FINALE, SPAWN_BATTLEFIELD, SPAWN_SURVIVORS, SPAWN_POSITIONAL
TotalBoomers int Number of Boomers allowed in a wave.
TotalChargers int Number of Chargers allowed in a wave.
TotalHunters int Number of Hunters allowed in a wave.
TotalJockeys int Number of Jockeys allowed in a wave.
TotalSmokers int Number of Smokers allowed in a wave.
TotalSpecials int Total number of Special Infected allowed in a wave.
TotalSpitters int Number of Spitters allowed in a wave.
  • function void g_ModeScript::GetNextStage()
Called by the director when it wants a new stage. It can be forced with Director.ForceNextStage()

结局专属/相关

通常一个结局会包含X个阶段. DirectorOptions中的一些变量只能用于结局阶段. 在脚本中也能定义多阶段结局, 只要在选项开头冠以A_, B_, C_ 等等即可

Name Type Default value Description
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 可能用于强制执行结局出生行为但并不进入结局阶段。 To do: confirm category/working
HordeEscapeCommonLimit 逃离阶段允许的感染者数量.
EscapeSpawnTanks bool 是否在逃离阶段中产生Tank. To do: 可能与EMS阶段有关
MinimumStageTime int 在结束之前允许SCRIPTED阶段运行的最短时间.

夹击战专属/相关

These options are specific to Gauntlet finales. Most of these can be found in director_gauntlet.nut

Name Type Default value Description
CustomTankKiteDistance int 3000 To do: confirm category/working


Movement Bonus related options
The Movement Bonus successively increases the delay between hordes when the survivors are not making progress toward the Gauntlet goal. The Current Bonus value ticks down every second, allows a horde to spawn when it reaches 0. When a horde spawns the Current Bonus is reset to the Movement Bonus value. The Movement Bonus increases at set intervals, and is reset when the survivors cross the Movement Threshold, which is then incremented. Use director_debug 1 to see the values.
Name Type Default value Description
GauntletMovementThreshold float The amount of flow units the survivors can advance before the Movement Bonus is reset.
GauntletMovementTimerLength float The interval between each Movement Bonus increase, in seconds.
GauntletMovementBonus float The initial value, and the amount the movement Bonus increases each interval, in seconds.
GauntletMovementBonusMax float The maximum value that the Movement Bonus can reach.

对抗模式专属/相关

Name Type Default value Description
TankHitDamageModifierVersus float 1.0
ZombieGhostDelayMax int 30 Maximum time in seconds until allowing player infected to respawn.
ZombieGhostDelayMin int 20 Minimum time in seconds until allowing player infected to respawn.

清道夫模式专属/相关

Name Type Default value Description
ScavengeClusterBonusTime float To do: confirm category/working
ScavengeRoundInitialTime float To do: confirm category/working
ScavengeScoreBonusTime float (used in mutation13.nut Follow the Liter)

生还者模式专属/相关

Name Type Default value Description
SurvivalSetupTime float (Used in mutation15.nut for Survival Versus with setup time of 90 seconds)

突变模式专属/相关

Some of these values are mutation specific values of the global ones (cm_CommonLimit,cm_MaxSpecials, etc.), so use them if you are making a mutation, in case any map scripts are changing the global values.

Name Type Default value Description
cm_AggressiveSpecials bool true
cm_AllowPillConversion bool true Allows pills to be converted to health kits.
cm_AllowSurvivorRescue bool
cm_AutoReviveFromSpecialIncap bool false Instantly revives a survivor when incapacitated by a Special Infected.
cm_AutoSpawnInfectedGhosts bool
cm_BaseCommonAttackDamage
cm_BaseSpecialLimit int
cm_CommonLimit int
cm_DominatorLimit int
cm_FirstManOut int false Ends the escape when the first survivor reaches the escape vehicle.
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 Used for scavenge cans to spawn one-by-one.
cm_SpecialRespawnInterval
cm_SpecialSlotCountdownTime
cm_SpecialsRetreatToCover
cm_TankLimit
cm_TankRun Used in Taaank! mutation (mutation19.nut).
cm_TempHealthOnly
cm_VIPTarget
cm_WanderingZombieDensityModifier
cm_WitchLimit

无用设置

These don't seem to be read by the director.

Name Type Default value Description
ActiveChallenge bool false Activates mutation mode. Seems to be obsolete with the EMS update.
MegaMobMaxSize int Maximum amount of total infected spawned during a panic event. Doesn't work 2014.04.29
MegaMobMinSize int Minimum amount of total infected spawned during a panic event. Doesn't work 2014.04.29

钩子函数

These functions are placed in the DirectorOptions table, and get called at map load.

Function Signature Description
AllowWeaponSpawn bool AllowWeaponSpawn(string classname) Returns true or false if the given classname is allowed to spawn, used by several mutations.
ConvertWeaponSpawn string ConvertWeaponSpawn(string classname) Converts a weapon spawn of given classname to another, used by several mutations.
ConvertZombieClass int ConvertZombieClass(infectedClass) Converts one spawn into another, used by the Taaannnk!! mutation (mutation19.nut).
GetDefaultItem string GetDefaultItem(index) Repeatedly called with incrementing indices. Return a string of a weapon name to make it a default item for survivors, or 0 to end the iteration.
ShouldAvoidItem bool ShouldAvoidItem(string classname) To do: Probably a bot related function or spawn related

枚举

  • Director Enumerations
    Note:These are (or some are) script specific, hence the duplicate values.
    • 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

推荐阅读