Left 4 Dead 2 "Last Stand" Update

The Last Stand Community Update has been released!
Visit www.l4d.com for all of the details.

Summary of the more than 1000 changes across the entire game:

- Fixed an exploit that could lag or crash a server by spawning infinite pistols.
- Rate-limit commands to prevent client command DOS attacks against servers.
- Fixed the ability to bypass the damage filter on the gas station's rolling door by going idle.
- Fixed avoiding damage from the charger by toggling in/out of idle while being body slammed.
- Fixed clearing the boomer screenspace effect by taking a break.
- Fix griefing exploit where a survivor would fire the grenade launcher and then switch to spectator to skip the friendly-fire check
- Record the team of a vote caller at the time the vote is called, so if the caller disconnects the other players can still have their votes checked against the caller's team. Fixes team-based votes locking out new voters if the caller disconnects.
- Build a map load command on the server instead of directly executing the command that's received as part of the server reservation packet. Fixed potential server takeover exploit.
- Fixed SI ghosts playing jump landing sounds
- Prevent players from joining the survivor team as a character already occupied by a human player.
- Marked "voice_all_icons" (used for testing) as a cheat command. Clear the voice state whenever the value changes so voice bubbles don't stay visible when switching between cheat enabled/disabled games.
- Marked cl_survivor_light_* cvars as cheats.
- Made survivor_teammatefocus_* convars replicated, so they can still be used as a legitimate way to play but are forced to be consistent for all clients.
- Removed a three-second window where an infected player could force a faster transition from the observer state to the ghost state by pressing a key.
- Don't spam open/close door client commands while the door is in the process of opening or closing.

- Fixed spawn areas permanently excluded from spawn set when a survivor dies, idles, or changes character.
- Fixed mobs unable to spawn if survivors stand in specific areas during a finale.
- Always restore the default pain pills decay rate when the director resets.
- Fixed the L4D1 survivor gestures not playing on dedicated servers.
- Allow SI to destroy breakables in finale areas during survival and scavenge modes once the round begins.
- Fixed breakables sometimes failing to unblock the nav when they break.
- Don't stumble the charger if the charge attack starts while already in contact with the victim.
- Fixed L4D1 survivors not selecting their canonical preferred weapons when scavenging.
- Allow survivors to pick up ammo while fighting a tank or in close combat if they are less than 40% full.
- Bots will use pills only if health < 50
- Bots consider health to be critical at < 30 (was 40). This means real health must be < 5 before a bot will use first-aid over a full temp health buffer.
- Fixed a few cases where specials may choose to wait in an ambush position when the game mode says they should be assaulting the survivors
- If a chase path that's trying to lead the target fails, fall back to a non-leading path. Leading paths that run off a cliff aren't always handled properly and can cause the target to be treated as unreachable.
- Revised the logic for fitting both tank and witch spawn locations into the flow. Previously they would frequently collide and the witch would get culled; now they should always find some combination of spawn locations that fit the within the map constraints.
- Fixed the director's "arc value" not always handling campaigns shorter than five maps correctly.

- Allow competitive achievements (versus, scavenge) to also be earned in Versus Survival.
- Incapped survivors are counted as escaped if they're in the rescue vehicle.
- Enabled CS weapons for all players
- Viewmodels use the skin value of the world pickup model, same as gas cans.
- When a weapon is holstered, transfer the current skin to the addon model.
- Clear the viewmodel fire layer when performing a melee attack to fix the stuck helping hand bug.
- Fixed the mp5's melee shove canceling its reload animation.
- Turned on boomer gibs by default, except in low violence mode.
- Restored burn skins for infected
- Fixed witch kills getting recorded as common zombie kills in the stats.
- Increased "ammo_shotgun_max" from 56 to 72

- Removed "Single Player" option from the main menu carousel.
- Enabled the "Private Game" option in lobby permissions.
- Added a rematch vote to the end of versus survival matches.
- Fixed voice chat not working in lobbies.
- No vote cooldown in singleplayer modes
- Allow "Change all-talk" vote in versus survival mode.
- cl_downloadfilter defaults to "none"
- Fixed genericpanellist not drawing panels when they extended beyond both the top and bottom of the frame.
- Suppress warnings about func_orator not having a model

- Hundreds of fixes and tweaks to animations, models, dialog, map layouts and exploits.


- Run mapspawn_addon.nut for all active addons after the base version runs.
- Run scriptedmode_addon.nut and director_base_addon.nut for all active addons after the base version runs.
- Support for new population file overrides for the base game mode. So the load order is now "population.txt", "population_.txt", "population_.txt", which each script optionally overriding place definitions from the previous files.
- Any time the addon load order changes, both the director and the nav mesh immediately refresh their population data. Fixes campaigns using the wrong populations and errors from precaching the wrong models.
- Func_nav_attribute_region and point_nav_attribute_region will remove attributes if the spawn key "remove_attributes" is set to true.
- Allow scripts to force the witch bride spawn, regardless of the variant setting
- "InterceptChat" can return false to prevent sending the message to other clients.
- "DamageType" field of "ScriptAllowDamage" is now read/write, so it can be used to change the damage type.
- Fixed being unable to create subdirectories in /left4dead2/ems
- New game event "player_left_safe_area", called every time the first survivor leaves the start area regardless of map number, restarts, etc.
- Added the userid of the offending player to "triggered_car_alarm" game event.
- Fixed script funcs SetContext and SetContextNum not recognizing that a duration of zero means 'forever'. To avoid breaking existing scripts, the 'forever' parameter is now -1.
- Track convars set from script so they can be reverted when the session ends.
- New gender "police", can spawn & drop tonfas like the riot control commons, but doesn't have the protective gear.
- Added a new keyfield "weaponskin" to item and weapon spawners to set the skin of the spawned item or weapon. Supported by "weapon_item_spawn", "weapon_melee_spawn", "weapon_scavenge_item_spawn".
- Removed spurious parenthesis from "ToKVString" and "_tostring" script functions
- Director now calls into an optional script function "GetCustomScriptedStageProgress" during FINALE_CUSTOM_SCRIPTED stages. The function should return a value from 0-1 to indicate the completion percentage of the stage. The default time-based completion percentage is passed in as a parameter.
- Added weapon spawners and configurable spawner entries for CS weapons.

SetModel( modelname )

GetAttachmentBone, Get the named attachement's parent bone index
GetAttachmentOrigin, Get the attachment id's origin as vector
GetAttachmentAngles, Get the attachment id's angles as p,y,r vector
GetBoneOrigin, Get the bone id's origin vector
GetBoneAngles, Get the bone id's angles as a p,y,r vector
LookupActivity, Get the named activity index
LookupBone, Get the named bone index
LookupSequence, Looks up a sequence by sequence name or activity name
SetSequence, Set a sequence by id
ResetSequence, Reset a sequence by id. If the id is different than the current sequence, switch to the new sequence
GetSequence, Get the current sequence id
GetSequenceActivityName, Get the activity name for a sequence by id
GetSequenceName, Get a sequence name by id
GetSequenceDuration, Get a sequence duration by id
GetBodygroup, Get a bodygroup by id
GetBodygroupName, Get the bodygroup id's name
FindBodygroupByName, Find a bodygroup id by name
GetBodygroupPartName, Get name by group and part
SetModelScale, (scale, change_duration) Changes a model's scale over time
SetPoseParameter, (id, value) Sets a pose parameter value

GetCurrentScene, Returns the instance of the oldest active scene entity (if any).
GetSceneByIndex, Returns the instance of the scene entity at the specified index.
PlayScene, Play the specified .vcd file.

DropItem, Make the player drop an item/weapon
SwitchToItem, Make the player switch to an item/weapon
SnapEyeAngles, Sets the view angles
GiveItemWithSkin( itemname, skin )



GetValue, ( entity, criteriaName ) - returns a string
GetTable, ( entity, table ) - returns a table of all criteria
HasCriterion, ( entity, criteriaName ) - returns true if the criterion exists

IsTouching, ( entity )

DebugDrawBoxAngles, Draw a debug oriented box (cent, min, max, angles(p,y,r), vRgb, a, duration)
ClientPrint, Print a client message
EmitAmbientSoundOn, Play named ambient sound on an entity.
StopAmbientSoundOn, Stop named ambient sound on an entity.
GetSoundDuration, Returns float duration of the sound. Takes soundname and optional actormodelname.
SetFakeClientConVarValue, Sets a USERINFO client ConVar for a fakeclient
ScreenShake, Start a screenshake with the following parameters. vecCenter, flAmplitude, flFrequency, flDuration, flRadius, eCommand( SHAKE_START = 0, SHAKE_STOP = 1 ), bAirShake
ScreenFade, Start a screenfade with the following parameters. player, red, green, blue, alpha, flFadeTime, flFadeHold, flags
"AllowFallenSurvivorItem", optionally reject items from spawning on the fallen survivor.

"script_func_button" - spawn a func_button from script via extents.
"script_clip_vphysics" - structured the same as other script-based trigger entities.
"script_nav_attribute_region" - uses extents instead of brushes.

- Added survivor criteria "InRescueVehicle", set to 1 when the vehicle has arrived and the survivor is inside.
- Added "NumberOfTeamAlive", "NumberOfTeamIncapacitated", and "NumberOfTeamDead" to the set of response rules global criteria.

- Added a mission key "allow_boss_mix" to the "versus_boss_spawning" block to bypass a restriction on having both a tank and a witch in the first and last maps of a campaign.
- Created variant keys to set a different character model