diff --git a/.github/workflows/check_plugins.yml b/.github/workflows/check_plugins.yml index 0e4c02e94..976f61684 100644 --- a/.github/workflows/check_plugins.yml +++ b/.github/workflows/check_plugins.yml @@ -32,10 +32,10 @@ jobs: #- "1.10" #- "1.11" - "1.12" - - "1.13" + - "1.13.7296" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set environment variables run: | echo "SCRIPTS_PATH=$GITHUB_WORKSPACE/addons/sourcemod/scripting" >> $GITHUB_ENV diff --git a/addons/sourcemod/bin/sourcemod.2.l4d2.dll b/addons/sourcemod/bin/sourcemod.2.l4d2.dll index 406da8fed..5f84f44d1 100644 Binary files a/addons/sourcemod/bin/sourcemod.2.l4d2.dll and b/addons/sourcemod/bin/sourcemod.2.l4d2.dll differ diff --git a/addons/sourcemod/bin/sourcemod.2.l4d2.so b/addons/sourcemod/bin/sourcemod.2.l4d2.so index 3e6dc4535..e4bccba79 100644 Binary files a/addons/sourcemod/bin/sourcemod.2.l4d2.so and b/addons/sourcemod/bin/sourcemod.2.l4d2.so differ diff --git a/addons/sourcemod/bin/sourcemod.logic.dll b/addons/sourcemod/bin/sourcemod.logic.dll index cdb369e3d..211a31e1c 100644 Binary files a/addons/sourcemod/bin/sourcemod.logic.dll and b/addons/sourcemod/bin/sourcemod.logic.dll differ diff --git a/addons/sourcemod/bin/sourcemod.logic.so b/addons/sourcemod/bin/sourcemod.logic.so index 2c12d96a8..9df43e507 100644 Binary files a/addons/sourcemod/bin/sourcemod.logic.so and b/addons/sourcemod/bin/sourcemod.logic.so differ diff --git a/addons/sourcemod/bin/sourcemod_mm.dll b/addons/sourcemod/bin/sourcemod_mm.dll index 106ddad2f..28fdc340e 100644 Binary files a/addons/sourcemod/bin/sourcemod_mm.dll and b/addons/sourcemod/bin/sourcemod_mm.dll differ diff --git a/addons/sourcemod/bin/sourcemod_mm_i486.so b/addons/sourcemod/bin/sourcemod_mm_i486.so index bb2391728..04c16caa6 100644 Binary files a/addons/sourcemod/bin/sourcemod_mm_i486.so and b/addons/sourcemod/bin/sourcemod_mm_i486.so differ diff --git a/addons/sourcemod/bin/sourcepawn.jit.x86.dll b/addons/sourcemod/bin/sourcepawn.jit.x86.dll index 168c69836..2f55132d8 100644 Binary files a/addons/sourcemod/bin/sourcepawn.jit.x86.dll and b/addons/sourcemod/bin/sourcepawn.jit.x86.dll differ diff --git a/addons/sourcemod/bin/sourcepawn.jit.x86.so b/addons/sourcemod/bin/sourcepawn.jit.x86.so index ff87e9c6a..4a00080d8 100644 Binary files a/addons/sourcemod/bin/sourcepawn.jit.x86.so and b/addons/sourcemod/bin/sourcepawn.jit.x86.so differ diff --git a/addons/sourcemod/extensions/bintools.ext.dll b/addons/sourcemod/extensions/bintools.ext.dll index cf3af3a1d..25167e9d8 100644 Binary files a/addons/sourcemod/extensions/bintools.ext.dll and b/addons/sourcemod/extensions/bintools.ext.dll differ diff --git a/addons/sourcemod/extensions/bintools.ext.so b/addons/sourcemod/extensions/bintools.ext.so index 690fd4655..37b670ebf 100644 Binary files a/addons/sourcemod/extensions/bintools.ext.so and b/addons/sourcemod/extensions/bintools.ext.so differ diff --git a/addons/sourcemod/extensions/clientprefs.ext.dll b/addons/sourcemod/extensions/clientprefs.ext.dll index 8a1d61261..d599d7fca 100644 Binary files a/addons/sourcemod/extensions/clientprefs.ext.dll and b/addons/sourcemod/extensions/clientprefs.ext.dll differ diff --git a/addons/sourcemod/extensions/clientprefs.ext.so b/addons/sourcemod/extensions/clientprefs.ext.so index d3a445153..1292fcc14 100644 Binary files a/addons/sourcemod/extensions/clientprefs.ext.so and b/addons/sourcemod/extensions/clientprefs.ext.so differ diff --git a/addons/sourcemod/extensions/dbi.mysql.ext.dll b/addons/sourcemod/extensions/dbi.mysql.ext.dll index d07ad82e6..d75d4359c 100644 Binary files a/addons/sourcemod/extensions/dbi.mysql.ext.dll and b/addons/sourcemod/extensions/dbi.mysql.ext.dll differ diff --git a/addons/sourcemod/extensions/dbi.mysql.ext.so b/addons/sourcemod/extensions/dbi.mysql.ext.so index 82d9b557d..497e3f1c7 100644 Binary files a/addons/sourcemod/extensions/dbi.mysql.ext.so and b/addons/sourcemod/extensions/dbi.mysql.ext.so differ diff --git a/addons/sourcemod/extensions/dbi.pgsql.ext.dll b/addons/sourcemod/extensions/dbi.pgsql.ext.dll index 44da73d1c..0af0f35a0 100644 Binary files a/addons/sourcemod/extensions/dbi.pgsql.ext.dll and b/addons/sourcemod/extensions/dbi.pgsql.ext.dll differ diff --git a/addons/sourcemod/extensions/dbi.pgsql.ext.so b/addons/sourcemod/extensions/dbi.pgsql.ext.so index 54477e2e6..80a49c2c4 100644 Binary files a/addons/sourcemod/extensions/dbi.pgsql.ext.so and b/addons/sourcemod/extensions/dbi.pgsql.ext.so differ diff --git a/addons/sourcemod/extensions/dbi.sqlite.ext.dll b/addons/sourcemod/extensions/dbi.sqlite.ext.dll index 7d65b9319..200b1d7d9 100644 Binary files a/addons/sourcemod/extensions/dbi.sqlite.ext.dll and b/addons/sourcemod/extensions/dbi.sqlite.ext.dll differ diff --git a/addons/sourcemod/extensions/dbi.sqlite.ext.so b/addons/sourcemod/extensions/dbi.sqlite.ext.so index 7b578d09d..d14234eca 100644 Binary files a/addons/sourcemod/extensions/dbi.sqlite.ext.so and b/addons/sourcemod/extensions/dbi.sqlite.ext.so differ diff --git a/addons/sourcemod/extensions/dhooks.ext.dll b/addons/sourcemod/extensions/dhooks.ext.dll index fbab78ec5..0c6d93e39 100644 Binary files a/addons/sourcemod/extensions/dhooks.ext.dll and b/addons/sourcemod/extensions/dhooks.ext.dll differ diff --git a/addons/sourcemod/extensions/dhooks.ext.so b/addons/sourcemod/extensions/dhooks.ext.so index cab44a1a4..f75deb92e 100644 Binary files a/addons/sourcemod/extensions/dhooks.ext.so and b/addons/sourcemod/extensions/dhooks.ext.so differ diff --git a/addons/sourcemod/extensions/geoip.ext.dll b/addons/sourcemod/extensions/geoip.ext.dll index 43298a582..43068c6c5 100644 Binary files a/addons/sourcemod/extensions/geoip.ext.dll and b/addons/sourcemod/extensions/geoip.ext.dll differ diff --git a/addons/sourcemod/extensions/geoip.ext.so b/addons/sourcemod/extensions/geoip.ext.so index 7a8f5fe4c..189017389 100644 Binary files a/addons/sourcemod/extensions/geoip.ext.so and b/addons/sourcemod/extensions/geoip.ext.so differ diff --git a/addons/sourcemod/extensions/regex.ext.dll b/addons/sourcemod/extensions/regex.ext.dll index 47dd4237c..6e0f60c09 100644 Binary files a/addons/sourcemod/extensions/regex.ext.dll and b/addons/sourcemod/extensions/regex.ext.dll differ diff --git a/addons/sourcemod/extensions/regex.ext.so b/addons/sourcemod/extensions/regex.ext.so index 59aa4f09b..4975baa23 100644 Binary files a/addons/sourcemod/extensions/regex.ext.so and b/addons/sourcemod/extensions/regex.ext.so differ diff --git a/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.dll b/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.dll index 0a2d87ff2..fa359f750 100644 Binary files a/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.dll and b/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.dll differ diff --git a/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.so b/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.so index d5b9b0449..735b8e3a0 100644 Binary files a/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.so and b/addons/sourcemod/extensions/sdkhooks.ext.2.l4d2.so differ diff --git a/addons/sourcemod/extensions/sdktools.ext.2.l4d2.dll b/addons/sourcemod/extensions/sdktools.ext.2.l4d2.dll index 26215f713..d4ec82289 100644 Binary files a/addons/sourcemod/extensions/sdktools.ext.2.l4d2.dll and b/addons/sourcemod/extensions/sdktools.ext.2.l4d2.dll differ diff --git a/addons/sourcemod/extensions/sdktools.ext.2.l4d2.so b/addons/sourcemod/extensions/sdktools.ext.2.l4d2.so index de4ed515d..c7023ca0d 100644 Binary files a/addons/sourcemod/extensions/sdktools.ext.2.l4d2.so and b/addons/sourcemod/extensions/sdktools.ext.2.l4d2.so differ diff --git a/addons/sourcemod/extensions/sourcescramble.ext.dll b/addons/sourcemod/extensions/sourcescramble.ext.dll index c0e363a87..72d2f89be 100644 Binary files a/addons/sourcemod/extensions/sourcescramble.ext.dll and b/addons/sourcemod/extensions/sourcescramble.ext.dll differ diff --git a/addons/sourcemod/extensions/sourcescramble.ext.so b/addons/sourcemod/extensions/sourcescramble.ext.so index 309e748fd..f7c7e35c2 100644 Binary files a/addons/sourcemod/extensions/sourcescramble.ext.so and b/addons/sourcemod/extensions/sourcescramble.ext.so differ diff --git a/addons/sourcemod/extensions/topmenus.ext.dll b/addons/sourcemod/extensions/topmenus.ext.dll index a45817434..cedc12f75 100644 Binary files a/addons/sourcemod/extensions/topmenus.ext.dll and b/addons/sourcemod/extensions/topmenus.ext.dll differ diff --git a/addons/sourcemod/extensions/topmenus.ext.so b/addons/sourcemod/extensions/topmenus.ext.so index 584836b52..97082938b 100644 Binary files a/addons/sourcemod/extensions/topmenus.ext.so and b/addons/sourcemod/extensions/topmenus.ext.so differ diff --git a/addons/sourcemod/extensions/updater.ext.dll b/addons/sourcemod/extensions/updater.ext.dll index 3625f1ae9..c15a7aff0 100644 Binary files a/addons/sourcemod/extensions/updater.ext.dll and b/addons/sourcemod/extensions/updater.ext.dll differ diff --git a/addons/sourcemod/extensions/updater.ext.so b/addons/sourcemod/extensions/updater.ext.so index f07b8a30a..759f0a370 100644 Binary files a/addons/sourcemod/extensions/updater.ext.so and b/addons/sourcemod/extensions/updater.ext.so differ diff --git a/addons/sourcemod/extensions/webternet.ext.dll b/addons/sourcemod/extensions/webternet.ext.dll index 75e7b2c13..73ae70f97 100644 Binary files a/addons/sourcemod/extensions/webternet.ext.dll and b/addons/sourcemod/extensions/webternet.ext.dll differ diff --git a/addons/sourcemod/extensions/webternet.ext.so b/addons/sourcemod/extensions/webternet.ext.so index 814595807..2e8f82c3b 100644 Binary files a/addons/sourcemod/extensions/webternet.ext.so and b/addons/sourcemod/extensions/webternet.ext.so differ diff --git a/addons/sourcemod/gamedata/core.games/engine.swarm.txt b/addons/sourcemod/gamedata/core.games/engine.swarm.txt index 2951e370d..c091ec889 100644 --- a/addons/sourcemod/gamedata/core.games/engine.swarm.txt +++ b/addons/sourcemod/gamedata/core.games/engine.swarm.txt @@ -50,7 +50,7 @@ /* Offset into "LevelShutdown" */ "gEntList" { - "windows" "28" + "windows" "25" } "EntInfo" @@ -65,7 +65,7 @@ "LevelShutdown" { "library" "server" - "windows" "\x55\x8B\xEC\x51\xA1\x2A\x2A\x2A\x2A\xC6\x05\x2A\x2A\x2A\x2A\x01" + "windows" "\xA1\x2A\x2A\x2A\x2A\xC6\x05\x2A\x2A\x2A\x2A\x2A\x53" } } } diff --git a/addons/sourcemod/gamedata/l4d2_changelevel.txt b/addons/sourcemod/gamedata/l4d2_changelevel.txt deleted file mode 100644 index 3e7c01950..000000000 --- a/addons/sourcemod/gamedata/l4d2_changelevel.txt +++ /dev/null @@ -1,52 +0,0 @@ -"Games" -{ - "left4dead2" - { - "Addresses" - { - "CDirector" - { - "windows" - { - "signature" "DirectorMusicBanks_OnRoundStart" - "read" "12" - } - "linux" - { - "signature" "TheDirector" - } - "read" "0" - } - } - "Signatures" - { - "CDirector::OnChangeChapterVote" - { - "library" "server" - "linux" "@_ZN9CDirector19OnChangeChapterVoteEPKc" - "windows" "\x55\x8B\xEC\x56\x8B\xF1\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x04" - /* 55 8B EC 56 8B F1 8B 0D ? ? ? ? 57 85 C9 */ - } - /* Used solely to get the offset for TheDirector*/ - "DirectorMusicBanks_OnRoundStart" - { - "library" "server" - /* https://github.com/Accelerator74/Left4Downtown2/blob/master/gamedata/left4downtown.l4d2.txt#L250-L260 credit to Accelerator for sig */ - "windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x57\x8B\xF9\x8B\x0D\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x84" - /* 55 8B EC 83 EC ? 56 57 8B F9 8B 0D ? ? ? ? E8 ? ? ? ? 84 */ - } - "TheDirector" - { - "library" "server" - "linux" "@TheDirector" - } - "CDirector::ClearTeamScores" - { - "library" "server" - "linux" "@_ZN9CDirector15ClearTeamScoresEb" - "windows" "\x55\x8B\xEC\x56\x8B\x75\x08\x57\x8B\xF9\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9" - /* 55 8B EC 56 8B 75 08 57 8B F9 8B 0D ? ? ? ? 85 C9 */ - } - } - } -} \ No newline at end of file diff --git a/addons/sourcemod/gamedata/l4d2_fix_changelevel.txt b/addons/sourcemod/gamedata/l4d2_fix_changelevel.txt new file mode 100644 index 000000000..521a59ab6 --- /dev/null +++ b/addons/sourcemod/gamedata/l4d2_fix_changelevel.txt @@ -0,0 +1,135 @@ +"Games" +{ + "left4dead2" + { + "Functions" + { + "CVEngineServer::ChangeLevel" + { + "signature" "CVEngineServer::ChangeLevel" + "callconv" "thiscall" + "return" "void" + "this" "ignore" + "arguments" + { + "map" + { + "type" "charptr" + } + "reason" + { + "type" "charptr" + } + } + } + } + + "Offsets" + { + "CDirector::m_mapDurationTimer" + { + "linux" "936" + "windows" "936" + } + + "CDirector::m_flTotalMissionElaspedTime" + { + "linux" "944" + "windows" "944" + } + + "CDirector::m_szOriginalMap" + { + "linux" "948" + "windows" "948" + } + } + + "Addresses" + { + "CDirector::m_isTransitioning" + { + "signature" "CDirector::OnBeginTransition" + "linux" + { + "read" "14" + } + "windows" + { + "read" "26" + } + } + + "s_landmarkName" + { + "signature" "InfoChangelevel::StartChangeLevel" + "linux" + { + "read" "88" + } + "windows" + { + "read" "77" + } + } + + "s_landmarkPosition" + { + "signature" "InfoChangelevel::StartChangeLevel" + "linux" + { + "read" "190" + } + "windows" + { + "read" "160" + } + } + } + + "Signatures" + { + "CDirector::ClearTeamScores" + { + "library" "server" + "linux" "@_ZN9CDirector15ClearTeamScoresEb" + "windows" "\x55\x8B\xEC\x56\x8B\x75\x08\x57\x8B\xF9\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9" + /* 55 8B EC 56 8B 75 08 57 8B F9 8B 0D ? ? ? ? 85 C9 */ + } + + "CDirector::OnBeginTransition" + { + "library" "server" + "linux" "@_ZN9CDirector17OnBeginTransitionEb" + "windows" "\x55\x8B\x2A\x2A\x2A\x2A\x80\x2A\x2A\x2A\x53\x56\x8B\x2A\x0F\x2A\x2A\x57\x8D" + /* 55 8B ? ? ? ? 80 ? ? ? 53 56 8B ? 0F ? ? 57 8D */ + } + + // Search string "Preparing player entities for changelevel" + "CTerrorGameRules::OnBeginChangeLevel" + { + "library" "server" + "linux" "@_ZN16CTerrorGameRules18OnBeginChangeLevelEPKc" + "windows" "\x55\x8B\x2A\x56\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x8B\x2A\x2A\x8B\x2A\xFF" + /* 55 8B ? 56 8B ? ? ? ? ? 8B ? 8B ? ? 8B ? FF */ + } + + // Search string "VEngineServer::Changelevel with NULL s1" + "CVEngineServer::ChangeLevel" + { + "library" "engine" + "linux" "@_ZN14CVEngineServer11ChangeLevelEPKcS1_" + "windows" "\x55\x8B\x2A\x2A\x2A\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x56\x8B\x2A\x2A\x57\x8B" + /* 55 8B ? ? ? ? ? ? ? A1 ? ? ? ? ? ? 89 ? ? A1 ? ? ? ? 56 8B ? ? 57 8B */ + } + + "InfoChangelevel::StartChangeLevel" + { + "library" "server" + "linux" "@_ZN15InfoChangelevel16StartChangeLevelEPK10Checkpoint" + "windows" "\x55\x8B\xEC\xA1\x2A\x2A\x2A\x2A\x83\x78\x30\x00\x56\x8B\xF1\x74" + // 55 8B EC A1 ? ? ? ? 83 78 30 00 56 8B F1 74 + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/gamedata/l4d2_hittable_control.txt b/addons/sourcemod/gamedata/l4d2_hittable_control.txt new file mode 100644 index 000000000..872cc20d0 --- /dev/null +++ b/addons/sourcemod/gamedata/l4d2_hittable_control.txt @@ -0,0 +1,14 @@ +"Games" +{ + "#default" + { + "Offsets" + { + "IPhysicsObject::GetMass" + { + "linux" "30" + "windows" "29" + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/gamedata/l4d_prop_touching_rules.txt b/addons/sourcemod/gamedata/l4d_prop_touching_rules.txt index 860403e3b..9285d8f17 100644 --- a/addons/sourcemod/gamedata/l4d_prop_touching_rules.txt +++ b/addons/sourcemod/gamedata/l4d_prop_touching_rules.txt @@ -68,7 +68,7 @@ // 57 push edi // E8 63 FA FF FF call _Z12MovePropAwayP11CBaseEntityP11CBasePlayer ; MovePropAway(CBaseEntity *,CBasePlayer *) // 83 C4 08 add esp, 8 - "verify" "\x89\x5C\x24\x04\x89\x34\x24\xE8" + "verify" "\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08" // B0 01 mov al, 1 // EB 06 jmp short after_call_to_MovePropAway @@ -172,7 +172,7 @@ // 57 push edi // E8 E2 F8 FF FF call _Z12MovePropAwayP11CBaseEntityP11CBasePlayer ; MovePropAway(CBaseEntity *,CBasePlayer *) // 83 C4 08 add esp, 8 - "verify" "\x89\x5C\x24\x04\x89\x34\x24\xE8" + "verify" "\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08" // B0 01 mov al, 1 // EB 06 jmp short after_call_to_MovePropAway diff --git a/addons/sourcemod/gamedata/left4dhooks.l4d2.txt b/addons/sourcemod/gamedata/left4dhooks.l4d2.txt index 7752a4801..83b4efb88 100644 --- a/addons/sourcemod/gamedata/left4dhooks.l4d2.txt +++ b/addons/sourcemod/gamedata/left4dhooks.l4d2.txt @@ -901,6 +901,21 @@ } } + "L4DD::CDirector::AddSurvivorBot" + { + "signature" "CDirector::AddSurvivorBot" + "callconv" "thiscall" + "return" "void" + "this" "ignore" + "arguments" + { + "a1" + { + "type" "int" + } + } + } + "L4DD::CThrow::ActivateAbililty" { "signature" "CThrow::ActivateAbililty" @@ -2013,6 +2028,20 @@ "read" "0" } + "gEntList" + { + "windows" + { + "signature" "gEntList" + "read" "116" + } + "linux" + { + "signature" "gEntList" + } + "read" "0" + } + "L4DD::ScriptVM" { "windows" @@ -3350,6 +3379,15 @@ /* Search: "unsticking %s from %.1f %.1f %.1f to %.1f %.1f %.1f\n" */ } + "CDirector::IsLocationFoggedToSurvivors" + { + "library" "server" + "linux" "@_ZNK9CDirector27IsLocationFoggedToSurvivorsERK6Vector" + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x83\x2A\x2A\x33\x2A\x85\x2A\x0F\x2A\x2A\x52\x68\x2A\x2A\x2A\x2A\xE8" + /* ? ? ? ? ? ? ? ? 8B ? ? 83 ? ? 33 ? 85 ? 0F ? ? 52 68 ? ? ? ? E8 */ + /* Search: "ZombieSpawnInFog" */ + } + /** * CTerrorPlayer::GetSpecialInfectedDominatingMe(CTerrorPlayer *this) * @@ -3404,6 +3442,24 @@ // /* ? ? ? ? ? ? 8B ? ? 85 ? 74 ? 8B ? 8B ? ? FF ? 8B ? 89 ? ? EB ? C7 45 ? ? ? ? ? 8D ? ? 51 8D 8E ? ? ? ? E8 ? ? ? ? 33 */ } + "CGlobalEntityList::FindEntityByClassnameNearest" + { + "library" "server" + "linux" "@_ZN17CGlobalEntityList28FindEntityByClassnameNearestEPKcRK6Vectorf" + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x53\x33\x2A\xF3\x2A\x2A\x2A\x0F\x2E\x2A\x2A\x2A\x2A\x2A\x9F" + /* ? ? ? ? ? ? ? ? ? 53 33 ? F3 ? ? ? 0F 2E ? ? ? ? ? 9F */ + /* Search: "CheckpointDoorClosed". Target is sub call with "info_changelevel" as param. */ + } + + "CGlobalEntityList::FindEntityByClassnameWithin" + { + "library" "server" + "linux" "@_ZN17CGlobalEntityList27FindEntityByClassnameWithinEP11CBaseEntityPKcRK6Vectorf" + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x83\x2A\x2A\xF3\x2A\x2A\x2A\x0F\x2E\x2A\x2A\x2A\x2A\x2A\x9F\xF6\x2A\x2A\x7A\x2A\x8B" + /* ? ? ? ? ? ? ? ? 83 ? ? F3 ? ? ? 0F 2E ? ? ? ? ? 9F F6 ? ? 7A ? 8B */ + /* Search: "info_ladder_dismount" and target calls twice with this param. */ + } + /* * CDirector::HasAnySurvivorLeftSafeArea(CDirector *this) */ @@ -4252,6 +4308,20 @@ /* 55 8B EC 51 83 7D 08 00 56 8B F1 89 */ } + /* + * CDirector::AddSurvivorBot(SurvivorCharacterType) const + * + * Windows: find string "sb_add" → xref to ConCommand registration → + * handler calls AddSurvivorBot(char*) wrapper → wrapper tail-calls this function + */ + "CDirector::AddSurvivorBot" + { + "library" "server" + "linux" "@_ZNK9CDirector14AddSurvivorBotE21SurvivorCharacterType" + "windows" "\x55\x8B\xEC\x8B\x89\x2A\x2A\x2A\x2A\x83\xEC\x2A\x56\x8D\x45\xFF" + /* 55 8B EC 8B 89 ? ? ? ? 83 EC ? 56 8D 45 FF */ + } + /* * CThrow::ActivateAbililty() * Start a tank rock throw @@ -4779,6 +4849,18 @@ /* Search: "Created new fencetop area %d(%x) between %d(%x) and %d(%x)\n" - target call is within the if statement below */ } + /* + * CNavArea::IsBlocked(CNavArea *this, int, bool) + */ + "CNavArea::IsBlocked" + { + "library" "server" + "linux" "@_ZNK8CNavArea9IsBlockedEib" + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x74\x2A\x8B\x2A\x2A\x85\x2A\x79\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x83" + /* ? ? ? ? ? ? ? 74 ? 8B ? ? 85 ? 79 ? 8B ? ? ? ? ? 83 */ + /* Search: "Flow Error: Goal area is blocked!\n", target function is call above with "-1" */ + } + /* * CTerrorPlayer::GetFlowDistance(TerrorNavArea::FlowType) */ @@ -5710,6 +5792,17 @@ "linux" "@g_pGameRules" } + /* Used on Windows to resolve the "gEntList" pointer */ + /* ResolveFollowupTargetToEntity(char *) */ + "gEntList" + { + "library" "server" + "linux" "@gEntList" + "windows" "\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x57\x8B\x2A\x68\x2A\x2A\x2A\x2A\x57\xE8\x2A\x2A\x2A\x2A\x83" + /* ? ? ? ? ? 8B ? ? 57 8B ? 68 ? ? ? ? 57 E8 ? ? ? ? 83 */ + /* Search: "Couldn't resolve response target %s\n". Call with "0, v3, 0, 0, 0, 0" as params has target ptr. */ + } + /* This signature sometimes has multiple matches, but this * does not matter as g_pGameRules is involved in all of them. * The same g_pGameRules offset applies to each match. @@ -5767,6 +5860,36 @@ /* 55 8B EC 81 EC ? ? ? ? A1 ? ? ? ? 33 C5 89 45 FC 8B 45 14 53 8B 5D 08 */ } + /* Search: "Frame %8d/tick %8d: frame out of budget (%.2fms > %.2fms)\n" - xref to this function is our target + */ + "TheNextBots" + { + "library" "server" + "linux" "@_Z11TheNextBotsv" + "windows" "\x2A\x2A\x2A\x2A\x2A\x84\x05\x2A\x2A\x2A\x2A\x0F\x85\x2A\x2A\x2A\x2A\x09\x2A\x2A\x2A\x2A\x2A\x33\x2A\xB9\x2A\x2A\x2A\x2A\x33" + /* ? ? ? ? ? 84 05 ? ? ? ? 0F 85 ? ? ? ? 09 ? ? ? ? ? 33 ? B9 ? ? ? ? 33 */ + } + + /* Search: "Chainsaw.Die" - You will see "TheNextBots" above the call, and below is a sub call with "1.0" as param + */ + "NextBotManager::RushVictim" + { + "library" "server" + "linux" "@_ZN14NextBotManager10RushVictimEP13CTerrorPlayerf" + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x83\x2A\x2A\x0F\x2E\x2A\x2A\x2A\x2A\x2A\x9F\xF6\x2A\x2A\x7A\x2A\xA1\x2A\x2A\x2A\x2A\xF3" + /* ? ? ? ? ? ? ? ? 83 ? ? 0F 2E ? ? ? ? ? 9F F6 ? ? 7A ? A1 ? ? ? ? F3 */ + } + + /* Search: "Going into Old ClearNWait" - Below is a call, click into that and into the function it calls, this is the target + */ + "NextBotManager::StartAssault" + { + "library" "server" + "linux" "@_ZN14NextBotManager12StartAssaultEv" + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x3D\x2A\x2A\x2A\x2A\x74\x2A\x56\x57\x0F\x2A\x2A\x8B\x2A\x2A\x03\x2A\x03\x2A\x03\x2A\x8B\x2A\x2A\x8B\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x2A\xFF\x2A\x8B\x2A\xE8\x2A\x2A\x2A\x2A\x83" + /* ? ? ? ? ? ? ? 3D ? ? ? ? 74 ? 56 57 0F ? ? 8B ? ? 03 ? 03 ? 03 ? 8B ? ? 8B ? 8B ? ? ? ? ? 8B ? FF ? 8B ? E8 ? ? ? ? 83 */ + } + "nav_update_lighting" { "library" "server" diff --git a/addons/sourcemod/gamedata/sdktools.games/game.dod.txt b/addons/sourcemod/gamedata/sdktools.games/game.dod.txt index 26d161c3d..171ceac58 100644 --- a/addons/sourcemod/gamedata/sdktools.games/game.dod.txt +++ b/addons/sourcemod/gamedata/sdktools.games/game.dod.txt @@ -16,6 +16,13 @@ { "Offsets" { + "SetOwnerEntity" + { + "windows" "18" + "windows64" "18" + "linux" "19" + "linux64" "19" + } "GiveNamedItem" { "windows" "407" diff --git a/addons/sourcemod/gamedata/sm-tf2.games.txt b/addons/sourcemod/gamedata/sm-tf2.games.txt index ee7887994..d5f2a5003 100644 --- a/addons/sourcemod/gamedata/sm-tf2.games.txt +++ b/addons/sourcemod/gamedata/sm-tf2.games.txt @@ -20,7 +20,7 @@ /* CTFPlayerShared::Burn (No clone.)*/ /* String : -> "afterburn_immunity"*/ "library" "server" - "windows" "\x55\x8B\xEC\x83\xEC\x08\x56\x8B\xF1\x8B\x8E\x8C\x01\x00\x00\x8B\x01" + "windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8B\x8E\x2A\x2A\x2A\x2A\x8B\x01\x8B" "windows64" "\x40\x53\x41\x54\x41\x56\x48\x83\xEC\x60" "linux" "@_ZN15CTFPlayerShared4BurnEP9CTFPlayerP13CTFWeaponBasef" "linux64" "@_ZN15CTFPlayerShared4BurnEP9CTFPlayerP13CTFWeaponBasef" @@ -31,7 +31,7 @@ /* String : "reveal_disguised_victim_on_hit", follow the xref, RemoveDisguise is the subroutine that's called if the return value of CALL_ATTRIB_HOOK_INT( iRevealDisguisedSpyOnHit, reveal_disguised_victim_on_hit ); was true */ "library" "server" - "windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x57\xF7\x86\xD0\x00\x00\x00\x00\x00\x02\x00" + "windows" "\x56\x8B\xF1\x57\xF7\x86\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x74\x17\x8B" "windows64" "\x48\x89\x5C\x24\x10\x57\x48\x83\xEC\x40\xF7\x81\xF0\x00\x00\x00\x00\x00\x02\x00" "linux" "@_ZN15CTFPlayerShared14RemoveDisguiseEv" "linux64" "@_ZN15CTFPlayerShared14RemoveDisguiseEv" @@ -41,7 +41,7 @@ /* CTFPlayerShared::Disguise */ /* String : "mod_disguise_consumes_cloak" */ "library" "server" - "windows" "\x55\x8B\xEC\x83\xEC\x24\x56\x57\x8B\xF9\x8B\x8F\x8C\x01\x00\x00" + "windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x57\x8B\xF9\x8B\x8F\x8C\x01\x00\x00" "windows64" "\x40\x53\x55\x56\x57\x41\x54\x48\x81\xEC\x80\x00\x00\x00" "linux" "@_ZN15CTFPlayerShared8DisguiseEiiP9CTFPlayerb" "linux64" "@_ZN15CTFPlayerShared8DisguiseEiiP9CTFPlayerb" @@ -61,7 +61,7 @@ /* CTFPlayerShared::AddCond */ /* String: "#TF_HALLOWEEN_MERASMUS_YOU_ARE_BOMB" -> walk back the graph, right before there should two subroutines call (CTFPlayerShared::AddCond) with 0x20 & 0x35 as parameter */ "library" "server" - "windows" "\x55\x8B\xEC\x83\xEC\x08\x56\x8B\xF1\x8B\x8E\x8C\x01\x00\x00\x85\xC9" + "windows" "\x55\x8B\xEC\x83\xEC\x2A\x57\x8B\xF9\x8B\x8F\x2A\x2A\x2A\x2A\x85\xC9\x0F\x84\x2A\x2A\x2A\x2A\x8B\x01\x8B" "windows64" "\x48\x89\x5C\x24\x18\x48\x89\x7C\x24\x20\x41\x56\x48\x83\xEC\x40" "linux" "@_ZN15CTFPlayerShared7AddCondE7ETFCondfP11CBaseEntity" "linux64" "@_ZN15CTFPlayerShared7AddCondE7ETFCondfP11CBaseEntity" @@ -71,7 +71,7 @@ /* CTFPlayerShared::RemoveCond */ /* String: "damage_prevented" */ "library" "server" - "windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x8B\x5D\x08\x56\x53" + "windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x8B\x5D\x2A\x57\x53\x8B\xF9\xE8" "windows64" "\x40\x53\x57\x41\x56\x48\x83\xEC\x20\x45\x0F\xB6\xF0" "linux" "@_ZN15CTFPlayerShared10RemoveCondE7ETFCondb" "linux64" "@_ZN15CTFPlayerShared10RemoveCondE7ETFCondb" @@ -101,7 +101,7 @@ /* CTFPlayerShared::StunPlayer */ /* String: "player_stunned" */ "library" "server" - "windows" "\x55\x8B\xEC\x83\xEC\x24\x57\x8B\xF9\x8B\x87\xE0\x04\x00\x00" + "windows" "\x55\x8B\xEC\x83\xEC\x2A\x57\x8B\xF9\x8B\x87\x2A\x2A\x2A\x2A\x40\x3D" "windows64" "\x40\x57\x41\x57\x48\x81\xEC\x98\x00\x00\x00" "linux" "@_ZN15CTFPlayerShared10StunPlayerEffiP9CTFPlayer" "linux64" "@_ZN15CTFPlayerShared10StunPlayerEffiP9CTFPlayer" diff --git a/addons/sourcemod/plugins/admin-flatfile.smx b/addons/sourcemod/plugins/admin-flatfile.smx index 6aef55443..a5e0b8ce1 100644 Binary files a/addons/sourcemod/plugins/admin-flatfile.smx and b/addons/sourcemod/plugins/admin-flatfile.smx differ diff --git a/addons/sourcemod/plugins/adminhelp.smx b/addons/sourcemod/plugins/adminhelp.smx index 69641596e..b35e699d2 100644 Binary files a/addons/sourcemod/plugins/adminhelp.smx and b/addons/sourcemod/plugins/adminhelp.smx differ diff --git a/addons/sourcemod/plugins/adminmenu.smx b/addons/sourcemod/plugins/adminmenu.smx index 74fc53b26..108deae0e 100644 Binary files a/addons/sourcemod/plugins/adminmenu.smx and b/addons/sourcemod/plugins/adminmenu.smx differ diff --git a/addons/sourcemod/plugins/antiflood.smx b/addons/sourcemod/plugins/antiflood.smx index ce876cd88..a596c63ce 100644 Binary files a/addons/sourcemod/plugins/antiflood.smx and b/addons/sourcemod/plugins/antiflood.smx differ diff --git a/addons/sourcemod/plugins/basebans.smx b/addons/sourcemod/plugins/basebans.smx index cc15e9736..b6db50b2b 100644 Binary files a/addons/sourcemod/plugins/basebans.smx and b/addons/sourcemod/plugins/basebans.smx differ diff --git a/addons/sourcemod/plugins/basechat.smx b/addons/sourcemod/plugins/basechat.smx index 56e35c02d..2d45f429b 100644 Binary files a/addons/sourcemod/plugins/basechat.smx and b/addons/sourcemod/plugins/basechat.smx differ diff --git a/addons/sourcemod/plugins/basecomm.smx b/addons/sourcemod/plugins/basecomm.smx index ba82b6ec4..46f05298a 100644 Binary files a/addons/sourcemod/plugins/basecomm.smx and b/addons/sourcemod/plugins/basecomm.smx differ diff --git a/addons/sourcemod/plugins/basecommands.smx b/addons/sourcemod/plugins/basecommands.smx index 9337d3cce..701b157fb 100644 Binary files a/addons/sourcemod/plugins/basecommands.smx and b/addons/sourcemod/plugins/basecommands.smx differ diff --git a/addons/sourcemod/plugins/basetriggers.smx b/addons/sourcemod/plugins/basetriggers.smx index e37be1247..3c8df3f0f 100644 Binary files a/addons/sourcemod/plugins/basetriggers.smx and b/addons/sourcemod/plugins/basetriggers.smx differ diff --git a/addons/sourcemod/plugins/basevotes.smx b/addons/sourcemod/plugins/basevotes.smx index b45b2534a..6f26b2794 100644 Binary files a/addons/sourcemod/plugins/basevotes.smx and b/addons/sourcemod/plugins/basevotes.smx differ diff --git a/addons/sourcemod/plugins/clientprefs.smx b/addons/sourcemod/plugins/clientprefs.smx index 250456bbd..286d3ac84 100644 Binary files a/addons/sourcemod/plugins/clientprefs.smx and b/addons/sourcemod/plugins/clientprefs.smx differ diff --git a/addons/sourcemod/plugins/confoglcompmod.smx b/addons/sourcemod/plugins/confoglcompmod.smx index 201225a06..d9a6b565d 100644 Binary files a/addons/sourcemod/plugins/confoglcompmod.smx and b/addons/sourcemod/plugins/confoglcompmod.smx differ diff --git a/addons/sourcemod/plugins/fixes/l4d2_changelevel.smx b/addons/sourcemod/plugins/fixes/l4d2_changelevel.smx deleted file mode 100644 index 50f23f0d5..000000000 Binary files a/addons/sourcemod/plugins/fixes/l4d2_changelevel.smx and /dev/null differ diff --git a/addons/sourcemod/plugins/fixes/l4d2_ellis_hunter_bandaid_fix.smx b/addons/sourcemod/plugins/fixes/l4d2_ellis_hunter_bandaid_fix.smx index f65158d61..fdb5e4c03 100644 Binary files a/addons/sourcemod/plugins/fixes/l4d2_ellis_hunter_bandaid_fix.smx and b/addons/sourcemod/plugins/fixes/l4d2_ellis_hunter_bandaid_fix.smx differ diff --git a/addons/sourcemod/plugins/fixes/l4d2_fix_changelevel.smx b/addons/sourcemod/plugins/fixes/l4d2_fix_changelevel.smx new file mode 100644 index 000000000..06576165b Binary files /dev/null and b/addons/sourcemod/plugins/fixes/l4d2_fix_changelevel.smx differ diff --git a/addons/sourcemod/plugins/funcommands.smx b/addons/sourcemod/plugins/funcommands.smx index 6b8740040..f1292ca9e 100644 Binary files a/addons/sourcemod/plugins/funcommands.smx and b/addons/sourcemod/plugins/funcommands.smx differ diff --git a/addons/sourcemod/plugins/funvotes.smx b/addons/sourcemod/plugins/funvotes.smx index 75f212b3a..71ff3a3fd 100644 Binary files a/addons/sourcemod/plugins/funvotes.smx and b/addons/sourcemod/plugins/funvotes.smx differ diff --git a/addons/sourcemod/plugins/left4dhooks.smx b/addons/sourcemod/plugins/left4dhooks.smx index 6beafd9b4..7098ef465 100644 Binary files a/addons/sourcemod/plugins/left4dhooks.smx and b/addons/sourcemod/plugins/left4dhooks.smx differ diff --git a/addons/sourcemod/plugins/match_vote.smx b/addons/sourcemod/plugins/match_vote.smx index d7c875763..f46131c3c 100644 Binary files a/addons/sourcemod/plugins/match_vote.smx and b/addons/sourcemod/plugins/match_vote.smx differ diff --git a/addons/sourcemod/plugins/optional/1v1.smx b/addons/sourcemod/plugins/optional/1v1.smx index 045fe8c06..7ae80b626 100644 Binary files a/addons/sourcemod/plugins/optional/1v1.smx and b/addons/sourcemod/plugins/optional/1v1.smx differ diff --git a/addons/sourcemod/plugins/optional/1v1_skeetstats.smx b/addons/sourcemod/plugins/optional/1v1_skeetstats.smx index 263e08795..1f8ed7e0d 100644 Binary files a/addons/sourcemod/plugins/optional/1v1_skeetstats.smx and b/addons/sourcemod/plugins/optional/1v1_skeetstats.smx differ diff --git a/addons/sourcemod/plugins/optional/l4d2_getup_slide_fix.smx b/addons/sourcemod/plugins/optional/l4d2_getup_slide_fix.smx index f89dda5e0..cdbda6bfe 100644 Binary files a/addons/sourcemod/plugins/optional/l4d2_getup_slide_fix.smx and b/addons/sourcemod/plugins/optional/l4d2_getup_slide_fix.smx differ diff --git a/addons/sourcemod/plugins/optional/l4d2_hittable_control.smx b/addons/sourcemod/plugins/optional/l4d2_hittable_control.smx index b84e102fe..3475ef674 100644 Binary files a/addons/sourcemod/plugins/optional/l4d2_hittable_control.smx and b/addons/sourcemod/plugins/optional/l4d2_hittable_control.smx differ diff --git a/addons/sourcemod/plugins/optional/l4d2_skill_detect.smx b/addons/sourcemod/plugins/optional/l4d2_skill_detect.smx index c44f1c496..f6d0ac96c 100644 Binary files a/addons/sourcemod/plugins/optional/l4d2_skill_detect.smx and b/addons/sourcemod/plugins/optional/l4d2_skill_detect.smx differ diff --git a/addons/sourcemod/plugins/optional/l4d_boss_percent.smx b/addons/sourcemod/plugins/optional/l4d_boss_percent.smx index 1e20b9b7f..e765f82ba 100644 Binary files a/addons/sourcemod/plugins/optional/l4d_boss_percent.smx and b/addons/sourcemod/plugins/optional/l4d_boss_percent.smx differ diff --git a/addons/sourcemod/plugins/playercommands.smx b/addons/sourcemod/plugins/playercommands.smx index 6cff22aa7..82ce75514 100644 Binary files a/addons/sourcemod/plugins/playercommands.smx and b/addons/sourcemod/plugins/playercommands.smx differ diff --git a/addons/sourcemod/plugins/reservedslots.smx b/addons/sourcemod/plugins/reservedslots.smx index f1c337211..e29217276 100644 Binary files a/addons/sourcemod/plugins/reservedslots.smx and b/addons/sourcemod/plugins/reservedslots.smx differ diff --git a/addons/sourcemod/plugins/sounds.smx b/addons/sourcemod/plugins/sounds.smx index 30b144b39..d211e13d2 100644 Binary files a/addons/sourcemod/plugins/sounds.smx and b/addons/sourcemod/plugins/sounds.smx differ diff --git a/addons/sourcemod/scripting/1v1.sp b/addons/sourcemod/scripting/1v1.sp index bed19e437..ca198710a 100644 --- a/addons/sourcemod/scripting/1v1.sp +++ b/addons/sourcemod/scripting/1v1.sp @@ -35,7 +35,7 @@ public Plugin myinfo = name = "1v1 EQ", author = "Blade + Confogl Team, Tabun, Visor", description = "A plugin designed to support 1v1.", - version = "0.2.2", + version = "0.2.4", url = "https://github.com/SirPlease/L4D2-Competitive-Rework" }; @@ -74,16 +74,12 @@ void Event_PlayerHurt(Event hEvent, const char[] sEventName, bool bDontBroadcast int iRemainingHealth = GetClientHealth(iAttacker); // [1v1] Player (Hunter) had 250 health remaining! - // [1v1] AI (Hunter) had 250 health remaining! + // [1v1] [BOT] Hunter had 250 health remaining! - char sName[MAX_NAME_LENGTH]; - if (IsFakeClient(iAttacker)) { - Format(sName, sizeof(sName), "%t", "AI"); - } else { - GetClientName(iAttacker, sName, sizeof(sName)); - } - - CPrintToChatAll("%t %t", "Tag", "HealthRemaining", sName, L4D2_InfectedNames[iZclass], iRemainingHealth); + if (IsFakeClient(iAttacker)) + CPrintToChatAll("%t %t", "Tag", "HealthRemainingAI", L4D2_InfectedNames[iZclass], iRemainingHealth); + else + CPrintToChatAll("%t %t", "Tag", "HealthRemaining", iAttacker, L4D2_InfectedNames[iZclass], iRemainingHealth); RequestFrame(NextFrame_PlayerHurt, iAttackerId); diff --git a/addons/sourcemod/scripting/1v1_skeetstats.sp b/addons/sourcemod/scripting/1v1_skeetstats.sp index 46cb0878e..a014909f4 100644 --- a/addons/sourcemod/scripting/1v1_skeetstats.sp +++ b/addons/sourcemod/scripting/1v1_skeetstats.sp @@ -81,6 +81,8 @@ Changelog --------- + 0.1g + - fixed translations issues 0.1f - fixed more error spam in error logs 0.1e @@ -94,7 +96,7 @@ public Plugin myinfo = name = "1v1 SkeetStats", author = "Tabun", description = "Shows 1v1-relevant info at end of round.", - version = "0.1f", + version = "0.1g", url = "nope" }; @@ -864,131 +866,84 @@ void WeaponFire_Event(Handle event, const char[] name, bool dontBroadcast) void PrintSkeetStats(int toClient) { - char printBuffer[512]; - char tmpBuffer[256]; - - printBuffer = ""; - if (iClientPlaying <= 0) { return; } - /* - //decl String:tmpName[64]; - if (!IsClientConnected(iClientPlaying)) { - tmpName = sClientName[iClientPlaying]; - } else { - Format(tmpName, sizeof(tmpName),"%N", iClientPlaying); - } */ - - // no need to calculate, show stats - // 1. SI damage & SI kills - // 2. skeets - // 3. accuracy - // 4. common kills - - /* - TODO: make it so: - 1v1Stat - Kills: (934 Dmg, 4 Kills) (23 Common) - 1v1Stat - Skeet: (1 Normal, 3 Injured) (5 Deadstops) - 1v1Stat - Acc. : (Total [72%], Per Pellet [25%]) (3 Headshots) - */ + if (toClient) + { + if (IsClientAndInGame(toClient)) + PrintSkeetStatsTo(toClient); + } + else + { + for (int i = 1; i <= MaxClients; i++) + { + if (IsClientInGame(i) && !IsFakeClient(i)) + PrintSkeetStatsTo(i); + } + } +} - // report - // 1 +static void PrintSkeetStatsTo(int target) +{ + // 1. SI damage & SI kills if (!(iBrevityFlags & BREV_SI)) { if (!(iBrevityFlags & BREV_DMG)) { if (!(iBrevityFlags & BREV_CI)) - { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagKills", "SI_DMG_CI", iDidDamageAll[iClientPlaying], iGotKills[iClientPlaying], iGotCommon[iClientPlaying]); - } + CPrintToChat(target, "%t %t", "TagKills", "SI_DMG_CI", iDidDamageAll[iClientPlaying], iGotKills[iClientPlaying], iGotCommon[iClientPlaying]); else - { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagKills", "SI_DMG", iDidDamageAll[iClientPlaying], iGotKills[iClientPlaying]); - } + CPrintToChat(target, "%t %t", "TagKills", "SI_DMG", iDidDamageAll[iClientPlaying], iGotKills[iClientPlaying]); } else { if (!(iBrevityFlags & BREV_CI)) - { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagKills", "SI_CI", iGotKills[iClientPlaying], iGotCommon[iClientPlaying]); - } + CPrintToChat(target, "%t %t", "TagKills", "SI_CI", iGotKills[iClientPlaying], iGotCommon[iClientPlaying]); else - { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagKills", "SI", iGotKills[iClientPlaying]); - } - } - StrCat(printBuffer, sizeof(printBuffer), tmpBuffer); - - if (!toClient) - { - CPrintToChatAll("%s", printBuffer); - } - else if (IsClientAndInGame(toClient)) - { - CPrintToChat(toClient, "%s", printBuffer); + CPrintToChat(target, "%t %t", "TagKills", "SI", iGotKills[iClientPlaying]); } - printBuffer = ""; } + // 2. skeets if (!(iBrevityFlags & BREV_SKEET)) - { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagSkeet", "SKEET", iHuntSkeets[iClientPlaying], iHuntSkeetsInj[iClientPlaying], iDeadStops[iClientPlaying]); - StrCat(printBuffer, sizeof(printBuffer), tmpBuffer); - - if (!toClient) - { - CPrintToChatAll("%s", printBuffer); - } - else if (IsClientAndInGame(toClient)) - { - CPrintToChat(toClient, "%s", printBuffer); - } - printBuffer = ""; - } + CPrintToChat(target, "%t %t", "TagSkeet", "SKEET", iHuntSkeets[iClientPlaying], iHuntSkeetsInj[iClientPlaying], iDeadStops[iClientPlaying]); + // 3. accuracy if (!(iBrevityFlags & BREV_ACC)) { + char printBuffer[512]; + char tmpBuffer[256]; + printBuffer = ""; + if (iShotsFired[iClientPlaying] || (iMeleesFired[iClientPlaying] && !(iBrevityFlags & BREV_MELEE))) { if (iShotsFired[iClientPlaying]) - { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagAcc", "ACC_AllShots", float(iShotsHit[iClientPlaying]) / float(iShotsFired[iClientPlaying]) * 100); - } - else { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagAcc", "ACC_AllShots", 0.0); - } + FormatEx(tmpBuffer, sizeof(tmpBuffer), "%T %T", "TagAcc", target, "ACC_AllShots", target, float(iShotsHit[iClientPlaying]) / float(iShotsFired[iClientPlaying]) * 100); + else + FormatEx(tmpBuffer, sizeof(tmpBuffer), "%T %T", "TagAcc", target, "ACC_AllShots", target, 0.0); + if (iPelletsFired[iClientPlaying]) { StrCat(printBuffer, sizeof(printBuffer), tmpBuffer); - Format(tmpBuffer, sizeof(tmpBuffer), "%t", "ACC_BuckShot", float(iPelletsHit[iClientPlaying]) / float(iPelletsFired[iClientPlaying]) * 100); + FormatEx(tmpBuffer, sizeof(tmpBuffer), "%T", "ACC_BuckShot", target, float(iPelletsHit[iClientPlaying]) / float(iPelletsFired[iClientPlaying]) * 100); } if (iMeleesFired[iClientPlaying] && !(iBrevityFlags & BREV_MELEE)) { StrCat(printBuffer, sizeof(printBuffer), tmpBuffer); - Format(tmpBuffer, sizeof(tmpBuffer), "%t", "ACC_Melee", float(iMeleesHit[iClientPlaying]) / float(iMeleesFired[iClientPlaying]) * 100); + FormatEx(tmpBuffer, sizeof(tmpBuffer), "%T", "ACC_Melee", target, float(iMeleesHit[iClientPlaying]) / float(iMeleesFired[iClientPlaying]) * 100); } StrCat(printBuffer, sizeof(printBuffer), tmpBuffer); - Format(tmpBuffer, sizeof(tmpBuffer), "\n"); + strcopy(tmpBuffer, sizeof(tmpBuffer), "\n"); } else { - Format(tmpBuffer, sizeof(tmpBuffer), "%t %t", "TagAcc", "ACC_NoShotsFired"); + FormatEx(tmpBuffer, sizeof(tmpBuffer), "%T %T", "TagAcc", target, "ACC_NoShotsFired", target); } StrCat(printBuffer, sizeof(printBuffer), tmpBuffer); - - if (!toClient) - { - CPrintToChatAll("%s", printBuffer); - } - else if (IsClientAndInGame(toClient)) - { - CPrintToChat(toClient, "%s", printBuffer); - } - printBuffer = ""; + CPrintToChat(target, "%s", printBuffer); } } diff --git a/addons/sourcemod/scripting/archive/double_getup.sp b/addons/sourcemod/scripting/archive/double_getup.sp index b908264a5..9d4a91016 100644 --- a/addons/sourcemod/scripting/archive/double_getup.sp +++ b/addons/sourcemod/scripting/archive/double_getup.sp @@ -60,7 +60,7 @@ enum ePlayerState eTANK_PUNCH_JOCKEY_FIX } -stock const int tankFlyAnim[SurvivorCharacter_Size - 1] = +stock const int tankFlyAnim[L4D2Util_SurvivorCharacter_Size - 1] = { 628, // Nick 636, // Rochelle @@ -69,8 +69,7 @@ stock const int tankFlyAnim[SurvivorCharacter_Size - 1] = 536, // Bill 545, // Zoey 539, // Francis - 536, // Louis - 539 // Francis + 536 // Louis }; ConVar @@ -81,19 +80,19 @@ bool lateLoad; int - pendingGetups[SurvivorCharacter_Size - 1] = {0, ...}, // This is used to track the number of pending getups. The collective opinion is that you should have at most 1. - interrupt[SurvivorCharacter_Size - 1] = {false, ...}, // If the player was getting up, and that getup is interrupted. This alows us to break out of the GetupTimer loop. - currentSequence[SurvivorCharacter_Size - 1] = {0, ...}; // Kept to track when a player changes sequences, i.e. changes animations. + pendingGetups[L4D2Util_SurvivorCharacter_Size - 1] = {0, ...}, // This is used to track the number of pending getups. The collective opinion is that you should have at most 1. + interrupt[L4D2Util_SurvivorCharacter_Size - 1] = {false, ...}, // If the player was getting up, and that getup is interrupted. This alows us to break out of the GetupTimer loop. + currentSequence[L4D2Util_SurvivorCharacter_Size - 1] = {0, ...}; // Kept to track when a player changes sequences, i.e. changes animations. ePlayerState - playerState[SurvivorCharacter_Size] = {eUPRIGHT, ...}; // Since there are multiple sequences for each animation, this acts as a simpler way to track a player's state. + playerState[L4D2Util_SurvivorCharacter_Size] = {eUPRIGHT, ...}; // Since there are multiple sequences for each animation, this acts as a simpler way to track a player's state. public Plugin myinfo = { name = "L4D2 Get-Up Fix", author = "Darkid, Jacob", description = "Fixes the problem when, after completing a getup animation, you have another one.", - version = "3.8.1", + version = "3.8.2", url = "https://github.com/SirPlease/L4D2-Competitive-Rework" } @@ -139,7 +138,7 @@ public void OnClientPutInServer(int client) public void round_start(Event hEvent, const char[] name, bool dontBroadcast) { - for (int survivor = 0; survivor < SurvivorCharacter_Size; survivor++) { + for (int survivor = 0; survivor < L4D2Util_SurvivorCharacter_Size; survivor++) { playerState[survivor] = eUPRIGHT; } } @@ -149,7 +148,7 @@ public void smoker_land(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -162,7 +161,7 @@ public void jockey_land(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -173,7 +172,7 @@ public void jockey_clear(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -187,7 +186,7 @@ public void smoker_clear(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -204,7 +203,7 @@ public void hunter_clear(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -226,7 +225,7 @@ public void hunter_clear(Event hEvent, const char[] name, bool dontBroadcast) public void multi_charge(Event hEvent, const char[] name, bool dontBroadcast) { int survivor = IdentifySurvivor(GetClientOfUserId(hEvent.GetInt("victim"))); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -241,7 +240,7 @@ public void multi_charge(Event hEvent, const char[] name, bool dontBroadcast) public void charger_land_instant(Event hEvent, const char[] name, bool dontBroadcast) { int survivor = IdentifySurvivor(GetClientOfUserId(hEvent.GetInt("victim"))); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -257,7 +256,7 @@ public void charger_land_instant(Event hEvent, const char[] name, bool dontBroad public void charger_land(Event hEvent, const char[] name, bool dontBroadcast) { int survivor = IdentifySurvivor(GetClientOfUserId(hEvent.GetInt("victim"))); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -273,7 +272,7 @@ public void charger_clear(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -289,7 +288,7 @@ public void charger_clear(Event hEvent, const char[] name, bool dontBroadcast) public void player_incap(Event hEvent, const char[] name, bool dontBroadcast) { int survivor = IdentifySurvivor(GetClientOfUserId(hEvent.GetInt("userid"))); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -306,7 +305,7 @@ public void player_revive(Event hEvent, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("subject")); int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -318,7 +317,7 @@ public void player_revive(Event hEvent, const char[] name, bool dontBroadcast) public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) { int survivor = IdentifySurvivor(victim); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Continue; } @@ -365,7 +364,7 @@ void _TankLandTimer(int client) public Action TankLandTimer(Handle hTimer, any client) { int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Stop; } @@ -410,7 +409,7 @@ void _GetupTimer(int client) public Action GetupTimer(Handle hTimer, any client) { int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Stop; } @@ -472,7 +471,7 @@ void _CancelGetup(int client) public Action CancelGetup(Handle hTimer, any client) { int survivor = IdentifySurvivor(client); - if (survivor == SurvivorCharacter_Invalid) { + if (survivor == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Stop; } diff --git a/addons/sourcemod/scripting/archive/l4d2_getupfix.sp b/addons/sourcemod/scripting/archive/l4d2_getupfix.sp index a26fe3782..445b7de19 100644 --- a/addons/sourcemod/scripting/archive/l4d2_getupfix.sp +++ b/addons/sourcemod/scripting/archive/l4d2_getupfix.sp @@ -39,7 +39,7 @@ int bArClientAlreadyChecked[MAXPLAYERS + 1]; //in the rare event of it being a game with multiple chargers and 2+ getting cleared on slam static const int - getUpAnimations[SurvivorCharacter_Size][eINDEX_SIZE] = + getUpAnimations[L4D2Util_SurvivorCharacter_Size - 1][eINDEX_SIZE] = { // l4d2 // 0: Nick, 1: Rochelle, 2: Coach, 3: Ellis @@ -56,7 +56,7 @@ static const int {528, 759, 763, 764} // Louis }, //incapped animations: 0 = single-pistol, 1 = dual pistols - incapAnimations[SurvivorCharacter_Size][eINCAP_ANIMATIONS_SIZE] = + incapAnimations[L4D2Util_SurvivorCharacter_Size - 1][eINCAP_ANIMATIONS_SIZE] = { // l4d2 // 0: Nick, 1: Rochelle, 2: Coach, 3: Ellis @@ -106,7 +106,7 @@ public Action Timer_ProcessClient(Handle hTimer, any client) void ProcessClient(int client) { int charIndex = IdentifySurvivor(client); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -148,7 +148,7 @@ public Action Timer_CheckClient(Handle hTimer, ArrayStack tempStack) int client = tempStack.Pop(); int charIndex = IdentifySurvivor(client); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Stop; } @@ -194,7 +194,7 @@ public Action GetupTimer(Handle hTimer, any attacker) int seq = GetEntProp(i, Prop_Send, "m_nSequence"); int character = IdentifySurvivor(i); - if (character == SurvivorCharacter_Invalid) { + if (character == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Stop; } diff --git a/addons/sourcemod/scripting/confoglcompmod.sp b/addons/sourcemod/scripting/confoglcompmod.sp index 79de341ac..de7d6f5a9 100644 --- a/addons/sourcemod/scripting/confoglcompmod.sp +++ b/addons/sourcemod/scripting/confoglcompmod.sp @@ -3,7 +3,7 @@ #define DEBUG_ALL 0 -#define PLUGIN_VERSION "2.4.5" +#define PLUGIN_VERSION "2.4.7" // Using these macros, you can disable unnecessary modules, // and they will not be included in the plugin at compile time, @@ -32,8 +32,6 @@ #include #include #include -#undef REQUIRE_PLUGIN -#include //#include //ItemTracking (commented out) #include "confoglcompmod/includes/constants.sp" diff --git a/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp b/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp index 9be1172ac..7fb3760ef 100644 --- a/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp +++ b/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp @@ -49,6 +49,7 @@ void BS_OnMapStart() { BS_bIsFirstRound = true; BS_bFinaleStarted = false; + BS_bDeleteWitches = false; for (int i = 0; i < ROUND_MAX_COUNT; i++) { BS_iTankCount[i] = 0; diff --git a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp index 36cf9782e..ddb73170e 100644 --- a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp +++ b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp @@ -15,17 +15,26 @@ enum struct CVSEntry char CVSE_newval[CVS_CVAR_MAXLEN]; } +enum struct CVSPending +{ + char CVSP_name[CVS_CVAR_MAXLEN]; + char CVSP_newval[CVS_CVAR_MAXLEN]; +} + static bool bTrackingStarted = false; static ArrayList - CvarSettingsArray = null; + CvarSettingsArray = null, + PendingCvarsArray = null; void CVS_OnModuleStart() { CVSEntry cvsetting; + CVSPending cvspending; CvarSettingsArray = new ArrayList(sizeof(cvsetting)); + PendingCvarsArray = new ArrayList(sizeof(cvspending)); RegConsoleCmd("confogl_cvarsettings", CVS_CvarSettings_Cmd, "List all ConVars being enforced by Confogl"); RegConsoleCmd("confogl_cvardiff", CVS_CvarDiff_Cmd, "List any ConVars that have been changed from their initialized values"); @@ -42,6 +51,8 @@ void CVS_OnModuleEnd() void CVS_OnConfigsExecuted() { + ResolvePendingCvars(); + if (bTrackingStarted) { SetEnforcedCvars(); } @@ -62,6 +73,7 @@ static Action CVS_SetCvars_Cmd(int args) LogMessage("[%s] No longer accepting new ConVars", CVS_MODULE_NAME); #endif + ResolvePendingCvars(); SetEnforcedCvars(); bTrackingStarted = true; @@ -211,6 +223,7 @@ static void ClearAllSettings() } CvarSettingsArray.Clear(); + PendingCvarsArray.Clear(); } static void SetEnforcedCvars() @@ -251,22 +264,15 @@ static void AddCvar(const char[] cvar, const char[] newval) return; } - ConVar newCvar = FindConVar(cvar); - - if (newCvar == null) { - Debug_LogError(CVS_MODULE_NAME, "Could not find CVar specified (%s)", cvar); - return; - } - char cvarBuffer[CVS_CVAR_MAXLEN]; int iSize = CvarSettingsArray.Length; - CVSEntry newEntry; + CVSEntry existingEntry; for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, newEntry, sizeof(newEntry)); + CvarSettingsArray.GetArray(i, existingEntry, sizeof(existingEntry)); - (newEntry.CVSE_cvar).GetName(cvarBuffer, CVS_CVAR_MAXLEN); + (existingEntry.CVSE_cvar).GetName(cvarBuffer, CVS_CVAR_MAXLEN); if (strcmp(cvar, cvarBuffer, false) == 0) { Debug_LogError(CVS_MODULE_NAME, "Attempt to track ConVar %s, which is already being tracked.", cvar); @@ -274,21 +280,79 @@ static void AddCvar(const char[] cvar, const char[] newval) } } - newCvar.GetString(cvarBuffer, CVS_CVAR_MAXLEN); + int iPendingSize = PendingCvarsArray.Length; + CVSPending pendingEntry; + + for (int i = 0; i < iPendingSize; i++) { + PendingCvarsArray.GetArray(i, pendingEntry, sizeof(pendingEntry)); + + if (strcmp(cvar, pendingEntry.CVSP_name, false) == 0) { + Debug_LogError(CVS_MODULE_NAME, "Attempt to track ConVar %s, which is already pending late-bind.", cvar); + return; + } + } + + ConVar newCvar = FindConVar(cvar); - newEntry.CVSE_cvar = newCvar; + if (newCvar == null) { + // Owning plugin may not be loaded yet; retry from CVS_OnConfigsExecuted. + strcopy(pendingEntry.CVSP_name, CVS_CVAR_MAXLEN, cvar); + strcopy(pendingEntry.CVSP_newval, CVS_CVAR_MAXLEN, newval); + PendingCvarsArray.PushArray(pendingEntry, sizeof(pendingEntry)); + + #if CVARS_DEBUG + LogMessage("[%s] Pending late-bind for cvar = %s, newval = %s", CVS_MODULE_NAME, cvar, newval); + #endif + return; + } + + PushTrackedCvar(newCvar, newval); +} + +static void PushTrackedCvar(ConVar cvar, const char[] newval) +{ + char cvarBuffer[CVS_CVAR_MAXLEN]; + cvar.GetString(cvarBuffer, CVS_CVAR_MAXLEN); + + CVSEntry newEntry; + newEntry.CVSE_cvar = cvar; strcopy(newEntry.CVSE_oldval, CVS_CVAR_MAXLEN, cvarBuffer); strcopy(newEntry.CVSE_newval, CVS_CVAR_MAXLEN, newval); - newCvar.AddChangeHook(CVS_ConVarChange); + cvar.AddChangeHook(CVS_ConVarChange); #if CVARS_DEBUG - LogMessage("[%s] cvar = %s, newval = %s, oldval = %s", CVS_MODULE_NAME, cvar, newval, cvarBuffer); + char cvarName[CVS_CVAR_MAXLEN]; + cvar.GetName(cvarName, sizeof(cvarName)); + LogMessage("[%s] cvar = %s, newval = %s, oldval = %s", CVS_MODULE_NAME, cvarName, newval, cvarBuffer); #endif CvarSettingsArray.PushArray(newEntry, sizeof(newEntry)); } +static void ResolvePendingCvars() +{ + int iSize = PendingCvarsArray.Length; + if (iSize == 0) { + return; + } + + CVSPending pendingEntry; + + // Reverse iteration so Erase() doesn't shift entries we haven't visited. + for (int i = iSize - 1; i >= 0; i--) { + PendingCvarsArray.GetArray(i, pendingEntry, sizeof(pendingEntry)); + + ConVar resolved = FindConVar(pendingEntry.CVSP_name); + if (resolved == null) { + continue; + } + + PushTrackedCvar(resolved, pendingEntry.CVSP_newval); + PendingCvarsArray.Erase(i); + } +} + static void CVS_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { if (bTrackingStarted) { diff --git a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp index 45546f137..a1e84332f 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp @@ -16,7 +16,6 @@ static bool RM_bIsAMatchActive = false, RM_bIsPluginsLoaded = false, RM_bIsMapRestarted = false, - RM_bIsChangeLevelAvailable = false, RM_bIsChmatchRequest = false; static Handle @@ -43,22 +42,6 @@ void RM_APL() CreateNative("LGO_IsMatchModeLoaded", native_IsMatchModeLoaded); } -public void OnLibraryAdded(const char[] name) -{ - if (strcmp(name, "l4d2_changelevel") == 0) - { - RM_bIsChangeLevelAvailable = true; - } -} - -public void OnLibraryRemoved(const char[] name) -{ - if (strcmp(name, "l4d2_changelevel") == 0) - { - RM_bIsChangeLevelAvailable = false; - } -} - void RM_OnModuleStart() { RM_hDoRestart = CreateConVarEx("match_restart", "1", "Sets whether the plugin will restart the map upon match mode being forced or requested", _, true, 0.0, true, 1.0); @@ -102,9 +85,6 @@ void RM_OnModuleStart() RM_hReloaded.SetInt(0); RM_Match_Load(); } - - // ChangeLevel - RM_bIsChangeLevelAvailable = LibraryExists("l4d2_changelevel"); } void RM_OnMapStart() @@ -307,8 +287,7 @@ static Action RM_Match_MapRestart_Timer(Handle hTimer, DataPack hDp) hDp.Reset(); hDp.ReadString(sMap, sizeof(sMap)); - if (RM_bIsChangeLevelAvailable) L4D2_ChangeLevel(sMap); - else ServerCommand("changelevel %s", sMap); + ForceChangeLevel(sMap, "Match restart"); RM_bIsMapRestarted = true; diff --git a/addons/sourcemod/scripting/include/l4d2_changelevel.inc b/addons/sourcemod/scripting/include/l4d2_changelevel.inc deleted file mode 100644 index b4fd16018..000000000 --- a/addons/sourcemod/scripting/include/l4d2_changelevel.inc +++ /dev/null @@ -1,33 +0,0 @@ -/* -* https://github.com/LuxLuma/Left-4-fix -*/ - -#if defined _l4d2_changelevel_included -#endinput -#endif -#define _l4d2_changelevel_included - -/** -* @param sMapName Map String without .bsp -* @param bShouldResetScores Reset all scores in all gamemodes -* @noreturn -*/ -native void L4D2_ChangeLevel(const char[] sMapName, bool bShouldResetScores=true); - -public SharedPlugin __pl_l4d2_changelevel = -{ - name = "l4d2_changelevel", - file = "l4d2_changelevel.smx", -#if defined REQUIRE_PLUGIN - required = 1, -#else - required = 0, -#endif -}; - -#if !defined REQUIRE_PLUGIN -public void __pl_l4d2_changelevel_SetNTVOptional() -{ - MarkNativeAsOptional("L4D2_ChangeLevel"); -} -#endif diff --git a/addons/sourcemod/scripting/include/l4d2util_constants.inc b/addons/sourcemod/scripting/include/l4d2util_constants.inc index 857e40182..4fbddae68 100644 --- a/addons/sourcemod/scripting/include/l4d2util_constants.inc +++ b/addons/sourcemod/scripting/include/l4d2util_constants.inc @@ -500,20 +500,20 @@ stock const int WeaponSlots[WEPID_SIZE] = */ enum /*SurvivorCharacterType*/ { - SurvivorCharacter_Nick = 0, - SurvivorCharacter_Rochelle, - SurvivorCharacter_Coach, - SurvivorCharacter_Ellis, - SurvivorCharacter_Bill, - SurvivorCharacter_Zoey, - SurvivorCharacter_Francis, - SurvivorCharacter_Louis, - SurvivorCharacter_Invalid, // 8 - - SurvivorCharacter_Size // 9 size + L4D2Util_SurvivorCharacter_Nick = 0, + L4D2Util_SurvivorCharacter_Rochelle, + L4D2Util_SurvivorCharacter_Coach, + L4D2Util_SurvivorCharacter_Ellis, + L4D2Util_SurvivorCharacter_Bill, + L4D2Util_SurvivorCharacter_Zoey, + L4D2Util_SurvivorCharacter_Francis, + L4D2Util_SurvivorCharacter_Louis, + L4D2Util_SurvivorCharacter_Invalid, // 8 + + L4D2Util_SurvivorCharacter_Size // 9 size }; -stock const char g_sSurvivorDisplayName[SurvivorCharacter_Size][] = +stock const char g_sSurvivorDisplayName[L4D2Util_SurvivorCharacter_Size][] = { "Nick", "Rochelle", @@ -526,7 +526,7 @@ stock const char g_sSurvivorDisplayName[SurvivorCharacter_Size][] = "Invalid" }; -stock const char g_sSurvivorName[SurvivorCharacter_Size][] = +stock const char g_sSurvivorName[L4D2Util_SurvivorCharacter_Size][] = { "Gambler", "Producer", @@ -540,7 +540,7 @@ stock const char g_sSurvivorName[SurvivorCharacter_Size][] = }; // Models for each of the characters -stock const char g_sSurvivorModels[SurvivorCharacter_Size - 1][] = +stock const char g_sSurvivorModels[L4D2Util_SurvivorCharacter_Size - 1][] = { "models/survivors/survivor_gambler.mdl", // MODEL_NICK "models/survivors/survivor_producer.mdl", // MODEL_ROCHELLE diff --git a/addons/sourcemod/scripting/include/l4d2util_survivors.inc b/addons/sourcemod/scripting/include/l4d2util_survivors.inc index 6be029a91..b5170eb9f 100644 --- a/addons/sourcemod/scripting/include/l4d2util_survivors.inc +++ b/addons/sourcemod/scripting/include/l4d2util_survivors.inc @@ -11,29 +11,29 @@ // Much faster than searching by model in the StringMap. stock const int g_iGenderToSurvivorIndex[L4D2Gender_MaxSize] = { - SurvivorCharacter_Invalid, // L4D2Gender_Neutral = 0, - SurvivorCharacter_Invalid, // L4D2Gender_Male = 1, - SurvivorCharacter_Invalid, // L4D2Gender_Female = 2, - SurvivorCharacter_Bill, // L4D2Gender_Nanvet = 3, // Bill - SurvivorCharacter_Zoey, // L4D2Gender_TeenGirl = 4, // Zoey - SurvivorCharacter_Francis, // L4D2Gender_Biker = 5, // Francis - SurvivorCharacter_Louis, // L4D2Gender_Manager = 6, // Louis - SurvivorCharacter_Nick, // L4D2Gender_Gambler = 7, // Nick - SurvivorCharacter_Rochelle, // L4D2Gender_Producer = 8, // Rochelle - SurvivorCharacter_Coach, // L4D2Gender_Coach = 9, // Coach - SurvivorCharacter_Ellis, // L4D2Gender_Mechanic = 10, // Ellis - SurvivorCharacter_Invalid, // L4D2Gender_Ceda = 11, - SurvivorCharacter_Invalid, // L4D2Gender_Crawler = 12, // Mudman - SurvivorCharacter_Invalid, // L4D2Gender_Undistractable = 13, // Workman (class not reacting to the pipe bomb) - SurvivorCharacter_Invalid, // L4D2Gender_Fallen = 14, - SurvivorCharacter_Invalid, // L4D2Gender_Riot_Control = 15, // RiotCop - SurvivorCharacter_Invalid, // L4D2Gender_Clown = 16, - SurvivorCharacter_Invalid, // L4D2Gender_Jimmy = 17, // JimmyGibbs - SurvivorCharacter_Invalid, // L4D2Gender_Hospital_Patient = 18, - SurvivorCharacter_Invalid, // L4D2Gender_Witch_Bride = 19, - SurvivorCharacter_Invalid, // L4D2Gender_Police = 20, // l4d1 RiotCop (was removed from the game) - SurvivorCharacter_Invalid, // L4D2Gender_Male_L4D1 = 21, - SurvivorCharacter_Invalid, // L4D2Gender_Female_L4D1 = 22 + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Neutral = 0, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Male = 1, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Female = 2, + L4D2Util_SurvivorCharacter_Bill, // L4D2Gender_Nanvet = 3, // Bill + L4D2Util_SurvivorCharacter_Zoey, // L4D2Gender_TeenGirl = 4, // Zoey + L4D2Util_SurvivorCharacter_Francis, // L4D2Gender_Biker = 5, // Francis + L4D2Util_SurvivorCharacter_Louis, // L4D2Gender_Manager = 6, // Louis + L4D2Util_SurvivorCharacter_Nick, // L4D2Gender_Gambler = 7, // Nick + L4D2Util_SurvivorCharacter_Rochelle, // L4D2Gender_Producer = 8, // Rochelle + L4D2Util_SurvivorCharacter_Coach, // L4D2Gender_Coach = 9, // Coach + L4D2Util_SurvivorCharacter_Ellis, // L4D2Gender_Mechanic = 10, // Ellis + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Ceda = 11, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Crawler = 12, // Mudman + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Undistractable = 13, // Workman (class not reacting to the pipe bomb) + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Fallen = 14, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Riot_Control = 15, // RiotCop + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Clown = 16, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Jimmy = 17, // JimmyGibbs + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Hospital_Patient = 18, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Witch_Bride = 19, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Police = 20, // l4d1 RiotCop (was removed from the game) + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Male_L4D1 = 21, + L4D2Util_SurvivorCharacter_Invalid, // L4D2Gender_Female_L4D1 = 22 }; stock const char L4D2_AttackerNetProps[][] = @@ -159,16 +159,16 @@ stock bool IsHangingFromLedge(int client) * Identifies the survivor character based on netprop 'm_Gender'. * Contains checks for a valid player. * - * @remark SurvivorCharacter_Invalid on errors + * @remark L4D2Util_SurvivorCharacter_Invalid on errors * * @param client Survivor client to identify * - * @return int index identifying the survivor, or SurvivorCharacter_Invalid if not identified. + * @return int index identifying the survivor, or L4D2Util_SurvivorCharacter_Invalid if not identified. */ stock int IdentifySurvivor(int iClient) { if (iClient < 1 || iClient > MaxClients || !IsClientInGame(iClient)) { - return SurvivorCharacter_Invalid; + return L4D2Util_SurvivorCharacter_Invalid; } int iGender = GetEntProp(iClient, Prop_Send, "m_Gender"); @@ -179,11 +179,11 @@ stock int IdentifySurvivor(int iClient) * Identifies the survivor character based on netprop 'm_Gender'. * Does not contain checks for a valid player. * - * @remark SurvivorCharacter_Invalid on errors + * @remark L4D2Util_SurvivorCharacter_Invalid on errors * * @param client Survivor client to identify * - * @return int index identifying the survivor, or SurvivorCharacter_Invalid if not identified. + * @return int index identifying the survivor, or L4D2Util_SurvivorCharacter_Invalid if not identified. */ stock int IdentifySurvivorFast(int iClient) { @@ -200,12 +200,12 @@ stock int IdentifySurvivorFast(int iClient) * @param buffer buffer to store name * @param length length of buffer * - * @return bool false if SurvivorCharacter_Invalid, otherwise true + * @return bool false if L4D2Util_SurvivorCharacter_Invalid, otherwise true */ stock bool GetSurvivorDisplayNameByIndex(int iCharacter, char[] sBuffer, const int iLength) { - if (iCharacter < SurvivorCharacter_Nick || iCharacter > SurvivorCharacter_Invalid) { - strcopy(sBuffer, iLength, g_sSurvivorDisplayName[SurvivorCharacter_Invalid]); + if (iCharacter < L4D2Util_SurvivorCharacter_Nick || iCharacter > L4D2Util_SurvivorCharacter_Invalid) { + strcopy(sBuffer, iLength, g_sSurvivorDisplayName[L4D2Util_SurvivorCharacter_Invalid]); //LogError("[GetSurvivorDisplayNameByIndex] Invalid survivor character index passed!"); @@ -214,7 +214,7 @@ stock bool GetSurvivorDisplayNameByIndex(int iCharacter, char[] sBuffer, const i strcopy(sBuffer, iLength, g_sSurvivorDisplayName[iCharacter]); - return (iCharacter == SurvivorCharacter_Invalid) ? false : true; + return (iCharacter == L4D2Util_SurvivorCharacter_Invalid) ? false : true; } /** @@ -242,12 +242,12 @@ stock void GetSurvivorDisplayNameByIndexFast(int iCharacter, char[] sBuffer, con * @param buffer buffer to store name * @param length length of buffer * - * @return bool false if SurvivorCharacter_Invalid, otherwise true + * @return bool false if L4D2Util_SurvivorCharacter_Invalid, otherwise true */ stock bool GetSurvivorNameByIndex(int iCharacter, char[] sBuffer, const int iLength) { - if (iCharacter < SurvivorCharacter_Nick || iCharacter > SurvivorCharacter_Invalid) { - strcopy(sBuffer, iLength, g_sSurvivorName[SurvivorCharacter_Invalid]); + if (iCharacter < L4D2Util_SurvivorCharacter_Nick || iCharacter > L4D2Util_SurvivorCharacter_Invalid) { + strcopy(sBuffer, iLength, g_sSurvivorName[L4D2Util_SurvivorCharacter_Invalid]); //LogError("[GetSurvivorNameByIndex] Invalid survivor character index passed!"); @@ -256,7 +256,7 @@ stock bool GetSurvivorNameByIndex(int iCharacter, char[] sBuffer, const int iLen strcopy(sBuffer, iLength, g_sSurvivorName[iCharacter]); - return (iCharacter == SurvivorCharacter_Invalid) ? false : true; + return (iCharacter == L4D2Util_SurvivorCharacter_Invalid) ? false : true; } /** @@ -284,7 +284,7 @@ stock void GetSurvivorNameByIndexFast(int iCharacter, char[] sBuffer, const int * @param buffer buffer to store name * @param length length of buffer * - * @return bool false if SurvivorCharacter_Invalid, otherwise true + * @return bool false if L4D2Util_SurvivorCharacter_Invalid, otherwise true */ stock bool GetSurvivorDisplayName(int iClient, char[] sBuffer, const int iLength) { @@ -296,7 +296,7 @@ stock bool GetSurvivorDisplayName(int iClient, char[] sBuffer, const int iLength strcopy(sBuffer, iLength, g_sSurvivorDisplayName[iCharacter]); - return (iCharacter == SurvivorCharacter_Invalid) ? false : true; + return (iCharacter == L4D2Util_SurvivorCharacter_Invalid) ? false : true; } /** @@ -326,7 +326,7 @@ stock void GetSurvivorDisplayNameFast(int iClient, char[] sBuffer, const int iLe * @param buffer buffer to store name * @param length length of buffer * - * @return bool false if SurvivorCharacter_Invalid, otherwise true + * @return bool false if L4D2Util_SurvivorCharacter_Invalid, otherwise true */ stock bool GetSurvivorName(int iClient, char[] sBuffer, const int iLength) { @@ -338,7 +338,7 @@ stock bool GetSurvivorName(int iClient, char[] sBuffer, const int iLength) strcopy(sBuffer, iLength, g_sSurvivorName[iCharacter]); - return (iCharacter == SurvivorCharacter_Invalid) ? false : true; + return (iCharacter == L4D2Util_SurvivorCharacter_Invalid) ? false : true; } /** diff --git a/addons/sourcemod/scripting/include/left4dhooks.inc b/addons/sourcemod/scripting/include/left4dhooks.inc index 9695b6ffd..0f57b6d85 100644 --- a/addons/sourcemod/scripting/include/left4dhooks.inc +++ b/addons/sourcemod/scripting/include/left4dhooks.inc @@ -60,14 +60,14 @@ -// Natives: 274 (including 3 for L4D1 only) -// L4D1 = 31 [left4downtown] + 47 [l4d_direct] + 16 [l4d2addresses] + 73 [silvers - mine!] + 4 [anim] = 172 -// L4D2 = 61 [left4downtown] + 59 [l4d_direct] + 31 [l4d2addresses] + 118 [silvers - mine!] + 4 [anim] = 273 +// Natives: 283 (including 3 for L4D1 only) +// L4D1 = 31 [left4downtown] + 47 [l4d_direct] + 16 [l4d2addresses] + 79 [silvers - mine!] + 4 [anim] = 178 +// L4D2 = 61 [left4downtown] + 59 [l4d_direct] + 31 [l4d2addresses] + 127 [silvers - mine!] + 4 [anim] = 282 // Methods and Natives by "Forgetest": 53 [PlayerAnimState] + 22 [Ammo_t] + 15 [AmmoDef] = 90 // Forwards: 248 (including 5 for L4D1 only) // L4D1 = 158 -// L4D2 = 243y +// L4D2 = 243 // Stocks: 169 (L4D1 = 114, L4D2 = 167) // left4dhooks_silver 46 stocks (L4D1 = 39, L4D2 = 53) @@ -116,6 +116,9 @@ public void __pl_l4dh_SetNTVOptional() MarkNativeAsOptional("L4D_GetNearestNavArea"); MarkNativeAsOptional("L4D_GetLastKnownArea"); MarkNativeAsOptional("L4D_IsTouchingTrigger"); + MarkNativeAsOptional("L4D_FindEntityByClassnameNearest"); + MarkNativeAsOptional("L4D_FindEntityByClassnameWithin"); + MarkNativeAsOptional("L4D_FindByClassnameTargetname"); MarkNativeAsOptional("L4D2_GetFurthestSurvivorFlow"); MarkNativeAsOptional("L4D2_GetFirstSpawnClass"); MarkNativeAsOptional("L4D2_SetFirstSpawnClass"); @@ -225,7 +228,10 @@ public void __pl_l4dh_SetNTVOptional() MarkNativeAsOptional("L4D_GetNavAreaPos"); MarkNativeAsOptional("L4D_GetNavAreaCenter"); MarkNativeAsOptional("L4D_GetNavAreaSize"); + MarkNativeAsOptional("L4D_NavArea_GetAdjacentCount"); + MarkNativeAsOptional("L4D_NavArea_GetAdjacentAreas"); MarkNativeAsOptional("L4D_NavArea_IsConnected"); + MarkNativeAsOptional("L4D_NavArea_IsBlocked"); MarkNativeAsOptional("L4D_GetNavArea_SpawnAttributes"); MarkNativeAsOptional("L4D_SetNavArea_SpawnAttributes"); MarkNativeAsOptional("L4D_GetNavArea_AttributeFlags"); @@ -310,6 +316,7 @@ public void __pl_l4dh_SetNTVOptional() MarkNativeAsOptional("L4D2Direct_GetTerrorNavArea"); MarkNativeAsOptional("L4D2Direct_GetTerrorNavAreaFlow"); MarkNativeAsOptional("L4D2Direct_TryOfferingTankBot"); + MarkNativeAsOptional("L4D2Direct_AddSurvivorBot"); MarkNativeAsOptional("L4D2Direct_GetFlowDistance"); MarkNativeAsOptional("L4D2Direct_DoAnimationEvent"); MarkNativeAsOptional("L4DDirect_GetSurvivorHealthBonus"); @@ -550,7 +557,8 @@ enum PointerType POINTER_ITEMMANAGER = 16, // pItemManager (L4D2 Only) POINTER_MUSICBANKS = 17, // pMusicBanks (L4D2 Only) POINTER_SESSIONMANAGER = 18, // pSessionManager (L4D2 Only) - POINTER_CHALLENGEMODE = 19 // pChallengeMode (L4D2 Only) (mutation modes) + POINTER_CHALLENGEMODE = 19, // pChallengeMode (L4D2 Only) (mutation modes) + POINTER_THENEXTBOTS = 20 // TheNextBots pointer (L4D2 Only) }; // Provided by "BHaType": @@ -595,6 +603,24 @@ enum FINALE_NONE = 18 }; +// For the "L4D2Direct_AddSurvivorBot" native +// Indices 0-3 map to different characters depending on the map's survivor set: +// L4D2 maps (set 2): 0=Nick, 1=Rochelle, 2=Coach, 3=Ellis +// L4D1 maps (set 1): 0=Bill, 1=Zoey, 2=Louis, 3=Francis +// Indices 4-7 always refer to L4D1 characters regardless of the map +enum +{ + SurvivorCharacter_First = 0, // Set-dependent: Nick (L4D2) or Bill (L4D1) + SurvivorCharacter_Second, // Set-dependent: Rochelle (L4D2) or Zoey (L4D1) + SurvivorCharacter_Third, // Set-dependent: Coach (L4D2) or Louis (L4D1) + SurvivorCharacter_Fourth, // Set-dependent: Ellis (L4D2) or Francis (L4D1) + SurvivorCharacter_Bill = 4, // Always Bill + SurvivorCharacter_Zoey, // Always Zoey + SurvivorCharacter_Francis, // Always Francis + SurvivorCharacter_Louis, // Always Louis + SurvivorCharacter_Random // Random from 0-3 (map's survivor set) +}; + // Used as the "reason" by the "L4D_OnKnockedDown*" forwards enum { @@ -1264,7 +1290,7 @@ methodmap AmmoDef /** * @brief Retrieves the maximum ammo that a player can carry - * @note Returns the value locally calculated using Ammo_t. + * @note Returns the value locally calculated using Ammo_t * * @param nAmmoIndex Ammo index * @return Ammo count @@ -1273,12 +1299,12 @@ methodmap AmmoDef /** * @brief Retrieves the maximum ammo that a player can carry - * @note Returns the value from the function call. - * @note Recommended to use this one in order to get values modified by others plugins. + * @note Returns the value from the function call + * @note Recommended to use this one in order to get values modified by others plugins * * @param nAmmoIndex Ammo index - * @param client Client index to test. - * Has no actual effect in function, but helps identify who is picking up ammo. + * @param client Client index to test + * Has no actual effect in function, but helps identify who is picking up ammo * @return Ammo count */ public static native int MaxCarry_Call(int nAmmoIndex, int client = -1); @@ -3474,7 +3500,7 @@ forward void L4D2_OnPummelVictim_PostHandled(int attacker, int victim); * @remarks Dominators are: Hunter, Smoker, Jockey, and Charger * @remarks This forward is called in frames, but instantly tells you when any domination happened. Recommend not to put too much logic in here * @remarks For Chargers, this forward is called when being carried or being pummelled. Queue pummelling will not trigger this forward - * + * * @param victim Client index of the victim * @param dominator Client index of the dominator * @@ -3629,7 +3655,7 @@ forward void L4D_ActivateAbility_Smoker_PostHandled(int client, int ability); /** * @brief Called whenever CVomit::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Boomer is trying to activate their ability * @remarks Blocking may cause client prediction to flicker as if the ability was about to activate * * @param client the special infected attempting to activate @@ -3641,7 +3667,7 @@ forward Action L4D_ActivateAbility_Boomer(int client, int ability); /** * @brief Called whenever CVomit::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Boomer is trying to activate their ability * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3653,7 +3679,7 @@ forward void L4D_ActivateAbility_Boomer_Post(int client, int ability); /** * @brief Called whenever CVomit::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Boomer is trying to activate their ability * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3665,7 +3691,7 @@ forward void L4D_ActivateAbility_Boomer_PostHandled(int client, int ability); /** * @brief Called whenever CLunge::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Hunter is trying to activate their ability * @remarks Blocking may cause client prediction to flicker as if the ability was about to activate * * @param client the special infected attempting to activate @@ -3677,7 +3703,7 @@ forward Action L4D_ActivateAbility_Hunter(int client, int ability); /** * @brief Called whenever CLunge::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Hunter is trying to activate their ability * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3689,7 +3715,7 @@ forward void L4D_ActivateAbility_Hunter_Post(int client, int ability); /** * @brief Called whenever CLunge::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Hunter is trying to activate their ability * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3701,7 +3727,7 @@ forward void L4D_ActivateAbility_Hunter_PostHandled(int client, int ability); /** * @brief Called whenever CLeap::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Jockey is trying to activate their ability * @remarks Blocking may cause client prediction to flicker as if the ability was about to activate * * @param client the special infected attempting to activate @@ -3714,7 +3740,7 @@ forward Action L4D2_ActivateAbility_Jockey(int client, int ability); /** * @brief Called whenever CLeap::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Jockey is trying to activate their ability * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3727,7 +3753,7 @@ forward void L4D2_ActivateAbility_Jockey_Post(int client, int ability); /** * @brief Called whenever CLeap::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Jockey is trying to activate their ability * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3740,7 +3766,7 @@ forward void L4D2_ActivateAbility_Jockey_PostHandled(int client, int ability); /** * @brief Called whenever CSpitAbility::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Spitter is trying to activate their ability * @remarks Blocking may cause client prediction to flicker as if the ability was about to activate * * @param client the special infected attempting to activate @@ -3753,7 +3779,7 @@ forward Action L4D2_ActivateAbility_Spitter(int client, int ability); /** * @brief Called whenever CSpitAbility::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Spitter is trying to activate their ability * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3766,7 +3792,7 @@ forward void L4D2_ActivateAbility_Spitter_Post(int client, int ability); /** * @brief Called whenever CSpitAbility::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Spitter is trying to activate their ability * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3779,7 +3805,7 @@ forward void L4D2_ActivateAbility_Spitter_PostHandled(int client, int ability); /** * @brief Called whenever CCharge::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Charger is trying to activate their ability * @remarks Blocking may cause client prediction to flicker as if the ability was about to activate * * @param client the special infected attempting to activate @@ -3792,7 +3818,7 @@ forward Action L4D2_ActivateAbility_Charger(int client, int ability); /** * @brief Called whenever CCharge::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Charger is trying to activate their ability * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -3805,7 +3831,7 @@ forward void L4D2_ActivateAbility_Charger_Post(int client, int ability); /** * @brief Called whenever CCharge::ActivateAbility is invoked - * @remarks Called when a Smoker is trying to activate their ability + * @remarks Called when a Charger is trying to activate their ability * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled * * @param client the special infected attempting to activate @@ -4524,10 +4550,10 @@ forward void L4D_OnServerHibernationUpdate(bool hibernating); * @brief Called when a map has been finished, and is about to save the entities in the saferoom * @remarks Called before the event "map_transition" * @remarks Won't be called if Director::AreHumanZombiesAllowed() returns true, which refers to the versus gamemode, or this entity name is "info_solo_changelevel" - * + * * @param info_changelevel The entity index of "info_changelevel" * @param Kv A KeyValue pointer Address. Null_Address will be returned if the pointer is null - * + * * @return Plugin_Handled to prevent saving entities, Plugin_Continue otherwise */ // L4D1 only @@ -4539,10 +4565,10 @@ forward Action L4D1_OnSavingEntities(int info_changelevel, Address Kv); * @remarks Called before the event "map_transition" * @remarks Won't be called if CTerrorGameRules::HasPlayerControlledZombies() returns true, which refers to the versus/scavenge related pvp gamemode * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @param info_changelevel The entity index of "info_changelevel" * @param Kv A KeyValue pointer Address. Null_Address will be returned if the pointer is null - * + * * @noreturn */ // L4D1 only @@ -4554,10 +4580,10 @@ forward void L4D1_OnSavingEntities_Post(int info_changelevel, Address Kv); * @remarks Called before the event "map_transition" * @remarks Won't be called if CTerrorGameRules::HasPlayerControlledZombies() returns true, which refers to the versus/scavenge related pvp gamemode * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @param info_changelevel The entity index of "info_changelevel" * @param Kv A KeyValue pointer Address. Null_Address will be returned if the pointer is null - * + * * @noreturn */ // L4D1 only @@ -4568,9 +4594,9 @@ forward void L4D1_OnSavingEntities_PostHandled(int info_changelevel, Address Kv) * @brief Called when a map has been finished, and is about to save the entities in the saferoom (usually props or items brought into the saferoom.) * @remarks Called before the event "map_transition" * @remarks Won't be called if CTerrorGameRules::HasPlayerControlledZombies() returns true, which refers to the versus/scavenge related pvp gamemode - * + * * @param info_changelevel The entity index of "info_changelevel" - * + * * @return Plugin_Handled to prevent saving entities, Plugin_Continue otherwise */ // L4D2 only @@ -4582,9 +4608,9 @@ forward Action L4D2_OnSavingEntities(int info_changelevel); * @remarks Called before the event "map_transition" * @remarks Won't be called if CTerrorGameRules::HasPlayerControlledZombies() returns true, which refers to the versus/scavenge related pvp gamemode * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @param info_changelevel The entity index of "info_changelevel" - * + * * @noreturn */ // L4D2 only @@ -4596,9 +4622,9 @@ forward void L4D2_OnSavingEntities_Post(int info_changelevel); * @remarks Called before the event "map_transition" * @remarks Won't be called if CTerrorGameRules::HasPlayerControlledZombies() returns true, which refers to the versus/scavenge related pvp gamemode * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @param info_changelevel The entity index of "info_changelevel" - * + * * @noreturn */ // L4D2 only @@ -4606,88 +4632,88 @@ forward void L4D2_OnSavingEntities_PostHandled(int info_changelevel); /** * Internally, game uses keyvalues structure to save survivors' data for the level-transitioning, - * and stores these keyvalues into an array. - * After we have transitioned to the next map, we restore the data from the keyvalues array. - * + * and stores these keyvalues into an array + * After we have transitioned to the next map, we restore the data from the keyvalues array + * * To retrieve the keyvalues before these functions below calling, - * you may need to access the memory from the internal global array g_SavedPlayers or g_SavedSurvivorBots etc. - * - * To see the keys and their values, see PlayerSaveData::PlayerSaveData(). + * you may need to access the memory from the internal global array g_SavedPlayers or g_SavedSurvivorBots etc + * + * To see the keys and their values, see PlayerSaveData::PlayerSaveData() */ /** - * @brief Called whenever CTerrorPlayer::TransitionRestore is invoked. + * @brief Called whenever CTerrorPlayer::TransitionRestore is invoked * @remarks This will only be called for human players after the level-transitioning. For bots, See L4D2_OnRestoreTransitionedSurvivorBots. - * @remarks This will be called for every survivors including bots once the level failed and restarted. - * + * @remarks This will be called for every survivors including bots once the level failed and restarted + * * @param client Client index - * - * @return Plugin_Handled to block this player from restoring their level-transitioned data, others otherwise. + * + * @return Plugin_Handled to block this player from restoring their level-transitioned data, others otherwise */ // L4D2 only forward Action L4D2_OnTransitionRestore(int client); /** - * @brief Called after CTerrorPlayer::TransitionRestore is invoked. - * @remarks This will only be called for human players after the level-transitioning. For bots, See L4D2_OnRestoreTransitionedSurvivorBots. - * @remarks This will be called for every survivors including bots once the level failed and restarted. + * @brief Called after CTerrorPlayer::TransitionRestore is invoked + * @remarks This will only be called for human players after the level-transitioning. For bots, See L4D2_OnRestoreTransitionedSurvivorBots + * @remarks This will be called for every survivors including bots once the level failed and restarted * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @param client Client index - * @param pkv Address of the keyvalues pointer. - * + * @param pkv Address of the keyvalues pointer + * * @noreturn */ // L4D2 only forward void L4D2_OnTransitionRestore_Post(int client, Address pkv); /** - * @brief Called after CTerrorPlayer::TransitionRestore is invoked. - * @remarks This will only be called for human players after the level-transitioning. For bots, See L4D2_OnRestoreTransitionedSurvivorBots. - * @remarks This will be called for every survivors including bots once the level failed and restarted. + * @brief Called after CTerrorPlayer::TransitionRestore is invoked + * @remarks This will only be called for human players after the level-transitioning. For bots, See L4D2_OnRestoreTransitionedSurvivorBots + * @remarks This will be called for every survivors including bots once the level failed and restarted * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @param client Client index - * @param pkv Address of the keyvalues pointer. - * + * @param pkv Address of the keyvalues pointer + * * @noreturn */ // L4D2 only forward void L4D2_OnTransitionRestore_PostHandled(int client, Address pkv); /** - * @brief Called after RestoreTransitionedSurvivorBots is invoked. Called BEFORE bots create. - * - * @remarks This will only be called once after the level-transitioning and will not be called once the level failed. - * @remarks Blocking this function will result the bot not being spawned after transitioned to next map. - * @remarks For human players, See L4D2_OnTransitionRestore. - * + * @brief Called after RestoreTransitionedSurvivorBots is invoked. Called BEFORE bots create + * + * @remarks This will only be called once after the level-transitioning and will not be called once the level failed + * @remarks Blocking this function will result the bot not being spawned after transitioned to next map + * @remarks For human players, See L4D2_OnTransitionRestore + * * @param botIndex Bot index - * - * @return Plugin_Handled to block this bot from being created, others otherwise. + * + * @return Plugin_Handled to block this bot from being created, others otherwise */ // L4D2 only forward Action L4D2_OnRestoreTransitionedSurvivorBots(); /** - * @brief Called after RestoreTransitionedSurvivorBots is invoked. Called AFTER bots have created. - * - * @remarks This will only be called once after the level-transitioning and will not be called once the level failed. - * @remarks For human players, See L4D2_OnTransitionRestore. + * @brief Called after RestoreTransitionedSurvivorBots is invoked. Called AFTER bots have created + * + * @remarks This will only be called once after the level-transitioning and will not be called once the level failed + * @remarks For human players, See L4D2_OnTransitionRestore * @remarks This forward will ONLY trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @noreturn */ // L4D2 only forward void L4D2_OnRestoreTransitionedSurvivorBots_Post(); /** - * @brief Called after RestoreTransitionedSurvivorBots is invoked. Called AFTER bots have created. - * - * @remarks This will only be called once after the level-transitioning and will not be called once the level failed. - * @remarks For human players, See L4D2_OnTransitionRestore. + * @brief Called after RestoreTransitionedSurvivorBots is invoked. Called AFTER bots have created + * + * @remarks This will only be called once after the level-transitioning and will not be called once the level failed + * @remarks For human players, See L4D2_OnTransitionRestore * @remarks This forward will not trigger if the relative pre-hook forward has been blocked with Plugin_Handled - * + * * @noreturn */ // L4D2 only @@ -5083,6 +5109,43 @@ native any L4D_GetLastKnownArea(int client); */ native bool L4D_IsTouchingTrigger(int trigger, int entity); +/** + * @brief Find the entity with the given class name nearest to the specified point + * @remarks This native is over 3x faster than looping entities and working out distance in SourceMod + * + * @param classname Classname of entity to find + * @param entity The entity to test whether it's inside the trigger area + * @param vecPos Vector position to search around + * @param radius Radius from position to search + * + * @return Entity index or -1 if not found + */ +native int L4D_FindEntityByClassnameNearest(char[] classname, float vecPos[3], float radius); + +/** + * @brief Find entities by class name within a radius, while within a set radius + * @remarks This can be used like FindEntityByClassname() with looping through entities + * @remarks This native is over 2x faster than looping entities and working out distance in SourceMod + * + * @param entity The entity index after which to begin searching from. Use -1 to start from the first entity + * @param classname Classname of entity to find + * @param vecPos Vector position to search around + * @param radius Radius from position to search + * + * @return Entity index or -1 if not found + */ +native int L4D_FindEntityByClassnameWithin(int entity, char[] classname, float vecPos[3], float radius); + +/** + * @brief Find an entity by class name and target name + * + * @param classname Classname of entity to find + * @param targetname Targetname of entity to find + * + * @return Entity index or -1 if not found + */ +native int L4D_FindByClassnameTargetname(char[] classname, char[] targetname); + /** * @brief Gets the first Special Infected type the Director will spawn. Value set on map start * @remarks zombieClass: 1=Smoker, 2=Boomer, 3=Hunter, 4=Spitter, 5=Jockey, 6=Charger @@ -5124,10 +5187,10 @@ native void L4D_FindRandomSpot(int NavArea, float vecPos[3]); * @brief Checks if a player is visible to a specified position. Should be slightly faster than using TR_TraceRayFilterEx * * @param client Client to check visibility from - * @param vecPos The vector position of the target location * @param team The team of the client, can possibly pass 0 to 3 * @param team_target Target point team, if it is 0, the client's angle will be considered * @param NavArea NavArea of ​​the target, or 0 to automatically get with GetNearestNavArea + * @param vecPos The vector position of the target location * * @return True if visible, false otherwise */ @@ -5137,9 +5200,9 @@ native bool L4D2_IsVisibleToPlayer(int client, int team, int team_target, int Na * @brief Given a victim client index, returns the client index of the Special Infected that is dominating the victim * @remarks Returns -1 if victim index is invalid, or not a survivor, or not being dominated by a Special Infected * @remarks You can see this native as the SDKCall version of L4D2_GetInfectedAttacker() - * + * * @param victim The client index of the victim to check - * + * * @return The client index of the Special Infected that is dominating the victim */ // L4D2 Only @@ -5307,6 +5370,25 @@ enum BOT_CMD // L4D2 only native bool L4D2_CommandABot(int entity, int target, BOT_CMD type, float vecPos[3] = NULL_VECTOR); +/** + * @brief Make all common zombies in range rush the victim. (If client isn't set, a random survivor will be chosen.) + * + * @param client Survivor ID to target or -1 to choose a random Survivor + * @param range Maximum range of infected to trigger + * + * @noreturn + */ +// L4D2 only +native void L4D2_RushVictim(int client, float range); + +/** + * @brief Tells all existing Special Infected (except Tank) to swap into assault mode and not hide/dither/loiter + * + * @noreturn + */ +// L4D2 only +native void L4D2_StartAssault(); + /** * @brief Returns if players can control infected * @@ -6236,16 +6318,48 @@ native void L4D_GetNavAreaCenter(Address area, float vecPos[3]); native void L4D_GetNavAreaSize(Address area, float vecSize[3]); /** - * @brief Returns true if this area is connected to other area in given direction. (If you set direction to -1 or 4, it will automatically check all directions for a connection) + * @brief Returns the number of adjacent areas in the given direction + * + *param area The address of the NavArea + *param direction The direction to check in (NAV_NORTH, NAV_EAST, NAV_SOUTH, NAV_WEST) - provide value 0 to 3 only + * + * @return Number of adjacent areas + */ +native int L4D_NavArea_GetAdjacentCount(Address area, int direction); + +/** + * @brief Fills a passed ArrayList with all adjacent areas in the given direction + * + *param area The address of the NavArea + *param direction The direction to check in (NAV_NORTH, NAV_EAST, NAV_SOUTH, NAV_WEST) - provide value 0 to 3 only + *param list The ArrayList handle to fill with adjacent areas, if they exist + * + * @return Number of adjacent areas + */ +native int L4D_NavArea_GetAdjacentAreas(Address area, int direction, ArrayList list); + +/** + * @brief Returns true if this area is connected to other area in given direction. (If you set direction to 4, it will automatically check all directions for a connection) * *param area1 The address of the first NavArea - *param are2a The address of the second NavArea - *param direction The direction to check in (NAV_NORTH, NAV_EAST, NAV_SOUTH, NAV_WEST, NAV_ALL) - provide value 1 to 4 only + *param area2 The address of the second NavArea + *param direction The direction to check in (NAV_NORTH, NAV_EAST, NAV_SOUTH, NAV_WEST, NAV_ALL) - provide value 0 to 4 only * - * @noreturn + * @return Result of calculation, true or false */ native bool L4D_NavArea_IsConnected(Address area1, Address area2, int direction); +/** + * @brief Return true if team is blocked in this area + * + *param area The address of the NavArea to check + *param team The team to test or -1 (possibly checks for all teams) + *param affectsFlow Does this blocked area affect the flow + * + * @return Result of calculation, true or false + */ +native bool L4D_NavArea_IsBlocked(Address area, int team, bool affectsFlow); + /** * @brief Returns the nav area attribute flags * @remarks See the "NAV_BASE_*" near the top of the include file @@ -7258,6 +7372,24 @@ native float L4D2Direct_GetTerrorNavAreaFlow(Address pTerrorNavArea); */ native bool L4D2Direct_TryOfferingTankBot(int client, int bEnterStasis); +/** + * Adds a survivor bot to the game + * + * @param characterType See SurvivorCharacter_* enum values: + * 0-3 = Map's survivor set characters (set-dependent, see enum) + * 4-7 = L4D1 characters (Bill, Zoey, Francis, Louis — always) + * 8 = Random (0-3, guaranteed to create) + * + * @remarks Indices 0-3 resolve to different characters depending on the map's survivor set + * (L4D2 maps: Nick/Rochelle/Coach/Ellis, L4D1 maps: Bill/Zoey/Louis/Francis) + * @remarks Characters 4-7: engine checks for duplicates, silently does nothing if taken + * @remarks Characters 0-3: engine does NOT check for duplicates, will create a second bot with same character + * + * @return 0 + */ +// L4D2 only +native int L4D2Direct_AddSurvivorBot(int characterType = 0); + /** * Gets a player's distance in flow units * @@ -7930,9 +8062,9 @@ native void L4D_UnRegisterForbiddenTarget(int entity); * @remarks Calls InfoChangelevel::IsSaveableEntity. Entities that are saveable follow the rules below: * @remarks 1. Entity is not a player, and its root hierarchical parent entity is not a player either * @remarks 2. Entity has a capability flag "FCAP_ACROSS_TRANSITION", or the entity has no flag "EFL_DORMANT" - * + * * @param entity Entity to check, usaully a prop, should not be a brush, etc - * + * * @return True if entity is saveable, false otherwise */ native void L4D_IsEntitySaveable(int entity); \ No newline at end of file diff --git a/addons/sourcemod/scripting/include/sourcescramble.inc b/addons/sourcemod/scripting/include/sourcescramble.inc index 45e12943c..e5df63cd7 100644 --- a/addons/sourcemod/scripting/include/sourcescramble.inc +++ b/addons/sourcemod/scripting/include/sourcescramble.inc @@ -35,6 +35,9 @@ methodmap MemoryPatch < Handle { /** * Returns the starting address of the patch, equivalent to the address of the patch's * dependent signature plus the patch offset. + * + * @error Plugin is running on a 64-bit server; SourceMod does not support full usage of + * 64-bit addresses at this time. */ property Address Address { public native get(); @@ -59,6 +62,9 @@ methodmap MemoryBlock < Handle { /** * Returns the address of the allocated memory block. + * + * @error Plugin is running on a 64-bit server; SourceMod does not support full usage of + * 64-bit addresses at this time. */ property Address Address { public native get(); @@ -75,44 +81,28 @@ methodmap MemoryBlock < Handle { * Load up to 4 bytes from an offset to the memory block, performing bounds checks to ensure * reads are contained within the block. */ - public int LoadFromOffset(int offset, NumberType size) { - if (offset < 0 || offset + GetNumberTypeByteSize(size) > this.Size) { - ThrowError("Cannot perform MemoryBlock access of %d bytes at offset %d (limit %d)", - GetNumberTypeByteSize(size), offset, this.Size); - } - return LoadFromAddress(this.Address + view_as
(offset), size); - } + public native int LoadFromOffset(int offset, NumberType size); /** * Store up to 4 bytes to an offset to the memory block, performing bounds checks to ensure * writes are contained within the block. */ - public void StoreToOffset(int offset, int data, NumberType size) { - if (offset < 0 || offset + GetNumberTypeByteSize(size) > this.Size) { - ThrowError("Cannot perform MemoryBlock access of %d bytes at offset %d (limit %d)", - GetNumberTypeByteSize(size), offset, this.Size); - } - StoreToAddress(this.Address + view_as
(offset), data, size); - } + public native void StoreToOffset(int offset, int data, NumberType size); }; -static stock int GetNumberTypeByteSize(NumberType size) { - switch (size) { - case NumberType_Int8: return 1; - case NumberType_Int16: return 2; - case NumberType_Int32: return 4; - } - ThrowError("Unknown NumberType %d. Did the SourceMod developers add some new ones?", size); - return 1; // maybe `return (1 << size);` ? -} - /** * Returns the physical memory address of a given SourcePawn cell reference. + * + * @error Plugin is running on a 64-bit server; SourceMod does not support full usage of + * 64-bit addresses at this time. */ native Address GetAddressOfCell(any& cell); /** * Returns the physical memory address of a given string. + * + * @error Plugin is running on a 64-bit server; SourceMod does not support full usage of + * 64-bit addresses at this time. */ native Address GetAddressOfString(char[] array); diff --git a/addons/sourcemod/scripting/l4d2_changelevel.sp b/addons/sourcemod/scripting/l4d2_changelevel.sp deleted file mode 100644 index f1e2b6d65..000000000 --- a/addons/sourcemod/scripting/l4d2_changelevel.sp +++ /dev/null @@ -1,143 +0,0 @@ -// Not used now - -/* -* Fixes for gamebreaking bugs and stupid gameplay aspects -* Copyright (C) 2019 LuxLuma acceliacat@gmail.com -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ - -#pragma semicolon 1 - -#include -#include -#include - -#pragma newdecls required - -#define PLUGIN_VERSION "1.2.1" - -static Handle hDirectorChangeLevel; -static Handle hDirectorClearTeamScores; - -//Credit ProdigySim for l4d2_direct reading of TheDirector class https://forums.alliedmods.net/showthread.php?t=180028 -static Address TheDirector = Address_Null; - -public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) -{ - if(GetEngineVersion() != Engine_Left4Dead2) - { - strcopy(error, err_max, "Plugin only supports Left 4 Dead 2"); - return APLRes_SilentFailure; - } - - RegPluginLibrary("l4d2_changelevel"); - CreateNative("L4D2_ChangeLevel", L4D2_ChangeLevelNV); - return APLRes_Success; -} - -public Plugin myinfo = -{ - name = "l4d2_changelevel", - author = "Lux", - description = "Creates a clean way to change maps, sm_map causes leaks and other spooky stuff causing server perf to be worse over time.", - version = PLUGIN_VERSION, - url = "https://forums.alliedmods.net/showthread.php?p=2669850" -}; - -public void OnPluginStart() -{ - Handle hGamedata = LoadGameConfigFile("l4d2_changelevel"); - if(hGamedata == null) - SetFailState("Failed to load \"l4d2_changelevel.txt\" gamedata."); - - StartPrepSDKCall(SDKCall_Raw); - if(!PrepSDKCall_SetFromConf(hGamedata, SDKConf_Signature, "CDirector::OnChangeChapterVote")) - SetFailState("Error finding the 'CDirector::OnChangeChapterVote' signature."); - PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer); - - hDirectorChangeLevel = EndPrepSDKCall(); - if(hDirectorChangeLevel == null) - SetFailState("Unable to prep SDKCall 'CDirector::OnChangeChapterVote'"); - - TheDirector = GameConfGetAddress(hGamedata, "CDirector"); - if(TheDirector == Address_Null) - SetFailState("Unable to get 'CDirector' Address"); - - - StartPrepSDKCall(SDKCall_Raw); - if(!PrepSDKCall_SetFromConf(hGamedata, SDKConf_Signature, "CDirector::ClearTeamScores")) - SetFailState("Error finding the 'CDirector::ClearTeamScores' signature."); - PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain); - - hDirectorClearTeamScores = EndPrepSDKCall(); - if(hDirectorClearTeamScores == null) - SetFailState("Unable to prep SDKCall 'CDirector::ClearTeamScores'"); - - delete hGamedata; - - RegAdminCmd("sm_changelevel", Changelevel, ADMFLAG_ROOT, "L4D2 changelevel method to release all resources"); -} - -Action Changelevel(int iClient, int iArg) -{ - char sMapName[PLATFORM_MAX_PATH]; - char temp[2]; - - GetCmdArg(1, sMapName, sizeof(sMapName)); - if(sMapName[0] == '\0' || FindMap(sMapName, temp, sizeof(temp)) == FindMap_NotFound) - { - ReplyToCommand(iClient, "sm_changelevel Unable to find map \"%s\"", sMapName); - return Plugin_Handled; - } - bool bResetScores = true; - if(GetCmdArgs() >= 2) - { - GetCmdArg(2, temp, sizeof(temp)); - bResetScores = view_as(StringToInt(temp)); - } - - L4D2_ChangeLevel(sMapName, bResetScores); - return Plugin_Handled; -} - -void L4D2_ChangeLevel(const char[] sMapName, bool bShouldResetScores=true) -{ - PrintToServer("[SM] Changelevel to %s", sMapName); - if(bShouldResetScores) - { - SDKCall(hDirectorClearTeamScores, TheDirector, 1); - } - SDKCall(hDirectorChangeLevel, TheDirector, sMapName); -} - -int L4D2_ChangeLevelNV(Handle plugin, int numParams) -{ - if(numParams < 1) - ThrowNativeError(SP_ERROR_PARAM, "Invalid numParams"); - - char sMapName[PLATFORM_MAX_PATH]; - GetNativeString(1, sMapName, sizeof(sMapName)); - - char temp[1]; - if(sMapName[0] == '\0' || FindMap(sMapName, temp, sizeof(temp)) == FindMap_NotFound) - ThrowNativeError(SP_ERROR_PARAM, "Unable to change to that map \"%s\"", sMapName); - - bool bResetScores = true; - if(numParams >= 2) - bResetScores = view_as(GetNativeCell(2)); - - L4D2_ChangeLevel(sMapName, bResetScores); - return 1; -} \ No newline at end of file diff --git a/addons/sourcemod/scripting/l4d2_ellis_hunter_bandaid_fix.sp b/addons/sourcemod/scripting/l4d2_ellis_hunter_bandaid_fix.sp index 4f66cec77..826988351 100644 --- a/addons/sourcemod/scripting/l4d2_ellis_hunter_bandaid_fix.sp +++ b/addons/sourcemod/scripting/l4d2_ellis_hunter_bandaid_fix.sp @@ -22,7 +22,7 @@ public Plugin myinfo = name = "L4D2 Ellis Hunter Band aid Fix", author = "Sir (with pointers from Rena)", description = "Band-aid fix for Ellis' getup not matching the other Survivors", - version = "1.1", + version = "1.2", url = "https://github.com/SirPlease/L4D2-Competitive-Rework" }; @@ -40,7 +40,7 @@ void Event_PounceEnd(Event event, char[] name, bool dontBroadcast) int charIndex = IdentifySurvivorFast(client); // Already contains checks inside - if (charIndex == SurvivorCharacter_Ellis) { + if (charIndex == L4D2Util_SurvivorCharacter_Ellis) { AnimHookEnable(client, INVALID_FUNCTION, EllisPostPounce); } } @@ -64,7 +64,6 @@ Action EllisPostPounce(int client, int &sequence) // Ellis Hunter get up animation? if (sequence == ANIM_ELLIS_HUNTER_GETUP) { SDKHook(client, SDKHook_PostThinkPost, UpdateThink); - AnimHookDisable(client, INVALID_FUNCTION, EllisPostPounce); } diff --git a/addons/sourcemod/scripting/l4d2_fix_changelevel.sp b/addons/sourcemod/scripting/l4d2_fix_changelevel.sp new file mode 100644 index 000000000..01a2b852a --- /dev/null +++ b/addons/sourcemod/scripting/l4d2_fix_changelevel.sp @@ -0,0 +1,201 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include +#include +#include +#include + +#define PLUGIN_VERSION "1.2" + +public Plugin myinfo = +{ + name = "[L4D2] Fix Changelevel", + author = "Lux (for \"l4d2_changelevel\"), Forgetest", + description = "Fix issues due to forced changelevel (i.e. No gascans in scavenge, incorrect behavior of \"OnGameplayStart\").", + version = PLUGIN_VERSION, + url = "https://github.com/Target5150/MoYu_Server_Stupid_Plugins" +} + +enum struct SDKCallParamsWrapper { + SDKType type; + SDKPassMethod pass; + int decflags; + int encflags; +} + +methodmap GameDataWrapper < GameData { + public GameDataWrapper(const char[] file) { + GameData gd = new GameData(file); + if (!gd) SetFailState("Missing gamedata \"%s\"", file); + return view_as(gd); + } + public Address GetAddressOrFail(const char[] key) { + Address ptr = this.GetAddress(key); + if (ptr == Address_Null) SetFailState("Missing address \"%s\"", key); + return ptr; + } + public int GetOffsetOrFail(const char[] key) { + int offset = this.GetOffset(key); + if (offset == -1) SetFailState("Missing offset \"%s\"", key); + return offset; + } + public DynamicDetour CreateDetourOrFail( + const char[] name, + DHookCallback preHook = INVALID_FUNCTION, + DHookCallback postHook = INVALID_FUNCTION) { + DynamicDetour hSetup = DynamicDetour.FromConf(this, name); + if (!hSetup) + SetFailState("Missing detour setup \"%s\"", name); + if (preHook != INVALID_FUNCTION && !hSetup.Enable(Hook_Pre, preHook)) + SetFailState("Failed to pre-detour \"%s\"", name); + if (postHook != INVALID_FUNCTION && !hSetup.Enable(Hook_Post, postHook)) + SetFailState("Failed to post-detour \"%s\"", name); + return hSetup; + } + public Handle CreateSDKCallOrFail( + SDKCallType type, + SDKFuncConfSource src, + const char[] name, + const SDKCallParamsWrapper[] params = {}, + int numParams = 0, + bool hasReturnValue = false, + const SDKCallParamsWrapper ret = {}) { + static const char k_sSDKFuncConfSource[SDKFuncConfSource][] = { "offset", "signature", "address" }; + Handle result; + StartPrepSDKCall(type); + if (!PrepSDKCall_SetFromConf(this, src, name)) + SetFailState("Missing %s \"%s\"", k_sSDKFuncConfSource[src], name); + for (int i = 0; i < numParams; ++i) + PrepSDKCall_AddParameter(params[i].type, params[i].pass, params[i].decflags, params[i].encflags); + if (hasReturnValue) + PrepSDKCall_SetReturnInfo(ret.type, ret.pass, ret.decflags, ret.encflags); + if (!(result = EndPrepSDKCall())) + SetFailState("Failed to prep sdkcall \"%s\"", name); + return result; + } +} + +Handle g_CallClearTeamScores; +Handle g_CallOnBeginTransition; +Handle g_CallOnBeginChangeLevel; +int g_iOffs_m_mapDurationTimer; +int g_iOffs_m_flTotalMissionElaspedTime; +int g_iOffs_m_szOriginalMap; +Address gp_m_isTransitioning; +Address gp_s_landmarkName; +Address gp_s_landmarkPosition; + +methodmap CDirector { + public void ClearTeamScores(bool newCampaign) { + SDKCall(g_CallClearTeamScores, this, newCampaign); + } + public void OnBeginTransition(bool bTransitionToNextMap) { + SDKCall(g_CallOnBeginTransition, this, bTransitionToNextMap); + } + property IntervalTimer m_mapDurationTimer { + public get() { return view_as(view_as
(this) + view_as
(g_iOffs_m_mapDurationTimer)); } + } + property float m_flTotalMissionElaspedTime { + public set(float flTotalMissionElaspedTime) { StoreToAddress(view_as
(this) + view_as
(g_iOffs_m_flTotalMissionElaspedTime), flTotalMissionElaspedTime, NumberType_Int32); } + } + property Address m_szOriginalMap { + public get() { return view_as
(this) + view_as
(g_iOffs_m_szOriginalMap); } + } + public bool IsTransitioning() { + return LoadFromAddress(gp_m_isTransitioning, NumberType_Int8); + } + public void SetOriginalMap(const char[] map) { + UTIL_StoreToAddressString(this.m_szOriginalMap, map, 32); + } +} +CDirector TheDirector; + +public void OnPluginStart() +{ + GameDataWrapper gd = new GameDataWrapper("l4d2_fix_changelevel"); + + SDKCallParamsWrapper params[] = { + {SDKType_Bool, SDKPass_Plain} + }; + g_CallClearTeamScores = gd.CreateSDKCallOrFail(SDKCall_Raw, SDKConf_Signature, "CDirector::ClearTeamScores", params, sizeof(params), false); + + SDKCallParamsWrapper params2[] = { + {SDKType_Bool, SDKPass_Plain} + }; + g_CallOnBeginTransition = gd.CreateSDKCallOrFail(SDKCall_Raw, SDKConf_Signature, "CDirector::OnBeginTransition", params2, sizeof(params2), false); + + SDKCallParamsWrapper params3[] = { + {SDKType_String, SDKPass_Pointer} + }; + g_CallOnBeginChangeLevel = gd.CreateSDKCallOrFail(SDKCall_GameRules, SDKConf_Signature, "CTerrorGameRules::OnBeginChangeLevel", params3, sizeof(params3), false); + + g_iOffs_m_mapDurationTimer = gd.GetOffsetOrFail("CDirector::m_mapDurationTimer"); + g_iOffs_m_flTotalMissionElaspedTime = gd.GetOffsetOrFail("CDirector::m_flTotalMissionElaspedTime"); + g_iOffs_m_szOriginalMap = gd.GetOffsetOrFail("CDirector::m_szOriginalMap"); + gp_m_isTransitioning = gd.GetAddressOrFail("CDirector::m_isTransitioning"); + gp_s_landmarkName = gd.GetAddressOrFail("s_landmarkName"); + gp_s_landmarkPosition = gd.GetAddressOrFail("s_landmarkPosition"); + + delete gd.CreateDetourOrFail("CVEngineServer::ChangeLevel", DTR__CVEngineServer__ChangeLevel); + delete gd; +} + +public void OnAllPluginsLoaded() +{ + TheDirector = view_as(L4D_GetPointer(POINTER_DIRECTOR)); + if (!TheDirector) + { + LogError("Failed to retrieve TheDirector pointer from left4dhooks"); + } +} + +MRESReturn DTR__CVEngineServer__ChangeLevel(DHookParam hParams) +{ + if (!TheDirector) + return MRES_Ignored; + + char map[64]/*, reason[64]*/; + hParams.GetString(1, map, sizeof(map)); + // if (!hParams.IsNull(2)) + // hParams.GetString(2, reason, sizeof(reason)); + + if (TheDirector.IsTransitioning()) + return MRES_Ignored; + + TheDirector.ClearTeamScores(true); + + ITimer_Start(TheDirector.m_mapDurationTimer); + TheDirector.m_flTotalMissionElaspedTime = 0.0; + + TheDirector.SetOriginalMap(map); + ClearTransitionedLandmarkName(); + TheDirector.OnBeginTransition(false); + GameRules__OnBeginChangeLevel(map); + + return MRES_Ignored; +} + +void GameRules__OnBeginChangeLevel(const char[] map) +{ + SDKCall(g_CallOnBeginChangeLevel, map); +} + +void ClearTransitionedLandmarkName() +{ + StoreToAddress(gp_s_landmarkName, 0, NumberType_Int8); + StoreToAddress(gp_s_landmarkPosition, 0.0, NumberType_Int32); + StoreToAddress(gp_s_landmarkPosition + view_as
(4), 0.0, NumberType_Int32); + StoreToAddress(gp_s_landmarkPosition + view_as
(8), 0.0, NumberType_Int32); +} + +void UTIL_StoreToAddressString(Address dest, const char[] src, int maxlength) +{ + int len = strlen(src); + if (len > maxlength - 1) + len = maxlength - 1; + for (int i = 0; i < len; ++i) { + StoreToAddress(dest + view_as
(i), src[i], NumberType_Int8); + } + StoreToAddress(dest + view_as
(len), 0, NumberType_Int8); +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/l4d2_getup_slide_fix.sp b/addons/sourcemod/scripting/l4d2_getup_slide_fix.sp index 15e2694d1..aa7917120 100644 --- a/addons/sourcemod/scripting/l4d2_getup_slide_fix.sp +++ b/addons/sourcemod/scripting/l4d2_getup_slide_fix.sp @@ -8,7 +8,7 @@ #define L4D2UTIL_STOCKS_ONLY 1 #include -stock const int getUpAnimations[SurvivorCharacter_Size - 1][5] = +stock const int getUpAnimations[L4D2Util_SurvivorCharacter_Size - 1][5] = { // l4d2 // 0: Nick, 1: Rochelle, 2: Coach, 3: Ellis @@ -27,14 +27,14 @@ stock const int getUpAnimations[SurvivorCharacter_Size - 1][5] = }; bool - isSurvivorStaggerBlocked[SurvivorCharacter_Size - 1]; + isSurvivorStaggerBlocked[L4D2Util_SurvivorCharacter_Size - 1]; public Plugin myinfo = { name = "Stagger Blocker", author = "Standalone (aka Manu), Visor, Sir, A1m`", description = "Block players from being staggered by Jockeys and Hunters for a time while getting up from a Hunter pounce & Charger pummel", - version = "1.4.2", + version = "1.4.3", url = "https://github.com/SirPlease/L4D2-Competitive-Rework" } @@ -64,7 +64,7 @@ void Event_BotPlayerReplace(Event hEvent, const char[] eName, bool dontBroadcast { int player = GetClientOfUserId(hEvent.GetInt("player")); int charIndex = IdentifySurvivor(player); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -78,7 +78,7 @@ void Event_PlayerBotReplace(Event hEvent, const char[] eName, bool dontBroadcast { int bot = GetClientOfUserId(hEvent.GetInt("bot")); int charIndex = IdentifySurvivor(bot); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -91,7 +91,7 @@ void Event_PounceChargeEnd(Event hEvent, const char[] eName, bool dontBroadcast) { int client = GetClientOfUserId(hEvent.GetInt("victim")); int charIndex = IdentifySurvivor(client); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -111,7 +111,7 @@ Action HookOnThink(Handle hTimer, any client) void OnThink(int client) { int charIndex = IdentifySurvivorFast(client); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return; } @@ -141,7 +141,7 @@ public Action L4D2_OnStagger(int target, int source) } int charIndex = IdentifySurvivor(target); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Continue; } @@ -164,7 +164,7 @@ public Action L4D2_OnPounceOrLeapStumble(int victim, int attacker) } int charIndex = IdentifySurvivor(victim); - if (charIndex == SurvivorCharacter_Invalid) { + if (charIndex == L4D2Util_SurvivorCharacter_Invalid) { return Plugin_Continue; } @@ -177,7 +177,7 @@ public Action L4D2_OnPounceOrLeapStumble(int victim, int attacker) void ResetStaggerBlocked() { - for (int i = 0; i < (SurvivorCharacter_Size - 1); i++) { + for (int i = 0; i < (L4D2Util_SurvivorCharacter_Size - 1); i++) { isSurvivorStaggerBlocked[i] = false; } } diff --git a/addons/sourcemod/scripting/l4d2_hittable_control.sp b/addons/sourcemod/scripting/l4d2_hittable_control.sp index 434e74de4..299c97d8b 100644 --- a/addons/sourcemod/scripting/l4d2_hittable_control.sp +++ b/addons/sourcemod/scripting/l4d2_hittable_control.sp @@ -1,3 +1,4 @@ +#pragma semicolon 1 #pragma newdecls required #include @@ -25,10 +26,68 @@ * ******************************************************************/ +#define DEBUG 0 +#define MAX_EDICTS 2048 + +enum struct SDKCallParamsWrapper { + SDKType type; + SDKPassMethod pass; + int decflags; + int encflags; +} + +methodmap GameDataWrapper < GameData { + public GameDataWrapper(const char[] file) { + GameData gd = new GameData(file); + if (!gd) SetFailState("Missing gamedata \"%s\"", file); + return view_as(gd); + } + public Handle CreateSDKCallOrFail( + SDKCallType type, + SDKFuncConfSource src, + const char[] name, + const SDKCallParamsWrapper[] params = {}, + int numParams = 0, + bool hasReturnValue = false, + const SDKCallParamsWrapper ret = {}) { + static const char k_sSDKFuncConfSource[SDKFuncConfSource][] = { "offset", "signature", "address" }; + Handle result; + StartPrepSDKCall(type); + if (!PrepSDKCall_SetFromConf(this, src, name)) + SetFailState("Missing %s \"%s\"", k_sSDKFuncConfSource[src], name); + for (int i = 0; i < numParams; ++i) + PrepSDKCall_AddParameter(params[i].type, params[i].pass, params[i].decflags, params[i].encflags); + if (hasReturnValue) + PrepSDKCall_SetReturnInfo(ret.type, ret.pass, ret.decflags, ret.encflags); + if (!(result = EndPrepSDKCall())) + SetFailState("Failed to prep sdkcall \"%s\"", name); + return result; + } +} + bool bIsGauntletFinale = false; //Gauntlet finales do reduced hittable damage -float fOverkill[MAXPLAYERS + 1][2048]; // Overkill, prolly don't need this big of a global array, could also use adt_array. -float fSpecialOverkill[MAXPLAYERS + 1][3]; // Dealing with breakable pieces that will cause multiple hits in a row (unintended behaviour) -bool bLateLoad; // Late load support! + +enum struct PhysicsHitInfo +{ + float nextDamageTime[MAXPLAYERS+1]; + int lastAttackerId; + float lastAttackerTime; + + void Init() + { + for (int i = 1; i <= MaxClients; ++i) + { + this.nextDamageTime[i] = -1.0; + } + this.lastAttackerId = 0; + this.lastAttackerTime = -1.0; + } +} +int g_nPhysicsHitInfoEntry[MAX_EDICTS] = { -1, ... }; +int g_iPhysicsDamage[MAX_EDICTS] = { -1, ... }; +ArrayList g_PhysicsHitInfos; + +bool g_bMapStarted; //cvars ConVar hGauntletFinaleMulti; @@ -57,83 +116,113 @@ ConVar hTankSelfDamage; ConVar hOverHitInterval; ConVar hOverHitDebug; ConVar hUnbreakableForklifts; +ConVar hPhysMassIncapThres; + +Handle g_call_IPhysicsObject_GetMass; +float GetPropPhysicsMass(int entity) +{ + static int offs_m_pPhysicsObject = -1; + if (offs_m_pPhysicsObject == -1) + { + offs_m_pPhysicsObject = FindDataMapInfo(entity, "m_pPhysicsObject"); + if (offs_m_pPhysicsObject == -1) + return 1.0; + } + + Address physobj = view_as
(GetEntData(entity, offs_m_pPhysicsObject)); + if (physobj == Address_Null) + return 1.0; + + return SDKCall(g_call_IPhysicsObject_GetMass, physobj); +} public Plugin myinfo = { name = "L4D2 Hittable Control", author = "Stabby, Visor, Sir, Derpduck, Forgetest", - version = "0.8", + version = "0.9.1", description = "Allows for customisation of hittable damage values (and debugging)" }; public void OnPluginStart() { + GameDataWrapper gd = new GameDataWrapper("l4d2_hittable_control"); + + SDKCallParamsWrapper params[] = { + {SDKType_Float, SDKPass_Plain}, + }; + g_call_IPhysicsObject_GetMass = gd.CreateSDKCallOrFail(SDKCall_Raw, SDKConf_Virtual, "IPhysicsObject::GetMass", _, 0, true, params[0]); + + delete gd; + + ClearPhysicsHitInfos(); + hGauntletFinaleMulti = CreateConVar( "hc_gauntlet_finale_multiplier", "0.25", "Multiplier of damage that hittables deal on gauntlet finales.", FCVAR_NONE, true, 0.0, true, 4.0 ); hLogStandingDamage = CreateConVar( "hc_sflog_standing_damage", "48.0", "Damage of hittable swamp fever logs to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hBHLogStandingDamage = CreateConVar( "hc_bhlog_standing_damage", "100.0", "Damage of hittable blood harvest logs to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hCarStandingDamage = CreateConVar( "hc_car_standing_damage", "100.0", "Damage of hittable cars to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hBumperCarStandingDamage= CreateConVar( "hc_bumpercar_standing_damage", "100.0", "Damage of hittable bumper cars to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hHandtruckStandingDamage= CreateConVar( "hc_handtruck_standing_damage", "8.0", "Damage of hittable handtrucks (aka dollies) to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hForkliftStandingDamage = CreateConVar( "hc_forklift_standing_damage", "100.0", "Damage of hittable forklifts to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hBrokenForkliftStandingDamage= CreateConVar( "hc_broken_forklift_standing_damage", "100.0", "Damage of hittable broken forklifts to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hDumpsterStandingDamage = CreateConVar( "hc_dumpster_standing_damage", "100.0", "Damage of hittable dumpsters to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hHaybaleStandingDamage = CreateConVar( "hc_haybale_standing_damage", "48.0", "Damage of hittable haybales to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hBaggageStandingDamage = CreateConVar( "hc_baggage_standing_damage", "48.0", "Damage of hittable baggage carts to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hGeneratorTrailerStandingDamage = CreateConVar( "hc_generator_trailer_standing_damage", "48.0", "Damage of hittable generator trailers to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hMilitiaRockStandingDamage= CreateConVar( "hc_militia_rock_standing_damage", "100.0", "Damage of hittable militia rocks to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hSofaChairStandingDamage= CreateConVar( "hc_sofa_chair_standing_damage", "100.0", "Damage of hittable sofa chair on Blood Harvest finale to non-incapped survivors. Applies only to sofa chair with a targetname of 'hittable_chair_l4d1' to emulate L4D1 behaviour, the hittable chair from TLS update is parented to a bumper car.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hAtlasBallDamage = CreateConVar( "hc_atlas_ball_standing_damage", "100.0", "Damage of hittable atlas balls to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hIBeamDamage = CreateConVar( "hc_ibeam_standing_damage", "48.0", "Damage of ibeams to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hBrickPalletsPiecesDamage = CreateConVar( "hc_brick_pallets_standing_damage", "13.0", "Damage of hittable brick pallets pieces to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hBoatSmashPiecesDamage = CreateConVar( "hc_boat_smash_standing_damage", "23.0", "Damage of hittable boat smash pieces to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hConcretePillerPiecesDamage = CreateConVar( "hc_concrete_piller_standing_damage", "8.0", "Damage of hittable concrete piller pieces to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hDiescraperBallDamage = CreateConVar( "hc_diescraper_ball_standing_damage", "100.0", "Damage of hittable ball statue on Diescraper finale to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hVanDamage = CreateConVar( "hc_van_standing_damage", "100.0", "Damage of hittable van on Detour Ahead map 2 to non-incapped survivors.", - FCVAR_NONE, true, 0.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hStandardIncapDamage = CreateConVar( "hc_incap_standard_damage", "100", "Damage of all hittables to incapped players. -1 will have incap damage default to valve's standard incoherent damages. -2 will have incap damage default to each hittable's corresponding standing damage.", - FCVAR_NONE, true, -2.0, true, 300.0 ); + FCVAR_NONE, true, -2.0, false, 0.0 ); hTankSelfDamage = CreateConVar( "hc_disable_self_damage", "0", "If set, tank will not damage itself with hittables. (1: simply prevents all damage from Prop_Physics & Alarm Cars to cover for the event a Tank punches a hittable into another and gets hit)", FCVAR_NONE, true, 0.0, true, 1.0 ); @@ -142,29 +231,22 @@ public void OnPluginStart() FCVAR_NONE, true, 0.0, false ); hOverHitDebug = CreateConVar( "hc_debug", "0", "0: Disable Debug - 1: Enable Debug", - FCVAR_NONE, true, 0.0, false ); + FCVAR_NONE, true, 0.0, true, 1.0 ); hUnbreakableForklifts = CreateConVar( "hc_unbreakable_forklifts", "0", "Prevents forklifts breaking into pieces when hit by a tank.", FCVAR_NONE, true, 0.0, false ); - - if (bLateLoad) - { - for (int i = 1; i <= MaxClients; i++) - { - if(IsClientInGame(i)) - OnClientPutInServer(i); - } - } + hPhysMassIncapThres = CreateConVar( "hc_phys_mass_incap_threshold", "500.0", + "Hittable that weights more than this mass incapacitates survivors on hit. 0.0 to disable", + FCVAR_NONE, true, 0.0, false ); HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); HookEvent("gauntlet_finale_start", Event_GauntletFinaleStart, EventHookMode_PostNoCopy); - - hUnbreakableForklifts.AddChangeHook(ConVarChanged_UnbreakableForklifts); + HookEvent("player_bot_replace", Event_player_bot_replace); + HookEvent("bot_player_replace", Event_bot_player_replace); } public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { - bLateLoad = late; CreateNative("AreForkliftsUnbreakable", Native_UnbreakableForklifts); RegPluginLibrary("l4d2_hittable_control"); return APLRes_Success; @@ -175,257 +257,398 @@ public void OnClientPutInServer(int client) SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); } -void Event_RoundStart(Event event, const char[] name, bool dontBroadcast) +public void OnMapStart() { - // Reset everything to make sure we don't run into issues when a map is restarted (as GameTime resets) + g_bMapStarted = true; + for (int i = 1; i <= MaxClients; i++) { - for (int e = 0; e < sizeof(fOverkill[]); e++) - { - fOverkill[i][e] = 0.0; - } - fSpecialOverkill[i][0] = 0.0; - fSpecialOverkill[i][1] = 0.0; - fSpecialOverkill[i][2] = 0.0; + if (IsClientInGame(i)) + OnClientPutInServer(i); } - - bIsGauntletFinale = false; - - // Delay breakable forklift patch as it must run after vscripts - if (hUnbreakableForklifts.BoolValue) + + int entity = INVALID_ENT_REFERENCE; + while ((entity = FindEntityByClassname(entity, "prop_physics*")) != INVALID_ENT_REFERENCE) { - CreateTimer(20.0, PatchBreakableForklifts); + Physics_OnSpawnPost(entity); } - else + + entity = INVALID_ENT_REFERENCE; + while ((entity = FindEntityByClassname(entity, "prop_car_alarm")) != INVALID_ENT_REFERENCE) { - CreateTimer(20.0, UnpatchBreakableForklifts); + Physics_OnSpawnPost(entity); } } -Action PatchBreakableForklifts(Handle timer) +public void OnMapEnd() { - int forklift = -1; + g_bMapStarted = false; +} - while ((forklift = FindEntityByClassname(forklift, "prop_physics")) != -1) +void ClearPhysicsHitInfos() +{ + for (int i = 0; i < MAX_EDICTS; ++i) { - char sModelName[PLATFORM_MAX_PATH]; - GetEntPropString(forklift, Prop_Data, "m_ModelName", sModelName, sizeof(sModelName)); - ReplaceString(sModelName, sizeof(sModelName), "\\", "/", false); - - if (StrEqual(sModelName, "models/props/cs_assault/forklift.mdl", false)) - { - SetEntProp(forklift, Prop_Data, "m_iMinHealthDmg", 0); - SetEntProp(forklift, Prop_Data, "m_takedamage", 1); - } + g_nPhysicsHitInfoEntry[i] = -1; + g_iPhysicsDamage[i] = -1; } - return Plugin_Stop; + delete g_PhysicsHitInfos; + g_PhysicsHitInfos = new ArrayList(sizeof(PhysicsHitInfo)); } -Action UnpatchBreakableForklifts(Handle timer) +int NewPhysicsHitInfo() { - int forklift = -1; + PhysicsHitInfo info; + info.Init(); + return g_PhysicsHitInfos.PushArray(info); +} - while ((forklift = FindEntityByClassname(forklift, "prop_physics")) != -1) - { - char sModelName[PLATFORM_MAX_PATH]; - GetEntPropString(forklift, Prop_Data, "m_ModelName", sModelName, sizeof(sModelName)); - ReplaceString(sModelName, sizeof(sModelName), "\\", "/", false); - - if (StrEqual(sModelName, "models/props/cs_assault/forklift.mdl", false)) - { - SetEntProp(forklift, Prop_Data, "m_iMinHealthDmg", 400); - SetEntProp(forklift, Prop_Data, "m_takedamage", 3); - } - } +void Event_RoundStart(Event event, const char[] name, bool dontBroadcast) +{ + // Reset everything to make sure we don't run into issues when a map is restarted (as GameTime resets) + ClearPhysicsHitInfos(); - return Plugin_Stop; + bIsGauntletFinale = false; } -void ConVarChanged_UnbreakableForklifts(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) +int Native_UnbreakableForklifts(Handle plugin, int numParams) { + return hUnbreakableForklifts.BoolValue; +} + +void Event_GauntletFinaleStart(Event event, const char[] name, bool dontBroadcast) { - if (hUnbreakableForklifts.BoolValue) + bIsGauntletFinale = true; +} + +void Event_player_bot_replace(Event event, const char[] name, bool dontBroadcast) +{ + HandlePlayerReplace(GetClientOfUserId(event.GetInt("bot")), GetClientOfUserId(event.GetInt("player"))); +} + +void Event_bot_player_replace(Event event, const char[] name, bool dontBroadcast) +{ + HandlePlayerReplace(GetClientOfUserId(event.GetInt("player")), GetClientOfUserId(event.GetInt("bot"))); +} + +void HandlePlayerReplace(int client, int replaced) +{ + PhysicsHitInfo info; + for (int i = g_PhysicsHitInfos.Length-1; i >= 0; --i) { - CreateTimer(1.0, PatchBreakableForklifts); + g_PhysicsHitInfos.GetArray(i, info); + + info.nextDamageTime[client] = info.nextDamageTime[replaced]; + info.nextDamageTime[replaced] = -1.0; + + // TODO: Swap lastAttackerId? + g_PhysicsHitInfos.SetArray(i, info); } - else +} + +public void OnEntityCreated(int entity, const char[] classname) +{ + if (!g_bMapStarted) + return; + + if (classname[0] == 'p' + && (!strncmp(classname, "prop_physics", 12) + || !strcmp(classname, "physics_prop") + || !strcmp(classname, "prop_car_alarm"))) { - CreateTimer(1.0, UnpatchBreakableForklifts); + SDKHook(entity, SDKHook_SpawnPost, Physics_OnSpawnPost); } } -int Native_UnbreakableForklifts(Handle plugin, int numParams) { - return hUnbreakableForklifts.BoolValue; +public void OnEntityDestroyed(int entity) +{ + if (entity > 0 && entity < MAX_EDICTS) + { + g_nPhysicsHitInfoEntry[entity] = -1; + } } -void Event_GauntletFinaleStart(Event event, const char[] name, bool dontBroadcast) +void Physics_OnSpawnPost(int entity) { - bIsGauntletFinale = true; + int parent = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); + if (parent != -1) + { + g_nPhysicsHitInfoEntry[entity] = g_nPhysicsHitInfoEntry[parent]; + } + g_iPhysicsDamage[entity] = -1; + + char modelname[PLATFORM_MAX_PATH]; + GetEntityModel(entity, modelname, sizeof(modelname)); + + if (!strcmp(modelname, "models/props/cs_assault/forklift.mdl", false)) + { + SDKHook(entity, SDKHook_OnTakeDamage, Forklift_OnTakeDamage); + } + SDKHook(entity, SDKHook_OnTakeDamage, Physics_OnTakeDamage); + + DebugMsg("Physics_OnSpawnPost (%s) (#%d) [#%d]", parent == -1 ? "new" : "child", entity, g_nPhysicsHitInfoEntry[entity]); } -bool ProcessSpecialHittables(int victim, int &attacker, int &inflictor, float &damage) +Action Physics_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) { - char sModelName[PLATFORM_MAX_PATH]; - GetEntityModel(inflictor, sModelName, sizeof(sModelName)); - - // Special Overkill section - if (StrContains(sModelName, "brickpallets_break", false) != -1) // [0] + if (!IsValidEdict(attacker)) + return Plugin_Continue; + + DebugMsg("(#%d) Physics_OnTakeDamage (attacker %d)", victim, attacker); + + if (attacker > 0 && attacker <= MaxClients && IsTank(attacker)) { - if (fSpecialOverkill[victim][0] - GetGameTime() > 0) return true; - fSpecialOverkill[victim][0] = GetGameTime() + hOverHitInterval.FloatValue; - damage = hBrickPalletsPiecesDamage.FloatValue; - attacker = FindTank(); + // A tank punches me, create a new entry if not + if (g_nPhysicsHitInfoEntry[victim] == -1) + { + g_nPhysicsHitInfoEntry[victim] = NewPhysicsHitInfo(); + DebugMsg("(#%d) Physics_OnTakeDamage (new) [#%d]", victim, g_nPhysicsHitInfoEntry[victim]); + } + + PhysicsHitInfo info; + g_PhysicsHitInfos.GetArray(g_nPhysicsHitInfoEntry[victim], info); + + info.lastAttackerId = GetClientUserId(attacker); + info.lastAttackerTime = GetGameTime(); + + g_PhysicsHitInfos.SetArray(g_nPhysicsHitInfoEntry[victim], info); + DebugMsg("(#%d) Physics_OnTakeDamage [%N]", victim, attacker); + } + else if (IsEntityClassname(attacker, "prop_physics*")) + { + // Collides with other physics, clone their hit info + if (g_nPhysicsHitInfoEntry[attacker] != -1) + { + PhysicsHitInfo parentInfo; + g_PhysicsHitInfos.GetArray(g_nPhysicsHitInfoEntry[attacker], parentInfo); + + if (parentInfo.lastAttackerId) + { + // Create an entry if not + if (g_nPhysicsHitInfoEntry[victim] == -1) + { + g_nPhysicsHitInfoEntry[victim] = NewPhysicsHitInfo(); + DebugMsg("(#%d) Physics_OnTakeDamage (new) [#%d]", victim, g_nPhysicsHitInfoEntry[victim]); + } + + PhysicsHitInfo selfinfo; + g_PhysicsHitInfos.GetArray(g_nPhysicsHitInfoEntry[victim], selfinfo); + + selfinfo.lastAttackerId = parentInfo.lastAttackerId; + selfinfo.lastAttackerTime = GetGameTime(); + + g_PhysicsHitInfos.SetArray(g_nPhysicsHitInfoEntry[victim], selfinfo); + DebugMsg("(#%d) Physics_OnTakeDamage prop_physics (#%d) [%d]", victim, g_nPhysicsHitInfoEntry[attacker], selfinfo.lastAttackerId); + } + } + else + { + DebugMsg("(#%d) Physics_OnTakeDamage prop_physics (#%d)", victim, g_nPhysicsHitInfoEntry[attacker]); + } } - else if (StrContains(sModelName, "boat_smash_break", false) != -1) // [1] + + return Plugin_Continue; +} + +Action Forklift_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) +{ + if (hUnbreakableForklifts.BoolValue) { - if (fSpecialOverkill[victim][1] - GetGameTime() > 0) return true; - fSpecialOverkill[victim][1] = GetGameTime() + hOverHitInterval.FloatValue; - damage = hBoatSmashPiecesDamage.FloatValue; - attacker = FindTank(); + SetEntProp(victim, Prop_Data, "m_createTick", GetGameTickCount()); } - else if (StrContains(sModelName, "concretepiller01_dm01", false) != -1) // [2] + + return Plugin_Continue; +} + +// -1 = no data, -2 = incap damage, actual dmg amount if any > 0 +int GetHittableDamage(int entity) +{ + if (g_iPhysicsDamage[entity] == -1) { - if (fSpecialOverkill[victim][2] - GetGameTime() > 0) return true; - fSpecialOverkill[victim][2] = GetGameTime() + hOverHitInterval.FloatValue; - damage = hConcretePillerPiecesDamage.FloatValue; - attacker = FindTank(); + g_iPhysicsDamage[entity] = HittableDamageFromModel(entity); + if (g_iPhysicsDamage[entity] == -1) + { + g_iPhysicsDamage[entity] = -3; // no more searching + + float mass = GetPropPhysicsMass(entity); + if (mass >= hPhysMassIncapThres.FloatValue) + { + g_iPhysicsDamage[entity] = -2; + } + + { + char sModelName[PLATFORM_MAX_PATH]; + GetEntityModel(entity, sModelName, sizeof(sModelName)); + DebugMsg("Hittable (#%d) model (%s) not listed, setting damage (%.1f) by mass (%.1f)", entity, sModelName, g_iPhysicsDamage[entity], mass); + } + } } + + if (g_iPhysicsDamage[entity] == -2 || g_iPhysicsDamage[entity] >= 0) + return g_iPhysicsDamage[entity]; - return false; + return -1; } -bool GetHittableDamage(int entity, float &damage) +int HittableDamageFromModel(int entity) { char sModelName[PLATFORM_MAX_PATH]; GetEntityModel(entity, sModelName, sizeof(sModelName)); - + if (StrContains(sModelName, "cara_", false) != -1 || StrContains(sModelName, "taxi_", false) != -1 || StrContains(sModelName, "police_car", false) != -1 || StrContains(sModelName, "utility_truck", false) != -1) { - damage = hCarStandingDamage.FloatValue; + return hCarStandingDamage.IntValue; } else if (StrContains(sModelName, "dumpster", false) != -1) { - damage = hDumpsterStandingDamage.FloatValue; + return hDumpsterStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props/cs_assault/forklift.mdl", false)) { - damage = hForkliftStandingDamage.FloatValue; - } - else if (StrContains(sModelName, "forklift_brokenlift", false) != -1) - { - damage = hBrokenForkliftStandingDamage.FloatValue; + return hForkliftStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_vehicles/airport_baggage_cart2.mdl", false)) { - damage = hBaggageStandingDamage.FloatValue; + return hBaggageStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_unique/haybails_single.mdl", false)) { - damage = hHaybaleStandingDamage.FloatValue; + return hHaybaleStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_foliage/swamp_fallentree01_bare.mdl", false)) { - damage = hLogStandingDamage.FloatValue; + return hLogStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_foliage/tree_trunk_fallen.mdl", false)) { - damage = hBHLogStandingDamage.FloatValue; + return hBHLogStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_fairgrounds/bumpercar.mdl", false)) { - damage = hBumperCarStandingDamage.FloatValue; + return hBumperCarStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props/cs_assault/handtruck.mdl", false)) { - damage = hHandtruckStandingDamage.FloatValue; + return hHandtruckStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_vehicles/generatortrailer01.mdl", false)) { - damage = hGeneratorTrailerStandingDamage.FloatValue; + return hGeneratorTrailerStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props/cs_militia/militiarock01.mdl", false)) { - damage = hMilitiaRockStandingDamage.FloatValue; + return hMilitiaRockStandingDamage.IntValue; } else if (StrEqual(sModelName, "models/props_interiors/sofa_chair02.mdl", false)) { char targetname[128]; - GetEntPropString(entity, Prop_Data, "m_iName", targetname, 128); + GetEntPropString(entity, Prop_Data, "m_iName", targetname, sizeof(targetname)); if (StrEqual(targetname, "hittable_chair_l4d1", false)) { - damage = hSofaChairStandingDamage.FloatValue; + return hSofaChairStandingDamage.IntValue; } } else if (StrEqual(sModelName, "models/props_vehicles/van.mdl", false)) { - damage = hVanDamage.FloatValue; + return hVanDamage.IntValue; + } + else if (StrEqual(sModelName, "models/props_diescraper/statue_break_ball.mdl", false)) + { + return hDiescraperBallDamage.IntValue; + } + else if (StrEqual(sModelName, "models/sblitz/field_equipment_cart.mdl", false)) + { + return hBaggageStandingDamage.IntValue; + } + else if (StrContains(sModelName, "forklift_brokenlift", false) != -1) + { + return hBrokenForkliftStandingDamage.IntValue; } else if (StrContains(sModelName, "atlas_break_ball.mdl", false) != -1) { - damage = hAtlasBallDamage.FloatValue; + return hAtlasBallDamage.IntValue; } else if (StrContains(sModelName, "ibeam_breakable01", false) != -1) { - damage = hIBeamDamage.FloatValue; + return hIBeamDamage.IntValue; } - else if (StrEqual(sModelName, "models/props_diescraper/statue_break_ball.mdl", false)) + // Special Overkill section + else if (StrContains(sModelName, "brickpallets_break", false) != -1) { - damage = hDiescraperBallDamage.FloatValue; + return hBrickPalletsPiecesDamage.IntValue; } - else if (StrEqual(sModelName, "models/sblitz/field_equipment_cart.mdl", false)) + else if (StrContains(sModelName, "boat_smash_break", false) != -1) { - damage = hBaggageStandingDamage.FloatValue; + return hBoatSmashPiecesDamage.IntValue; } - else + else if (StrContains(sModelName, "concretepiller01_dm01", false) != -1) { - return false; + return hConcretePillerPiecesDamage.IntValue; } - return true; + return -1; } Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) { // Hey, we don't care. - if (!IsValidEdict(attacker) || - !IsValidEdict(victim) || - !IsValidEdict(inflictor)) + if (!IsValidEdict(attacker) + || !IsValidEdict(inflictor) + || g_nPhysicsHitInfoEntry[inflictor] == -1) return Plugin_Continue; - char sClass[64]; - GetEdictClassname(inflictor, sClass, sizeof(sClass)); + if (IsTank(victim) && hTankSelfDamage.BoolValue) + return Plugin_Handled; // Tank is hitting himself with the Hittable (+added usecase when the Tank would be hit by a hittable that he punched a hittable against before it hit him) - if (!StrEqual(sClass,"prop_physics") && !StrEqual(sClass,"prop_car_alarm")) - return Plugin_Continue; + PhysicsHitInfo hitinfo; + g_PhysicsHitInfos.GetArray(g_nPhysicsHitInfoEntry[inflictor], hitinfo); - if (fOverkill[victim][inflictor] - GetGameTime() > 0.0) - return Plugin_Handled; // Overkill on this Hittable. + if (hitinfo.nextDamageTime[victim] > 0.0 && GetGameTime() <= hitinfo.nextDamageTime[victim]) + { + damage = 0.0; // Overkill on this Hittable. + return Plugin_Changed; + } - if (IsTank(victim) && hTankSelfDamage.BoolValue) - return Plugin_Handled; // Tank is hitting himself with the Hittable (+added usecase when the Tank would be hit by a hittable that he punched a hittable against before it hit him) + hitinfo.nextDamageTime[victim] = GetGameTime() + hOverHitInterval.FloatValue; //standardise them bitchin over-hits + g_PhysicsHitInfos.SetArray(g_nPhysicsHitInfoEntry[inflictor], hitinfo); if (GetClientTeam(victim) != 2) return Plugin_Continue; // Victim is not a Survivor. - if (ProcessSpecialHittables(victim, attacker, inflictor, damage)) - return Plugin_Handled; - - float val = hStandardIncapDamage.FloatValue; + int val = hStandardIncapDamage.IntValue; if (GetEntProp(victim, Prop_Send, "m_isIncapacitated") - && val != -2) // Survivor is Incapped. (Damage) + && val != -2) // Survivor is Incapped. (Damage) { - if (val >= 0.0) + if (val >= 0) { - damage = val; + damage = float(val); } else return Plugin_Continue; } else { - GetHittableDamage(inflictor, damage); + int newDamage = GetHittableDamage(inflictor); + if (newDamage == -2) + damage = float(GetEntProp(victim, Prop_Data, "m_iMaxHealth")); + else if (newDamage >= 0) + damage = float(newDamage); + } + + if (IsEntityClassname(attacker, "prop_physics*") || IsEntityClassname(attacker, "prop_car_alarm")) + { + if (hitinfo.lastAttackerTime > 0.0 && GetGameTime() <= hitinfo.lastAttackerTime + 60.0) // ignore info that's too ancient + { + int lastAttacker = GetClientOfUserId(hitinfo.lastAttackerId); + if (lastAttacker > 0 + && IsClientInGame(lastAttacker) + && GetClientTeam(lastAttacker) == 3) + { + attacker = lastAttacker; + } + } } // Use standard damage on gauntlet finales @@ -434,16 +657,13 @@ Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, in damage = damage * 4.0 * hGauntletFinaleMulti.FloatValue; } - fOverkill[victim][inflictor] = GetGameTime() + hOverHitInterval.FloatValue; //standardise them bitchin over-hits - // inflictor = 0; // We have to set set the inflictor to 0 or else it will sometimes just refuse to apply damage. InvalidatePhysOverhitTimer(victim); - if (hOverHitDebug.BoolValue) { char sModelName[PLATFORM_MAX_PATH]; GetEntityModel(inflictor, sModelName, sizeof(sModelName)); - PrintToChatAll("[l4d2_hittable_control]: \x03%N \x01was hit by \x04%s \x01for \x03%i \x01damage. Gauntlet: %b", victim, sModelName, RoundToNearest(damage), bIsGauntletFinale); + DebugMsg("[l4d2_hittable_control]: \x03%N \x01was hit by \x04%s \x01for \x03%i \x01damage. Gauntlet: %b", victim, sModelName, RoundToNearest(damage), bIsGauntletFinale); } return Plugin_Changed; @@ -464,20 +684,56 @@ void InvalidatePhysOverhitTimer(int client) SetEntDataFloat(client, s_iOffs_m_physOverhitTimer + 8, -1.0); } -int FindTank() +// int FindTank() +// { +// for (int i = 1; i <= MaxClients; i++) +// { +// if (IsClientInGame(i) && IsTank(i)) +// { +// return i; +// } +// } +// return 0; +// } + +bool IsTank(int client) { - for (int i = 1; i <= MaxClients; i++) + return GetClientTeam(client) == 3 + && GetEntProp(client, Prop_Send, "m_zombieClass") == 8; +} + +bool IsEntityClassname(int entity, const char[] classname) +{ + int len = strlen(classname); + if (len == 0) + return false; + + char buffer[64]; + GetEntityClassname(entity, buffer, sizeof(buffer)); + return classname[len-1] == '*' ? !strncmp(buffer, classname, len-1) : !strcmp(buffer, classname); +} + +stock void Assert(bool cond, const char[] msg = "") +{ +#if DEBUG + if (!cond) { - if (IsClientInGame(i) && IsTank(i)) - { - return i; - } + LogError("Assertion failed! (%s)", msg); } - return 0; +#else + #pragma unused cond + #pragma unused msg +#endif } -bool IsTank(int client) +stock void DebugMsg(const char[] format, any ...) { - return GetClientTeam(client) == 3 - && GetEntProp(client, Prop_Send, "m_zombieClass") == 8; + if (hOverHitDebug.BoolValue) + { + char buffer[512]; + VFormat(buffer, sizeof(buffer), format, 2); + PrintToConsoleAll("%s", buffer); + // PrintToServer("%s", buffer); + // LogMessage("%s", buffer); + } } diff --git a/addons/sourcemod/scripting/l4d2_skill_detect.sp b/addons/sourcemod/scripting/l4d2_skill_detect.sp index fbcf33120..4f1989d9b 100644 --- a/addons/sourcemod/scripting/l4d2_skill_detect.sp +++ b/addons/sourcemod/scripting/l4d2_skill_detect.sp @@ -61,7 +61,7 @@ #include #include -#define PLUGIN_VERSION "1.1.1" +#define PLUGIN_VERSION "1.1.2" #define SHOTGUN_BLAST_TIME 0.1 #define POUNCE_CHECK_TIME 0.1 diff --git a/addons/sourcemod/scripting/l4d2_skill_detect/report.sp b/addons/sourcemod/scripting/l4d2_skill_detect/report.sp index 95553278d..2ef4f0d6e 100644 --- a/addons/sourcemod/scripting/l4d2_skill_detect/report.sp +++ b/addons/sourcemod/scripting/l4d2_skill_detect/report.sp @@ -112,9 +112,9 @@ stock void HandleSkeet(int attacker, int victim, bool bMelee = false, bool bSnip CPrintToChatAll("%t %t", "Tag+", "TeamSkeetedBot"); } else if (IsValidClientInGame(attacker) && IsValidClientInGame(victim) && !IsFakeClient(victim)) - CPrintToChatAll("%t %t", "Tag++", "Skeeted", attacker, (bMelee) ? Melee() : ((bSniper) ? Headshot() : ((bGL) ? Grenade() : "")), victim); + CPrintToChatAll("%t %t", "Tag++", "Skeeted", attacker, (bMelee) ? "Melee" : ((bSniper) ? "HeadShot" : ((bGL) ? "Grenade" : "Empty")), victim); else if (IsValidClientInGame(attacker)) - CPrintToChatAll("%t %t", "Tag+", "SkeetedBot", attacker, (bMelee) ? Melee() : ((bSniper) ? Headshot() : ((bGL) ? Grenade() : ""))); + CPrintToChatAll("%t %t", "Tag+", "SkeetedBot", attacker, (bMelee) ? "Melee" : ((bSniper) ? "HeadShot" : ((bGL) ? "Grenade" : "Empty"))); } // call forward @@ -155,12 +155,10 @@ stock void HandleNonSkeet(int attacker, int victim, int damage, bool bOverKill = // report? if (g_cvarReport.BoolValue && g_cvarRepHurtSkeet.BoolValue) { - char buffer[64]; - Format(buffer, sizeof(buffer), "%t", "Unchipped"); if (IsValidClientInGame(victim)) - CPrintToChatAll("%t %t", "Tag+", "HurtSkeet", victim, damage, (bOverKill) ? buffer : ""); + CPrintToChatAll("%t %t", "Tag+", "HurtSkeet", victim, damage, (bOverKill) ? "Unchipped" : "Empty"); else - CPrintToChatAll("%t %t", "Tag+", "HurtSkeetBot", damage, (bOverKill) ? buffer : ""); + CPrintToChatAll("%t %t", "Tag+", "HurtSkeetBot", damage, (bOverKill) ? "Unchipped" : "Empty"); } // call forward @@ -255,13 +253,10 @@ void HandleSmokerSelfClear(int attacker, int victim, bool withShove = false) // report? if (g_cvarReport.BoolValue && g_cvarRepSelfClear.BoolValue && (!withShove || g_cvarRepSelfClearShove.BoolValue)) { - char Buffer[64]; - Format(Buffer, sizeof(Buffer), "%t", "Shoving"); - if (IsValidClientInGame(attacker) && IsValidClientInGame(victim) && !IsFakeClient(victim)) - CPrintToChatAll("%t %t", "Tag++", "SelfClearedTongue", attacker, victim, (withShove) ? Buffer : ""); + CPrintToChatAll("%t %t", "Tag++", "SelfClearedTongue", attacker, victim, (withShove) ? "Shoving" : "Empty"); else if (IsValidClientInGame(attacker)) - CPrintToChatAll("%t %t", "Tag++", "SelfClearedTongueBot", attacker, (withShove) ? Buffer : ""); + CPrintToChatAll("%t %t", "Tag++", "SelfClearedTongueBot", attacker, (withShove) ? "Shoving" : "Empty"); } // call forward @@ -347,13 +342,10 @@ stock void HandleDeathCharge(int attacker, int victim, float height, float dista // report? if (g_cvarReport.BoolValue && g_cvarRepDeathCharge.BoolValue && height >= g_cvarDeathChargeHeight.FloatValue) { - char Buffer[64]; - Format(Buffer, sizeof(Buffer), "%t", "Bowling"); - if (IsValidClientInGame(attacker) && IsValidClientInGame(victim) && !IsFakeClient(attacker)) - CPrintToChatAll("%t %t", "Tag++++", "DeathCharged", attacker, victim, (bCarried) ? "" : Buffer, RoundFloat(height)); + CPrintToChatAll("%t %t", "Tag++++", "DeathCharged", attacker, victim, (bCarried) ? "Empty" : "Bowling", RoundFloat(height)); else if (IsValidClientInGame(victim)) - CPrintToChatAll("%t %t", "Tag++++", "DeathChargedBot", victim, (bCarried) ? "" : Buffer, RoundFloat(height)); + CPrintToChatAll("%t %t", "Tag++++", "DeathChargedBot", victim, (bCarried) ? "Empty" : "Bowling", RoundFloat(height)); } Call_StartForward(g_hForwardDeathCharge); @@ -426,7 +418,7 @@ stock void HandleVomitLanded(int attacker, int boomCount) stock void HandleBHopStreak(int survivor, int streak, float maxVelocity) { if (g_cvarRepBhopStreak.BoolValue && IsValidClientInGame(survivor) && !IsFakeClient(survivor) && streak >= g_cvarBHopMinStreak.IntValue) - CPrintToChat(survivor, "%t %t", "Tag+", "BunnyHop", streak, (streak > 1) ? PluralCount() : "", maxVelocity); + CPrintToChat(survivor, "%t %t", "Tag+", "BunnyHop", streak, (streak > 1) ? "PluralCount" : "Empty", maxVelocity); Call_StartForward(g_hForwardBHopStreak); Call_PushCell(survivor); @@ -487,31 +479,4 @@ stock void HandleCarAlarmTriggered(int survivor, int infected, int reason) Call_Finish(); } -char[] Melee() -{ - char sBuffer[32]; - Format(sBuffer, sizeof(sBuffer), "%t", "Melee"); - return sBuffer; -} - -char[] Headshot() -{ - char sBuffer[32]; - Format(sBuffer, sizeof(sBuffer), "%t", "HeadShot"); - return sBuffer; -} - -char[] Grenade() -{ - char sBuffer[32]; - Format(sBuffer, sizeof(sBuffer), "%t", "Grenade"); - return sBuffer; -} - -char[] PluralCount() -{ - char sBuffer[32]; - Format(sBuffer, sizeof(sBuffer), "%t", "PluralCount"); - return sBuffer; -} diff --git a/addons/sourcemod/scripting/l4d_boss_percent.sp b/addons/sourcemod/scripting/l4d_boss_percent.sp index 8048fa016..b38dfa84b 100644 --- a/addons/sourcemod/scripting/l4d_boss_percent.sp +++ b/addons/sourcemod/scripting/l4d_boss_percent.sp @@ -26,7 +26,7 @@ out what's going on :D Kinda makes my other plugins look bad huh :/ #include #include -#define PLUGIN_VERSION "3.2.5" +#define PLUGIN_VERSION "3.2.6" public Plugin myinfo = { @@ -83,8 +83,8 @@ int g_fDKRFirstRoundWitchPercent; // Stores the Witch percent from the first // Percent Variables int g_fWitchPercent; // Stores current Witch Percent int g_fTankPercent; // Stores current Tank Percent -char g_sWitchString[80]; -char g_sTankString[80]; +char g_sWitchString[32]; // Stores current Witch "State" +char g_sTankString[32]; // Stores current Tank "State" public void OnPluginStart() { @@ -359,7 +359,7 @@ int GetPercentageFromText(const char[] text) if (IsCharNumeric(text[index - 2]) && IsCharNumeric(text[index - 1])) { // If both characters are numbers combine them into 1 string - Format(sBuffer, sizeof(sBuffer), "%c%c", text[index - 2], text[index - 1]); + FormatEx(sBuffer, sizeof(sBuffer), "%c%c", text[index - 2], text[index - 1]); // Convert our string to an int return StringToInt(sBuffer); @@ -621,51 +621,51 @@ Action Timer_UpdateReadyUpFooter(Handle timer) // Format our Tank String if (g_fTankPercent > 0) // If Tank percent is not 0 { - Format(p_sTankString, sizeof(p_sTankString), "%T", "TankOn", LANG_SERVER, g_fTankPercent); + FormatEx(p_sTankString, sizeof(p_sTankString), "%T", "TankOn", LANG_SERVER, g_fTankPercent); } else if (g_bTankDisabled) // If another plugin has disabled the tank { - Format(p_sTankString, sizeof(p_sTankString), "%T", "TankDisabled", LANG_SERVER); + FormatEx(p_sTankString, sizeof(p_sTankString), "%T", "TankDisabled", LANG_SERVER); } else if (p_bStaticTank) // If current map contains static Tank { - Format(p_sTankString, sizeof(p_sTankString), "%T", "TankStatic", LANG_SERVER); + FormatEx(p_sTankString, sizeof(p_sTankString), "%T", "TankStatic", LANG_SERVER); } else // There is no Tank (Flow = 0) { - Format(p_sTankString, sizeof(p_sTankString), "%T", "TankNone", LANG_SERVER); + FormatEx(p_sTankString, sizeof(p_sTankString), "%T", "TankNone", LANG_SERVER); } // Format our Witch String if (g_fWitchPercent > 0) // If Witch percent is not 0 { - Format(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchOn", LANG_SERVER, g_fWitchPercent); + FormatEx(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchOn", LANG_SERVER, g_fWitchPercent); } else if (g_bWitchDisabled) // If another plugin has disabled the witch { - Format(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchDisabled", LANG_SERVER); + FormatEx(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchDisabled", LANG_SERVER); } else if (p_bStaticWitch) // If current map contains static Witch { - Format(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchStatic", LANG_SERVER); + FormatEx(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchStatic", LANG_SERVER); } else // There is no Witch (Flow = 0) { - Format(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchNone", LANG_SERVER); + FormatEx(p_sWitchString, sizeof(p_sWitchString), "%T", "WitchNone", LANG_SERVER); } // Combine our Tank and Witch strings together if (g_bCvarWitchPercent && g_bCvarTankPercent) // Display Both Tank and Witch Percent { - Format(p_sNewFooter, sizeof(p_sNewFooter), "%s, %s", p_sTankString, p_sWitchString); + FormatEx(p_sNewFooter, sizeof(p_sNewFooter), "%s, %s", p_sTankString, p_sWitchString); } else if (g_bCvarWitchPercent) // Display just Witch Percent { - Format(p_sNewFooter, sizeof(p_sNewFooter), "%s", p_sWitchString); + FormatEx(p_sNewFooter, sizeof(p_sNewFooter), "%s", p_sWitchString); } else if (g_bCvarTankPercent) // Display just Tank Percent { - Format(p_sNewFooter, sizeof(p_sNewFooter), "%s", p_sTankString); + FormatEx(p_sNewFooter, sizeof(p_sNewFooter), "%s", p_sTankString); } // Check to see if the Ready Up footer has already been added @@ -709,7 +709,7 @@ Action BossCmd(int client, int args) void PrintCurrent(int userid) { int client = GetClientOfUserId(userid); - if (client) FakeClientCommand(client, "say /current"); + if (client) FakeClientCommand(client, "sm_current"); } void ProcessBossString() @@ -726,41 +726,24 @@ void ProcessBossString() p_bStaticWitch = IsStaticWitchMap(); } - // Format String For Tank - if (g_fTankPercent > 0) // If Tank percent is not equal to 0 - { - Format(g_sTankString, sizeof(g_sTankString), "%t {red}%d%%", "TagTank", g_fTankPercent); - } - else if (g_bTankDisabled) // If another plugin has disabled the tank - { - Format(g_sTankString, sizeof(g_sTankString), "%t {red}%t", "TagTank", "Disabled"); - } - else if (p_bStaticTank) // If current map has static Tank spawn - { - Format(g_sTankString, sizeof(g_sTankString), "%t {red}%t", "TagTank", "StaticSpawn"); - } - else // There is no Tank - { - Format(g_sTankString, sizeof(g_sTankString), "%t {red}%t", "TagTank", "None"); - } - - // Format String For Witch - if (g_fWitchPercent > 0) // If Witch percent is not equal to 0 - { - Format(g_sWitchString, sizeof(g_sWitchString), "%t {red}%d%%", "TagWitch", g_fWitchPercent); - } - else if (g_bWitchDisabled) // If another plugin has disabled the witch - { - Format(g_sWitchString, sizeof(g_sWitchString), "%t {red}%t", "TagWitch", "Disabled"); - } - else if (p_bStaticWitch) // If current map has static Witch spawn - { - Format(g_sWitchString, sizeof(g_sWitchString), "%t {red}%t", "TagWitch", "StaticSpawn"); - } - else // There is no Witch - { - Format(g_sWitchString, sizeof(g_sWitchString), "%t {red}%t", "TagWitch", "None"); - } + // Store the second translation key + if (g_fTankPercent > 0) + g_sTankString[0] = '\0'; + else if (g_bTankDisabled) + strcopy(g_sTankString, sizeof(g_sTankString), "Disabled"); + else if (p_bStaticTank) + strcopy(g_sTankString, sizeof(g_sTankString), "StaticSpawn"); + else + strcopy(g_sTankString, sizeof(g_sTankString), "None"); + + if (g_fWitchPercent > 0) + g_sWitchString[0] = '\0'; + else if (g_bWitchDisabled) + strcopy(g_sWitchString, sizeof(g_sWitchString), "Disabled"); + else if (p_bStaticWitch) + strcopy(g_sWitchString, sizeof(g_sWitchString), "StaticSpawn"); + else + strcopy(g_sWitchString, sizeof(g_sWitchString), "None"); } void PrintBossPercents(int client = 0) @@ -787,12 +770,20 @@ void PrintBossPercents(int client = 0) for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsFakeClient(i) && (teamflag & (1 << GetClientTeam(i)))) - CPrintToChat(i, g_sTankString); + { + if (g_sTankString[0] == '\0') + CPrintToChat(i, "%t {red}%d%%", "TagTank", g_fTankPercent); + else + CPrintToChat(i, "%t {red}%t", "TagTank", g_sTankString); + } } } else { - CPrintToChat(client, g_sTankString); + if (g_sTankString[0] == '\0') + CPrintToChat(client, "%t {red}%d%%", "TagTank", g_fTankPercent); + else + CPrintToChat(client, "%t {red}%t", "TagTank", g_sTankString); } } if (g_bCvarWitchPercent) @@ -802,12 +793,20 @@ void PrintBossPercents(int client = 0) for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsFakeClient(i) && (teamflag & (1 << GetClientTeam(i)))) - CPrintToChat(i, g_sWitchString); + { + if (g_sWitchString[0] == '\0') + CPrintToChat(i, "%t {red}%d%%", "TagWitch", g_fWitchPercent); + else + CPrintToChat(i, "%t {red}%t", "TagWitch", g_sWitchString); + } } } else { - CPrintToChat(client, g_sWitchString); + if (g_sWitchString[0] == '\0') + CPrintToChat(client, "%t {red}%d%%", "TagWitch", g_fWitchPercent); + else + CPrintToChat(client, "%t {red}%t", "TagWitch", g_sWitchString); } } } diff --git a/addons/sourcemod/scripting/l4dd/l4dd_forwards.sp b/addons/sourcemod/scripting/l4dd/l4dd_forwards.sp index 0abded83c..9469ff5b0 100644 --- a/addons/sourcemod/scripting/l4dd/l4dd_forwards.sp +++ b/addons/sourcemod/scripting/l4dd/l4dd_forwards.sp @@ -298,6 +298,9 @@ GlobalForward g_hFWD_AddonsDisabler; // Features: handles multiple detours for 1 forward, and multiple forwards for 1 detour. Also force enabling a detour without any forward using it. void SetupDetours(GameData hGameData = null) { + int iPipebombPrjIndex; // Index of "L4D_PipeBombProjectile_Pre" detour + int iPipebombDtnIndex; // Index of "L4D_PipeBomb_Detonate" detour + if( g_bCreatedDetours == false ) { g_aDetoursHooked = new ArrayList(); @@ -458,6 +461,7 @@ void SetupDetours(GameData hGameData = null) CreateDetour(hGameData, DTR_BossZombiePlayerBot_ChooseVictim_Pre, DTR_BossZombiePlayerBot_ChooseVictim_Post, "L4DD::BossZombiePlayerBot::ChooseVictim", "L4D2_OnChooseVictim", true); CreateDetour(hGameData, DTR_CTerrorPlayer_MaterializeFromGhost_Pre, DTR_CTerrorPlayer_MaterializeFromGhost_Post, "L4DD::CTerrorPlayer::MaterializeFromGhost", "L4D_OnMaterializeFromGhostPre"); CreateDetour(hGameData, DTR_CTerrorPlayer_MaterializeFromGhost_Pre, DTR_CTerrorPlayer_MaterializeFromGhost_Post, "L4DD::CTerrorPlayer::MaterializeFromGhost", "L4D_OnMaterializeFromGhost", true); + iPipebombPrjIndex = g_iSmallIndex; CreateDetour(hGameData, DTR_CPipeBombProjectile_Create_Pre, DTR_CPipeBombProjectile_Create_Post, "L4DD::CPipeBombProjectile::Create", "L4D_PipeBombProjectile_Pre"); CreateDetour(hGameData, DTR_CPipeBombProjectile_Create_Pre, DTR_CPipeBombProjectile_Create_Post, "L4DD::CPipeBombProjectile::Create", "L4D_PipeBombProjectile_Post", true); CreateDetour(hGameData, DTR_CPipeBombProjectile_Create_Pre, DTR_CPipeBombProjectile_Create_Post, "L4DD::CPipeBombProjectile::Create", "L4D_PipeBombProjectile_PostHandled", true); @@ -481,10 +485,25 @@ void SetupDetours(GameData hGameData = null) CreateDetour(hGameData, DTR_CMolotovProjectile_Detonate_Pre, DTR_CMolotovProjectile_Detonate, "L4DD::CMolotovProjectile::Detonate", "L4D_Molotov_Detonate"); CreateDetour(hGameData, DTR_CMolotovProjectile_Detonate_Pre, DTR_CMolotovProjectile_Detonate, "L4DD::CMolotovProjectile::Detonate", "L4D_Molotov_Detonate_Post", true); CreateDetour(hGameData, DTR_CMolotovProjectile_Detonate_Pre, DTR_CMolotovProjectile_Detonate, "L4DD::CMolotovProjectile::Detonate", "L4D_Molotov_Detonate_PostHandled", true); + iPipebombDtnIndex = g_iSmallIndex; CreateDetour(hGameData, DTR_CPipeBombProjectile_Detonate_Pre, DTR_CPipeBombProjectile_Detonate, "L4DD::CPipeBombProjectile::Detonate", "L4D_PipeBomb_Detonate"); CreateDetour(hGameData, DTR_CPipeBombProjectile_Detonate_Pre, DTR_CPipeBombProjectile_Detonate, "L4DD::CPipeBombProjectile::Detonate", "L4D_PipeBomb_Detonate_Post", true); CreateDetour(hGameData, DTR_CPipeBombProjectile_Detonate_Pre, DTR_CPipeBombProjectile_Detonate, "L4DD::CPipeBombProjectile::Detonate", "L4D_PipeBomb_Detonate_PostHandled", true); CreateDetour(hGameData, DTR_CTerrorPlayer_Extinguish, INVALID_FUNCTION, "L4DD::CTerrorPlayer::Extinguish", "L4D_PlayerExtinguish"); + + // When either "L4D_PipeBombProjectile*" or "L4D_PipeBomb_Detonate*" forwards are enabled + // Enable "L4D_CBreakableProp_Break" to accurately detect if pipebomb detonations are actually pipebombs or just breakable props exploding + // Since "L4D_PipeBombProjectile*" and "L4D_PipeBomb_Detonate*" forwards would otherwise fire for breakable props + // This is tracked and fixed with the "g_bBreakable" bool in those forwards + if( g_bCreatedDetours ) // Detours have been created, we have indexes for pipbomb forwards + { + int status = g_aDetoursHooked.Get(iPipebombPrjIndex); // Get "L4D_PipeBombProjectile*" forward enabled/disabled status + if( !status ) status = g_aDetoursHooked.Get(iPipebombDtnIndex); // Get "L4D_PipeBomb_Detonate*" forward enabled/disabled status + + // If either detour is enabled, force "L4D_CBreakableProp_Break" to be enabled also + g_aForceDetours.Set(g_iLargeIndex, status > 0); + } + CreateDetour(hGameData, DTR_CBreakableProp_Break_Pre, DTR_CBreakableProp_Break_Post, "L4DD::CBreakableProp::Break", "L4D_CBreakableProp_Break"); CreateDetour(hGameData, DTR_CTerrorPlayer_OnVomitedUpon, DTR_CTerrorPlayer_OnVomitedUpon_Post, "L4DD::CTerrorPlayer::OnVomitedUpon", "L4D_OnVomitedUpon"); CreateDetour(hGameData, DTR_CTerrorPlayer_OnVomitedUpon, DTR_CTerrorPlayer_OnVomitedUpon_Post, "L4DD::CTerrorPlayer::OnVomitedUpon", "L4D_OnVomitedUpon_Post", true); @@ -536,10 +555,10 @@ void SetupDetours(GameData hGameData = null) CreateDetour(hGameData, DTR_CLeap_ActivateAbility, DTR_CLeap_ActivateAbility_Post, "L4DD::CLeap::ActivateAbility", "L4D2_ActivateAbility_Jockey_Post", true); CreateDetour(hGameData, DTR_CLeap_ActivateAbility, DTR_CLeap_ActivateAbility_Post, "L4DD::CLeap::ActivateAbility", "L4D2_ActivateAbility_Jockey_PostHandled", true); CreateDetour(hGameData, DTR_CSpitAbility_ActivateAbility, DTR_CSpitAbility_ActivateAbility_Post, "L4DD::CSpitAbility::ActivateAbility", "L4D2_ActivateAbility_Spitter"); - CreateDetour(hGameData, DTR_CSpitAbility_ActivateAbility, DTR_CSpitAbility_ActivateAbility_Post, "L4DD::CSpitAbility::ActivateAbility", "L4D2_ActivateAbility_Spitter_Post", true); + CreateDetour(hGameData, DTR_CSpitAbility_ActivateAbility, DTR_CSpitAbility_ActivateAbility_Post, "L4DD::CSpitAbility::ActivateAbility", "L4D2_ActivateAbility_Spitter_Post", true); CreateDetour(hGameData, DTR_CSpitAbility_ActivateAbility, DTR_CSpitAbility_ActivateAbility_Post, "L4DD::CSpitAbility::ActivateAbility", "L4D2_ActivateAbility_Spitter_PostHandled", true); CreateDetour(hGameData, DTR_CCharge_ActivateAbility, DTR_CCharge_ActivateAbility_Post, "L4DD::CCharge::ActivateAbility", "L4D2_ActivateAbility_Charger"); - CreateDetour(hGameData, DTR_CCharge_ActivateAbility, DTR_CCharge_ActivateAbility_Post, "L4DD::CCharge::ActivateAbility", "L4D2_ActivateAbility_Charger_Post", true); + CreateDetour(hGameData, DTR_CCharge_ActivateAbility, DTR_CCharge_ActivateAbility_Post, "L4DD::CCharge::ActivateAbility", "L4D2_ActivateAbility_Charger_Post", true); CreateDetour(hGameData, DTR_CCharge_ActivateAbility, DTR_CCharge_ActivateAbility_Post, "L4DD::CCharge::ActivateAbility", "L4D2_ActivateAbility_Charger_PostHandled", true); } @@ -729,7 +748,9 @@ void CreateDetour(GameData hGameData, DHookCallback fCallback, DHookCallback fPo if( fCallback != INVALID_FUNCTION && !hDetour.Enable(Hook_Pre, fCallback) ) LogError("Failed to detour pre \"%s\" (%s).", sName, g_sSystem); if( fPostCallback != INVALID_FUNCTION && !hDetour.Enable(Hook_Post, fPostCallback) ) LogError("Failed to detour post \"%s\" (%s).", sName, g_sSystem); - } else { + } + else + { g_aDetoursHooked.Set(g_iSmallIndex, 0); #if defined DEBUG #if DEBUG @@ -771,7 +792,9 @@ void CreateDetour(GameData hGameData, DHookCallback fCallback, DHookCallback fPo } g_aDetourHookIDsPost.Set(g_iSmallIndex, hookID); // Store handle - } else { + } + else + { g_aDetoursHooked.Set(g_iSmallIndex, 0); #if defined DEBUG #if DEBUG @@ -845,10 +868,6 @@ void CheckRequiredDetours(int client = 0) // Force detour on? if( g_aForceDetours.Get(i) ) { - // Get forward name - g_aForwardNames.GetString(i, sForward, sizeof(sForward)); - g_aGameDataSigs.GetString(i, sName, sizeof(sName)); - count++; if( !useLast ) @@ -861,6 +880,10 @@ void CheckRequiredDetours(int client = 0) g_vProf.Stop(); g_fProf += g_vProf.Time; + // Get forward name + g_aForwardNames.GetString(i, sForward, sizeof(sForward)); + g_aGameDataSigs.GetString(i, sName, sizeof(sName)); + PrintToServer("%3d %36s> %43s (%s)", count, (i == g_iAnimationDetourIndex && g_aForceDetours.Get(g_iAnimationDetourIndex)) ? "FORCED ANIM" : "FORCED DETOUR", sForward, sName[6]); g_vProf.Start(); } @@ -869,6 +892,10 @@ void CheckRequiredDetours(int client = 0) if( client > 0 ) { + // Get forward name + g_aForwardNames.GetString(i, sForward, sizeof(sForward)); + g_aGameDataSigs.GetString(i, sName, sizeof(sName)); + ReplyToCommand(client - 1, "%3d %36s> %43s (%s)", count, (i == g_iAnimationDetourIndex && g_aForceDetours.Get(g_iAnimationDetourIndex)) ? "FORCED ANIM" : "FORCED DETOUR", sForward, sName[6]); } } @@ -2981,7 +3008,7 @@ MRESReturn DTR_CTerrorWeapon_OnHit(int weapon, DHookReturn hReturn, DHookParam h // Thanks to "A1m`" for this solution to getting an entity index instead of looping clients/entities: int target = hParams.GetObjectVar(1, 76, ObjectValueType_CBaseEntityPtr); - if( target < 1 || target > MaxClients || !IsClientInGame(target) ) return MRES_Ignored; + if( !target || !IsValidEntity(target) ) return MRES_Ignored; // Verify client hitting int client = GetEntPropEnt(weapon, Prop_Send, "m_hOwnerEntity"); @@ -5128,7 +5155,7 @@ MRESReturn DTR_CTerrorPlayer_IsDominatedBySpecialInfected(int pThis, DHookReturn Call_StartForward(g_hFWD_CTerrorPlayer_OnDominatedBySpecialInfected); Call_PushCell(pThis); Call_PushCell(attacker); - Call_Finish(); + Call_Finish(); } return MRES_Ignored; @@ -5667,6 +5694,7 @@ MRESReturn DTR_CBasePlayer_WaterMove_Post(int pThis, DHookReturn hReturn, DHookP + // ==================================================================================================== // VSCRIPT DIRECTOR - GetScriptValue* // ==================================================================================================== @@ -5796,6 +5824,8 @@ MRESReturn DTR_CDirector_GetScriptValueString(DHookReturn hReturn, DHookParam hP + + // ==================================================================================================== // VSCRIPT DIRECTOR - CSquirrelVM_GetValue - Thanks to "Forgetest" for writing: // ==================================================================================================== diff --git a/addons/sourcemod/scripting/l4dd/l4dd_gamedata.sp b/addons/sourcemod/scripting/l4dd/l4dd_gamedata.sp index 79dc1b418..206ff43b0 100644 --- a/addons/sourcemod/scripting/l4dd/l4dd_gamedata.sp +++ b/addons/sourcemod/scripting/l4dd/l4dd_gamedata.sp @@ -364,6 +364,35 @@ void LoadGameData() LogError("Failed to create SDKCall: \"CBaseTrigger::IsTouching\" (%s)", g_sSystem); } + StartPrepSDKCall(SDKCall_Raw); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CGlobalEntityList::FindEntityByClassnameNearest") == false ) + { + LogError("Failed to find signature: \"CGlobalEntityList::FindEntityByClassnameNearest\" (%s)", g_sSystem); + } else { + PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer); + PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef); + PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain); + PrepSDKCall_SetReturnInfo(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest = EndPrepSDKCall(); + if( g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest == null ) + LogError("Failed to create SDKCall: \"CBaseTrigger::IsTouching\" (%s)", g_sSystem); + } + + StartPrepSDKCall(SDKCall_Raw); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CGlobalEntityList::FindEntityByClassnameWithin") == false ) + { + LogError("Failed to find signature: \"CGlobalEntityList::FindEntityByClassnameWithin\" (%s)", g_sSystem); + } else { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer, VDECODE_FLAG_ALLOWWORLD|VDECODE_FLAG_ALLOWNULL); + PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer); + PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef); + PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain); + PrepSDKCall_SetReturnInfo(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin = EndPrepSDKCall(); + if( g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin == null ) + LogError("Failed to create SDKCall: \"CBaseTrigger::IsTouching\" (%s)", g_sSystem); + } + /* StartPrepSDKCall(SDKCall_Raw); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CDirector::IsAnySurvivorInStartArea") == false ) @@ -1010,12 +1039,15 @@ void LoadGameData() StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnRevivedByDefibrillator") == false ) { - SetFailState("Failed to find signature: \"CTerrorPlayer::OnRevivedByDefibrillator\" (%s)", g_sSystem); + LogError("Failed to find signature: \"CTerrorPlayer::OnRevivedByDefibrillator\" (%s)", g_sSystem); } - PrepSDKCall_AddParameter(SDKType_CBasePlayer, SDKPass_Pointer); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTDefibPlayer = EndPrepSDKCall(); - + else + { + PrepSDKCall_AddParameter(SDKType_CBasePlayer, SDKPass_Pointer); + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTDefibPlayer = EndPrepSDKCall(); + } + if( g_hSDK_CTDefibPlayer == null ) { LogError("Failed to create SDKCall: \"CTerrorPlayer::OnRevivedByDefibrillator\" (%s)", g_sSystem); @@ -1399,6 +1431,21 @@ void LoadGameData() LogError("Failed to create SDKCall: \"CDirector::TryOfferingTankBot\" (%s)", g_sSystem); } + if( g_bLeft4Dead2 ) + { + StartPrepSDKCall(SDKCall_Raw); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CDirector::AddSurvivorBot") == false ) + { + LogError("Failed to find signature: \"CDirector::AddSurvivorBot\" (%s)", g_sSystem); + } else { + PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain); + PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); + g_hSDK_CDirector_AddSurvivorBot = EndPrepSDKCall(); + if( g_hSDK_CDirector_AddSurvivorBot == null ) + LogError("Failed to create SDKCall: \"CDirector::AddSurvivorBot\" (%s)", g_sSystem); + } + } + StartPrepSDKCall(SDKCall_Raw); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CNavMesh::GetNavArea") == false ) { @@ -1425,6 +1472,19 @@ void LoadGameData() LogError("Failed to create SDKCall: \"CNavArea::IsConnected\" (%s)", g_sSystem); } + StartPrepSDKCall(SDKCall_Raw); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CNavArea::IsBlocked") == false ) + { + LogError("Failed to find signature: \"CNavArea::IsBlocked\" (%s)", g_sSystem); + } else { + PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain); + PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain); + PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain); + g_hSDK_CNavArea_IsBlocked = EndPrepSDKCall(); + if( g_hSDK_CNavArea_IsBlocked == null ) + LogError("Failed to create SDKCall: \"CNavArea::IsBlocked\" (%s)", g_sSystem); + } + StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::GetFlowDistance") == false ) { @@ -1505,6 +1565,40 @@ void LoadGameData() if( g_bLeft4Dead2 ) { + StartPrepSDKCall(SDKCall_Static); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "TheNextBots") == false ) + { + LogError("Failed to find signature: \"TheNextBots\" (%s)", g_sSystem); + } else { + PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); + g_hSDK_TheNextBots = EndPrepSDKCall(); + if( g_hSDK_TheNextBots == null ) + LogError("Failed to create SDKCall: \"TheNextBots\" (%s)", g_sSystem); + } + + StartPrepSDKCall(SDKCall_Raw); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "NextBotManager::RushVictim") == false ) + { + LogError("Failed to find signature: \"NextBotManager::RushVictim\" (%s)", g_sSystem); + } else { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer, VDECODE_FLAG_ALLOWNULL); + PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain); + g_hSDK_RushVictim = EndPrepSDKCall(); + if( g_hSDK_RushVictim == null ) + LogError("Failed to create SDKCall: \"NextBotManager::RushVictim\" (%s)", g_sSystem); + } + + StartPrepSDKCall(SDKCall_Raw); + if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "NextBotManager::StartAssault") == false ) + { + LogError("Failed to find signature: \"NextBotManager::StartAssault\" (%s)", g_sSystem); + } else { + PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); + g_hSDK_StartAssault = EndPrepSDKCall(); + if( g_hSDK_StartAssault == null ) + LogError("Failed to create SDKCall: \"NextBotManager::StartAssault\" (%s)", g_sSystem); + } + StartPrepSDKCall(SDKCall_Raw); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CMeleeWeaponInfoStore::GetMeleeWeaponInfo") == false ) { @@ -1674,98 +1768,153 @@ void LoadGameData() StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnPouncedOnSurvivor") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnPouncedOnSurvivor"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnPouncedOnSurvivor = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnPouncedOnSurvivor == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnPouncedOnSurvivor"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnPouncedOnSurvivor\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnPouncedOnSurvivor = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnPouncedOnSurvivor == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnPouncedOnSurvivor"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::GrabVictimWithTongue") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::GrabVictimWithTongue"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_GrabVictimWithTongue = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_GrabVictimWithTongue == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::GrabVictimWithTongue"); + { + LogError("Failed to find signature: \"CTerrorPlayer::GrabVictimWithTongue\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_GrabVictimWithTongue = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_GrabVictimWithTongue == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::GrabVictimWithTongue"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::ReleaseTongueVictim") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::ReleaseTongueVictim"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_ReleaseTongueVictim = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_ReleaseTongueVictim == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::ReleaseTongueVictim"); + { + LogError("Failed to find signature: \"CTerrorPlayer::ReleaseTongueVictim\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_ReleaseTongueVictim = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_ReleaseTongueVictim == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::ReleaseTongueVictim"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnPounceEnded") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnPounceEnded"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnPounceEnded = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnPounceEnded == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnPounceEnded"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnPounceEnded\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnPounceEnded = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnPounceEnded == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnPounceEnded"); + } if( g_bLeft4Dead2 ) { StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnLeptOnSurvivor") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnLeptOnSurvivor"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnLeptOnSurvivor = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnLeptOnSurvivor == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnLeptOnSurvivor"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnLeptOnSurvivor\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnLeptOnSurvivor = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnLeptOnSurvivor == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnLeptOnSurvivor"); + } StartPrepSDKCall(SDKCall_Static); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "ThrowImpactedSurvivor") == false ) - SetFailState("Failed to find signature: ThrowImpactedSurvivor"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain); - PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain); - g_hSDK_ThrowImpactedSurvivor = EndPrepSDKCall(); - if( g_hSDK_ThrowImpactedSurvivor == null ) - SetFailState("Failed to create SDKCall: ThrowImpactedSurvivor"); + { + LogError("Failed to find signature: \"ThrowImpactedSurvivor\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain); + PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain); + g_hSDK_ThrowImpactedSurvivor = EndPrepSDKCall(); + if( g_hSDK_ThrowImpactedSurvivor == null ) + LogError("Failed to create SDKCall: ThrowImpactedSurvivor"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnStartCarryingVictim") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnStartCarryingVictim"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnStartCarryingVictim = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnStartCarryingVictim == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnStartCarryingVictim"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnStartCarryingVictim\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnStartCarryingVictim = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnStartCarryingVictim == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnStartCarryingVictim"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::QueuePummelVictim") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::QueuePummelVictim"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - PrepSDKCall_AddParameter(SDKType_Float, SDKPass_ByValue); - g_hSDK_CTerrorPlayer_QueuePummelVictim = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_QueuePummelVictim == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::QueuePummelVictim"); + { + LogError("Failed to find signature: \"CTerrorPlayer::QueuePummelVictim\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + PrepSDKCall_AddParameter(SDKType_Float, SDKPass_ByValue); + g_hSDK_CTerrorPlayer_QueuePummelVictim = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_QueuePummelVictim == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::QueuePummelVictim"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnPummelEnded") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnPummelEnded"); - PrepSDKCall_AddParameter(SDKType_String, SDKPass_ByRef); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnPummelEnded = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnPummelEnded == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnPummelEnded"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnPummelEnded\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_String, SDKPass_ByRef); + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnPummelEnded = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnPummelEnded == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnPummelEnded"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnCarryEnded") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnCarryEnded"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnCarryEnded = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnCarryEnded == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnCarryEnded"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnCarryEnded\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnCarryEnded = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnCarryEnded == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnCarryEnded"); + } StartPrepSDKCall(SDKCall_Player); if( PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CTerrorPlayer::OnRideEnded") == false ) - SetFailState("Failed to find signature: CTerrorPlayer::OnRideEnded"); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hSDK_CTerrorPlayer_OnRideEnded = EndPrepSDKCall(); - if( g_hSDK_CTerrorPlayer_OnRideEnded == null ) - SetFailState("Failed to create SDKCall: CTerrorPlayer::OnRideEnded"); + { + LogError("Failed to find signature: \"CTerrorPlayer::OnRideEnded\" (%s)", g_sSystem); + } + else + { + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDK_CTerrorPlayer_OnRideEnded = EndPrepSDKCall(); + if( g_hSDK_CTerrorPlayer_OnRideEnded == null ) + LogError("Failed to create SDKCall: CTerrorPlayer::OnRideEnded"); + } } StartPrepSDKCall(SDKCall_Player); @@ -2170,6 +2319,161 @@ void LoadGameData() + // ==================================================================================================== + // VALIDATE SDKCALLS + // ==================================================================================================== + #if VERIFY_SDKCALL + ValidateSDKCall(g_hSDK_GetWeaponInfo, "g_hSDK_GetWeaponInfo"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_GetMissionInfo, "g_hSDK_CTerrorGameRules_GetMissionInfo"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_GetLastKnownArea, "g_hSDK_CTerrorPlayer_GetLastKnownArea"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_Deafen, "g_hSDK_CTerrorPlayer_Deafen"); + ValidateSDKCall(g_hSDK_Music_Play, "g_hSDK_Music_Play"); + ValidateSDKCall(g_hSDK_Music_StopPlaying, "g_hSDK_Music_StopPlaying"); + ValidateSDKCall(g_hSDK_CEntityDissolve_Create, "g_hSDK_CEntityDissolve_Create"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnITExpired, "g_hSDK_CTerrorPlayer_OnITExpired"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_EstimateFallingDamage, "g_hSDK_CTerrorPlayer_EstimateFallingDamage"); + ValidateSDKCall(g_hSDK_CBaseEntity_WorldSpaceCenter, "g_hSDK_CBaseEntity_WorldSpaceCenter"); + ValidateSDKCall(g_hSDK_CBaseEntity_ApplyLocalAngularVelocityImpulse, "g_hSDK_CBaseEntity_ApplyLocalAngularVelocityImpulse"); + ValidateSDKCall(g_hSDK_ZombieManager_GetRandomPZSpawnPosition, "g_hSDK_ZombieManager_GetRandomPZSpawnPosition"); + ValidateSDKCall(g_hSDK_CNavMesh_GetNearestNavArea, "g_hSDK_CNavMesh_GetNearestNavArea"); + ValidateSDKCall(g_hSDK_TerrorNavArea_FindRandomSpot, "g_hSDK_TerrorNavArea_FindRandomSpot"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_WarpToValidPositionIfStuck, "g_hSDK_CTerrorPlayer_WarpToValidPositionIfStuck"); + ValidateSDKCall(g_hSDK_CDirector_HasAnySurvivorLeftSafeArea, "g_hSDK_CDirector_HasAnySurvivorLeftSafeArea"); + ValidateSDKCall(g_hSDK_CBaseTrigger_IsTouching, "g_hSDK_CBaseTrigger_IsTouching"); + ValidateSDKCall(g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest, "g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest"); + ValidateSDKCall(g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin, "g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin"); + ValidateSDKCall(g_hSDK_CDirector_AreAllSurvivorsInFinaleArea, "g_hSDK_CDirector_AreAllSurvivorsInFinaleArea"); + ValidateSDKCall(g_hSDK_TerrorNavMesh_GetInitialCheckpoint, "g_hSDK_TerrorNavMesh_GetInitialCheckpoint"); + ValidateSDKCall(g_hSDK_Checkpoint_ContainsArea, "g_hSDK_Checkpoint_ContainsArea"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_HasPlayerControlledZombies, "g_hSDK_CTerrorGameRules_HasPlayerControlledZombies"); + ValidateSDKCall(g_hSDK_ForceVersusStart, "g_hSDK_ForceVersusStart"); + ValidateSDKCall(g_hSDK_ForceSurvivalStart, "g_hSDK_ForceSurvivalStart"); + ValidateSDKCall(g_hSDK_CBaseGrenade_Detonate, "g_hSDK_CBaseGrenade_Detonate"); + ValidateSDKCall(g_hSDK_CPipeBombProjectile_Create, "g_hSDK_CPipeBombProjectile_Create"); + ValidateSDKCall(g_hSDK_CMolotovProjectile_Create, "g_hSDK_CMolotovProjectile_Create"); + ValidateSDKCall(g_hSDK_NavAreaTravelDistance, "g_hSDK_NavAreaTravelDistance"); + ValidateSDKCall(g_hSDK_CDirector_RestartScenarioFromVote, "g_hSDK_CDirector_RestartScenarioFromVote"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_SetCampaignScores, "g_hSDK_CTerrorGameRules_SetCampaignScores"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_GetTeamScore, "g_hSDK_CTerrorGameRules_GetTeamScore"); + ValidateSDKCall(g_hSDK_CDirector_IsFirstMapInScenario, "g_hSDK_CDirector_IsFirstMapInScenario"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_IsMissionFinalMap, "g_hSDK_CTerrorGameRules_IsMissionFinalMap"); + ValidateSDKCall(g_hSDK_KeyValues_GetString, "g_hSDK_KeyValues_GetString"); + ValidateSDKCall(g_hSDK_AmmoDef_MaxCarry, "g_hSDK_AmmoDef_MaxCarry"); + ValidateSDKCall(g_hSDK_CGameRulesProxy_NotifyNetworkStateChanged, "g_hSDK_CGameRulesProxy_NotifyNetworkStateChanged"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnStaggered, "g_hSDK_CTerrorPlayer_OnStaggered"); + ValidateSDKCall(g_hSDK_CDirectorScriptedEventManager_SendInRescueVehicle, "g_hSDK_CDirectorScriptedEventManager_SendInRescueVehicle"); + ValidateSDKCall(g_hSDK_ZombieManager_ReplaceTank, "g_hSDK_ZombieManager_ReplaceTank"); + ValidateSDKCall(g_hSDK_ZombieManager_SpawnTank, "g_hSDK_ZombieManager_SpawnTank"); + ValidateSDKCall(g_hSDK_ZombieManager_SpawnWitch, "g_hSDK_ZombieManager_SpawnWitch"); + ValidateSDKCall(g_hSDK_CDirector_IsFinaleEscapeInProgress, "g_hSDK_CDirector_IsFinaleEscapeInProgress"); + ValidateSDKCall(g_hSDK_SurvivorBot_SetHumanSpectator, "g_hSDK_SurvivorBot_SetHumanSpectator"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_TakeOverBot, "g_hSDK_CTerrorPlayer_TakeOverBot"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_CanBecomeGhost, "g_hSDK_CTerrorPlayer_CanBecomeGhost"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_SetBecomeGhostAt, "g_hSDK_CTerrorPlayer_SetBecomeGhostAt"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_GoAwayFromKeyboard, "g_hSDK_CTerrorPlayer_GoAwayFromKeyboard"); + ValidateSDKCall(g_hSDK_CDirector_TryOfferingTankBot, "g_hSDK_CDirector_TryOfferingTankBot"); + ValidateSDKCall(g_hSDK_CNavMesh_GetNavArea, "g_hSDK_CNavMesh_GetNavArea"); + ValidateSDKCall(g_hSDK_CNavArea_IsConnected, "g_hSDK_CNavArea_IsConnected"); + ValidateSDKCall(g_hSDK_CNavArea_IsBlocked, "g_hSDK_CNavArea_IsBlocked"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_GetFlowDistance, "g_hSDK_CTerrorPlayer_GetFlowDistance"); + ValidateSDKCall(g_hSDK_Intensity_Reset, "g_hSDK_Intensity_Reset"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_SetShovePenalty, "g_hSDK_CTerrorPlayer_SetShovePenalty"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_DoAnimationEvent, "g_hSDK_CTerrorPlayer_DoAnimationEvent"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_RecomputeTeamScores, "g_hSDK_CTerrorGameRules_RecomputeTeamScores"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnVomitedUpon, "g_hSDK_CTerrorPlayer_OnVomitedUpon"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_CancelStagger, "g_hSDK_CTerrorPlayer_CancelStagger"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_FindUseEntity, "g_hSDK_CTerrorPlayer_FindUseEntity"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnPouncedOnSurvivor, "g_hSDK_CTerrorPlayer_OnPouncedOnSurvivor"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_GrabVictimWithTongue, "g_hSDK_CTerrorPlayer_GrabVictimWithTongue"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_ReleaseTongueVictim, "g_hSDK_CTerrorPlayer_ReleaseTongueVictim"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnPounceEnded, "g_hSDK_CTerrorPlayer_OnPounceEnded"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_RoundRespawn, "g_hSDK_CTerrorPlayer_RoundRespawn"); + ValidateSDKCall(g_hSDK_CDirector_CreateRescuableSurvivors, "g_hSDK_CDirector_CreateRescuableSurvivors"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_StopBeingRevived, "g_hSDK_CTerrorPlayer_StopBeingRevived"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnRevived, "g_hSDK_CTerrorPlayer_OnRevived"); + ValidateSDKCall(g_hSDK_CDirectorTacticalServices_GetHighestFlowSurvivor, "g_hSDK_CDirectorTacticalServices_GetHighestFlowSurvivor"); + ValidateSDKCall(g_hSDK_Infected_GetFlowDistance, "g_hSDK_Infected_GetFlowDistance"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_TakeOverZombieBot, "g_hSDK_CTerrorPlayer_TakeOverZombieBot"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_ReplaceWithBot, "g_hSDK_CTerrorPlayer_ReplaceWithBot"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_CullZombie, "g_hSDK_CTerrorPlayer_CullZombie"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_CleanupPlayerState, "g_hSDK_CTerrorPlayer_CleanupPlayerState"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_SetClass, "g_hSDK_CTerrorPlayer_SetClass"); + ValidateSDKCall(g_hSDK_CBaseAbility_CreateForPlayer, "g_hSDK_CBaseAbility_CreateForPlayer"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_MaterializeFromGhost, "g_hSDK_CTerrorPlayer_MaterializeFromGhost"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_BecomeGhost, "g_hSDK_CTerrorPlayer_BecomeGhost"); + ValidateSDKCall(g_hSDK_CCSPlayer_State_Transition, "g_hSDK_CCSPlayer_State_Transition"); + ValidateSDKCall(g_hSDK_CDirector_RegisterForbiddenTarget, "g_hSDK_CDirector_RegisterForbiddenTarget"); + ValidateSDKCall(g_hSDK_CDirector_UnregisterForbiddenTarget, "g_hSDK_CDirector_UnregisterForbiddenTarget"); + ValidateSDKCall(g_hSDK_InfoChangeLevel_IsEntitySaveable, "g_hSDK_InfoChangeLevel_IsEntitySaveable"); + ValidateSDKCall(g_hSDK_CDirectorVersusMode_EndVersusModeRound, "g_hSDK_CDirectorVersusMode_EndVersusModeRound"); + ValidateSDKCall(g_hSDK_CBaseServer_SetReservationCookie, "g_hSDK_CBaseServer_SetReservationCookie"); + + if( g_bLeft4Dead2 ) + { + ValidateSDKCall(g_hSDK_CMultiPlayerAnimState_ResetMainActivity, "g_hSDK_CMultiPlayerAnimState_ResetMainActivity"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_GetSpecialInfectedDominatingMe, "g_hSDK_CTerrorPlayer_GetSpecialInfectedDominatingMe"); + ValidateSDKCall(g_hSDK_IsVisibleToPlayer, "g_hSDK_IsVisibleToPlayer"); + ValidateSDKCall(g_hSDK_TerrorNavMesh_IsInInitialCheckpoint_NoLandmark, "g_hSDK_TerrorNavMesh_IsInInitialCheckpoint_NoLandmark"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_GetSurvivorSet, "g_hSDK_CTerrorGameRules_GetSurvivorSet"); + ValidateSDKCall(g_hSDK_CVomitJarProjectile_Create, "g_hSDK_CVomitJarProjectile_Create"); + ValidateSDKCall(g_hSDK_CGrenadeLauncher_Projectile_Create, "g_hSDK_CGrenadeLauncher_Projectile_Create"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_IsRealismMode, "g_hSDK_CTerrorGameRules_IsRealismMode"); + ValidateSDKCall(g_hSDK_CSpitterProjectile_Create, "g_hSDK_CSpitterProjectile_Create"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_HasConfigurableDifficultySetting, "g_hSDK_CTerrorGameRules_HasConfigurableDifficultySetting"); + ValidateSDKCall(g_hSDK_NavAreaBuildPath_ShortestPathCost, "g_hSDK_NavAreaBuildPath_ShortestPathCost"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnAdrenalineUsed, "g_hSDK_CTerrorPlayer_OnAdrenalineUsed"); + ValidateSDKCall(g_hSDK_CDirector_ForceNextStage, "g_hSDK_CDirector_ForceNextStage"); + ValidateSDKCall(g_hSDK_ForceScavengeStart, "g_hSDK_ForceScavengeStart"); + ValidateSDKCall(g_hSDK_CDirector_IsTankInPlay, "g_hSDK_CDirector_IsTankInPlay"); + ValidateSDKCall(g_hSDK_CTDefibPlayer, "g_hSDK_CTDefibPlayer"); + ValidateSDKCall(g_hSDK_SurvivorBot_IsReachable, "g_hSDK_SurvivorBot_IsReachable"); + ValidateSDKCall(g_hSDK_CDirector_GetFurthestSurvivorFlow, "g_hSDK_CDirector_GetFurthestSurvivorFlow"); + ValidateSDKCall(g_hSDK_CDirector_GetScriptValueInt, "g_hSDK_CDirector_GetScriptValueInt"); + ValidateSDKCall(g_hSDK_CDirector_GetScriptValueFloat, "g_hSDK_CDirector_GetScriptValueFloat"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_GetNumChaptersForMissionAndMode, "g_hSDK_CTerrorGameRules_GetNumChaptersForMissionAndMode"); + ValidateSDKCall(g_hSDK_CDirector_GetGameModeBase, "g_hSDK_CDirector_GetGameModeBase"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_IsGenericCooperativeMode, "g_hSDK_CTerrorGameRules_IsGenericCooperativeMode"); + ValidateSDKCall(g_hSDK_CDirector_AddSurvivorBot, "g_hSDK_CDirector_AddSurvivorBot"); + ValidateSDKCall(g_hSDK_TheNextBots, "g_hSDK_TheNextBots"); + ValidateSDKCall(g_hSDK_RushVictim, "g_hSDK_RushVictim"); + ValidateSDKCall(g_hSDK_StartAssault, "g_hSDK_StartAssault"); + ValidateSDKCall(g_hSDK_CMeleeWeaponInfoStore_GetMeleeWeaponInfo, "g_hSDK_CMeleeWeaponInfoStore_GetMeleeWeaponInfo"); + ValidateSDKCall(g_hSDK_CDirector_ResetMobTimer, "g_hSDK_CDirector_ResetMobTimer"); + ValidateSDKCall(g_hSDK_CDirector_SpawnAllScavengeItems, "g_hSDK_CDirector_SpawnAllScavengeItems"); + ValidateSDKCall(g_hSDK_CDirectorScriptedEventManager_ChangeFinaleStage, "g_hSDK_CDirectorScriptedEventManager_ChangeFinaleStage"); + ValidateSDKCall(g_hSDK_ZombieManager_SpawnSpecial, "g_hSDK_ZombieManager_SpawnSpecial"); + ValidateSDKCall(g_hSDK_ZombieManager_SpawnWitchBride, "g_hSDK_ZombieManager_SpawnWitchBride"); + ValidateSDKCall(g_hSDK_CDirector_AreWanderersAllowed, "g_hSDK_CDirector_AreWanderersAllowed"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnLeptOnSurvivor, "g_hSDK_CTerrorPlayer_OnLeptOnSurvivor"); + ValidateSDKCall(g_hSDK_ThrowImpactedSurvivor, "g_hSDK_ThrowImpactedSurvivor"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnStartCarryingVictim, "g_hSDK_CTerrorPlayer_OnStartCarryingVictim"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_QueuePummelVictim, "g_hSDK_CTerrorPlayer_QueuePummelVictim"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnPummelEnded, "g_hSDK_CTerrorPlayer_OnPummelEnded"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnCarryEnded, "g_hSDK_CTerrorPlayer_OnCarryEnded"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnRideEnded, "g_hSDK_CTerrorPlayer_OnRideEnded"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_OnHitByVomitJar, "g_hSDK_CTerrorPlayer_OnHitByVomitJar"); + ValidateSDKCall(g_hSDK_Infected_OnHitByVomitJar, "g_hSDK_Infected_OnHitByVomitJar"); + ValidateSDKCall(g_hSDK_CTerrorPlayer_Fling, "g_hSDK_CTerrorPlayer_Fling"); + ValidateSDKCall(g_hSDK_CTerrorGameRules_GetVersusCompletion, "g_hSDK_CTerrorGameRules_GetVersusCompletion"); + ValidateSDKCall(g_hSDK_CDirector_SwapTeams, "g_hSDK_CDirector_SwapTeams"); + ValidateSDKCall(g_hSDK_CDirector_Rematch, "g_hSDK_CDirector_Rematch"); + ValidateSDKCall(g_hSDK_CDirector_StartRematchVote, "g_hSDK_CDirector_StartRematchVote"); + ValidateSDKCall(g_hSDK_CDirector_FullRestart, "g_hSDK_CDirector_FullRestart"); + ValidateSDKCall(g_hSDK_CDirectorVersusMode_HideScoreboardNonVirtual, "g_hSDK_CDirectorVersusMode_HideScoreboardNonVirtual"); + ValidateSDKCall(g_hSDK_CDirectorScavengeMode_HideScoreboardNonVirtual, "g_hSDK_CDirectorScavengeMode_HideScoreboardNonVirtual"); + ValidateSDKCall(g_hSDK_CDirector_HideScoreboard, "g_hSDK_CDirector_HideScoreboard"); + } + + if( !g_bLeft4Dead2 ) + { + ValidateSDKCall(g_hSDK_ZombieManager_SpawnHunter, "g_hSDK_ZombieManager_SpawnHunter"); + ValidateSDKCall(g_hSDK_ZombieManager_SpawnBoomer, "g_hSDK_ZombieManager_SpawnBoomer"); + ValidateSDKCall(g_hSDK_ZombieManager_SpawnSmoker, "g_hSDK_ZombieManager_SpawnSmoker"); + } + #endif + + + // ==================================================================================================== // POINTER OFFSETS // ==================================================================================================== @@ -2199,6 +2503,8 @@ void LoadGameData() g_pChallengeMode = hGameData.GetOffset("ChallengeModePtr"); ValidateOffset(g_pChallengeMode, "ChallengeModePtr"); + g_pTheNextBots = SDKCall(g_hSDK_TheNextBots); + // DisableAddons @@ -2261,6 +2567,9 @@ void LoadGameData() g_pNavMesh = hGameData.GetAddress("TerrorNavMesh"); ValidateAddress(g_pNavMesh, "TheNavMesh", true); + g_pEntList = hGameData.GetAddress("gEntList"); + ValidateAddress(g_pEntList, "gEntList", true); + g_pServer = hGameData.GetAddress("ServerAddr"); ValidateAddress(g_pServer, "g_pServer", true); @@ -2316,6 +2625,7 @@ void LoadGameData() PrintToServer("%12d == g_pZombieManager", g_pZombieManager); PrintToServer("%12d == g_pGameRules", g_pGameRules); PrintToServer("%12d == g_pNavMesh", g_pNavMesh); + PrintToServer("%12d == g_pEntList", g_pEntList); PrintToServer("%12d == g_pServer", g_pServer); PrintToServer("%12d == g_pWeaponInfoDatabase", g_pWeaponInfoDatabase); PrintToServer("%12d == g_pVersusModePtr", g_pVersusMode); @@ -2330,6 +2640,7 @@ void LoadGameData() PrintToServer("%12d == g_pMusicBanksPtr", g_pMusicBanks); PrintToServer("%12d == g_pSessionManagerPtr", g_pSessionManager); PrintToServer("%12d == g_pChallengeModePtr", g_pChallengeMode); + PrintToServer("%12d == g_pTheNextBots", g_pTheNextBots); } PrintToServer(""); #endif diff --git a/addons/sourcemod/scripting/l4dd/l4dd_natives.sp b/addons/sourcemod/scripting/l4dd/l4dd_natives.sp index 777ca6873..f515ba15d 100644 --- a/addons/sourcemod/scripting/l4dd/l4dd_natives.sp +++ b/addons/sourcemod/scripting/l4dd/l4dd_natives.sp @@ -83,6 +83,8 @@ Handle g_hSDK_IsVisibleToPlayer; Handle g_hSDK_CTerrorPlayer_GetSpecialInfectedDominatingMe; Handle g_hSDK_CDirector_HasAnySurvivorLeftSafeArea; Handle g_hSDK_CBaseTrigger_IsTouching; +Handle g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest; +Handle g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin; // Handle g_hSDK_CDirector_IsAnySurvivorInExitCheckpoint; Handle g_hSDK_CDirector_AreAllSurvivorsInFinaleArea; Handle g_hSDK_TerrorNavMesh_GetInitialCheckpoint; @@ -121,14 +123,19 @@ Handle g_hSDK_CMeleeWeaponInfoStore_GetMeleeWeaponInfo; Handle g_hSDK_CTerrorGameRules_GetMissionInfo; Handle g_hSDK_CMultiPlayerAnimState_ResetMainActivity; Handle g_hSDK_CDirector_TryOfferingTankBot; +Handle g_hSDK_CDirector_AddSurvivorBot; Handle g_hSDK_CNavMesh_GetNavArea; Handle g_hSDK_CNavArea_IsConnected; +Handle g_hSDK_CNavArea_IsBlocked; Handle g_hSDK_CTerrorPlayer_GetFlowDistance; Handle g_hSDK_Intensity_Reset; Handle g_hSDK_CTerrorPlayer_SetShovePenalty; // Handle g_hSDK_CTerrorPlayer_SetNextShoveTime; Handle g_hSDK_CTerrorPlayer_DoAnimationEvent; Handle g_hSDK_CTerrorGameRules_RecomputeTeamScores; +Handle g_hSDK_TheNextBots; +Handle g_hSDK_RushVictim; +Handle g_hSDK_StartAssault; Handle g_hSDK_CBaseServer_SetReservationCookie; // Handle g_hSDK_GetCampaignScores; // Handle g_hSDK_LobbyIsReserved; @@ -212,6 +219,16 @@ void ValidateOffset(int test, const char[] name, bool check = true) } } +#if VERIFY_SDKCALL +void ValidateSDKCall(Handle test, const char[] name) +{ + if( test == null ) + { + LogError("\n==========\nSDKCall \"%s\" is NULL\n==========\n", name); + } +} +#endif + // ==================================================================================================== @@ -294,6 +311,7 @@ any Native_GetPointer(Handle plugin, int numParams) // Native "L4D_GetPointer" case POINTER_MUSICBANKS: return g_pMusicBanks; case POINTER_SESSIONMANAGER: return g_pSessionManager; case POINTER_CHALLENGEMODE: return g_pChallengeMode; + case POINTER_THENEXTBOTS: return g_pTheNextBots; } return 0; @@ -384,7 +402,7 @@ stock int GetEntityFromHandle(any handle) stock any Deref(any addr, NumberType numt = NumberType_Int32) { return LoadFromAddress(view_as
(addr), numt); -} +} /* Old method int GetEntityFromAddress(int addr) @@ -615,7 +633,7 @@ int Native_DefibDeadBody(Handle plugin, int numParams) // Native "L4D2_DefibByDe if( nopenalty ) { GameRules_SetProp("m_iVersusDefibsUsed", quantity1, 4, 0); - GameRules_SetProp("m_iVersusDefibsUsed", quantity2, 4, 1); + GameRules_SetProp("m_iVersusDefibsUsed", quantity2, 4, 1); } } @@ -1242,6 +1260,76 @@ int Native_CBaseTrigger_IsTouching(Handle plugin, int numParams) // Native "L4D_ return SDKCall(g_hSDK_CBaseTrigger_IsTouching, trigger, entity); } +int Native_CGlobalEntityList_FindEntityByClassnameNearest(Handle plugin, int numParams) // Native "L4D_FindEntityByClassnameNearest" +{ + ValidateNatives(g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest, "CGlobalEntityList::FindEntityByClassnameNearest"); + + int maxlength; + GetNativeStringLength(1, maxlength); + maxlength += 1; + char[] classname = new char[maxlength]; + GetNativeString(1, classname, maxlength); + + float vPos[3]; + GetNativeArray(2, vPos, sizeof(vPos)); + + float radius = GetNativeCell(3); + + //PrintToServer("#### CALL g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest"); + return SDKCall(g_hSDK_CGlobalEntityList_FindEntityByClassnameNearest, g_pEntList, classname, vPos, radius); +} + +int Native_CGlobalEntityList_FindEntityByClassnameWithin(Handle plugin, int numParams) // Native "L4D_FindEntityByClassnameNearest" +{ + ValidateNatives(g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin, "CGlobalEntityList::FindEntityByClassnameWithin"); + + int entity = GetNativeCell(1); + + int maxlength; + GetNativeStringLength(2, maxlength); + maxlength += 1; + char[] classname = new char[maxlength]; + GetNativeString(2, classname, maxlength); + + float vPos[3]; + GetNativeArray(3, vPos, sizeof(vPos)); + + float radius = GetNativeCell(4); + + //PrintToServer("#### CALL g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin"); + return SDKCall(g_hSDK_CGlobalEntityList_FindEntityByClassnameWithin, g_pEntList, entity, classname, vPos, radius); +} + +int Native_FindByClassnameTargetname(Handle plugin, int numParams) // Native "L4D_FindByClassnameTargetname" +{ + int maxlength; + GetNativeStringLength(1, maxlength); + maxlength += 1; + char[] classname = new char[maxlength]; + GetNativeString(1, classname, maxlength); + + GetNativeStringLength(2, maxlength); + maxlength += 1; + char[] targetname = new char[maxlength]; + GetNativeString(2, targetname, maxlength); + + return FindByClassTargetName(classname, targetname); +} + +int FindByClassTargetName(const char[] sClass, const char[] sTarget) +{ + static char sName[64]; + int entity = -1; + + while( (entity = FindEntityByClassname(entity, sClass)) != INVALID_ENT_REFERENCE ) + { + GetEntPropString(entity, Prop_Data, "m_iName", sName, sizeof(sName)); + if( strcmp(sTarget, sName) == 0 ) return entity; + } + + return -1; +} + int Native_CDirector_IsAnySurvivorInStartArea(Handle plugin, int numParams) // Native "L4D_IsAnySurvivorInStartArea" { if( g_bLeft4Dead2 ) @@ -1790,31 +1878,6 @@ int Native_CTankRock_Create(Handle plugin, int numParams) // Native "L4D_TankRoc return entity; } -public void OnEntityCreated(int entity, const char[] classname) -{ - // Watch for this plugins native creating the "tank_rock" to return it's entity index and set owner if applicable - if( g_iTankRockOwner && strcmp(classname, "tank_rock") == 0 ) - { - g_iTankRockEntity = entity; - - // Must set owner on next frame after it's spawned - if( g_iTankRockOwner != -1 ) - { - DataPack dPack = new DataPack(); - dPack.WriteCell(EntIndexToEntRef(entity)); - dPack.WriteCell(GetClientUserId(g_iTankRockOwner)); - RequestFrame(OnFrameTankRock, dPack); - } - - // Make the tank rock fully visible, otherwise it's semi-transparent (during pickup animation of Tank Rock). - SetEntityRenderColor(entity, 255, 255, 255, 255); - } - else if( g_bLeft4Dead2 && strcmp(classname, "survivor_death_model") == 0 ) - { - g_iDeathModel = EntIndexToEntRef(entity); - } -} - void OnFrameTankRock(DataPack dPack) { dPack.Reset(); @@ -1991,7 +2054,7 @@ int Native_CGrenadeLauncher_Projectile_Create(Handle plugin, int numParams) // N // Spitter acid projectile damage // ==================================================================================================== bool g_bAcidWatch; -int g_iAcidEntity[2048]; +int g_iAcidEntity[2048 + 1]; // Sounds are based on "PlayerZombie.AttackHit" from "game_sounds_infected_special.txt" char g_sAcidSounds[6][] = @@ -2355,6 +2418,8 @@ int Native_NavAreaTravelDistance(Handle plugin, int numParams) // Native "L4D2_N int Native_NavAreaBuildPath(Handle plugin, int numParams) // Native "L4D2_NavAreaBuildPath" { if( !g_bLeft4Dead2 ) ThrowNativeError(SP_ERROR_NOT_RUNNABLE, NATIVE_UNSUPPORTED2); + + ValidateNatives(g_hSDK_NavAreaBuildPath_ShortestPathCost, "NavAreaBuildPath::ShortestPathCost"); if( !g_bMapStarted ) return false; // Params @@ -2414,6 +2479,31 @@ int Native_CommandABot(Handle plugin, int numParams) // Native "L4D2_CommandABot return 0; } +int Native_RushVictim(Handle plugin, int numParams) // Native "L4D2_RushVictim" +{ + if( !g_bLeft4Dead2 ) ThrowNativeError(SP_ERROR_NOT_RUNNABLE, NATIVE_UNSUPPORTED2); + + ValidateNatives(g_hSDK_RushVictim, "NextBotManager::RushVictim"); + + int victim = GetNativeCell(1); + float range = GetNativeCell(2); + + SDKCall(g_hSDK_RushVictim, g_pTheNextBots, victim, range); + + return 0; +} + +int Native_StartAssault(Handle plugin, int numParams) // Native "L4D2_StartAssault" +{ + if( !g_bLeft4Dead2 ) ThrowNativeError(SP_ERROR_NOT_RUNNABLE, NATIVE_UNSUPPORTED2); + + ValidateNatives(g_hSDK_StartAssault, "NextBotManager::StartAssault"); + + SDKCall(g_hSDK_StartAssault, g_pTheNextBots); + + return 0; +} + int Native_GetDirectorScriptScope(Handle plugin, int numParams) // Native "L4D2_GetDirectorScriptScope" { ValidateAddress(g_pDirector, "g_pDirector"); @@ -3208,11 +3298,21 @@ any Native_GetFloatWeaponAttribute(Handle plugin, int numParams) // Native "L4D2 int ptr = GetWeaponPointer(); if( ptr != -1 ) { - attr = L4D2FloatWeapon_Offsets[attr]; // Offset - ptr = LoadFromAddress(view_as
(ptr + attr), NumberType_Int32); + if( attr == view_as(L4D2FWA_PenetrationNumLayers) ) + { + attr = L4D2FloatWeapon_Offsets[attr]; // Offset + ptr = LoadFromAddress(view_as
(ptr + attr), NumberType_Int32); + return float(ptr); + } + else + { + attr = L4D2FloatWeapon_Offsets[attr]; // Offset + ptr = LoadFromAddress(view_as
(ptr + attr), NumberType_Int32); + return view_as(ptr); + } } - return view_as(ptr); + return -1.0; } int Native_SetIntWeaponAttribute(Handle plugin, int numParams) // Native "L4D2_SetIntWeaponAttribute" @@ -3227,16 +3327,8 @@ int Native_SetIntWeaponAttribute(Handle plugin, int numParams) // Native "L4D2_S int ptr = GetWeaponPointer(); if( ptr != -1 ) { - if( !g_bLeft4Dead2 && attr == view_as(L4D2FWA_PenetrationNumLayers) ) - { - attr = L4D2IntWeapon_Offsets[attr]; // Offset - StoreToAddress(view_as
(ptr + attr), RoundToCeil(GetNativeCell(3)), NumberType_Int32, false); - } - else - { - attr = L4D2IntWeapon_Offsets[attr]; // Offset - StoreToAddress(view_as
(ptr + attr), GetNativeCell(3), NumberType_Int32, false); - } + attr = L4D2IntWeapon_Offsets[attr]; // Offset + StoreToAddress(view_as
(ptr + attr), GetNativeCell(3), NumberType_Int32, false); } return ptr; @@ -3251,8 +3343,16 @@ int Native_SetFloatWeaponAttribute(Handle plugin, int numParams) // Native "L4D2 int ptr = GetWeaponPointer(); if( ptr != -1 ) { - attr = L4D2FloatWeapon_Offsets[attr]; // Offset - StoreToAddress(view_as
(ptr + attr), GetNativeCell(3), NumberType_Int32, false); + if( attr == view_as(L4D2FWA_PenetrationNumLayers) ) + { + attr = L4D2FloatWeapon_Offsets[attr]; // Offset + StoreToAddress(view_as
(ptr + attr), RoundToFloor(GetNativeCell(3)), NumberType_Int32, false); // "RoundToFloor", classic float to int conversion + } + else + { + attr = L4D2FloatWeapon_Offsets[attr]; // Offset + StoreToAddress(view_as
(ptr + attr), GetNativeCell(3), NumberType_Int32, false); + } } return ptr; @@ -3719,17 +3819,62 @@ int Native_GetNavAreaSize(Handle plugin, int numParams) // Native "L4D_GetNavAre return 0; } +int Native_CNavArea_GetAdjacentCount(Handle plugin, int numParams) // Native "L4D_NavArea_GetAdjacentCount" +{ + Address area = GetNativeCell(1); + int dir = GetNativeCell(2); + + // Hard-coding offset, unlikely to change. Found in "TerrorNavArea::ScriptGetAdjacentAreas" + Address ptr = view_as
(LoadFromAddress(area + view_as
(88) + view_as
(4 * dir), NumberType_Int32)); + int count = LoadFromAddress(ptr, NumberType_Int32); + + return count; +} + +int Native_CNavArea_GetAdjacentAreas(Handle plugin, int numParams) // Native "L4D_NavArea_GetAdjacentAreas" +{ + Address area = GetNativeCell(1); + int dir = GetNativeCell(2); + ArrayList list = GetNativeCell(3); + + // Hard-coding offset, unlikely to change. Found in "TerrorNavArea::ScriptGetAdjacentAreas" + Address ptr = view_as
(LoadFromAddress(area + view_as
(88) + view_as
(4 * dir), NumberType_Int32)); + int count = LoadFromAddress(ptr, NumberType_Int32); + int adjacent; + + for( int i = 0; i < count; i++ ) + { + adjacent = LoadFromAddress(ptr + view_as
(4 * (2 * i + 1)), NumberType_Int32); + list.Push(adjacent); + } + + return count; +} + int Native_CNavArea_IsConnected(Handle plugin, int numParams) // Native "L4D_NavArea_IsConnected" { + ValidateNatives(g_hSDK_CNavArea_IsConnected, "CNavArea::IsConnected"); + Address area1 = GetNativeCell(1); Address area2 = GetNativeCell(2); int dir = GetNativeCell(3); - if( dir < 1 || dir > 4 ) ThrowError("Invalid direction specified: %d should be 1-4", dir); + if( dir < 0 || dir > 4 ) ThrowError("Invalid direction specified: %d should be 0-4", dir); return SDKCall(g_hSDK_CNavArea_IsConnected, area1, area2, dir); } +int Native_CNavArea_IsBlocked(Handle plugin, int numParams) // Native "L4D_NavArea_IsBlocked" +{ + ValidateNatives(g_hSDK_CNavArea_IsBlocked, "CNavArea::IsBlocked"); + + Address area = GetNativeCell(1); + int team = GetNativeCell(2); + bool flow = GetNativeCell(3); + + return SDKCall(g_hSDK_CNavArea_IsBlocked, area, team, flow); +} + int Native_GetTerrorNavArea_Attributes(Handle plugin, int numParams) // Native "L4D_GetNavArea_SpawnAttributes" { int area = GetNativeCell(1); @@ -4633,6 +4778,25 @@ int Direct_TryOfferingTankBot(Handle plugin, int numParams) // Native "L4D2Direc return 0; } +int Direct_AddSurvivorBot(Handle plugin, int numParams) // Native "L4D2Direct_AddSurvivorBot" +{ + if( !g_bLeft4Dead2 ) ThrowNativeError(SP_ERROR_NOT_RUNNABLE, NATIVE_UNSUPPORTED2); + + ValidateAddress(g_pDirector, "g_pDirector"); + ValidateNatives(g_hSDK_CDirector_AddSurvivorBot, "CDirector::AddSurvivorBot"); + + int characterType = GetNativeCell(1); + + // Don't pass 8 to the engine — its random only checks 0-3 and silently fails if all taken + // Characters 0-3 always create a bot (no duplicate check), so randomize within that range + if( characterType == 8 ) + characterType = GetRandomInt(0, 3); + + SDKCall(g_hSDK_CDirector_AddSurvivorBot, g_pDirector, characterType); + + return 0; +} + any Direct_GetFlowDistance(Handle plugin, int numParams) // Native "L4D2Direct_GetFlowDistance" { ValidateAddress(g_iOff_m_flow, "m_flow"); @@ -5317,7 +5481,7 @@ int Native_CTerrorPlayer_RespawnPlayer(Handle plugin, int numParams) // Native " int client = GetNativeCell(1); bool reset = true; - if( numParams == 2 ) + if( numParams == 2 ) reset = GetNativeCell(2); ArrayList aList = new ArrayList(); @@ -6382,7 +6546,7 @@ any Native_AmmoDef_Index(Handle plugin, int numParams) GetNativeString(1, psz, sizeof(psz)); char name[64]; - for (int i = 1; i < AmmoDef_m_nAmmoIndex(); ++i) + for( int i = 1; i < AmmoDef_m_nAmmoIndex(); ++i ) { AmmoDef_m_AmmoType(i).GetName(name, sizeof(name)); diff --git a/addons/sourcemod/scripting/l4dd/l4dd_setup.sp b/addons/sourcemod/scripting/l4dd/l4dd_setup.sp index 245417710..cb021f5dd 100644 --- a/addons/sourcemod/scripting/l4dd/l4dd_setup.sp +++ b/addons/sourcemod/scripting/l4dd/l4dd_setup.sp @@ -375,6 +375,9 @@ void SetupForwardsNatives() CreateNative("L4D_GetNearestNavArea", Native_CNavMesh_GetNearestNavArea); CreateNative("L4D_GetLastKnownArea", Native_CTerrorPlayer_GetLastKnownArea); CreateNative("L4D_IsTouchingTrigger", Native_CBaseTrigger_IsTouching); + CreateNative("L4D_FindEntityByClassnameNearest", Native_CGlobalEntityList_FindEntityByClassnameNearest); + CreateNative("L4D_FindEntityByClassnameWithin", Native_CGlobalEntityList_FindEntityByClassnameWithin); + CreateNative("L4D_FindByClassnameTargetname", Native_FindByClassnameTargetname); CreateNative("L4D_HasAnySurvivorLeftSafeArea", Native_CDirector_HasAnySurvivorLeftSafeArea); CreateNative("L4D_IsAnySurvivorInStartArea", Native_CDirector_IsAnySurvivorInStartArea); CreateNative("L4D_IsAnySurvivorInCheckpoint", Native_CDirector_IsAnySurvivorInCheckpoint); @@ -429,6 +432,8 @@ void SetupForwardsNatives() CreateNative("L4D2_NavAreaTravelDistance", Native_NavAreaTravelDistance); CreateNative("L4D2_NavAreaBuildPath", Native_NavAreaBuildPath); CreateNative("L4D2_CommandABot", Native_CommandABot); + CreateNative("L4D2_RushVictim", Native_RushVictim); + CreateNative("L4D2_StartAssault", Native_StartAssault); CreateNative("L4D2_VScriptWrapper_GetMapNumber", Native_VS_GetMapNumber); CreateNative("L4D2_VScriptWrapper_HasEverBeenInjured", Native_VS_HasEverBeenInjured); @@ -471,7 +476,10 @@ void SetupForwardsNatives() CreateNative("L4D_GetNavAreaPos", Native_GetNavAreaPos); CreateNative("L4D_GetNavAreaCenter", Native_GetNavAreaCenter); CreateNative("L4D_GetNavAreaSize", Native_GetNavAreaSize); + CreateNative("L4D_NavArea_GetAdjacentCount", Native_CNavArea_GetAdjacentCount); + CreateNative("L4D_NavArea_GetAdjacentAreas", Native_CNavArea_GetAdjacentAreas); CreateNative("L4D_NavArea_IsConnected", Native_CNavArea_IsConnected); + CreateNative("L4D_NavArea_IsBlocked", Native_CNavArea_IsBlocked); CreateNative("L4D_GetNavArea_SpawnAttributes", Native_GetTerrorNavArea_Attributes); CreateNative("L4D_SetNavArea_SpawnAttributes", Native_SetTerrorNavArea_Attributes); CreateNative("L4D_GetNavArea_AttributeFlags", Native_GetCNavArea_AttributeFlags); @@ -557,6 +565,7 @@ void SetupForwardsNatives() CreateNative("L4D2Direct_GetTerrorNavArea", Direct_GetTerrorNavArea); CreateNative("L4D2Direct_GetTerrorNavAreaFlow", Direct_GetTerrorNavAreaFlow); CreateNative("L4D2Direct_TryOfferingTankBot", Direct_TryOfferingTankBot); + CreateNative("L4D2Direct_AddSurvivorBot", Direct_AddSurvivorBot); CreateNative("L4D2Direct_GetFlowDistance", Direct_GetFlowDistance); CreateNative("L4D2Direct_DoAnimationEvent", Direct_DoAnimationEvent); CreateNative("L4DDirect_GetSurvivorHealthBonus", Direct_GetSurvivorHealthBonus); diff --git a/addons/sourcemod/scripting/l4dd/left4dhooks_changelog.txt b/addons/sourcemod/scripting/l4dd/left4dhooks_changelog.txt index 0cf2c8b8e..f02eb04d3 100644 --- a/addons/sourcemod/scripting/l4dd/left4dhooks_changelog.txt +++ b/addons/sourcemod/scripting/l4dd/left4dhooks_changelog.txt @@ -1,3 +1,39 @@ +1.166 (15-Mar-2026) + - Added native "L4D_FindByClassnameTargetname" to search for an entity by classname and targetname. + - Added native "L4D_NavArea_IsBlocked" to check if a NavArea is blocked. Requested by "gvazdas". + - Added natives "L4D_FindEntityByClassnameNearest" and "L4D_FindEntityByClassnameWithin" to find nearest entities. Requested by "gvazdas". + - These two natives are over 3x and 2x faster respectively than looping entities and working out distance in SourceMod. + + - Fixed native "L4D_IsInIntro" not working on "c3m1_plankcountry" and "c7m1_docks". If other maps are broken please report. Thanks to "gvazdas" for reporting. + - Fixed forward "L4D2_OnEntityShoved" not working on Common Infected in recent updates. Thanks to "HwanGyul" for reporting. + + - Updated: Plugin and test plugin. + - Updated: "/gamedata/left4dhooks.l4d1.txt" GameData file. + - Updated: "/gamedata/left4dhooks.l4d2.txt" GameData file. + - Updated: "/scripting/include/left4dhooks.inc" Include file. + - Updated: "/scripting/l4dd/l4dd_forwards.sp" project file. + - Updated: "/scripting/l4dd/l4dd_natives.sp" project file. + - Updated: "/scripting/l4dd/l4dd_gamedata.sp" project file. + - Updated: "/scripting/l4dd/l4dd_setup.sp" project file. + +1.165 (14-Mar-2026) + - Fixed the "GetMeleePointer" SDKCall being accidentality removed. Thanks to "zuaLdakid05" for reporting. + +1.164 (14-Mar-2026) + - Fixed native "L4D2_IsVisibleToPlayer" crashing. Thanks to "morzlee" for reporting. + +1.163 (14-Mar-2026) + - Added native "L4D2_StartAssault" to trigger Special Infected to attack. Requested by "gvazdas". + - Added native "L4D2_RushVictim" to trigger Common to attack a specific player. Requested by "gvazdas". + - Added native "L4D2Direct_AddSurvivorBot" to spawn Survivor bots. Thanks to "spumer" for adding. + - Added natives "L4D_NavArea_GetAdjacentCount" and "L4D_NavArea_GetAdjacentAreas" to check for adjacent nav areas. Requested by "Slaven555". + - Added "POINTER_THENEXTBOTS" enum for the "L4D_GetPointer" native to return the TheNextBots pointer. + + - Fixed storing float to int variable when setting float attribute "L4D2FWA_PenetrationNumLayers". Thanks to "jensewe" for fixing. + - Fixed default return value of Native "L4D2_GetFloatWeaponAttribute". Thanks to "jensewe" for fixing. + - Fixed "Invalid private forward handle" errors. Thanks to "gvazdas" for testing and various others for reporting. + - Fixed forwards "L4D_PipeBombProjectile*" and "L4D_PipeBomb_Detonate*" from firing due to breakable props when the "L4D_CBreakableProp_Break" forward wasn't being used. Thanks to "blueblur07302 for reporting. + 1.162 (25-Jan-2026) - Added new target filters. Requested by Tonblader: "@sa" - Alive Survivors. @@ -10,17 +46,12 @@ - Changes to fix script execution timeout due to loading the gamedata twice on plugin start. Thanks to "kayletid201" for reporting. - Various small changes to capture and prevent bugs or errors. - - Updated: Plugin. - - Updated: "/scripting/l4dd/l4dd_forwards.sp" project file. - - Updated: "/scripting/l4dd/l4dd_gamedata.sp" project file. - - Updated: "/scripting/l4dd/l4dd_targetfilters.sp" project file. - 1.161 (04-Jan-2026) - Fixed copy paste error breaking server OS detection. Thanks to "Hawkins" for reporting. 1.160 (04-Jan-2026) - Fixed native "L4D_SetLobbyReservation" from throwing errors. Thanks to "mr.raptor" for reporting. - - Changed native "L4D_GetEntityFromAddress" to work for all entities. Thanks to "Neburai", "blueblur" and "nosoop" for code. + - Changed native "L4D_GetEntityFromAddress" to work for all entities. Thanks to "Neburai", "blueblur0730" and "nosoop" for code. - Changed native "L4D2Direct_GetSpawnTimer" inconsistency, requires code changes if used. Thanks to "A1m`" for fixing. - Changed native "L4D_RespawnPlayer" to specify resetting player stats or not. Requested by "ball2hi". @@ -92,10 +123,6 @@ 1.150 (06-May-2024) - L4D1 Linux: Removed some unused clone functions that were removed from the game update. Thanks to "Ja-Forces" and "Forgetest" for reporting. - - Updated: Plugin. - - Updated: "/gamedata/left4dhooks.l4d1.txt" GameData file. - - Updated: "/scripting/l4dd/l4dd_forwards.sp" project file. - 1.149 (06-May-2024) - Repackage of the last update to include the GameData changes, which it did not. @@ -621,8 +648,6 @@ - Wildcarded the "Music::Play" signatures to be compatible with plugins detouring. Thanks to "user2000", "Edison1318" and "Shadowysn" for reporting. - Wildcarded the "ZombieManager::SpawnTank" signatures to be compatible with plugins detouring. Thanks to "Tank Rush" for reporting. - - L4D1 and L4D2 GameData files updated. - 1.75 (18-Nov-2021) - Fixed forward "L4D2_OnHitByVomitJar" throwing errors about null pointer. - Forwards "L4D_OnVomitedUpon" and "L4D2_OnHitByVomitJar" attacker can now be reported as 0. diff --git a/addons/sourcemod/scripting/left4dhooks.sp b/addons/sourcemod/scripting/left4dhooks.sp index b6f5ebd53..248a4d0af 100644 --- a/addons/sourcemod/scripting/left4dhooks.sp +++ b/addons/sourcemod/scripting/left4dhooks.sp @@ -18,8 +18,8 @@ -#define PLUGIN_VERSION "1.162" -#define PLUGIN_VERLONG 1162 +#define PLUGIN_VERSION "1.166" +#define PLUGIN_VERLONG 1166 #define DEBUG 0 // #define DEBUG 1 // Prints addresses + detour info (only use for debugging, slows server down). @@ -27,6 +27,9 @@ #define DETOUR_ALL 0 // Only enable required detours, for public release. // #define DETOUR_ALL 1 // Enable all detours, for testing. +#define VERIFY_SDKCALL 0 +// #define VERIFY_SDKCALL 1 // 1=Double check SDKCalls in case of accidental deletion (happened several times already -_-) + #define KILL_VSCRIPT 0 // 0=Keep VScript entity after using for "GetVScriptOutput". 1=Kill the entity after use (more resourceful to keep recreating, use if you're maxing out entities and reaching the limit regularly). #define ALLOW_UPDATER 0 // 0=Off. 1=Allow the plugin to auto-update using the "Updater" plugin by "GoD-Tony". 2=Allow updating and reloading after update. @@ -337,6 +340,7 @@ int g_pItemManager; int g_pMusicBanks; int g_pSessionManager; int g_pChallengeMode; +int g_pTheNextBots; Address g_pServer; Address g_pAmmoDef; Address g_pDirector; @@ -345,6 +349,7 @@ Address g_pTheNavAreas; Address g_pTheNavAreas_List; Address g_pTheNavAreas_Size; Address g_pNavMesh; +Address g_pEntList; Address g_pZombieManager; Address g_pMeleeWeaponInfoStore; Address g_pWeaponInfoDatabase; @@ -451,9 +456,9 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max - // ================= + // ========================= // UPDATER - // ================= + // ========================= MarkNativeAsOptional("Updater_AddPlugin"); @@ -469,9 +474,9 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max - // ================= + // ========================= // EXTENSION BLOCK - // ================= + // ========================= if( GetFeatureStatus(FeatureType_Native, "L4D_RestartScenarioFromVote") != FeatureStatus_Unknown ) { strcopy(error, err_max, "\n====================\nThis plugin replaces Left4Downtown. Delete the extension to run.\n===================="); @@ -480,16 +485,16 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max - // ================= + // ========================= // SETUP FORWARDS AND NATIVES - // ================= + // ========================= SetupForwardsNatives(); // From: "l4dd/l4dd_setup.sp" - // ================= + // ========================= // END SETUP - // ================= + // ========================= RegPluginLibrary("left4dhooks"); @@ -741,7 +746,7 @@ public void OnPluginStart() // ==================================================================================================== // EVENTS // ==================================================================================================== - HookEvent("round_start", Event_RoundStart); + HookEvent("round_start", Event_RoundStart); if( !g_bLeft4Dead2 ) { @@ -760,6 +765,23 @@ public void OnPluginStart() void Event_RoundStart(Event event, const char[] name, bool dontBroadcast) { g_bRoundEnded = false; + + // Modify broken maps to fix "L4D_IsInIntro" not reporting as true, and probably other bugs: + if( g_bLeft4Dead2 ) + { + static char sMap[20]; + GetCurrentMap(sMap, sizeof(sMap)); + + if( strcmp(sMap, "c3m1_plankcountry") == 0 || strcmp(sMap, "c7m1_docks") == 0 ) + { + int entity = FindByClassTargetName("logic_relay", "relay_intro_start"); + if( entity != -1 ) + { + SetVariantString("OnTrigger director:StartIntro::0:-1"); + AcceptEntityInput(entity, "AddOutput"); + } + } + } } void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) @@ -821,6 +843,34 @@ void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) g_iClientDeathModel[GetClientOfUserId(client)] = g_iDeathModel; } +public void OnEntityCreated(int entity, const char[] classname) +{ + // Used by "L4D_TankRockPrj" native + // Watch for this plugins native creating the "tank_rock" to return it's entity index and set owner if applicable + if( g_iTankRockOwner && strcmp(classname, "tank_rock") == 0 ) + { + g_iTankRockEntity = entity; + + // Must set owner on next frame after it's spawned + if( g_iTankRockOwner != -1 ) + { + DataPack dPack = new DataPack(); + dPack.WriteCell(EntIndexToEntRef(entity)); + dPack.WriteCell(GetClientUserId(g_iTankRockOwner)); + RequestFrame(OnFrameTankRock, dPack); + } + + // Make the tank rock fully visible, otherwise it's semi-transparent (during pickup animation of Tank Rock). + SetEntityRenderColor(entity, 255, 255, 255, 255); + } + + // Used by "L4D2_DefibByDeadBody" native + else if( g_bLeft4Dead2 && strcmp(classname, "survivor_death_model") == 0 ) + { + g_iDeathModel = EntIndexToEntRef(entity); + } +} + // ==================================================================================================== @@ -1032,8 +1082,8 @@ public void OnMapEnd() { for( int i = 1; i <= MaxClients; i++ ) { - g_hAnimationCallbackPre[i].RemoveAllFunctions(hPlug); - g_hAnimationCallbackPost[i].RemoveAllFunctions(hPlug); + if( g_hAnimationCallbackPre[i] ) g_hAnimationCallbackPre[i].RemoveAllFunctions(hPlug); + if( g_hAnimationCallbackPost[i] ) g_hAnimationCallbackPost[i].RemoveAllFunctions(hPlug); } } } @@ -1062,8 +1112,8 @@ public void OnClientDisconnect(int client) { hPlug = ReadPlugin(hIter); - g_hAnimationCallbackPre[client].RemoveAllFunctions(hPlug); - g_hAnimationCallbackPost[client].RemoveAllFunctions(hPlug); + if( g_hAnimationCallbackPre[client] ) g_hAnimationCallbackPre[client].RemoveAllFunctions(hPlug); + if( g_hAnimationCallbackPost[client] ) g_hAnimationCallbackPost[client].RemoveAllFunctions(hPlug); } delete hIter; @@ -1117,8 +1167,8 @@ public void OnNotifyPluginUnloaded(Handle plugin) { for( int i = 1; i <= MaxClients; i++ ) { - g_hAnimationCallbackPre[i].RemoveAllFunctions(plugin); - g_hAnimationCallbackPost[i].RemoveAllFunctions(plugin); + if( g_hAnimationCallbackPre[i] ) g_hAnimationCallbackPre[i].RemoveAllFunctions(plugin); + if( g_hAnimationCallbackPost[i] ) g_hAnimationCallbackPost[i].RemoveAllFunctions(plugin); } } } @@ -1197,8 +1247,14 @@ int Native_AnimHookDisable(Handle plugin, int numParams) // Native "AnimHookDisa // Delete callback, client not being hooked from target plugin any more if( !keep ) { - if( GetNativeFunction(2) != INVALID_FUNCTION ) g_hAnimationCallbackPre[client].RemoveFunction(plugin, GetNativeFunction(2)); - if( GetNativeFunction(3) != INVALID_FUNCTION ) g_hAnimationCallbackPost[client].RemoveFunction(plugin, GetNativeFunction(3)); + if( GetNativeFunction(2) != INVALID_FUNCTION ) + { + if( g_hAnimationCallbackPre[client] ) g_hAnimationCallbackPre[client].RemoveFunction(plugin, GetNativeFunction(2)); + } + if( GetNativeFunction(3) != INVALID_FUNCTION ) + { + if( g_hAnimationCallbackPost[client] ) g_hAnimationCallbackPost[client].RemoveFunction(plugin, GetNativeFunction(3)); + } } // Remove detour, no more plugins using it @@ -1564,7 +1620,7 @@ public void OnMapStart() for( int i = 0; i < sizeof(g_sAcidSounds); i++ ) PrecacheSound(g_sAcidSounds[i]); - for( int i = 0; i < 2048; i++ ) + for( int i = 0; i <= 2048; i++ ) g_iAcidEntity[i] = 0; } @@ -1610,6 +1666,8 @@ public void OnMapStart() SDKCall(g_hSDK_CDirector_GetScriptValueInt, g_pDirector, "cm_DominatorLimit", 1); SDKCall(g_hSDK_CDirector_GetScriptValueInt, g_pDirector, "cm_WitchLimit", 1); SDKCall(g_hSDK_CDirector_GetScriptValueInt, g_pDirector, "cm_CommonLimit", 1); + // SDKCall(g_hSDK_CDirector_GetScriptValueInt, g_pDirector, "cm_AggressiveSpecials", 1); // Required? + // SDKCall(g_hSDK_CDirector_GetScriptValueInt, g_pDirector, "cm_SpecialsRetreatToCover", 1); // Required? // These also exist, required? SDKCall(g_hSDK_CDirector_GetScriptValueInt, g_pDirector, "TotalSmokers", 1); @@ -1622,7 +1680,7 @@ public void OnMapStart() - // Melee weapon IDs - They can change when switching map depending on what melee weapons are enabled + // Melee weapon IDs - They can change when switching map depending on which melee weapons are enabled if( g_bLeft4Dead2 ) { delete g_aMeleePtrs; diff --git a/addons/sourcemod/scripting/left4dhooks_test.sp b/addons/sourcemod/scripting/left4dhooks_test.sp index 4e77e5807..4ba01cc23 100644 --- a/addons/sourcemod/scripting/left4dhooks_test.sp +++ b/addons/sourcemod/scripting/left4dhooks_test.sp @@ -18,7 +18,7 @@ -#define PLUGIN_VERSION "1.160" +#define PLUGIN_VERSION "1.166" /*======================================================================================= Plugin Info: @@ -361,7 +361,211 @@ Action sm_l4dd(int client, int args) */ - // /* Entity address test: + + + + /* + PrintToChatAll("L4D_IsInIntro %d", L4D_IsInIntro()); + + if( g_bLeft4Dead2 ) + { + int entity; + + char sMap[20]; + GetCurrentMap(sMap, sizeof(sMap)); + + if( strcmp(sMap, "c3m1_plankcountry") == 0 ) + { + entity = L4D_FindByClassnameTargetname("logic_relay", "relay_intro_start"); + } + + PrintToServer("L4D_FindByClassnameTargetname \"logic_relay\" target: \"relay_intro_start\" == %d", entity); + } + // */ + + + + + + // Get TheNavAreas - check for blocked areas + /* + ArrayList aList = new ArrayList(); + L4D_GetAllNavAreas(aList); + + int size = aList.Length; + int total; + Address area; + + // Check against all addresses: + for( int i = 0; i < size; i++ ) + { + area = aList.Get(i); + if( L4D_NavArea_IsBlocked(area, -1, false) ) + // if( L4D_NavArea_IsBlocked(area, 2, false) ) + // if( L4D_NavArea_IsBlocked(area, 3, false) ) + { + total++; + PrintToServer("NavArea %d blocked", area); + } + } + + PrintToServer("Total %d of %d blocked", total, size); + // */ + + + + + + /* + float vecPos[3]; + int survivor = GetRandomSurvivor(-1, -1); + GetClientEyePosition(survivor, vecPos); + + int entity = L4D_FindEntityByClassnameNearest("prop_physics", vecPos, 2000.0); + if( entity != INVALID_ENT_REFERENCE ) + L4D2_SetEntityGlow(entity, L4D2Glow_Constant, 1000, 1, {255, 0, 0}, true); + PrintToServer("L4D_FindEntityByClassnameNearest %d", entity); + // */ + + + + + + /* + float vecPos[3]; + int survivor = GetRandomSurvivor(-1, -1); + GetClientEyePosition(survivor, vecPos); + + int entity = INVALID_ENT_REFERENCE; + while( (entity = L4D_FindEntityByClassnameWithin(entity, "prop_physics", vecPos, 2000.0)) != INVALID_ENT_REFERENCE ) + { + L4D2_SetEntityGlow(entity, L4D2Glow_Constant, 1000, 1, {255, 0, 0}, true); + PrintToServer("L4D_FindEntityByClassnameWithin %d", entity); + } + // */ + + + + + + /* + if( g_bLeft4Dead2 ) + { + PrintToServer("POINTER_THENEXTBOTS = %d", L4D_GetPointer(POINTER_THENEXTBOTS)); + + L4D2_StartAssault(); + + int target = GetRandomSurvivor(1, -1); + if( target ) + L4D2_RushVictim(target, 5000.0); + } + // */ + + + + + + /* + if( g_bLeft4Dead2 ) + { + // SurvivorCharacter_First = 0, // Set-dependent: Nick (L4D2) or Bill (L4D1) + // SurvivorCharacter_Second, // Set-dependent: Rochelle (L4D2) or Zoey (L4D1) + // SurvivorCharacter_Third, // Set-dependent: Coach (L4D2) or Louis (L4D1) + // SurvivorCharacter_Fourth, // Set-dependent: Ellis (L4D2) or Francis (L4D1) + // SurvivorCharacter_Bill = 4, // Always Bill + // SurvivorCharacter_Zoey, // Always Zoey + // SurvivorCharacter_Francis, // Always Francis + // SurvivorCharacter_Louis, // Always Louis + // SurvivorCharacter_Random // Random from 0-3 (map's survivor set) + + L4D2Direct_AddSurvivorBot(SurvivorCharacter_Bill); + + // To get the Survivor bot client index we can do something like this: + int clients[MAXPLAYERS+1]; + for( int i = 1; i <= MaxClients; i++ ) + { + if( IsClientInGame(i) ) + clients[i] = i; + } + + L4D2Direct_AddSurvivorBot(SurvivorCharacter_First); + + // After it's spawned we can find the client index: + for( int i = 1; i <= MaxClients; i++ ) + { + if( clients[i] == 0 && IsClientInGame(i) && GetClientTeam(i) == 2 ) + { + PrintToChatAll("SPAWNED %d", i); + } + } + } + // */ + + + + + + /* + int count; + char sTemp[4][16]; + sTemp[0] = "NAV_NORTH"; + sTemp[1] = "NAV_EAST"; + sTemp[2] = "NAV_SOUTH"; + sTemp[3] = "NAV_WEST"; + + // NavArea list + ArrayList navList = new ArrayList(); + L4D_GetAllNavAreas(navList); + int size = navList.Length; + + // Random nav + Address area = navList.Get(GetRandomInt(0, size - 1)); + + // Get direction count: + for( int i = 0; i < 4; i++ ) + { + count = L4D_NavArea_GetAdjacentCount(area, i); + PrintToServer("L4D_NavArea_GetAdjacentCount (%d) %s == %d", area, sTemp[i], count); + } + + PrintToServer(""); + + // Get adjacent areas: + ArrayList aList; + for( int i = 0; i < 4; i++ ) + { + aList = new ArrayList(); + + count = L4D_NavArea_GetAdjacentAreas(area, i, aList); + for( int x = 0; x < count; x++ ) + { + PrintToServer("L4D_NavArea_GetAdjacentAreas (%d) %s == [%d]", area, sTemp[i], aList.Get(x)); + } + + delete aList; + } + + // Returns: + // L4D_NavArea_GetAdjacentCount (371211904) NAV_NORTH == 3 + // L4D_NavArea_GetAdjacentCount (371211904) NAV_EAST == 2 + // L4D_NavArea_GetAdjacentCount (371211904) NAV_SOUTH == 2 + // L4D_NavArea_GetAdjacentCount (371211904) NAV_WEST == 1 + + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_NORTH == [371420032] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_NORTH == [371052928] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_NORTH == [370628992] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_EAST == [371454976] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_EAST == [370685824] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_SOUTH == [372095104] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_SOUTH == [371736448] + // L4D_NavArea_GetAdjacentAreas (371211904) NAV_WEST == [371635840] + // */ + + + + + + /* Entity address test: char classname[32]; Address addy; int max, passed, failed; @@ -762,6 +966,8 @@ Action sm_l4dd(int client, int args) + + /* // Get TheNavAreas - check for connected areas ArrayList aList = new ArrayList(); @@ -1081,7 +1287,8 @@ Action sm_l4dd(int client, int args) TR_GetEndPosition(vPos, trace); TR_GetPlaneNormal(trace, vAng); delete trace; -// "inferno", "insect_swarm", "fire_cracker_blast" + + // "inferno", "insect_swarm", "fire_cracker_blast" int entity = CreateEntityByName("insect_swarm"); if( entity != -1 ) { @@ -2484,7 +2691,7 @@ Action sm_l4dd(int client, int args) PrintToServer("L4D_BecomeGhost %d", L4D_BecomeGhost(client)); PrintToServer("L4D_State_Transition", L4D_State_Transition(client, 6)); - + // Has no affect int car = GetClientAimTarget(client, false); PrintToServer("L4D_RegisterForbiddenTarget %d", L4D_RegisterForbiddenTarget(car)); @@ -2506,19 +2713,19 @@ Action sm_l4dd(int client, int args) } PrintToServer("L4D2_CTerrorPlayer_Fling", L4D2_CTerrorPlayer_Fling(client, client, view_as({ 1.0, 0.0, 0.0 }))); - + PrintToServer("L4D2_GetVersusCompletionPlayer %d", L4D2_GetVersusCompletionPlayer(client)); - + PrintToServer("L4D2_SwapTeams", L4D2_SwapTeams()); // WORKS, some survivors may spawn dead. PrintToServer("L4D2_AreTeamsFlipped %d", L4D2_AreTeamsFlipped()); - + PrintToServer("L4D2_FullRestart", L4D2_FullRestart()); - + PrintToServer("L4D2_HideVersusScoreboard", L4D2_HideVersusScoreboard()); - + PrintToServer("L4D2_HideScavengeScoreboard", L4D2_HideScavengeScoreboard()); - + PrintToServer("L4D2_HideScoreboard", L4D2_HideScoreboard()); } // */ @@ -2603,9 +2810,9 @@ public Action L4D_OnSpawnSpecial(int &zombieClass, const float vecPos[3], const // zombieClass = 1; // return Plugin_Changed; - + // return Plugin_Handled; - + return Plugin_Continue; } @@ -2645,7 +2852,7 @@ public Action L4D_OnSpawnTank(const float vecPos[3], const float vecAng[3]) } // return Plugin_Handled; - + return Plugin_Continue; } @@ -2685,7 +2892,7 @@ public Action L4D_OnSpawnWitch(const float vecPos[3], const float vecAng[3]) } // return Plugin_Handled; - + return Plugin_Continue; } @@ -2725,7 +2932,7 @@ public Action L4D2_OnSpawnWitchBride(const float vecPos[3], const float vecAng[3 } // return Plugin_Handled; - + return Plugin_Continue; } diff --git a/addons/sourcemod/scripting/match_vote.sp b/addons/sourcemod/scripting/match_vote.sp index 89c344ddc..28cf56063 100644 --- a/addons/sourcemod/scripting/match_vote.sp +++ b/addons/sourcemod/scripting/match_vote.sp @@ -36,7 +36,7 @@ public Plugin myinfo = name = "Match Vote", author = "vintik, Sir, StarterX4", description = "!match !rmatch !chmatch - Change Hostname and Slots while you're at it!", - version = "1.4", + version = "1.5", url = "https://github.com/L4D-Community/L4D2-Competitive-Framework" }; @@ -199,7 +199,7 @@ bool FindConfigName(const char[] sConfig, char[] sName, const int iMaxLength) void MatchModeMenu(int iClient) { char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%t", "Title_Match"); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_Match", iClient); Menu hMenu = new Menu(MatchModeMenuHandler); hMenu.SetTitle(sTitle); @@ -236,7 +236,7 @@ int MatchModeMenuHandler(Menu menu, MenuAction action, int param1, int param2) if (g_hModesKV.JumpToKey(sInfo) && g_hModesKV.GotoFirstSubKey()) { char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%t", "Title_Config", sInfo); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_Config", param1, sInfo); Menu hMenu = new Menu(ConfigsMenuHandler); hMenu.SetTitle(sTitle); @@ -317,7 +317,7 @@ bool StartMatchVote(int iClient, const char[] sCfgName) } char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%T", "Title_LoadConfig", LANG_SERVER, sCfgName); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_LoadConfig", LANG_SERVER, sCfgName); g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); SetBuiltinVoteArgument(g_hVote, sTitle); @@ -352,7 +352,7 @@ void MatchVoteResultHandler(Handle vote, int num_votes, int num_clients, const i if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { char sVotepass[64]; - Format(sVotepass, sizeof(sVotepass), "%T", "VotePass_Loading", LANG_SERVER); + FormatEx(sVotepass, sizeof(sVotepass), "%T", "VotePass_Loading", LANG_SERVER); DisplayBuiltinVotePass(vote, sVotepass); ServerCommand("sm_forcematch %s", g_sCfg); @@ -426,7 +426,7 @@ bool StartResetMatchVote(int iClient) } char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%T", "Title_OffConfogl", LANG_SERVER); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_OffConfogl", LANG_SERVER); g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); SetBuiltinVoteArgument(g_hVote, sTitle); @@ -447,7 +447,7 @@ void ResetMatchVoteResultHandler(Handle vote, int num_votes, int num_clients, co if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { char sVotepass[24]; - Format(sVotepass, sizeof(sVotepass), "%T", "VotePass_Unloading", LANG_SERVER); + FormatEx(sVotepass, sizeof(sVotepass), "%T", "VotePass_Unloading", LANG_SERVER); DisplayBuiltinVotePass(vote, sVotepass); ServerCommand("sm_resetmatch"); @@ -518,7 +518,7 @@ Action ChangeMatchRequest(int iClient, int iArgs) void ChMatchModeMenu(int iClient) { char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%t", "Title_Match"); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_Match", iClient); Menu hMenu = new Menu(ChMatchModeMenuHandler); hMenu.SetTitle(sTitle); @@ -555,7 +555,7 @@ int ChMatchModeMenuHandler(Menu menu, MenuAction action, int param1, int param2) if (g_hModesKV.JumpToKey(sInfo) && g_hModesKV.GotoFirstSubKey()) { char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%t", "Title_Config", sInfo); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_Config", param1, sInfo); Menu hMenu = new Menu(ChConfigsMenuHandler); hMenu.SetTitle(sTitle); @@ -640,7 +640,7 @@ bool StartChMatchVote(int iClient, const char[] sCfgName) } char sTitle[64]; - Format(sTitle, sizeof(sTitle), "%T", "Title_ChangeConfogl", LANG_SERVER, sCfgName); + FormatEx(sTitle, sizeof(sTitle), "%T", "Title_ChangeConfogl", LANG_SERVER, sCfgName); g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); SetBuiltinVoteArgument(g_hVote, sTitle); @@ -660,7 +660,7 @@ void ChMatchVoteResultHandler(Handle vote, int num_votes, int num_clients, const if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { char sVotepass[24]; - Format(sVotepass, sizeof(sVotepass), "%T", "VotePass_Changed", LANG_SERVER); + FormatEx(sVotepass, sizeof(sVotepass), "%T", "VotePass_Changed", LANG_SERVER); DisplayBuiltinVotePass(vote, sVotepass); ServerCommand("sm_forcechangematch %s", g_sCfg); @@ -684,7 +684,7 @@ stock void LoadTranslation(const char[] translation) sPath[PLATFORM_MAX_PATH], sName[64]; - Format(sName, sizeof(sName), "translations/%s.txt", translation); + FormatEx(sName, sizeof(sName), "translations/%s.txt", translation); BuildPath(Path_SM, sPath, sizeof(sPath), sName); if (!FileExists(sPath)) SetFailState("Missing translation file %s.txt", translation); diff --git a/addons/sourcemod/scripting/sourcemod/basecommands.sp b/addons/sourcemod/scripting/sourcemod/basecommands.sp index f7a9ab2ca..2649b2a88 100644 --- a/addons/sourcemod/scripting/sourcemod/basecommands.sp +++ b/addons/sourcemod/scripting/sourcemod/basecommands.sp @@ -36,7 +36,6 @@ #include #undef REQUIRE_PLUGIN #include -#include #pragma newdecls required @@ -53,7 +52,6 @@ TopMenu hTopMenu; Menu g_MapList; StringMap g_ProtectedVars; -bool L4D2ChangeLevelActive; #include "basecommands/kick.sp" #include "basecommands/reloadadmins.sp" @@ -80,12 +78,10 @@ public void OnPluginStart() /* Account for late loading */ TopMenu topmenu; - if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != null)) + { OnAdminMenuReady(topmenu); - - if (LibraryExists("l4d2_changelevel")) - L4D2ChangeLevelActive = true; + } g_MapList = new Menu(MenuHandler_ChangeMap, MenuAction_Display); g_MapList.SetTitle("%T", "Please select a map", LANG_SERVER); @@ -191,19 +187,12 @@ public void OnAdminMenuReady(Handle aTopMenu) } } -public void OnLibraryAdded(const char[] name) -{ - if (strcmp(name, "l4d2_changelevel") == 0) - L4D2ChangeLevelActive = true; -} - public void OnLibraryRemoved(const char[] name) { if (strcmp(name, "adminmenu") == 0) + { hTopMenu = null; - - else if (strcmp(name, "l4d2_changelevel") == 0) - L4D2ChangeLevelActive = false; + } } #define FLAG_STRINGS 14 diff --git a/addons/sourcemod/scripting/sourcemod/basecommands/map.sp b/addons/sourcemod/scripting/sourcemod/basecommands/map.sp index d7741940e..1603ea5a2 100644 --- a/addons/sourcemod/scripting/sourcemod/basecommands/map.sp +++ b/addons/sourcemod/scripting/sourcemod/basecommands/map.sp @@ -116,7 +116,7 @@ public Action Command_Map(int client, int args) DataPack dp; CreateDataTimer(3.0, Timer_ChangeMap, dp); - dp.WriteString(displayName); + dp.WriteString(map); return Plugin_Handled; } @@ -128,8 +128,7 @@ public Action Timer_ChangeMap(Handle timer, DataPack dp) dp.Reset(); dp.ReadString(map, sizeof(map)); - if (L4D2ChangeLevelActive) L4D2_ChangeLevel(map); - else ForceChangeLevel(map, "sm_map Command"); + ForceChangeLevel(map, "sm_map Command"); return Plugin_Stop; } diff --git a/addons/sourcemod/scripting/sourcemod/include/version_auto.inc b/addons/sourcemod/scripting/sourcemod/include/version_auto.inc index 4e95d07ef..ee2defb89 100644 --- a/addons/sourcemod/scripting/sourcemod/include/version_auto.inc +++ b/addons/sourcemod/scripting/sourcemod/include/version_auto.inc @@ -5,11 +5,11 @@ #define _auto_version_included #define SOURCEMOD_V_TAG "" -#define SOURCEMOD_V_CSET "51196593" +#define SOURCEMOD_V_CSET "fa56d4253" #define SOURCEMOD_V_MAJOR 1 #define SOURCEMOD_V_MINOR 12 #define SOURCEMOD_V_RELEASE 0 -#define SOURCEMOD_V_REV 7221 +#define SOURCEMOD_V_REV 7230 -#define SOURCEMOD_VERSION "1.12.0.7221" +#define SOURCEMOD_VERSION "1.12.0.7230" \ No newline at end of file diff --git a/addons/sourcemod/scripting/sourcemod/spcomp b/addons/sourcemod/scripting/sourcemod/spcomp index ed814431d..a33e705e9 100644 Binary files a/addons/sourcemod/scripting/sourcemod/spcomp and b/addons/sourcemod/scripting/sourcemod/spcomp differ diff --git a/addons/sourcemod/scripting/sourcemod/spcomp.exe b/addons/sourcemod/scripting/sourcemod/spcomp.exe index 57a0d287f..2b82bb964 100644 Binary files a/addons/sourcemod/scripting/sourcemod/spcomp.exe and b/addons/sourcemod/scripting/sourcemod/spcomp.exe differ diff --git a/addons/sourcemod/scripting/sourcemod/spcomp64 b/addons/sourcemod/scripting/sourcemod/spcomp64 index fc2f1de9b..35a576552 100644 Binary files a/addons/sourcemod/scripting/sourcemod/spcomp64 and b/addons/sourcemod/scripting/sourcemod/spcomp64 differ diff --git a/addons/sourcemod/scripting/sourcemod/spcomp64.exe b/addons/sourcemod/scripting/sourcemod/spcomp64.exe index 452d71b10..b0e9b6839 100644 Binary files a/addons/sourcemod/scripting/sourcemod/spcomp64.exe and b/addons/sourcemod/scripting/sourcemod/spcomp64.exe differ diff --git a/addons/sourcemod/translations/1v1.phrases.txt b/addons/sourcemod/translations/1v1.phrases.txt index 9329216ce..1c233be90 100644 --- a/addons/sourcemod/translations/1v1.phrases.txt +++ b/addons/sourcemod/translations/1v1.phrases.txt @@ -6,12 +6,13 @@ } "HealthRemaining" { - "#format" "{1:s},{2:s},{3:d}" // 1:sName 2:L4D2_InfectedNames[iZclass] 3:iRemainingHealth + "#format" "{1:N},{2:s},{3:d}" // 1:iAttacker 2:L4D2_InfectedNames[iZclass] 3:iRemainingHealth "en" "{red}{1}{default} ({green}{2}{default}) had {olive}{3}{default} health remaining!" } - "AI" + "HealthRemainingAI" { - "en" "AI" + "#format" "{1:s},{2:d}" // 1:L4D2_InfectedNames[iZclass] 2:iRemainingHealth + "en" "{blue}[{default}BOT{blue}]{default} {green}{1}{default} had {olive}{2}{default} health remaining!" } "UMad" { diff --git a/addons/sourcemod/translations/es/1v1.phrases.txt b/addons/sourcemod/translations/es/1v1.phrases.txt index 6916fdc9b..b1c50b747 100644 --- a/addons/sourcemod/translations/es/1v1.phrases.txt +++ b/addons/sourcemod/translations/es/1v1.phrases.txt @@ -6,12 +6,13 @@ } "HealthRemaining" { - "#format" "{1:s},{2:s},{3:d}" // 1:sName 2:L4D2_InfectedNames[iZclass] 3:iRemainingHealth + "#format" "{1:N},{2:s},{3:d}" // 1:iAttacker 2:L4D2_InfectedNames[iZclass] 3:iRemainingHealth "es" "¡{red}{1}{default} ({green}{2}{default}) tenía {olive}{3}{default} de vida restante!" } - "AI" + "HealthRemainingAI" { - "es" "IA" + "#format" "{1:s},{2:d}" // 1:L4D2_InfectedNames[iZclass] 2:iRemainingHealth + "es" "¡{blue}[{default}BOT{blue}]{default} {green}{1}{default} tenía {olive}{2}{default} de vida restante!" } "UMad" { diff --git a/addons/sourcemod/translations/es/1v1_skeetstats.phrases.txt b/addons/sourcemod/translations/es/1v1_skeetstats.phrases.txt index 68b049ff7..d407fb0f4 100644 --- a/addons/sourcemod/translations/es/1v1_skeetstats.phrases.txt +++ b/addons/sourcemod/translations/es/1v1_skeetstats.phrases.txt @@ -41,15 +41,15 @@ // 3. accuracy "ACC_AllShots" { - "es" "Todos los tiros ({blue}%3.0f%%{default})" + "es" "Todos los tiros ({blue}%.0f%%{default})" } "ACC_BuckShot" { - "es" "| buckshot ({blue}%3.0f%%{default})" + "es" " | perdigones ({blue}%.0f%%{default})" } "ACC_Melee" { - "es" "| melee ({blue}%3.0f%%{default})" + "es" " | melee ({blue}%.0f%%{default})" } "ACC_NoShotsFired" { diff --git a/addons/sourcemod/translations/es/l4d2_skill_detect.phrases.txt b/addons/sourcemod/translations/es/l4d2_skill_detect.phrases.txt index cde648f44..61567813d 100644 --- a/addons/sourcemod/translations/es/l4d2_skill_detect.phrases.txt +++ b/addons/sourcemod/translations/es/l4d2_skill_detect.phrases.txt @@ -78,12 +78,12 @@ } "Skeeted" { - "#format" "{1:N},{2:s},{3:N}" // 1:attacker 2:(bMelee) ? "melee-": ((bSniper) ? "headshot-" : ((bGL) ? "grenade-" : "") ) 3:victim + "#format" "{1:N},{2:t},{3:N}" // 1:attacker 2:"Melee"/"HeadShot"/"Grenade"/"Empty" key 3:victim "es" "{olive}{1}{default} realizo un {blue}{2}skeet{default} a {olive}{3}{default}." } "SkeetedBot" { - "#format" "{1:N},{2:s}" // 1:attacker 2:(bMelee) ? "melee-": ((bSniper) ? "headshot-" : ((bGL) ? "grenade-" : "") ) + "#format" "{1:N},{2:t}" // 1:attacker 2:"Melee"/"HeadShot"/"Grenade"/"Empty" key "es" "{olive}{1}{default} realizo un {blue}{2}skeet{default} a un {olive}hunter{default}." } "Melee" @@ -101,12 +101,12 @@ // hurt skeet / non-skeet "HurtSkeet" { - "#format" "{1:N},{2:i},{3:s}" // 1:victim 2:damage 3:(bOverKill) ? buffer : "" + "#format" "{1:N},{2:i},{3:t}" // 1:victim 2:damage 3:"Unchipped"/"Empty" key "es" "{olive}{1}{default} fue {green}chip-skeet{default} ({blue}{2}{default} daño).{3}" } "HurtSkeetBot" { - "#format" "{1:i},{2:s}" // 1:damage 2:(bOverKill) ? buffer : "" + "#format" "{1:i},{2:t}" // 1:damage 2:"Unchipped"/"Empty" key "es" "{olive}Hunter{default} fue {green}chip-skeet{default} ({blue}{1}{default} daño).{2}" } "Unchipped" @@ -146,12 +146,12 @@ } "SelfClearedTongue" { - "#format" "{1:N},{2:N},{3:s}" // 1:attacker 2:victim 3:(withShove) ? Buffer : "" + "#format" "{1:N},{2:N},{3:t}" // 1:attacker 2:victim 3:"Shoving"/"Empty" key "es" "{olive}{1}{default} se {blue}autolimpio{default} la lengua de {olive}{2}{default} {blue}{3}{default}" } "SelfClearedTongueBot" { - "#format" "{1:N},{2:s}" // 1:attacker 2:(withShove) ? Buffer : "" + "#format" "{1:N},{2:t}" // 1:attacker 2:"Shoving"/"Empty" key "es" "{olive}{1}{default} se {blue}autolimpio{default} la lengua de un Smoker {blue}{2}{default}" } "Shoving" @@ -192,12 +192,12 @@ // deathcharges "DeathCharged" { - "#format" "{1:N},{2:N},{3:s},{4:i}" // 1:attacker 2:victim 3:(bCarried) ? "" : Buffer 4:RoundFloat(height) + "#format" "{1:N},{2:N},{3:t},{4:i}" // 1:attacker 2:victim 3:"Empty"/"Bowling" key 4:RoundFloat(height) "es" "{olive}{1}{default} elimino a {olive}{2}{default} usando el {red}Charger{default} {3}({red}altura{default}: {red}{4}{default})" } "DeathChargedBot" { - "#format" "{1:N},{2:s},{3:i}" // 1:victim 2:(bCarried) ? "" : Buffer 3:RoundFloat(height) + "#format" "{1:N},{2:t},{3:i}" // 1:victim 2:"Empty"/"Bowling" key 3:RoundFloat(height) "es" "Un {olive}charger{default} elimino a {olive}{1}{default} {2}({red}height{default}: {red}{3}{default})" } "Bowling" @@ -228,13 +228,17 @@ // bhaps "BunnyHop" { - "#format" "{1:i},{2:s},{3:.1f}" // 1:streak 2:(streak > 1) ? "s" : "" 3:maxVelocity + "#format" "{1:i},{2:t},{3:.1f}" // 1:streak 2:"PluralCount"/"Empty" key 3:maxVelocity "es" "{olive}Usted{default} obtuvo {blue}{1} BunnyHop{2}{default} consecutivos ({blue}velocidad máxima{default}: {olive}{3}{default})" } "PluralCount" { "es" "s" } + "Empty" + { + "es" "" + } // car alarms "CalarmHit" { diff --git a/addons/sourcemod/translations/l4d2_skill_detect.phrases.txt b/addons/sourcemod/translations/l4d2_skill_detect.phrases.txt index 946f475d3..261908e58 100644 --- a/addons/sourcemod/translations/l4d2_skill_detect.phrases.txt +++ b/addons/sourcemod/translations/l4d2_skill_detect.phrases.txt @@ -78,12 +78,12 @@ } "Skeeted" { - "#format" "{1:N},{2:s},{3:N}" // 1:attacker 2:(bMelee) ? "melee-": ((bSniper) ? "headshot-" : ((bGL) ? "grenade-" : "") ) 3:victim + "#format" "{1:N},{2:t},{3:N}" // 1:attacker 2:"Melee"/"HeadShot"/"Grenade"/"Empty" key 3:victim "en" "{olive}{1}{default} {blue}{2}skeeted{default} {olive}{3}{default}." } "SkeetedBot" { - "#format" "{1:N},{2:s}" // 1:attacker 2:(bMelee) ? "melee-": ((bSniper) ? "headshot-" : ((bGL) ? "grenade-" : "") ) + "#format" "{1:N},{2:t}" // 1:attacker 2:"Melee"/"HeadShot"/"Grenade"/"Empty" key "en" "{olive}{1}{default} {blue}{2}skeeted{default} a {olive}hunter{default}." } "Melee" @@ -101,12 +101,12 @@ // hurt skeet / non-skeet "HurtSkeet" { - "#format" "{1:N},{2:i},{3:s}" // 1:victim 2:damage 3:(bOverKill) ? buffer : "" + "#format" "{1:N},{2:i},{3:t}" // 1:victim 2:damage 3:"Unchipped"/"Empty" key "en" "{olive}{1}{default} was {green}not{default} skeeted ({blue}{2}{default} damage).{3}" } "HurtSkeetBot" { - "#format" "{1:i},{2:s}" // 1:damage 2:(bOverKill) ? buffer : "" + "#format" "{1:i},{2:t}" // 1:damage 2:"Unchipped"/"Empty" key "en" "{olive}Hunter{default} was {green}not{default} skeeted ({blue}{1}{default} damage).{2}" } "Unchipped" @@ -146,12 +146,12 @@ } "SelfClearedTongue" { - "#format" "{1:N},{2:N},{3:s}" // 1:attacker 2:victim 3:(withShove) ? Buffer : "" + "#format" "{1:N},{2:N},{3:t}" // 1:attacker 2:victim 3:"Shoving"/"Empty" key "en" "{olive}{1}{default} {blue}self-cleared{default} from {olive}{2}{default}'s tongue {blue}{3}{default}" } "SelfClearedTongueBot" { - "#format" "{1:N},{2:s}" // 1:attacker 2:(withShove) ? Buffer : "" + "#format" "{1:N},{2:t}" // 1:attacker 2:"Shoving"/"Empty" key "en" "{olive}{1}{default} {blue}self-cleared{default} from a smoker tongue {blue}{2}{default}" } "Shoving" @@ -192,12 +192,12 @@ // deathcharges "DeathCharged" { - "#format" "{1:N},{2:N},{3:s},{4:i}" // 1:attacker 2:victim 3:(bCarried) ? "" : Buffer 4:RoundFloat(height) + "#format" "{1:N},{2:N},{3:t},{4:i}" // 1:attacker 2:victim 3:"Empty"/"Bowling" key 4:RoundFloat(height) "en" "{olive}{1}{default} {red}death-charged{default} {olive}{2}{default} {3}({red}height{default}: {red}{4}{default})" } "DeathChargedBot" { - "#format" "{1:N},{2:s},{3:i}" // 1:victim 2:(bCarried) ? "" : Buffer 3:RoundFloat(height) + "#format" "{1:N},{2:t},{3:i}" // 1:victim 2:"Empty"/"Bowling" key 3:RoundFloat(height) "en" "A {olive}charger{default} {red}death-charged{default} {olive}{1}{default} {2}({red}height{default}: {red}{3}{default})" } "Bowling" @@ -227,14 +227,18 @@ } // bhaps "BunnyHop" - { - "#format" "{1:i},{2:s},{3:.1f}" // 1:streak 2:(streak > 1) ? "s" : "" 3:maxVelocity + { + "#format" "{1:i},{2:t},{3:.1f}" // 1:streak 2:"PluralCount"/"Empty" key 3:maxVelocity "en" "{olive}You{default} got {blue}{1} bunnyhop{2}{default} in a row ({blue}top speed{default}: {olive}{3}{default})" } "PluralCount" { "en" "s" } + "Empty" + { + "en" "" + } // car alarms "CalarmHit" { diff --git a/cfg/generalfixes.cfg b/cfg/generalfixes.cfg index 0066a519e..e9562a990 100644 --- a/cfg/generalfixes.cfg +++ b/cfg/generalfixes.cfg @@ -58,7 +58,7 @@ sm plugins load fixes/l4d_tongue_block_fix.smx sm plugins load fixes/l4d2_fix_team_shuffle.smx sm plugins load fixes/l4d_tongue_float_fix.smx sm plugins load fixes/l4d2_sg552_zoom_fix.smx -sm plugins load fixes/l4d2_changelevel.smx +sm plugins load fixes/l4d2_fix_changelevel.smx sm plugins load fixes/weapon_spawn_duplicate_fix.smx sm plugins load fixes/l4d_fix_common_shove.smx sm plugins load fixes/l4d2_null_cusercmd_fix.smx diff --git a/cfg/stripper/acemodrv/global_filters.cfg b/cfg/stripper/acemodrv/global_filters.cfg index 7e592e4b8..473b99412 100644 --- a/cfg/stripper/acemodrv/global_filters.cfg +++ b/cfg/stripper/acemodrv/global_filters.cfg @@ -137,17 +137,6 @@ modify: "classname" "prop_physics" } } -{ - match: - { - "classname" "prop_physics_multiplayer" - "model" "models/props_vehicles/police_car.mdl" - } - replace: - { - "classname" "prop_physics" - } -} { match: { @@ -3718,17 +3707,6 @@ modify: "spawnflags" "4" } } -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_interiors/foldingchair.mdl" - } - insert: - { - "spawnflags" "4" - } -} { match: { @@ -4690,4 +4668,4 @@ modify: { "spawnflags" "4" } -} \ No newline at end of file +} diff --git a/cfg/stripper/acemodrv/maps/c10m3_ranchhouse.cfg b/cfg/stripper/acemodrv/maps/c10m3_ranchhouse.cfg index 94576f153..e6b815894 100644 --- a/cfg/stripper/acemodrv/maps/c10m3_ranchhouse.cfg +++ b/cfg/stripper/acemodrv/maps/c10m3_ranchhouse.cfg @@ -338,7 +338,6 @@ modify: replace: { "BreakableType" "0" - "minhealthdmg" "0" } delete: diff --git a/cfg/stripper/acemodrv/maps/c11m2_offices.cfg b/cfg/stripper/acemodrv/maps/c11m2_offices.cfg index 89f40a9b2..20aacf8bd 100644 --- a/cfg/stripper/acemodrv/maps/c11m2_offices.cfg +++ b/cfg/stripper/acemodrv/maps/c11m2_offices.cfg @@ -86,7 +86,7 @@ filter: { "hammerid" "7941040" } -{ +{ "hammerid" "9120351" } { diff --git a/cfg/stripper/acemodrv/maps/c11m4_terminal.cfg b/cfg/stripper/acemodrv/maps/c11m4_terminal.cfg index cd9b1ad76..7be4437e5 100644 --- a/cfg/stripper/acemodrv/maps/c11m4_terminal.cfg +++ b/cfg/stripper/acemodrv/maps/c11m4_terminal.cfg @@ -361,7 +361,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Barricades between the bathrooms and departure gate +; --- Barricades between the bathrooms and departure gate { "classname" "prop_dynamic" "origin" "3087 2776 152" @@ -436,14 +436,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "2792 4254 152" - "angles" "0 180 0" - "model" "models/props_unique/airport/temp_barricade.mdl" - "solid" "6" - "disableshadows" "1" -} { "classname" "prop_dynamic" "origin" "2792 4588 152" diff --git a/cfg/stripper/acemodrv/maps/c12m5_cornfield.cfg b/cfg/stripper/acemodrv/maps/c12m5_cornfield.cfg index 80ff80db9..c012e02c2 100644 --- a/cfg/stripper/acemodrv/maps/c12m5_cornfield.cfg +++ b/cfg/stripper/acemodrv/maps/c12m5_cornfield.cfg @@ -121,7 +121,6 @@ add: "solid" "6" "fadescale" "0" } - ; ############# MAP CLIPPING AND ISSUES ############# ; ===================================================== diff --git a/cfg/stripper/acemodrv/maps/c2m2_fairgrounds.cfg b/cfg/stripper/acemodrv/maps/c2m2_fairgrounds.cfg index 680914b2e..817d5b978 100644 --- a/cfg/stripper/acemodrv/maps/c2m2_fairgrounds.cfg +++ b/cfg/stripper/acemodrv/maps/c2m2_fairgrounds.cfg @@ -439,14 +439,6 @@ add: "initialstate" "1" "BlockType" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-1152 1072 391" - "mins" "-64 -64 -377" - "maxs" "64 64 377" - "initialstate" "1" - "BlockType" "1" -} { "classname" "env_physics_blocker" "origin" "-1008 1104 391" @@ -1004,7 +996,7 @@ add: "disableshadows" "1" "rendercolor" "0 180 246" } -; --- Add collision to sign and block LOS +; --- Add collision to sign and block LOS { "classname" "logic_auto" "OnMapSpawn" "losfix_gamehut_sign,AddOutput,mins -104 -2 -34,0,-1" diff --git a/cfg/stripper/acemodrv/maps/c2m3_coaster.cfg b/cfg/stripper/acemodrv/maps/c2m3_coaster.cfg index 841d7c5be..d9eb7ba8d 100644 --- a/cfg/stripper/acemodrv/maps/c2m3_coaster.cfg +++ b/cfg/stripper/acemodrv/maps/c2m3_coaster.cfg @@ -227,7 +227,7 @@ add: { "classname" "env_physics_blocker" "origin" "-896 2241 560" - "mins" " -68 -197 -400" + "mins" "-68 -197 -400" "maxs" "68 197 400" "initialstate" "1" "BlockType" "1" @@ -1444,4 +1444,4 @@ add: "classname" "info_target" "origin" "-5252 1812 4" "targetname" "end_railing_lighting" -} \ No newline at end of file +} diff --git a/cfg/stripper/acemodrv/maps/c2m5_concert.cfg b/cfg/stripper/acemodrv/maps/c2m5_concert.cfg index f0e8919c9..8ed8e7c1d 100644 --- a/cfg/stripper/acemodrv/maps/c2m5_concert.cfg +++ b/cfg/stripper/acemodrv/maps/c2m5_concert.cfg @@ -228,7 +228,6 @@ add: ; --- Disable shadows early on props added that start with shadows enabled to ensure the fix works "OnMapSpawn" "anv_mapfixes_yesdraw_infecteddoorway,DisableShadow,,29,-1" "OnMapSpawn" "anv_mapfixes_yesdraw_infectedroom,DisableShadow,,29,-1" - } ; --- Additional toggle on finale start modify: diff --git a/cfg/stripper/acemodrv/maps/c3m2_swamp.cfg b/cfg/stripper/acemodrv/maps/c3m2_swamp.cfg index b0fa9b337..09e4404fe 100644 --- a/cfg/stripper/acemodrv/maps/c3m2_swamp.cfg +++ b/cfg/stripper/acemodrv/maps/c3m2_swamp.cfg @@ -660,14 +660,6 @@ add: "initialstate" "1" "BlockType" "1" } -{ - "classname" "env_physics_blocker" - "origin" "4481 1943 391" - "mins" "-4 -38 -249" - "maxs" "4 38 249" - "initialstate" "1" - "BlockType" "1" -} { "classname" "env_physics_blocker" "origin" "4481 1772 391" diff --git a/cfg/stripper/acemodrv/maps/c3m4_plantation.cfg b/cfg/stripper/acemodrv/maps/c3m4_plantation.cfg index 69a11dbc2..3bef62df8 100644 --- a/cfg/stripper/acemodrv/maps/c3m4_plantation.cfg +++ b/cfg/stripper/acemodrv/maps/c3m4_plantation.cfg @@ -815,16 +815,6 @@ add: "fademindist" "300" "fademaxdist" "20" } -{ - "classname" "prop_dynamic" - "origin" "-682 -2820 420" - "angles" "0 270 0" - "model" "models/props_misc/wrongway_sign01_optimized.mdl" - "solid" "0" - "disableshadows" "1" - "fademindist" "300" - "fademaxdist" "20" -} { "classname" "prop_dynamic" "origin" "-642 -2762 444" diff --git a/cfg/stripper/acemodrv/maps/c7m1_docks.cfg b/cfg/stripper/acemodrv/maps/c7m1_docks.cfg index 728aaea6d..3a5840775 100644 --- a/cfg/stripper/acemodrv/maps/c7m1_docks.cfg +++ b/cfg/stripper/acemodrv/maps/c7m1_docks.cfg @@ -368,14 +368,6 @@ add: "initialstate" "1" "BlockType" "0" } -{ - "classname" "env_physics_blocker" - "origin" "10664 -264 -108" - "mins" "-16 -26 -6" - "maxs" "16 26 6" - "initialstate" "1" - "BlockType" "0" -} { "classname" "env_physics_blocker" "origin" "10400 -129 -69" diff --git a/cfg/stripper/acemodrv/maps/c8m3_sewers.cfg b/cfg/stripper/acemodrv/maps/c8m3_sewers.cfg index a7f8c7a17..ecb9dd3cf 100644 --- a/cfg/stripper/acemodrv/maps/c8m3_sewers.cfg +++ b/cfg/stripper/acemodrv/maps/c8m3_sewers.cfg @@ -616,7 +616,6 @@ filter: ; == CLIP REMOVAL == ; == Remove miscellaneous clips and brushes == ; ===================================================== -add: ; --- Remove TLS clips after loading add: { diff --git a/cfg/stripper/acemodrv/maps/c9m2_lots.cfg b/cfg/stripper/acemodrv/maps/c9m2_lots.cfg index 94bf0dd7f..656ca68b5 100644 --- a/cfg/stripper/acemodrv/maps/c9m2_lots.cfg +++ b/cfg/stripper/acemodrv/maps/c9m2_lots.cfg @@ -579,7 +579,7 @@ add: "classname" "env_physics_blocker" "origin" "7479 6764 189" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } @@ -587,7 +587,7 @@ add: "classname" "env_physics_blocker" "origin" "6835 5901 183" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } @@ -595,7 +595,7 @@ add: "classname" "env_physics_blocker" "origin" "8438 5464 189" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } diff --git a/cfg/stripper/acemodrv/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/acemodrv/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/acemodrv/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/acemodrv/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/acemodrv/maps/l4d2_ff02_factory.cfg b/cfg/stripper/acemodrv/maps/l4d2_ff02_factory.cfg index ee9385ac3..00292e5d4 100644 --- a/cfg/stripper/acemodrv/maps/l4d2_ff02_factory.cfg +++ b/cfg/stripper/acemodrv/maps/l4d2_ff02_factory.cfg @@ -92,7 +92,7 @@ add: ; ===================================================== -; --- remove 1 dumpster near button event +; --- remove 1 dumpster near button event ; --- 删除机关点的一个垃圾箱 filter: { diff --git a/cfg/stripper/acemodrv/maps/l4d_dbd2dc_clean_up.cfg b/cfg/stripper/acemodrv/maps/l4d_dbd2dc_clean_up.cfg index 76631b81a..9c0b0feb7 100644 --- a/cfg/stripper/acemodrv/maps/l4d_dbd2dc_clean_up.cfg +++ b/cfg/stripper/acemodrv/maps/l4d_dbd2dc_clean_up.cfg @@ -606,7 +606,7 @@ modify: "origin" "-2550 6632.25 -660.712" } } -; --- Clean up entities +; --- Clean up entities filter: { "targetname" "Andy_Helpyou" diff --git a/cfg/stripper/acemodrv/maps/l4d_dbd2dc_undead_center.cfg b/cfg/stripper/acemodrv/maps/l4d_dbd2dc_undead_center.cfg index e0698ae8f..c2c4fe7f3 100644 --- a/cfg/stripper/acemodrv/maps/l4d_dbd2dc_undead_center.cfg +++ b/cfg/stripper/acemodrv/maps/l4d_dbd2dc_undead_center.cfg @@ -1032,15 +1032,6 @@ add: "BlockType" "1" "targetname" "block_scaffolding_skips" } -{ - "classname" "env_physics_blocker" - "origin" "-6873 8787 -345" - "mins" "-166 -53 -121" - "maxs" "166 35 121" - "initialstate" "1" - "BlockType" "1" - "targetname" "block_scaffolding_skips" -} { "classname" "env_physics_blocker" "origin" "-7268 9128 -304" diff --git a/cfg/stripper/acemodrv/maps/l4d_yama_3.cfg b/cfg/stripper/acemodrv/maps/l4d_yama_3.cfg index 61b5de121..ea51220dc 100644 --- a/cfg/stripper/acemodrv/maps/l4d_yama_3.cfg +++ b/cfg/stripper/acemodrv/maps/l4d_yama_3.cfg @@ -1,4 +1,3 @@ -add: ;----- Versus Relay modify: { diff --git a/cfg/stripper/apex/global_filters.cfg b/cfg/stripper/apex/global_filters.cfg index e83f5bc83..7c47c43c1 100644 --- a/cfg/stripper/apex/global_filters.cfg +++ b/cfg/stripper/apex/global_filters.cfg @@ -560,19 +560,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props/cs_office/Paper_towels.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -1232,19 +1219,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_crates/supply_crate01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2450,19 +2424,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_plants/claypot03.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2580,19 +2541,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_unique/wheelchair01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: diff --git a/cfg/stripper/apex/maps/c3m1_plankcountry.cfg b/cfg/stripper/apex/maps/c3m1_plankcountry.cfg index 83a869ea0..ba56c69e4 100644 --- a/cfg/stripper/apex/maps/c3m1_plankcountry.cfg +++ b/cfg/stripper/apex/maps/c3m1_plankcountry.cfg @@ -159,15 +159,6 @@ add: "classname" "env_physics_blocker" } ; --- block off corner that SI can become unteleportably stuck -{ - ; invisible block inside corner by tank - "origin" "-10754 8610 216" - "mins" "-62 -58 -56" - "maxs" "62 58 56" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} ; --- block off stuck spot on a copy machine in the building near event { ; stuck fix - upper copy machine diff --git a/cfg/stripper/apex/maps/c4m4_milltown_b.cfg b/cfg/stripper/apex/maps/c4m4_milltown_b.cfg index d82a07cd0..669ee3401 100644 --- a/cfg/stripper/apex/maps/c4m4_milltown_b.cfg +++ b/cfg/stripper/apex/maps/c4m4_milltown_b.cfg @@ -404,49 +404,6 @@ add: ; ===================================================== ; ================ NUISANCE CHANGES ================= ; ===================================================== -add: -; --- prevent SI getting unteleportably stuck behind fence near saferoom -{ - ; cardboard boxes near fence - "solid" "6" - "origin" "3644 -1736 100" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "disableshadows" "1" - "classname" "prop_dynamic" -} -{ - ; invisible block above boxes to boost height - "origin" "3671 -1713 132" - "angles" "0 -15 0" - "mins" "-41 -15 -34" - "maxs" "41 15 42" - "boxmins" "-41 -15 -34" - "boxmaxs" "41 15 42" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -; --- prevent SI getting unteleportably stuck behind two hedges near saferoom -{ - ; invisible block in hole near hedge (outside fence) - "origin" "3668 -1664 132" - "mins" "-60 -32 -36" - "maxs" "60 32 60" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -{ - ; invisible block in hole near hedge (inside fence) - "origin" "3408 -1760 144" - "mins" "-64 -64 -48" - "maxs" "64 64 48" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} - add: ; --- Improve clipping on the fence before map4 one-way drop { diff --git a/cfg/stripper/apex/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/apex/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/apex/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/apex/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/apex/maps/l4d2_ff02_factory.cfg b/cfg/stripper/apex/maps/l4d2_ff02_factory.cfg index ee9385ac3..00292e5d4 100644 --- a/cfg/stripper/apex/maps/l4d2_ff02_factory.cfg +++ b/cfg/stripper/apex/maps/l4d2_ff02_factory.cfg @@ -92,7 +92,7 @@ add: ; ===================================================== -; --- remove 1 dumpster near button event +; --- remove 1 dumpster near button event ; --- 删除机关点的一个垃圾箱 filter: { diff --git a/cfg/stripper/apex/maps/l4d_yama_3.cfg b/cfg/stripper/apex/maps/l4d_yama_3.cfg index 61b5de121..ea51220dc 100644 --- a/cfg/stripper/apex/maps/l4d_yama_3.cfg +++ b/cfg/stripper/apex/maps/l4d_yama_3.cfg @@ -1,4 +1,3 @@ -add: ;----- Versus Relay modify: { diff --git a/cfg/stripper/deadman/global_filters.cfg b/cfg/stripper/deadman/global_filters.cfg index 138d75789..f9adc9c38 100644 --- a/cfg/stripper/deadman/global_filters.cfg +++ b/cfg/stripper/deadman/global_filters.cfg @@ -2,7 +2,7 @@ ; =========== REMOVE AUTO CROUCH TRIGGERS =========== ; ===================================================== -filter: +filter: { "classname" "trigger_auto_crouch" } @@ -38,7 +38,7 @@ modify: modify: { match: - { + { "weapon_selection" "tier2_any" } replace: diff --git a/cfg/stripper/deadman/maps/AirCrash.cfg b/cfg/stripper/deadman/maps/AirCrash.cfg index ae5941748..3dcf8bc4e 100644 --- a/cfg/stripper/deadman/maps/AirCrash.cfg +++ b/cfg/stripper/deadman/maps/AirCrash.cfg @@ -2,7 +2,7 @@ ; =================== Heaven Can Wait 1 ============== ; ======================================================== -; Remove hardcoded witches. They are a random element, +; Remove hardcoded witches. They are a random element, ; they don't work in promod, and disabling them may enable the promod witch. filter: { diff --git a/cfg/stripper/deadman/maps/C12m5_cornfield.cfg b/cfg/stripper/deadman/maps/C12m5_cornfield.cfg index 4c95269f8..3c08c696c 100644 --- a/cfg/stripper/deadman/maps/C12m5_cornfield.cfg +++ b/cfg/stripper/deadman/maps/C12m5_cornfield.cfg @@ -36,7 +36,7 @@ modify: ; --- fix vanishing finale pills in proper placements { match: - { + { "hammerid" "239847" } replace: @@ -46,7 +46,7 @@ modify: } { match: - { + { "hammerid" "239849" } replace: @@ -56,7 +56,7 @@ modify: } { match: - { + { "hammerid" "239851" } replace: @@ -66,7 +66,7 @@ modify: } { match: - { + { "hammerid" "239888" } replace: diff --git a/cfg/stripper/deadman/maps/CityHall.cfg b/cfg/stripper/deadman/maps/CityHall.cfg index 05759f836..469409fa8 100644 --- a/cfg/stripper/deadman/maps/CityHall.cfg +++ b/cfg/stripper/deadman/maps/CityHall.cfg @@ -31,7 +31,7 @@ add: modify: { match: - { + { "model" "models/props_vehicles/cara_95sedan_wrecked.mdl" "angles" "0 109 0" "classname" "prop_physics" @@ -153,7 +153,7 @@ modify: "OnCase04" "spawn4_tamplateForceSpawn0-1" "OnCase05" "spawn5_tamplateForceSpawn0-1" } -} +} ; Remove forklift that allows survivors to skip portion of map just after the security camera filter: diff --git a/cfg/stripper/deadman/maps/OutSkirts.cfg b/cfg/stripper/deadman/maps/OutSkirts.cfg index b740544cb..6bfb47dcc 100644 --- a/cfg/stripper/deadman/maps/OutSkirts.cfg +++ b/cfg/stripper/deadman/maps/OutSkirts.cfg @@ -47,7 +47,7 @@ modify: "OnHealthChanged" "branch_parkSetValue111" } } -modify: +modify: { match: { @@ -55,7 +55,7 @@ modify: } replace: { - "classname" "prop_dynamic" + "classname" "prop_dynamic" "spawnflags" "0" } insert: @@ -64,7 +64,7 @@ modify: } delete: { - "OnHealthChanged" "alarmtimer2-2Enable01" + "OnHealthChanged" "alarmtimer2-2Enable01" "OnHealthChanged" "alarm_sound2PlaySound01" "OnHealthChanged" "alarm_sound2StopSound601" "OnHealthChanged" "alarmtimer2-2Disable601" @@ -96,8 +96,8 @@ modify: } } modify: -{ - match: +{ + match: { "targetname" "caralarm4" } @@ -112,8 +112,8 @@ modify: } } modify: -{ - match: +{ + match: { "targetname" "caralarm5" } @@ -136,13 +136,13 @@ modify: } } modify: -{ +{ match: { "targetname" "caralarm6" } replace: - { + { "classname" "prop_dynamic" "spawnflags" "0" } @@ -152,13 +152,13 @@ modify: } } modify: -{ +{ match: { - "targetname" "caralarm7" + "targetname" "caralarm7" } replace: - { + { "classname" "prop_dynamic" "spawnflags" "0" } @@ -168,7 +168,7 @@ modify: } } modify: -{ +{ match: { "targetname" "caralarm8" @@ -180,7 +180,7 @@ modify: } insert: { - "solid" "6" + "solid" "6" } delete: { @@ -192,7 +192,7 @@ modify: } } modify: -{ +{ match: { "targetname" "caralarm9" @@ -216,8 +216,8 @@ modify: } } modify: -{ - match: +{ + match: { "targetname" "caralarm10" } @@ -229,7 +229,7 @@ modify: insert: { "solid" "6" - } + } delete: { "OnHealthChanged" "alarmtimer10Enable01" @@ -249,8 +249,8 @@ filter: } modify: -{ - match: +{ + match: { "targetname" "car_1" } @@ -265,8 +265,8 @@ modify: "solid" "6" } } -{ - match: +{ + match: { ;windshield "parentname" "car_1" @@ -278,8 +278,8 @@ modify: } modify: -{ - match: +{ + match: { "targetname" "car_5" } @@ -294,8 +294,8 @@ modify: "solid" "6" } } -{ - match: +{ + match: { ; windshield "parentname" "car_5" @@ -307,8 +307,8 @@ modify: } modify: -{ - match: +{ + match: { "model" "models/props_vehicles/cara_95sedan_wrecked.mdl" "angles" "0 161 0" @@ -325,7 +325,7 @@ modify: } } -; Remove randomness of vanilla gun spawns +; Remove randomness of vanilla gun spawns ; (promods tier 1 guns should still vary from match to match) modify: { @@ -337,7 +337,7 @@ modify: { ; Remove all except case 02 "Case06" "wapon_spawn1_point" - "Case05" "wapon_spawn5_point" + "Case05" "wapon_spawn5_point" "Case04" "wapon_spawn4_point" "Case03" "wapon_spawn3_point" "Case01" "wapon_spawn2_point" @@ -358,7 +358,7 @@ modify: } delete: { - ; Force weapon spawns to always be in the supply + ; Force weapon spawns to always be in the supply ; closet at the bottom of the parking garage (case 03) ; AND in the supply closet as you re-enter the area ; with the huge crator/gap in the road (case 04) diff --git a/cfg/stripper/deadman/maps/RiverMotel.cfg b/cfg/stripper/deadman/maps/RiverMotel.cfg index 6c46fd640..b49df78c5 100644 --- a/cfg/stripper/deadman/maps/RiverMotel.cfg +++ b/cfg/stripper/deadman/maps/RiverMotel.cfg @@ -57,7 +57,7 @@ filter: "hammerid" "2100650" } -; Take randomness out of when the trucks roll by in the +; Take randomness out of when the trucks roll by in the ; beginning and cause panic event modify: { @@ -215,7 +215,7 @@ filter: "targetname" "blizko" } -; Remove horde that spawns with crows as you enter the cemetary +; Remove horde that spawns with crows as you enter the cemetary modify: { match: diff --git a/cfg/stripper/deadman/maps/c10m1_caves.cfg b/cfg/stripper/deadman/maps/c10m1_caves.cfg index 3e7b989b6..7fec15601 100644 --- a/cfg/stripper/deadman/maps/c10m1_caves.cfg +++ b/cfg/stripper/deadman/maps/c10m1_caves.cfg @@ -11,7 +11,7 @@ filter: { "hammerid" "1558088" } -{ +{ "hammerid" "1629705" } diff --git a/cfg/stripper/deadman/maps/c10m2_drainage.cfg b/cfg/stripper/deadman/maps/c10m2_drainage.cfg index cd77eb1b8..c6c7a6d71 100644 --- a/cfg/stripper/deadman/maps/c10m2_drainage.cfg +++ b/cfg/stripper/deadman/maps/c10m2_drainage.cfg @@ -64,7 +64,7 @@ filter: { "hammerid" "1787818" } -{ +{ "hammerid" "1787826" } { diff --git a/cfg/stripper/deadman/maps/c10m5_houseboat.cfg b/cfg/stripper/deadman/maps/c10m5_houseboat.cfg index 0058ebff3..f33ae0d10 100644 --- a/cfg/stripper/deadman/maps/c10m5_houseboat.cfg +++ b/cfg/stripper/deadman/maps/c10m5_houseboat.cfg @@ -61,7 +61,7 @@ filter: { "hammerid" "1698830" } -{ +{ "hammerid" "1701209" } @@ -83,7 +83,7 @@ add: modify: { match: - { + { "hammerid" "2242181" } replace: @@ -94,7 +94,7 @@ modify: modify: { match: - { + { "hammerid" "2242183" } replace: @@ -107,7 +107,7 @@ modify: modify: { match: - { + { "hammerid" "1405" } replace: @@ -119,7 +119,7 @@ modify: modify: { match: - { + { "hammerid" "1407" } replace: diff --git a/cfg/stripper/deadman/maps/c11m5_runway.cfg b/cfg/stripper/deadman/maps/c11m5_runway.cfg index 37ea6dcf9..c21d5699a 100644 --- a/cfg/stripper/deadman/maps/c11m5_runway.cfg +++ b/cfg/stripper/deadman/maps/c11m5_runway.cfg @@ -36,7 +36,7 @@ modify: ; --- fix vanishing finale pills in proper placements { match: - { + { "hammerid" "4376594" } replace: @@ -46,7 +46,7 @@ modify: } { match: - { + { "hammerid" "4376596" } replace: @@ -56,7 +56,7 @@ modify: } { match: - { + { "hammerid" "4376652" } replace: @@ -66,7 +66,7 @@ modify: } { match: - { + { "hammerid" "4376676" } replace: diff --git a/cfg/stripper/deadman/maps/c13m4_cutthroatcreek.cfg b/cfg/stripper/deadman/maps/c13m4_cutthroatcreek.cfg index b9adb309f..9a05ac5f4 100644 --- a/cfg/stripper/deadman/maps/c13m4_cutthroatcreek.cfg +++ b/cfg/stripper/deadman/maps/c13m4_cutthroatcreek.cfg @@ -64,7 +64,7 @@ modify: ; --- prevent ammo piles from being filtered out { match: - { + { "hammerid" "2012267" } replace: @@ -74,7 +74,7 @@ modify: } { match: - { + { "hammerid" "2010044" } replace: @@ -84,7 +84,7 @@ modify: } { match: - { + { "hammerid" "2438432" } replace: @@ -94,7 +94,7 @@ modify: } { match: - { + { "hammerid" "2469309" } replace: diff --git a/cfg/stripper/deadman/maps/c1m2_streets.cfg b/cfg/stripper/deadman/maps/c1m2_streets.cfg index 97d6df8a5..8d0d441ed 100644 --- a/cfg/stripper/deadman/maps/c1m2_streets.cfg +++ b/cfg/stripper/deadman/maps/c1m2_streets.cfg @@ -111,7 +111,7 @@ add: } ; --- Block a stuck spot on top of the copy machine in saferoom { - ; invisible block + ; invisible block "origin" "2539 5199 534" "mins" "-32 -17 -86" "maxs" "32 17 86" @@ -121,7 +121,7 @@ add: } ; --- Block a stuck spot on the desk and chairs in saferoom { - ; invisible block + ; invisible block "origin" "2226 5255 508" "mins" "-16 -57.5 -68" "maxs" "16 57.5 68" @@ -131,7 +131,7 @@ add: } ; --- Block Survivors from being tank-punched on top of the white van at the start { - ; invisible block + ; invisible block "origin" "1161 2489 1304" "mins" "-113 -55.5 -575" "maxs" "113 55.5 575" @@ -140,7 +140,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "1319 2485 1496" "mins" "-46 -46.5 -926.5" "maxs" "46 46.5 926.5" @@ -150,7 +150,7 @@ add: } ; --- Block Survivors from being tank-punched on top of the bushes along the road at the start { - ; invisible block + ; invisible block "origin" "2941 2749 1042" "mins" "-383 -40.5 -586.5" "maxs" "383 40.5 586.5" @@ -159,7 +159,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "2656 3296 1470" "mins" "-416 -32 -766" "maxs" "416 32 766" @@ -168,7 +168,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "719 2751 1232" "mins" "-262 -42 -721.5" "maxs" "262 42 721.5" @@ -177,7 +177,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-15 2756 1204" "mins" "-247.5 -34 -804.5" "maxs" "247.5 34 804.5" @@ -186,7 +186,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-737 2752 1192" "mins" "-124 -33 -875" "maxs" "124 33 875" @@ -196,7 +196,7 @@ add: } ; --- Block Survivors from climbing the generator pole near the CEDA tent { - ; invisible block + ; invisible block "origin" "1533 2589 713" "mins" "-6 -6.5 -143" "maxs" "6 6.5 143" @@ -206,7 +206,7 @@ add: } ; --- Block Survivors from getting Tank punched onto an electrical box outside the entrance to the pill building { - ; invisible block + ; invisible block "origin" "-3296 2284 750" "mins" "-54 -18 -622.5" "maxs" "54 18 622.5" diff --git a/cfg/stripper/deadman/maps/c1m3_mall.cfg b/cfg/stripper/deadman/maps/c1m3_mall.cfg index 8356decf4..e2a64170b 100644 --- a/cfg/stripper/deadman/maps/c1m3_mall.cfg +++ b/cfg/stripper/deadman/maps/c1m3_mall.cfg @@ -239,7 +239,7 @@ modify: ; ------------------------------------------- ; LOWER LEVEL DETOUR FIX ; -- remove items from toy-shop route -; ------------------------------------------- +; ------------------------------------------- filter: ; early rooms / bathrooms ; -------------------------- @@ -408,7 +408,7 @@ filter: ; -- logic relays/triggers/ai-director pathing { ; remove setpaths logic relays (so we can just use the onMap of the logic_relay below) - "hammerid" "253923" + "hammerid" "253923" } { ; remove query director logic for selecting either stairway or hallway (shop) route @@ -501,11 +501,10 @@ modify: replace: { "origin" "1599 -1010 298" - "angles" "-90 0 90" + "angles" "-90 0 90" } } ; ------------- - add: { diff --git a/cfg/stripper/deadman/maps/c2m1_highway.cfg b/cfg/stripper/deadman/maps/c2m1_highway.cfg index f3aac5f88..d3fb9e908 100644 --- a/cfg/stripper/deadman/maps/c2m1_highway.cfg +++ b/cfg/stripper/deadman/maps/c2m1_highway.cfg @@ -799,7 +799,7 @@ add: "classname" "env_physics_blocker" } { - ; bush + ; bush "origin" "3837 3909 -640" "mins" "-159 -60 -418.5" "maxs" "159 60 418.5" @@ -857,7 +857,6 @@ add: "classname" "env_physics_blocker" } ; --- props to give SI access to rooftops - add: { diff --git a/cfg/stripper/deadman/maps/c2m2_fairgrounds.cfg b/cfg/stripper/deadman/maps/c2m2_fairgrounds.cfg index ef48ca5d0..2a75a2635 100644 --- a/cfg/stripper/deadman/maps/c2m2_fairgrounds.cfg +++ b/cfg/stripper/deadman/maps/c2m2_fairgrounds.cfg @@ -882,7 +882,7 @@ modify: "hammerid" "1119740" } replace: - { + { "spawnflags" "256" } } diff --git a/cfg/stripper/deadman/maps/c2m3_coaster.cfg b/cfg/stripper/deadman/maps/c2m3_coaster.cfg index 71be0026c..a26a82b27 100644 --- a/cfg/stripper/deadman/maps/c2m3_coaster.cfg +++ b/cfg/stripper/deadman/maps/c2m3_coaster.cfg @@ -22,7 +22,7 @@ ; ================ SAFEROOM NERF ==================== ; ===================================================== -; --- Discourage Survivors from fighting Tanks in the saferoom +; --- Discourage Survivors from fighting Tanks in the saferoom add: { @@ -218,7 +218,7 @@ add: ; --- block shipping boxes to prevent climbing/being punched up on them { - ; invisible block above shipping box near pallet + ; invisible block above shipping box near pallet "origin" "-896 2241 459" "mins" "-68 -200 -330" "maxs" "68 196 330" @@ -613,7 +613,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} { "origin" "-2699 1972 238" "mins" "-4 -8.5 -109.5" @@ -621,7 +621,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} ; --- Block an exploit to skip to the end of the coaster @@ -632,7 +632,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} ; ===================================================== ; ================ NUISANCE CHANGES ================= diff --git a/cfg/stripper/deadman/maps/c2m4_barns.cfg b/cfg/stripper/deadman/maps/c2m4_barns.cfg index eaecd07e6..9f2d81088 100644 --- a/cfg/stripper/deadman/maps/c2m4_barns.cfg +++ b/cfg/stripper/deadman/maps/c2m4_barns.cfg @@ -288,7 +288,7 @@ add: "classname" "env_physics_blocker" } { - "origin" "3302 3840 -102" + "origin" "3302 3840 -102" "mins" "-77.5 -36.5 -93.5" "maxs" "77.5 36.5 93.5" "initialstate" "1" @@ -559,7 +559,7 @@ add: } ; --- block special infected glitch teleport spot on roof after barns { - ; invisible block + ; invisible block "origin" "-3072 -4 126" "mins" "-140 -54.5 -49.5" "maxs" "140 54.5 49.5" @@ -569,7 +569,7 @@ add: } ; --- block jesus spots on props near moustachio area { - ; invisible block + ; invisible block "origin" "2889 2570 229" "mins" "-36.5 -56 -421" "maxs" "36.5 56 421" @@ -578,7 +578,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "2778 2496 229" "mins" "-74 -130.5 -421" "maxs" "74 130.5 421" @@ -587,7 +587,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "2483 2498 378" "mins" "-70.5 -132.5 -570.5" "maxs" "70.5 132.5 570.5" @@ -720,7 +720,7 @@ add: "classname" "env_physics_blocker" } { - "origin" "3120 3928 -108" + "origin" "3120 3928 -108" "mins" "-272 -8 -80" "maxs" "272 8 80" "initialstate" "1" @@ -728,7 +728,7 @@ add: "classname" "env_physics_blocker" } { - "origin" "3384 3576 -108" + "origin" "3384 3576 -108" "mins" "-8 -343.5 -80" "maxs" "8 343.5 80" "initialstate" "1" diff --git a/cfg/stripper/deadman/maps/c2m5_concert.cfg b/cfg/stripper/deadman/maps/c2m5_concert.cfg index 84a1deab0..7ed33a285 100644 --- a/cfg/stripper/deadman/maps/c2m5_concert.cfg +++ b/cfg/stripper/deadman/maps/c2m5_concert.cfg @@ -2,86 +2,6 @@ ; ============== HUNTER CONFIG PROPS ================ ; ===================================================== -{ - "classname" "prop_dynamic" - "angles" "0 180 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-1824 3373 -140.998" -} -{ - "classname" "prop_dynamic" - "angles" "0 0 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-1824 3373 -175.998" -} -{ - "classname" "prop_dynamic" - "angles" "0 166.5 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-1867 3378 -140.998" -} -{ - "classname" "prop_dynamic" - "angles" "0 346.5 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-1867 3378 -175.998" -} -{ - "classname" "prop_dynamic" - "angles" "0 225 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-3762 2375 163.002" -} -{ - "classname" "prop_dynamic" - "angles" "0 45 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-3762 2375 128.002" -} -{ - "classname" "prop_dynamic" - "angles" "0 315 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-3711 2345 163.002" -} -{ - "classname" "prop_dynamic" - "angles" "0 135 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-3711 2345 128.002" -} -{ - "classname" "prop_dynamic" - "angles" "0 45 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-3738 2399 128.002" -} -{ - "classname" "prop_dynamic" - "angles" "0 225 0" - "disableshadows" "1" - "model" "models/props_fairgrounds/anvil_case_casters_64.mdl" - "solid" "6" - "origin" "-3738 2399 163.002" -} { "classname" "prop_dynamic" "angles" "0 180 0" @@ -171,7 +91,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "1833723" } replace: @@ -182,7 +102,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "1833642" } replace: @@ -191,7 +111,7 @@ modify: } } filter: -{ +{ "hammerid" "1833737" } ; --- fix people getting kicked from the game for being in saferoom area @@ -267,7 +187,7 @@ add: ; --- block tops of awnings in starting area to prevent being punched on top of { - ; invisible block + ; invisible block "origin" "-1960 2261 -74" "mins" "-203 -22 -63" "maxs" "203 22 63" diff --git a/cfg/stripper/deadman/maps/c3m1_plankcountry.cfg b/cfg/stripper/deadman/maps/c3m1_plankcountry.cfg index c0c6bf462..2ab367db6 100644 --- a/cfg/stripper/deadman/maps/c3m1_plankcountry.cfg +++ b/cfg/stripper/deadman/maps/c3m1_plankcountry.cfg @@ -159,15 +159,6 @@ add: "classname" "env_physics_blocker" } ; --- block off corner that SI can become unteleportably stuck -{ - ; invisible block inside corner by tank - "origin" "-10754 8610 216" - "mins" "-62 -58 -56" - "maxs" "62 58 56" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} ; --- block off stuck spot on a copy machine in the building near event { ; stuck fix - upper copy machine diff --git a/cfg/stripper/deadman/maps/c3m3_shantytown.cfg b/cfg/stripper/deadman/maps/c3m3_shantytown.cfg index 7107b8215..8a1a15787 100644 --- a/cfg/stripper/deadman/maps/c3m3_shantytown.cfg +++ b/cfg/stripper/deadman/maps/c3m3_shantytown.cfg @@ -305,7 +305,7 @@ add: } ; --- avoid roof jump of shack before event shack { - ; invisible block at jumpspot + ; invisible block at jumpspot "origin" "-874 -3244 100" "mins" "-16 0 0" "maxs" "0 8 64" @@ -664,7 +664,7 @@ add: } ; --- block survivors from climbing barrel stack near the back of the house near the docks { - ; invisible block + ; invisible block "origin" "-5763 -1870 344" "mins" "-43.5 -22 -248.5" "maxs" "43.5 22 248.5" diff --git a/cfg/stripper/deadman/maps/c4m2_sugarmill_a.cfg b/cfg/stripper/deadman/maps/c4m2_sugarmill_a.cfg index 2ba2620f1..9609a3376 100644 --- a/cfg/stripper/deadman/maps/c4m2_sugarmill_a.cfg +++ b/cfg/stripper/deadman/maps/c4m2_sugarmill_a.cfg @@ -372,7 +372,7 @@ add: "classname" "env_physics_blocker" } -; --- reclip the ramp drop sugarmill building to take up less space and fix being unable to jump in some areas +; --- reclip the ramp drop sugarmill building to take up less space and fix being unable to jump in some areas { "origin" "247 -5834 356" "mins" "-12 -502 -256" @@ -519,7 +519,7 @@ add: add: ; --- block SI/tanks falling and getting stuck forever behind four silos opposite long wall { - ; invisible block along hole behind silos (left) + ; invisible block along hole behind silos (left) "origin" "1638 -5280 292" "mins" "-134 -32 -4" "maxs" "134 32 4" diff --git a/cfg/stripper/deadman/maps/c4m3_sugarmill_b.cfg b/cfg/stripper/deadman/maps/c4m3_sugarmill_b.cfg index 248b510cc..37f668ed1 100644 --- a/cfg/stripper/deadman/maps/c4m3_sugarmill_b.cfg +++ b/cfg/stripper/deadman/maps/c4m3_sugarmill_b.cfg @@ -436,7 +436,7 @@ add: } ; --- block SI/tanks falling and getting stuck forever behind four silos opposite long wall { - ; invisible block along hole behind silos (left) + ; invisible block along hole behind silos (left) "origin" "1638 -5280 292" "mins" "-134 -32 -4" "maxs" "134 32 4" diff --git a/cfg/stripper/deadman/maps/c4m4_milltown_b.cfg b/cfg/stripper/deadman/maps/c4m4_milltown_b.cfg index c3ce5de44..16debbaf2 100644 --- a/cfg/stripper/deadman/maps/c4m4_milltown_b.cfg +++ b/cfg/stripper/deadman/maps/c4m4_milltown_b.cfg @@ -103,7 +103,6 @@ modify: ; ===================================================== ; =========== PROMOD USELESS ITEM REMOVAL =========== ; ===================================================== - filter: ; --- filter items that spawn in the map 5 area ; --- didnt remove propane/gas cans and weapon_item_spawns that can spawn propane/gas @@ -204,7 +203,7 @@ filter: "hammerid" "1458857" } { - "hammerid" "2160336" + "hammerid" "2160336" } { "hammerid" "1458859" @@ -405,49 +404,6 @@ add: ; ===================================================== ; ================ NUISANCE CHANGES ================= ; ===================================================== -add: -; --- prevent SI getting unteleportably stuck behind fence near saferoom -{ - ; cardboard boxes near fence - "solid" "6" - "origin" "3644 -1736 100" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "disableshadows" "1" - "classname" "prop_dynamic" -} -{ - ; invisible block above boxes to boost height - "origin" "3671 -1713 132" - "angles" "0 -15 0" - "mins" "-41 -15 -34" - "maxs" "41 15 42" - "boxmins" "-41 -15 -34" - "boxmaxs" "41 15 42" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -; --- prevent SI getting unteleportably stuck behind two hedges near saferoom -{ - ; invisible block in hole near hedge (outside fence) - "origin" "3668 -1664 132" - "mins" "-60 -32 -36" - "maxs" "60 32 60" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -{ - ; invisible block in hole near hedge (inside fence) - "origin" "3408 -1760 144" - "mins" "-64 -64 -48" - "maxs" "64 64 48" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} - add: ; --- Improve clipping on the fence before map4 one-way drop { diff --git a/cfg/stripper/deadman/maps/c5m1_waterfront.cfg b/cfg/stripper/deadman/maps/c5m1_waterfront.cfg index 0dea3e2f1..1ec872c1f 100644 --- a/cfg/stripper/deadman/maps/c5m1_waterfront.cfg +++ b/cfg/stripper/deadman/maps/c5m1_waterfront.cfg @@ -184,7 +184,7 @@ add: "BlockType" "4" "classname" "env_physics_blocker" } -; --- block stuck spot on top of the jukebox +; --- block stuck spot on top of the jukebox { ; invisible block on roof "origin" "-1492 -1685 -287" diff --git a/cfg/stripper/deadman/maps/c5m2_park.cfg b/cfg/stripper/deadman/maps/c5m2_park.cfg index 38ddcdbbe..8c9ca9b78 100644 --- a/cfg/stripper/deadman/maps/c5m2_park.cfg +++ b/cfg/stripper/deadman/maps/c5m2_park.cfg @@ -25,15 +25,6 @@ modify: "hammerid" "1867428" } replace: - { - "classname" "weapon_ammo_spawn" - "spawnflags" "2" - "solid" "6" - "model" "models/props/terror/ammo_stack.mdl" - "disableshadows" "1" - "count" "5" - "angles" "0 0 0" - } } ; ===================================================== @@ -59,7 +50,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "1867414" } replace: @@ -70,7 +61,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "1867416" } replace: @@ -100,7 +91,7 @@ modify: { ; uzi match: - { + { "hammerid" "1867418" } replace: @@ -111,7 +102,7 @@ modify: { ; shotgun match: - { + { "hammerid" "1867424" } replace: @@ -122,7 +113,7 @@ modify: { ; hunting rifle match: - { + { "hammerid" "1867422" } replace: @@ -400,7 +391,7 @@ add: } ; --- Promod props only --- make it easier for SI to cross pole to guard tower before event van { - ; invisible block + ; invisible block "origin" "-9651 -5302 -110" "mins" "-109 -16 -13" "maxs" "109 16 13" @@ -1037,7 +1028,7 @@ add: "rendercolor" "255 255 255" "solid" "6" "origin" "-9752 -5293 -132" -} +} { "classname" "prop_dynamic" "angles" "0 270 90" diff --git a/cfg/stripper/deadman/maps/c5m3_cemetery.cfg b/cfg/stripper/deadman/maps/c5m3_cemetery.cfg index 08919322d..8390f2245 100644 --- a/cfg/stripper/deadman/maps/c5m3_cemetery.cfg +++ b/cfg/stripper/deadman/maps/c5m3_cemetery.cfg @@ -410,7 +410,7 @@ add: filter: ; --- remove barrels due to exploit potential -{ +{ "model" "models/props_urban/oil_drum001.mdl" } diff --git a/cfg/stripper/deadman/maps/c5m4_quarter.cfg b/cfg/stripper/deadman/maps/c5m4_quarter.cfg index 3cc6563af..99c27e591 100644 --- a/cfg/stripper/deadman/maps/c5m4_quarter.cfg +++ b/cfg/stripper/deadman/maps/c5m4_quarter.cfg @@ -148,7 +148,7 @@ modify: add: ; --- block nearly every upper balcony you're not supposed to get to { - ; invisible block + ; invisible block "origin" "-3542 4573 395" "mins" "-41 -64 -171.5" "maxs" "41 64 171.5" @@ -157,7 +157,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-3360 4688 384" "mins" "-243 -50 -161" "maxs" "243 50 161" @@ -166,7 +166,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-2814 2912 615" "mins" "-131 -33 -232" "maxs" "131 33 232" @@ -175,7 +175,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-2401 2912 553" "mins" "-132.5 -33.5 -169.5" "maxs" "132.5 33.5 169.5" @@ -184,7 +184,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-1839 2896 632" "mins" "-261 -50 -409" "maxs" "261 50 409" @@ -193,7 +193,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-3326 2531 535" "mins" "-257.5 -34.5 -279.5" "maxs" "257.5 34.5 279.5" @@ -203,7 +203,7 @@ add: } ; --- block a survivor out of map exploit { - ; invisible block + ; invisible block "origin" "-2704 2272 545" "mins" "-112 -192 -336.5" "maxs" "112 192 336.5" @@ -212,7 +212,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-2513 2440 632" "mins" "-81 -10 -568" "maxs" "81 10 568" @@ -222,7 +222,7 @@ add: } ; --- block the top of the porta potty at the end of the street { - ; invisible block + ; invisible block "origin" "-3673 2557 360" "mins" "-30 -30 -297.5" "maxs" "30 30 297.5" @@ -232,7 +232,7 @@ add: } ; --- block the electrical box survivors could use to get back from the one way drop { - ; invisible block + ; invisible block "origin" "-2950 3042 392" "mins" "-6 -31 -332" "maxs" "6 31 332" @@ -242,7 +242,7 @@ add: } ; --- block the top of the shutter door before entrance to pool room building { - ; invisible block + ; invisible block "origin" "-1490 2981 426" "mins" "-70 -13 -227.5" "maxs" "70 13 227.5" @@ -252,7 +252,7 @@ add: } ; --- block four jesus spots on the tops of the shutter doors and electrical box after the pool room drop { - ; invisible block + ; invisible block "origin" "-1419 2115 446" "mins" "-12 -69 -239.5" "maxs" "12 69 239.5" @@ -289,7 +289,7 @@ add: } ; --- blocked the top of the green fence after the pool room drop { - ; invisible block + ; invisible block "origin" "-1155 1603 292" "mins" "-131 -2.5 -229.5" "maxs" "131 2.5 229.5" diff --git a/cfg/stripper/deadman/maps/c5m5_bridge.cfg b/cfg/stripper/deadman/maps/c5m5_bridge.cfg index feeddb930..6516b6900 100644 --- a/cfg/stripper/deadman/maps/c5m5_bridge.cfg +++ b/cfg/stripper/deadman/maps/c5m5_bridge.cfg @@ -46,7 +46,7 @@ filter: { "targetname" "InstanceAuto9-car_physics" } -{ +{ "parentname" "InstanceAuto9-car_physics" } @@ -54,7 +54,7 @@ filter: { "targetname" "InstanceAuto19-car_physics" } -{ +{ "parentname" "InstanceAuto19-car_physics" } @@ -62,7 +62,7 @@ filter: { "targetname" "InstanceAuto5-car_physics" } -{ +{ "parentname" "InstanceAuto5-car_physics" } @@ -70,7 +70,7 @@ filter: { "targetname" "InstanceAuto4-car_physics" } -{ +{ "parentname" "InstanceAuto4-car_physics" } @@ -78,7 +78,7 @@ filter: { "targetname" "InstanceAuto17-car_physics" } -{ +{ "parentname" "InstanceAuto17-car_physics" } @@ -86,7 +86,7 @@ filter: { "targetname" "InstanceAuto6-car_physics" } -{ +{ "parentname" "InstanceAuto6-car_physics" } @@ -94,7 +94,7 @@ filter: { "targetname" "InstanceAuto26-car_physics" } -{ +{ "parentname" "InstanceAuto26-car_physics" } @@ -102,7 +102,7 @@ filter: { "targetname" "InstanceAuto7-car_physics" } -{ +{ "parentname" "InstanceAuto7-car_physics" } @@ -110,7 +110,7 @@ filter: { "targetname" "InstanceAuto20-car_physics" } -{ +{ "parentname" "InstanceAuto20-car_physics" } @@ -118,7 +118,7 @@ filter: { "targetname" "InstanceAuto21-car_physics" } -{ +{ "parentname" "InstanceAuto21-car_physics" } @@ -126,7 +126,7 @@ filter: { "targetname" "InstanceAuto23-car_physics" } -{ +{ "parentname" "InstanceAuto23-car_physics" } @@ -134,7 +134,7 @@ filter: { "targetname" "InstanceAuto22-car_physics" } -{ +{ "parentname" "InstanceAuto22-car_physics" } @@ -142,7 +142,7 @@ filter: { "targetname" "InstanceAuto24-car_physics" } -{ +{ "parentname" "InstanceAuto24-car_physics" } @@ -150,7 +150,7 @@ filter: { "targetname" "InstanceAuto25-car_physics" } -{ +{ "parentname" "InstanceAuto25-car_physics" } @@ -158,7 +158,7 @@ filter: { "targetname" "InstanceAuto8-car_physics" } -{ +{ "parentname" "InstanceAuto8-car_physics" } @@ -1680,7 +1680,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "2338606" } replace: @@ -1691,7 +1691,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "2338604" } replace: @@ -1702,7 +1702,7 @@ modify: { ; no hr fix match: - { + { "hammerid" "2338608" } replace: diff --git a/cfg/stripper/deadman/maps/c6m1_riverbank.cfg b/cfg/stripper/deadman/maps/c6m1_riverbank.cfg index 429ba2e5f..b99633dcd 100644 --- a/cfg/stripper/deadman/maps/c6m1_riverbank.cfg +++ b/cfg/stripper/deadman/maps/c6m1_riverbank.cfg @@ -118,7 +118,7 @@ filter: "hammerid" "1003058" } { - ; car 10 - sprite3 + ; car 10 - sprite3 "hammerid" "1003061" } { @@ -126,7 +126,7 @@ filter: "hammerid" "1003064" } { - ; car 10 - spotlight1 + ; car 10 - spotlight1 "hammerid" "1003070" } { @@ -154,7 +154,7 @@ filter: "hammerid" "989868" } { - ; car 11 - sprite3 + ; car 11 - sprite3 "hammerid" "989871" } { @@ -162,7 +162,7 @@ filter: "hammerid" "989874" } { - ; car 11 - spotlight1 + ; car 11 - spotlight1 "hammerid" "989880" } { @@ -190,7 +190,7 @@ filter: "hammerid" "988092" } { - ; car 12 - sprite3 + ; car 12 - sprite3 "hammerid" "988095" } { @@ -198,7 +198,7 @@ filter: "hammerid" "988098" } { - ; car 12 - spotlight1 + ; car 12 - spotlight1 "hammerid" "988104" } { @@ -226,7 +226,7 @@ filter: "hammerid" "986316" } { - ; car 13 - sprite3 + ; car 13 - sprite3 "hammerid" "986319" } { @@ -234,7 +234,7 @@ filter: "hammerid" "986322" } { - ; car 13 - spotlight1 + ; car 13 - spotlight1 "hammerid" "986328" } { @@ -262,7 +262,7 @@ filter: "hammerid" "993420" } { - ; car 14 - sprite3 + ; car 14 - sprite3 "hammerid" "993423" } { @@ -270,7 +270,7 @@ filter: "hammerid" "993426" } { - ; car 14 - spotlight1 + ; car 14 - spotlight1 "hammerid" "993432" } { @@ -414,7 +414,7 @@ add: "BlockType" "1" "classname" "env_physics_blocker" } -; --- block shortcut to saferoom over tent after witch bride +; --- block shortcut to saferoom over tent after witch bride { ; invisible block above tent "origin" "-2744 184 1680" diff --git a/cfg/stripper/deadman/maps/c6m3_port.cfg b/cfg/stripper/deadman/maps/c6m3_port.cfg index 282cc6eb8..79466e6de 100644 --- a/cfg/stripper/deadman/maps/c6m3_port.cfg +++ b/cfg/stripper/deadman/maps/c6m3_port.cfg @@ -29,7 +29,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "21242" } replace: @@ -40,7 +40,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "21252" } replace: diff --git a/cfg/stripper/deadman/maps/c8m3_sewers.cfg b/cfg/stripper/deadman/maps/c8m3_sewers.cfg index 58319ec47..0717c2bdc 100644 --- a/cfg/stripper/deadman/maps/c8m3_sewers.cfg +++ b/cfg/stripper/deadman/maps/c8m3_sewers.cfg @@ -127,7 +127,7 @@ add: filter: ; --- trash cans that could block survivor progress at ladder choke -{ +{ "model" "models/props_street/trashbin01.mdl" } diff --git a/cfg/stripper/deadman/maps/c8m4_interior.cfg b/cfg/stripper/deadman/maps/c8m4_interior.cfg index f727a737d..63b0bf629 100644 --- a/cfg/stripper/deadman/maps/c8m4_interior.cfg +++ b/cfg/stripper/deadman/maps/c8m4_interior.cfg @@ -41,7 +41,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "6567273" } replace: @@ -52,7 +52,7 @@ modify: { ; remove hr filter: - { + { "hammerid" "6567279" } } diff --git a/cfg/stripper/deadman/maps/c8m5_rooftop.cfg b/cfg/stripper/deadman/maps/c8m5_rooftop.cfg index 570196dd5..34785b86f 100644 --- a/cfg/stripper/deadman/maps/c8m5_rooftop.cfg +++ b/cfg/stripper/deadman/maps/c8m5_rooftop.cfg @@ -67,7 +67,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "3319415" } replace: @@ -78,7 +78,7 @@ modify: { ; remove hr filter: - { + { "hammerid" "3319419" } } @@ -97,7 +97,7 @@ add: "BlockType" "1" "classname" "env_physics_blocker" } -; --- block SI ladder inaccessible spot you can zombie jump to +; --- block SI ladder inaccessible spot you can zombie jump to { ; invisible block above roof section "origin" "5984 7760 7153" diff --git a/cfg/stripper/deadman/maps/c9m1_alleys.cfg b/cfg/stripper/deadman/maps/c9m1_alleys.cfg index 736bc27aa..3a8e82eba 100644 --- a/cfg/stripper/deadman/maps/c9m1_alleys.cfg +++ b/cfg/stripper/deadman/maps/c9m1_alleys.cfg @@ -77,7 +77,7 @@ add: ; modify: { - match: + match: { "targetname" "fire_howitzer" } diff --git a/cfg/stripper/deadman/maps/cdta_04onarail.cfg b/cfg/stripper/deadman/maps/cdta_04onarail.cfg index 2f3f51645..b2591f48f 100644 --- a/cfg/stripper/deadman/maps/cdta_04onarail.cfg +++ b/cfg/stripper/deadman/maps/cdta_04onarail.cfg @@ -27,7 +27,7 @@ modify: "count" "4" "weapon_selection" "tier1_shotgun" } -} +} ; Make it so the whole team doesn't have to be on the train track to start the event. ; This functionality was added by the map creator in newer versions of the map. diff --git a/cfg/stripper/deadman/maps/cdta_05finalroad.cfg b/cfg/stripper/deadman/maps/cdta_05finalroad.cfg index bd1a205e8..b63baa3dc 100644 --- a/cfg/stripper/deadman/maps/cdta_05finalroad.cfg +++ b/cfg/stripper/deadman/maps/cdta_05finalroad.cfg @@ -26,7 +26,7 @@ modify: match: { "angles" "0 99 90" - "classname" "weapon_spawn" + "classname" "weapon_spawn" } replace: { @@ -168,7 +168,6 @@ add: "pitchstart" "100" "lfotype" "0" "pitch" "100" - } ;Uncomment to prevent teams from running tank back to safe room diff --git a/cfg/stripper/deadman/maps/cwm4_building.cfg b/cfg/stripper/deadman/maps/cwm4_building.cfg index 652ea583b..dd0e01b98 100644 --- a/cfg/stripper/deadman/maps/cwm4_building.cfg +++ b/cfg/stripper/deadman/maps/cwm4_building.cfg @@ -44,7 +44,7 @@ add: } ; Make tank spawns equal for both teams -; This just starts a reoccurring script that will teleport the +; This just starts a reoccurring script that will teleport the ; tank to a safe distance away from the survivors once he spawns modify: { diff --git a/cfg/stripper/deadman/maps/damitdc3.cfg b/cfg/stripper/deadman/maps/damitdc3.cfg index 2f389ca77..96ca1196e 100644 --- a/cfg/stripper/deadman/maps/damitdc3.cfg +++ b/cfg/stripper/deadman/maps/damitdc3.cfg @@ -139,22 +139,17 @@ modify: delete: { ; Delete all cases that block nav - ;BAD - blocks nav "OnCase01" "waredoor_blockerBlockNav0-1" "OnCase01" "waredoor1oKill0-1" - ;GOOD - doesn't block nav (c = closed | o = open) ;"OnCase02" "waredoor1cKill0-1" - ; BAD "OnCase04" "waredoor1oKill0-1" "OnCase04" "waredoor_blockerBlockNav0-1" - ;GOOD ;"OnCase03" "waredoor1cKill0-1" ;"OnCase06" "waredoor1cKill0-1" - ;BAD "OnCase05" "waredoor_blockerBlockNav0-1" "OnCase05" "waredoor1oKill0-1" diff --git a/cfg/stripper/deadman/maps/hf03_themansion.cfg b/cfg/stripper/deadman/maps/hf03_themansion.cfg index 00c45a348..1c9045c19 100644 --- a/cfg/stripper/deadman/maps/hf03_themansion.cfg +++ b/cfg/stripper/deadman/maps/hf03_themansion.cfg @@ -24,7 +24,7 @@ filter: { "targetname" "navblocker_path2" } -{ +{ "targetname" "navblocker_path1" } { diff --git a/cfg/stripper/deadman/maps/l4d2_bts01_forest.cfg b/cfg/stripper/deadman/maps/l4d2_bts01_forest.cfg index 56c28722a..51b0b8ce7 100644 --- a/cfg/stripper/deadman/maps/l4d2_bts01_forest.cfg +++ b/cfg/stripper/deadman/maps/l4d2_bts01_forest.cfg @@ -72,7 +72,7 @@ modify: modify: { match: - { + { "classname" "func_breakable" "origin" "1631 -6794.44 5689.03" } @@ -85,7 +85,7 @@ modify: modify: { match: - { + { "classname" "func_breakable" "origin" "1966.7 -6566.51 5684.03" } @@ -118,7 +118,6 @@ modify: ;;;;;;;==== "Fix" Survivors getting stuck in the ground in safe room modify: - { match: { @@ -129,8 +128,6 @@ modify: "OnTrigger" "directorForceSurvivorPositions0-1" } } - - { match: { diff --git a/cfg/stripper/deadman/maps/l4d2_bts06_school.cfg b/cfg/stripper/deadman/maps/l4d2_bts06_school.cfg index a8ce246f9..ba5febdaf 100644 --- a/cfg/stripper/deadman/maps/l4d2_bts06_school.cfg +++ b/cfg/stripper/deadman/maps/l4d2_bts06_school.cfg @@ -56,7 +56,6 @@ modify: { ; Remove message that says to get the vaccines "OnTrigger" "final_ins9ShowHint23.6-1" - ; Make it so the heli actually leaves without making us grab vaccines "OnTrigger" "final_counter_heliAdd123.6-1" "FinaleEscapeStarted" "final_transort_heliAdd101" @@ -104,7 +103,7 @@ modify: } delete: { - ; Remove pilot sounds coming out of radio and + ; Remove pilot sounds coming out of radio and ; notifcation to touch radio "OnHitMax" "heli_varTrigger1.5-1" } @@ -130,7 +129,7 @@ modify: "targetname" "random_trigger" } replace: - { + { "StartDisabled" "1" } diff --git a/cfg/stripper/deadman/maps/l4d2_darkblood03_platform.cfg b/cfg/stripper/deadman/maps/l4d2_darkblood03_platform.cfg index d0fd412fc..2f084f92f 100644 --- a/cfg/stripper/deadman/maps/l4d2_darkblood03_platform.cfg +++ b/cfg/stripper/deadman/maps/l4d2_darkblood03_platform.cfg @@ -1,7 +1,7 @@ ; Dark Blood 3 ; Strip out health cabinet in end safe room -; and fuel barrels that are always on other sides +; and fuel barrels that are always on other sides ; of walls in the static pathing we've chosen filter: { diff --git a/cfg/stripper/deadman/maps/l4d_dbd2dc_anna_is_gone.cfg b/cfg/stripper/deadman/maps/l4d_dbd2dc_anna_is_gone.cfg index c2ebf08a2..f7480b127 100644 --- a/cfg/stripper/deadman/maps/l4d_dbd2dc_anna_is_gone.cfg +++ b/cfg/stripper/deadman/maps/l4d_dbd2dc_anna_is_gone.cfg @@ -100,7 +100,7 @@ modify: } ; Make it so the heli always comes -modify: +modify: { match: { @@ -130,7 +130,7 @@ modify: } } -; Make all hittables non-hittable except the green car in the beginning, +; Make all hittables non-hittable except the green car in the beginning, ; the dumpster just before the alarm car, and the alarm car filter: { @@ -368,7 +368,7 @@ modify: } { match: - { + { "targetname" "hunting_rifle_3" } replace: @@ -379,7 +379,7 @@ modify: { match: { - "targetname" "rifle_b_3" + "targetname" "rifle_b_3" } replace: { @@ -508,7 +508,7 @@ modify: add: { "classname" "prop_dynamic" - "origin" "-1303 6296 -500" + "origin" "-1303 6296 -500" "targetname" "exploit_block_1" "angles" "0 90 0" "solid" "6" diff --git a/cfg/stripper/deadman/maps/l4d_dbd2dc_clean_up.cfg b/cfg/stripper/deadman/maps/l4d_dbd2dc_clean_up.cfg index 2fe3499e2..76aa7eea6 100644 --- a/cfg/stripper/deadman/maps/l4d_dbd2dc_clean_up.cfg +++ b/cfg/stripper/deadman/maps/l4d_dbd2dc_clean_up.cfg @@ -125,7 +125,7 @@ modify: } ; Slow down the zombie spawning because it grows continuously and -; servers are nearly crashing because there is too much horde to handle. +; servers are nearly crashing because there is too much horde to handle. modify: { match: @@ -256,7 +256,7 @@ modify: } ; Slow down the zombie spawning because it grows continuously and -; servers are nearly crashing because there is too much horde to handle. +; servers are nearly crashing because there is too much horde to handle. modify: { match: diff --git a/cfg/stripper/deadman/maps/l4d_dbd2dc_new_dawn.cfg b/cfg/stripper/deadman/maps/l4d_dbd2dc_new_dawn.cfg index 233a52c64..da60ed2ea 100644 --- a/cfg/stripper/deadman/maps/l4d_dbd2dc_new_dawn.cfg +++ b/cfg/stripper/deadman/maps/l4d_dbd2dc_new_dawn.cfg @@ -1,6 +1,6 @@ ; ====================================================== ; =============== Dead Before Dawn DC: 5 ============= -; ====================================================== +; ====================================================== ; Remove the radio voice ;filter: @@ -71,7 +71,6 @@ modify: { ; First Aid Kit "item2" "0" - ; Pipe Bombs "item5" "0" @@ -106,7 +105,7 @@ modify: { "targetname" "advancementtrigger_2" } - insert: + insert: { "OnTrigger" "tank_early_timer_2Disable0-1" "OnTrigger" "tank_spawned_timerEnable0-1" @@ -176,7 +175,6 @@ add: "pitchstart" "100" "lfotype" "0" "pitch" "100" - } ; Remove rooftop tank @@ -287,7 +285,6 @@ add: ; car laying on its side shortly after the white van in exploit_block_2 ; with the fire at the base of it can be hopped over { - "origin" "-432 371 -830" "classname" "prop_dynamic" "targetname" "exploit_block_3" diff --git a/cfg/stripper/deadman/maps/l4d_dbd2dc_the_mall.cfg b/cfg/stripper/deadman/maps/l4d_dbd2dc_the_mall.cfg index 9ddf00179..93e0190c8 100644 --- a/cfg/stripper/deadman/maps/l4d_dbd2dc_the_mall.cfg +++ b/cfg/stripper/deadman/maps/l4d_dbd2dc_the_mall.cfg @@ -324,7 +324,7 @@ modify: } } -; Block exploit to jump from cardboard boxes -> fusebox -> shelves to +; Block exploit to jump from cardboard boxes -> fusebox -> shelves to ; skip walking on the boards in the warehouse. add: { @@ -614,8 +614,8 @@ modify: } delete: { - ; Remove cases that spawn special infected, - ; Remove cases that trigger panic events, + ; Remove cases that spawn special infected, + ; Remove cases that trigger panic events, ; Remove cases that enable new events "OnCase03" "directorPanicEvent2-1" "OnCase04" "event_02_boss_spawner_roof01SpawnZombietank8-1" diff --git a/cfg/stripper/deadman/maps/l4d_dbd2dc_undead_center.cfg b/cfg/stripper/deadman/maps/l4d_dbd2dc_undead_center.cfg index 467fa88c1..c914c57af 100644 --- a/cfg/stripper/deadman/maps/l4d_dbd2dc_undead_center.cfg +++ b/cfg/stripper/deadman/maps/l4d_dbd2dc_undead_center.cfg @@ -1,6 +1,6 @@ ; ====================================================== ; =============== Dead Before Dawn DC: 4 ============= -; ====================================================== +; ====================================================== ; Remove the radio voice filter: @@ -100,7 +100,7 @@ add: ; Make forklift move faster ;modify: ;{ -; match: +; match: ; { ; "targetname" "forklift_mover" ; } @@ -214,7 +214,7 @@ add: "classname" "prop_dynamic" } { - ; scaffolding inside of the new scaffolding with a strange collision box to + ; scaffolding inside of the new scaffolding with a strange collision box to ; prevent survivors from going inside the new scaffolding on the main floor "solid" "2" "origin" "-7230 9107 -677" diff --git a/cfg/stripper/deadman/maps/l4d_yama_3.cfg b/cfg/stripper/deadman/maps/l4d_yama_3.cfg index 21b10f1be..786c1faf9 100644 --- a/cfg/stripper/deadman/maps/l4d_yama_3.cfg +++ b/cfg/stripper/deadman/maps/l4d_yama_3.cfg @@ -1,9 +1,8 @@ -add: ;----- Versus Relay modify: { match: - { + { "classname" "info_gamemode" } insert: diff --git a/cfg/stripper/deadman/maps/plaza_espana.cfg b/cfg/stripper/deadman/maps/plaza_espana.cfg index 11c8bb6d5..85712d38e 100644 --- a/cfg/stripper/deadman/maps/plaza_espana.cfg +++ b/cfg/stripper/deadman/maps/plaza_espana.cfg @@ -51,7 +51,7 @@ add: ;;;;;; ----- Make the vehicle dropping through the roof in the subway static ----- ;;;;;; modify: -{ +{ match: { "targetname" "aleatorio" @@ -67,7 +67,6 @@ modify: } insert: { - "OnCase01" "suelo3Break0-1" "OnCase02" "suelo3Break0-1" "OnCase03" "suelo3Break0-1" diff --git a/cfg/stripper/deadman/maps/uf2_rooftops.cfg b/cfg/stripper/deadman/maps/uf2_rooftops.cfg index 78afb0290..d4672031f 100644 --- a/cfg/stripper/deadman/maps/uf2_rooftops.cfg +++ b/cfg/stripper/deadman/maps/uf2_rooftops.cfg @@ -14,7 +14,7 @@ modify: { "OnMapSpawn" "apartment_door_navblockBlockNav0-1" } -} +} modify: { match: diff --git a/cfg/stripper/deadman/maps/uf3_harbor.cfg b/cfg/stripper/deadman/maps/uf3_harbor.cfg index be3644145..aba357666 100644 --- a/cfg/stripper/deadman/maps/uf3_harbor.cfg +++ b/cfg/stripper/deadman/maps/uf3_harbor.cfg @@ -305,7 +305,7 @@ modify: delete: { ; FenceD - blocks front door entrance to water-side boathouse - ; FenceC & FenceB - block survivors from cutting between two + ; FenceC & FenceB - block survivors from cutting between two ; boathouses instead of going into them ; FenceA - blocks exit door from land-side boathouse diff --git a/cfg/stripper/deadman/maps/uf4_airfield.cfg b/cfg/stripper/deadman/maps/uf4_airfield.cfg index 23c6b290f..9b1bfb9db 100644 --- a/cfg/stripper/deadman/maps/uf4_airfield.cfg +++ b/cfg/stripper/deadman/maps/uf4_airfield.cfg @@ -42,10 +42,9 @@ modify: { "Branch01" "branch_finale_cct" } - } add: -{ +{ "classname" "logic_branch" "InitialValue" "1" "targetname" "branch_finale_cct" diff --git a/cfg/stripper/deadman/maps/uz_town.cfg b/cfg/stripper/deadman/maps/uz_town.cfg index ca07feb39..6f192db47 100644 --- a/cfg/stripper/deadman/maps/uz_town.cfg +++ b/cfg/stripper/deadman/maps/uz_town.cfg @@ -12,7 +12,6 @@ modify: "OnPressed" "directorBeginScriptdirector_onslaught.nut1-1" } } - ; --- Reduce time it takes to open door at end saferoom modify: { diff --git a/cfg/stripper/eq/global_filters.cfg b/cfg/stripper/eq/global_filters.cfg index efe619dad..6f1a8d478 100644 --- a/cfg/stripper/eq/global_filters.cfg +++ b/cfg/stripper/eq/global_filters.cfg @@ -507,19 +507,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props/cs_office/Paper_towels.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -1179,19 +1166,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_crates/supply_crate01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2397,19 +2371,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_plants/claypot03.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2527,19 +2488,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_unique/wheelchair01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: diff --git a/cfg/stripper/eq/maps/c3m1_plankcountry.cfg b/cfg/stripper/eq/maps/c3m1_plankcountry.cfg index a01855f4a..86ec0de3c 100644 --- a/cfg/stripper/eq/maps/c3m1_plankcountry.cfg +++ b/cfg/stripper/eq/maps/c3m1_plankcountry.cfg @@ -138,15 +138,6 @@ add: "classname" "env_physics_blocker" } ; --- block off corner that SI can become unteleportably stuck -{ - ; invisible block inside corner by tank - "origin" "-10754 8610 216" - "mins" "-62 -58 -56" - "maxs" "62 58 56" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} ; --- block off stuck spot on a copy machine in the building near event { ; stuck fix - upper copy machine diff --git a/cfg/stripper/eq/maps/c4m4_milltown_b.cfg b/cfg/stripper/eq/maps/c4m4_milltown_b.cfg index c2e49ec16..43c26991f 100644 --- a/cfg/stripper/eq/maps/c4m4_milltown_b.cfg +++ b/cfg/stripper/eq/maps/c4m4_milltown_b.cfg @@ -384,49 +384,6 @@ add: ; ===================================================== ; ================ NUISANCE CHANGES ================= ; ===================================================== -add: -; --- prevent SI getting unteleportably stuck behind fence near saferoom -{ - ; cardboard boxes near fence - "solid" "6" - "origin" "3644 -1736 100" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "disableshadows" "1" - "classname" "prop_dynamic" -} -{ - ; invisible block above boxes to boost height - "origin" "3671 -1713 132" - "angles" "0 -15 0" - "mins" "-41 -15 -34" - "maxs" "41 15 42" - "boxmins" "-41 -15 -34" - "boxmaxs" "41 15 42" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -; --- prevent SI getting unteleportably stuck behind two hedges near saferoom -{ - ; invisible block in hole near hedge (outside fence) - "origin" "3668 -1664 132" - "mins" "-60 -32 -36" - "maxs" "60 32 60" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -{ - ; invisible block in hole near hedge (inside fence) - "origin" "3408 -1760 144" - "mins" "-64 -64 -48" - "maxs" "64 64 48" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} - add: ; --- Improve clipping on the fence before map4 one-way drop { diff --git a/cfg/stripper/eq/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/eq/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/eq/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/eq/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/eq/maps/l4d_yama_3.cfg b/cfg/stripper/eq/maps/l4d_yama_3.cfg index 61b5de121..ea51220dc 100644 --- a/cfg/stripper/eq/maps/l4d_yama_3.cfg +++ b/cfg/stripper/eq/maps/l4d_yama_3.cfg @@ -1,4 +1,3 @@ -add: ;----- Versus Relay modify: { diff --git a/cfg/stripper/neomod/global_filters.cfg b/cfg/stripper/neomod/global_filters.cfg index 5407c23ba..1003eb8d9 100644 --- a/cfg/stripper/neomod/global_filters.cfg +++ b/cfg/stripper/neomod/global_filters.cfg @@ -127,17 +127,6 @@ modify: "classname" "prop_physics" } } -{ - match: - { - "classname" "prop_physics_multiplayer" - "model" "models/props_vehicles/police_car.mdl" - } - replace: - { - "classname" "prop_physics" - } -} { match: { @@ -3715,17 +3704,6 @@ modify: "spawnflags" "4" } } -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_interiors/foldingchair.mdl" - } - insert: - { - "spawnflags" "4" - } -} { match: { @@ -4676,4 +4654,4 @@ modify: { "spawnflags" "4" } -} \ No newline at end of file +} diff --git a/cfg/stripper/neomod/maps/c10m3_ranchhouse.cfg b/cfg/stripper/neomod/maps/c10m3_ranchhouse.cfg index d122e2ef3..5d9d2a11b 100644 --- a/cfg/stripper/neomod/maps/c10m3_ranchhouse.cfg +++ b/cfg/stripper/neomod/maps/c10m3_ranchhouse.cfg @@ -338,7 +338,6 @@ modify: replace: { "BreakableType" "0" - "minhealthdmg" "0" } delete: diff --git a/cfg/stripper/neomod/maps/c11m2_offices.cfg b/cfg/stripper/neomod/maps/c11m2_offices.cfg index 8bce37887..66317af6a 100644 --- a/cfg/stripper/neomod/maps/c11m2_offices.cfg +++ b/cfg/stripper/neomod/maps/c11m2_offices.cfg @@ -86,7 +86,7 @@ filter: { "hammerid" "7941040" } -{ +{ "hammerid" "9120351" } { diff --git a/cfg/stripper/neomod/maps/c11m3_garage.cfg b/cfg/stripper/neomod/maps/c11m3_garage.cfg index 9dca67a1e..d39d15a37 100644 --- a/cfg/stripper/neomod/maps/c11m3_garage.cfg +++ b/cfg/stripper/neomod/maps/c11m3_garage.cfg @@ -1221,14 +1221,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/neomod/maps/c11m4_terminal.cfg b/cfg/stripper/neomod/maps/c11m4_terminal.cfg index 105f0738d..1ac523083 100644 --- a/cfg/stripper/neomod/maps/c11m4_terminal.cfg +++ b/cfg/stripper/neomod/maps/c11m4_terminal.cfg @@ -345,7 +345,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Barricades between the bathrooms and departure gate +; --- Barricades between the bathrooms and departure gate { "classname" "prop_dynamic" "origin" "3087 2776 152" @@ -429,14 +429,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "2792 4254 152" - "angles" "0 180 0" - "model" "models/props_unique/airport/temp_barricade.mdl" - "solid" "6" - "disableshadows" "1" -} { "classname" "prop_dynamic" "origin" "2792 4588 152" diff --git a/cfg/stripper/neomod/maps/c12m5_cornfield.cfg b/cfg/stripper/neomod/maps/c12m5_cornfield.cfg index 80ff80db9..c012e02c2 100644 --- a/cfg/stripper/neomod/maps/c12m5_cornfield.cfg +++ b/cfg/stripper/neomod/maps/c12m5_cornfield.cfg @@ -121,7 +121,6 @@ add: "solid" "6" "fadescale" "0" } - ; ############# MAP CLIPPING AND ISSUES ############# ; ===================================================== diff --git a/cfg/stripper/neomod/maps/c2m2_fairgrounds.cfg b/cfg/stripper/neomod/maps/c2m2_fairgrounds.cfg index c1d998685..b4496d18c 100644 --- a/cfg/stripper/neomod/maps/c2m2_fairgrounds.cfg +++ b/cfg/stripper/neomod/maps/c2m2_fairgrounds.cfg @@ -439,14 +439,6 @@ add: "initialstate" "1" "BlockType" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-1152 1072 391" - "mins" "-64 -64 -377" - "maxs" "64 64 377" - "initialstate" "1" - "BlockType" "1" -} { "classname" "env_physics_blocker" "origin" "-1008 1104 391" @@ -1004,7 +996,7 @@ add: "disableshadows" "1" "rendercolor" "0 180 246" } -; --- Add collision to sign and block LOS +; --- Add collision to sign and block LOS { "classname" "logic_auto" "OnMapSpawn" "losfix_gamehut_sign,AddOutput,mins -104 -2 -34,0,-1" @@ -1925,7 +1917,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Add collision to sign and block LOS +; --- Add collision to sign and block LOS { "classname" "logic_auto" "OnMapSpawn" "losfix_saferoom_sign,AddOutput,mins -2 -104 -45,0,-1" diff --git a/cfg/stripper/neomod/maps/c2m3_coaster.cfg b/cfg/stripper/neomod/maps/c2m3_coaster.cfg index 47f1c727f..3b01a9bea 100644 --- a/cfg/stripper/neomod/maps/c2m3_coaster.cfg +++ b/cfg/stripper/neomod/maps/c2m3_coaster.cfg @@ -227,7 +227,7 @@ add: { "classname" "env_physics_blocker" "origin" "-896 2241 560" - "mins" " -68 -197 -400" + "mins" "-68 -197 -400" "maxs" "68 197 400" "initialstate" "1" "BlockType" "1" @@ -1478,4 +1478,4 @@ add: "classname" "info_target" "origin" "-5252 1812 4" "targetname" "end_railing_lighting" -} \ No newline at end of file +} diff --git a/cfg/stripper/neomod/maps/c2m5_concert.cfg b/cfg/stripper/neomod/maps/c2m5_concert.cfg index f0e8919c9..8ed8e7c1d 100644 --- a/cfg/stripper/neomod/maps/c2m5_concert.cfg +++ b/cfg/stripper/neomod/maps/c2m5_concert.cfg @@ -228,7 +228,6 @@ add: ; --- Disable shadows early on props added that start with shadows enabled to ensure the fix works "OnMapSpawn" "anv_mapfixes_yesdraw_infecteddoorway,DisableShadow,,29,-1" "OnMapSpawn" "anv_mapfixes_yesdraw_infectedroom,DisableShadow,,29,-1" - } ; --- Additional toggle on finale start modify: diff --git a/cfg/stripper/neomod/maps/c3m2_swamp.cfg b/cfg/stripper/neomod/maps/c3m2_swamp.cfg index 2d5f98ef7..4a7f85b9b 100644 --- a/cfg/stripper/neomod/maps/c3m2_swamp.cfg +++ b/cfg/stripper/neomod/maps/c3m2_swamp.cfg @@ -660,14 +660,6 @@ add: "initialstate" "1" "BlockType" "1" } -{ - "classname" "env_physics_blocker" - "origin" "4481 1943 391" - "mins" "-4 -38 -249" - "maxs" "4 38 249" - "initialstate" "1" - "BlockType" "1" -} { "classname" "env_physics_blocker" "origin" "4481 1772 391" diff --git a/cfg/stripper/neomod/maps/c3m4_plantation.cfg b/cfg/stripper/neomod/maps/c3m4_plantation.cfg index 9f0ae2f0b..f414cf4f5 100644 --- a/cfg/stripper/neomod/maps/c3m4_plantation.cfg +++ b/cfg/stripper/neomod/maps/c3m4_plantation.cfg @@ -814,16 +814,6 @@ add: "fademindist" "300" "fademaxdist" "20" } -{ - "classname" "prop_dynamic" - "origin" "-682 -2820 420" - "angles" "0 270 0" - "model" "models/props_misc/wrongway_sign01_optimized.mdl" - "solid" "0" - "disableshadows" "1" - "fademindist" "300" - "fademaxdist" "20" -} { "classname" "prop_dynamic" "origin" "-642 -2762 444" diff --git a/cfg/stripper/neomod/maps/c8m3_sewers.cfg b/cfg/stripper/neomod/maps/c8m3_sewers.cfg index 47c58d125..f3a4289ef 100644 --- a/cfg/stripper/neomod/maps/c8m3_sewers.cfg +++ b/cfg/stripper/neomod/maps/c8m3_sewers.cfg @@ -543,7 +543,6 @@ filter: ; == CLIP REMOVAL == ; == Remove miscellaneous clips and brushes == ; ===================================================== -add: ; --- Remove TLS clips after loading add: { diff --git a/cfg/stripper/neomod/maps/c9m2_lots.cfg b/cfg/stripper/neomod/maps/c9m2_lots.cfg index 967e6ea8d..516638043 100644 --- a/cfg/stripper/neomod/maps/c9m2_lots.cfg +++ b/cfg/stripper/neomod/maps/c9m2_lots.cfg @@ -522,7 +522,7 @@ add: "classname" "env_physics_blocker" "origin" "7479 6764 189" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } @@ -530,7 +530,7 @@ add: "classname" "env_physics_blocker" "origin" "6835 5901 183" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } @@ -538,7 +538,7 @@ add: "classname" "env_physics_blocker" "origin" "8438 5464 189" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } diff --git a/cfg/stripper/neomod/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/neomod/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/neomod/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/neomod/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/neomod/maps/l4d2_ff02_factory.cfg b/cfg/stripper/neomod/maps/l4d2_ff02_factory.cfg index ee9385ac3..00292e5d4 100644 --- a/cfg/stripper/neomod/maps/l4d2_ff02_factory.cfg +++ b/cfg/stripper/neomod/maps/l4d2_ff02_factory.cfg @@ -92,7 +92,7 @@ add: ; ===================================================== -; --- remove 1 dumpster near button event +; --- remove 1 dumpster near button event ; --- 删除机关点的一个垃圾箱 filter: { diff --git a/cfg/stripper/neomod/maps/l4d_dbd2dc_clean_up.cfg b/cfg/stripper/neomod/maps/l4d_dbd2dc_clean_up.cfg index d678d34a8..f450cdcf1 100644 --- a/cfg/stripper/neomod/maps/l4d_dbd2dc_clean_up.cfg +++ b/cfg/stripper/neomod/maps/l4d_dbd2dc_clean_up.cfg @@ -606,7 +606,7 @@ modify: "origin" "-2550 6632.25 -660.712" } } -; --- Clean up entities +; --- Clean up entities filter: { "targetname" "Andy_Helpyou" diff --git a/cfg/stripper/neomod/maps/l4d_dbd2dc_undead_center.cfg b/cfg/stripper/neomod/maps/l4d_dbd2dc_undead_center.cfg index e0698ae8f..c2c4fe7f3 100644 --- a/cfg/stripper/neomod/maps/l4d_dbd2dc_undead_center.cfg +++ b/cfg/stripper/neomod/maps/l4d_dbd2dc_undead_center.cfg @@ -1032,15 +1032,6 @@ add: "BlockType" "1" "targetname" "block_scaffolding_skips" } -{ - "classname" "env_physics_blocker" - "origin" "-6873 8787 -345" - "mins" "-166 -53 -121" - "maxs" "166 35 121" - "initialstate" "1" - "BlockType" "1" - "targetname" "block_scaffolding_skips" -} { "classname" "env_physics_blocker" "origin" "-7268 9128 -304" diff --git a/cfg/stripper/neomod/maps/l4d_yama_3.cfg b/cfg/stripper/neomod/maps/l4d_yama_3.cfg index 61b5de121..ea51220dc 100644 --- a/cfg/stripper/neomod/maps/l4d_yama_3.cfg +++ b/cfg/stripper/neomod/maps/l4d_yama_3.cfg @@ -1,4 +1,3 @@ -add: ;----- Versus Relay modify: { diff --git a/cfg/stripper/nextmod/global_filters.cfg b/cfg/stripper/nextmod/global_filters.cfg index 4172a1dd2..440f89e1c 100644 --- a/cfg/stripper/nextmod/global_filters.cfg +++ b/cfg/stripper/nextmod/global_filters.cfg @@ -87,7 +87,7 @@ modify: modify: { match: - { + { "weapon_selection" "tier2_any" } replace: @@ -615,19 +615,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props/cs_office/Paper_towels.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -1287,19 +1274,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_crates/supply_crate01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2505,19 +2479,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_plants/claypot03.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2635,19 +2596,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_unique/wheelchair01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: diff --git a/cfg/stripper/nextmod/maps/AirCrash.cfg b/cfg/stripper/nextmod/maps/AirCrash.cfg index ae5941748..3dcf8bc4e 100644 --- a/cfg/stripper/nextmod/maps/AirCrash.cfg +++ b/cfg/stripper/nextmod/maps/AirCrash.cfg @@ -2,7 +2,7 @@ ; =================== Heaven Can Wait 1 ============== ; ======================================================== -; Remove hardcoded witches. They are a random element, +; Remove hardcoded witches. They are a random element, ; they don't work in promod, and disabling them may enable the promod witch. filter: { diff --git a/cfg/stripper/nextmod/maps/CityHall.cfg b/cfg/stripper/nextmod/maps/CityHall.cfg index 05759f836..469409fa8 100644 --- a/cfg/stripper/nextmod/maps/CityHall.cfg +++ b/cfg/stripper/nextmod/maps/CityHall.cfg @@ -31,7 +31,7 @@ add: modify: { match: - { + { "model" "models/props_vehicles/cara_95sedan_wrecked.mdl" "angles" "0 109 0" "classname" "prop_physics" @@ -153,7 +153,7 @@ modify: "OnCase04" "spawn4_tamplateForceSpawn0-1" "OnCase05" "spawn5_tamplateForceSpawn0-1" } -} +} ; Remove forklift that allows survivors to skip portion of map just after the security camera filter: diff --git a/cfg/stripper/nextmod/maps/OutSkirts.cfg b/cfg/stripper/nextmod/maps/OutSkirts.cfg index b740544cb..6bfb47dcc 100644 --- a/cfg/stripper/nextmod/maps/OutSkirts.cfg +++ b/cfg/stripper/nextmod/maps/OutSkirts.cfg @@ -47,7 +47,7 @@ modify: "OnHealthChanged" "branch_parkSetValue111" } } -modify: +modify: { match: { @@ -55,7 +55,7 @@ modify: } replace: { - "classname" "prop_dynamic" + "classname" "prop_dynamic" "spawnflags" "0" } insert: @@ -64,7 +64,7 @@ modify: } delete: { - "OnHealthChanged" "alarmtimer2-2Enable01" + "OnHealthChanged" "alarmtimer2-2Enable01" "OnHealthChanged" "alarm_sound2PlaySound01" "OnHealthChanged" "alarm_sound2StopSound601" "OnHealthChanged" "alarmtimer2-2Disable601" @@ -96,8 +96,8 @@ modify: } } modify: -{ - match: +{ + match: { "targetname" "caralarm4" } @@ -112,8 +112,8 @@ modify: } } modify: -{ - match: +{ + match: { "targetname" "caralarm5" } @@ -136,13 +136,13 @@ modify: } } modify: -{ +{ match: { "targetname" "caralarm6" } replace: - { + { "classname" "prop_dynamic" "spawnflags" "0" } @@ -152,13 +152,13 @@ modify: } } modify: -{ +{ match: { - "targetname" "caralarm7" + "targetname" "caralarm7" } replace: - { + { "classname" "prop_dynamic" "spawnflags" "0" } @@ -168,7 +168,7 @@ modify: } } modify: -{ +{ match: { "targetname" "caralarm8" @@ -180,7 +180,7 @@ modify: } insert: { - "solid" "6" + "solid" "6" } delete: { @@ -192,7 +192,7 @@ modify: } } modify: -{ +{ match: { "targetname" "caralarm9" @@ -216,8 +216,8 @@ modify: } } modify: -{ - match: +{ + match: { "targetname" "caralarm10" } @@ -229,7 +229,7 @@ modify: insert: { "solid" "6" - } + } delete: { "OnHealthChanged" "alarmtimer10Enable01" @@ -249,8 +249,8 @@ filter: } modify: -{ - match: +{ + match: { "targetname" "car_1" } @@ -265,8 +265,8 @@ modify: "solid" "6" } } -{ - match: +{ + match: { ;windshield "parentname" "car_1" @@ -278,8 +278,8 @@ modify: } modify: -{ - match: +{ + match: { "targetname" "car_5" } @@ -294,8 +294,8 @@ modify: "solid" "6" } } -{ - match: +{ + match: { ; windshield "parentname" "car_5" @@ -307,8 +307,8 @@ modify: } modify: -{ - match: +{ + match: { "model" "models/props_vehicles/cara_95sedan_wrecked.mdl" "angles" "0 161 0" @@ -325,7 +325,7 @@ modify: } } -; Remove randomness of vanilla gun spawns +; Remove randomness of vanilla gun spawns ; (promods tier 1 guns should still vary from match to match) modify: { @@ -337,7 +337,7 @@ modify: { ; Remove all except case 02 "Case06" "wapon_spawn1_point" - "Case05" "wapon_spawn5_point" + "Case05" "wapon_spawn5_point" "Case04" "wapon_spawn4_point" "Case03" "wapon_spawn3_point" "Case01" "wapon_spawn2_point" @@ -358,7 +358,7 @@ modify: } delete: { - ; Force weapon spawns to always be in the supply + ; Force weapon spawns to always be in the supply ; closet at the bottom of the parking garage (case 03) ; AND in the supply closet as you re-enter the area ; with the huge crator/gap in the road (case 04) diff --git a/cfg/stripper/nextmod/maps/RiverMotel.cfg b/cfg/stripper/nextmod/maps/RiverMotel.cfg index 6c46fd640..b49df78c5 100644 --- a/cfg/stripper/nextmod/maps/RiverMotel.cfg +++ b/cfg/stripper/nextmod/maps/RiverMotel.cfg @@ -57,7 +57,7 @@ filter: "hammerid" "2100650" } -; Take randomness out of when the trucks roll by in the +; Take randomness out of when the trucks roll by in the ; beginning and cause panic event modify: { @@ -215,7 +215,7 @@ filter: "targetname" "blizko" } -; Remove horde that spawns with crows as you enter the cemetary +; Remove horde that spawns with crows as you enter the cemetary modify: { match: diff --git a/cfg/stripper/nextmod/maps/c10m1_caves.cfg b/cfg/stripper/nextmod/maps/c10m1_caves.cfg index 905f9150a..b2f95190f 100644 --- a/cfg/stripper/nextmod/maps/c10m1_caves.cfg +++ b/cfg/stripper/nextmod/maps/c10m1_caves.cfg @@ -32,7 +32,7 @@ filter: { "hammerid" "1558088" } -{ +{ "hammerid" "1629705" } @@ -253,8 +253,8 @@ add: ; --- Block being able to skip the bridge choke with a well timed jump { "origin" "-12333.5 -11854.5 522.5" - "mins" "-292.5 -0.5 -132.5" - "maxs" "292.5 0.5 132.5" + "mins" "-292.5 -0.5 -132.5" + "maxs" "292.5 0.5 132.5" "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" diff --git a/cfg/stripper/nextmod/maps/c10m2_drainage.cfg b/cfg/stripper/nextmod/maps/c10m2_drainage.cfg index a3a07490b..5e76b6fc9 100644 --- a/cfg/stripper/nextmod/maps/c10m2_drainage.cfg +++ b/cfg/stripper/nextmod/maps/c10m2_drainage.cfg @@ -54,7 +54,7 @@ filter: { "hammerid" "1787818" } -{ +{ "hammerid" "1787826" } { diff --git a/cfg/stripper/nextmod/maps/c10m5_houseboat.cfg b/cfg/stripper/nextmod/maps/c10m5_houseboat.cfg index dfe8ccc61..928ece886 100644 --- a/cfg/stripper/nextmod/maps/c10m5_houseboat.cfg +++ b/cfg/stripper/nextmod/maps/c10m5_houseboat.cfg @@ -61,7 +61,7 @@ filter: { "hammerid" "1698830" } -{ +{ "hammerid" "1701209" } @@ -83,7 +83,7 @@ add: modify: { match: - { + { "hammerid" "2242181" } replace: @@ -94,7 +94,7 @@ modify: modify: { match: - { + { "hammerid" "2242183" } replace: @@ -107,7 +107,7 @@ modify: modify: { match: - { + { "hammerid" "1405" } replace: @@ -119,7 +119,7 @@ modify: modify: { match: - { + { "hammerid" "1407" } replace: diff --git a/cfg/stripper/nextmod/maps/c11m5_runway.cfg b/cfg/stripper/nextmod/maps/c11m5_runway.cfg index 939922c15..cacb6d03d 100644 --- a/cfg/stripper/nextmod/maps/c11m5_runway.cfg +++ b/cfg/stripper/nextmod/maps/c11m5_runway.cfg @@ -49,7 +49,7 @@ modify: ; --- fix vanishing finale pills in proper placements { match: - { + { "hammerid" "4376594" } replace: @@ -59,7 +59,7 @@ modify: } { match: - { + { "hammerid" "4376596" } replace: @@ -69,7 +69,7 @@ modify: } { match: - { + { "hammerid" "4376652" } replace: @@ -79,7 +79,7 @@ modify: } { match: - { + { "hammerid" "4376676" } replace: diff --git a/cfg/stripper/nextmod/maps/c12m5_cornfield.cfg b/cfg/stripper/nextmod/maps/c12m5_cornfield.cfg index 44ff0051d..82aeb9c9f 100644 --- a/cfg/stripper/nextmod/maps/c12m5_cornfield.cfg +++ b/cfg/stripper/nextmod/maps/c12m5_cornfield.cfg @@ -86,7 +86,7 @@ modify: ; --- fix vanishing finale pills in proper placements { match: - { + { "hammerid" "239847" } replace: @@ -96,7 +96,7 @@ modify: } { match: - { + { "hammerid" "239849" } replace: @@ -106,7 +106,7 @@ modify: } { match: - { + { "hammerid" "239851" } replace: @@ -116,7 +116,7 @@ modify: } { match: - { + { "hammerid" "239888" } replace: diff --git a/cfg/stripper/nextmod/maps/c13m4_cutthroatcreek.cfg b/cfg/stripper/nextmod/maps/c13m4_cutthroatcreek.cfg index 842605b9f..2096b2c89 100644 --- a/cfg/stripper/nextmod/maps/c13m4_cutthroatcreek.cfg +++ b/cfg/stripper/nextmod/maps/c13m4_cutthroatcreek.cfg @@ -64,7 +64,7 @@ modify: ; --- prevent ammo piles from being filtered out { match: - { + { "hammerid" "2012267" } replace: @@ -74,7 +74,7 @@ modify: } { match: - { + { "hammerid" "2010044" } replace: @@ -84,7 +84,7 @@ modify: } { match: - { + { "hammerid" "2438432" } replace: @@ -94,7 +94,7 @@ modify: } { match: - { + { "hammerid" "2469309" } replace: diff --git a/cfg/stripper/nextmod/maps/c1m2_streets.cfg b/cfg/stripper/nextmod/maps/c1m2_streets.cfg index f48f287f2..346b92902 100644 --- a/cfg/stripper/nextmod/maps/c1m2_streets.cfg +++ b/cfg/stripper/nextmod/maps/c1m2_streets.cfg @@ -129,7 +129,7 @@ add: } ; --- Block a stuck spot on top of the copy machine in saferoom { - ; invisible block + ; invisible block "origin" "2539 5199 534" "mins" "-32 -17 -86" "maxs" "32 17 86" @@ -139,7 +139,7 @@ add: } ; --- Block a stuck spot on the desk and chairs in saferoom { - ; invisible block + ; invisible block "origin" "2226 5255 508" "mins" "-16 -57.5 -68" "maxs" "16 57.5 68" @@ -149,7 +149,7 @@ add: } ; --- Block Survivors from being tank-punched on top of the white van at the start { - ; invisible block + ; invisible block "origin" "1161 2489 1304" "mins" "-113 -55.5 -575" "maxs" "113 55.5 575" @@ -158,7 +158,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "1319 2485 1496" "mins" "-46 -46.5 -926.5" "maxs" "46 46.5 926.5" @@ -168,7 +168,7 @@ add: } ; --- Block Survivors from being tank-punched on top of the bushes along the road at the start { - ; invisible block + ; invisible block "origin" "2941 2749 1042" "mins" "-383 -40.5 -586.5" "maxs" "383 40.5 586.5" @@ -177,7 +177,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "2656 3296 1470" "mins" "-416 -32 -766" "maxs" "416 32 766" @@ -186,7 +186,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "719 2751 1232" "mins" "-262 -42 -721.5" "maxs" "262 42 721.5" @@ -195,7 +195,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-15 2756 1204" "mins" "-247.5 -34 -804.5" "maxs" "247.5 34 804.5" @@ -204,7 +204,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-737 2752 1192" "mins" "-124 -33 -875" "maxs" "124 33 875" @@ -214,7 +214,7 @@ add: } ; --- Block Survivors from climbing the generator pole near the CEDA tent { - ; invisible block + ; invisible block "origin" "1533 2589 713" "mins" "-6 -6.5 -143" "maxs" "6 6.5 143" @@ -224,7 +224,7 @@ add: } ; --- Block Survivors from getting Tank punched onto an electrical box outside the entrance to the pill building { - ; invisible block + ; invisible block "origin" "-3296 2284 750" "mins" "-54 -18 -622.5" "maxs" "54 18 622.5" diff --git a/cfg/stripper/nextmod/maps/c1m3_mall.cfg b/cfg/stripper/nextmod/maps/c1m3_mall.cfg index 70a10ff60..ade1874d6 100644 --- a/cfg/stripper/nextmod/maps/c1m3_mall.cfg +++ b/cfg/stripper/nextmod/maps/c1m3_mall.cfg @@ -257,7 +257,7 @@ modify: ; ------------------------------------------- ; LOWER LEVEL DETOUR FIX ; -- remove items from toy-shop route -; ------------------------------------------- +; ------------------------------------------- filter: ; early rooms / bathrooms ; -------------------------- @@ -426,7 +426,7 @@ filter: ; -- logic relays/triggers/ai-director pathing { ; remove setpaths logic relays (so we can just use the onMap of the logic_relay below) - "hammerid" "253923" + "hammerid" "253923" } { ; remove query director logic for selecting either stairway or hallway (shop) route @@ -522,7 +522,6 @@ add: "solid" "6" "origin" "1609 -1028 247.002" } - add: { diff --git a/cfg/stripper/nextmod/maps/c2m1_highway.cfg b/cfg/stripper/nextmod/maps/c2m1_highway.cfg index e6dd58ca1..8a057382d 100644 --- a/cfg/stripper/nextmod/maps/c2m1_highway.cfg +++ b/cfg/stripper/nextmod/maps/c2m1_highway.cfg @@ -845,7 +845,7 @@ add: "classname" "env_physics_blocker" } { - ; bush + ; bush "origin" "3837 3909 -640" "mins" "-159 -60 -418.5" "maxs" "159 60 418.5" @@ -903,7 +903,6 @@ add: "classname" "env_physics_blocker" } ; --- props to give SI access to rooftops - add: { diff --git a/cfg/stripper/nextmod/maps/c2m2_fairgrounds.cfg b/cfg/stripper/nextmod/maps/c2m2_fairgrounds.cfg index cf8bfa5d2..72954fb77 100644 --- a/cfg/stripper/nextmod/maps/c2m2_fairgrounds.cfg +++ b/cfg/stripper/nextmod/maps/c2m2_fairgrounds.cfg @@ -124,7 +124,7 @@ modify: add: { "classname" "weapon_ammo_spawn" - "origin" "-1960 -4407 -121" + "origin" "-1960 -4407 -121" "spawnflags" "2" "solid" "6" "model" "models/props/terror/ammo_stack.mdl" @@ -1014,7 +1014,7 @@ modify: "hammerid" "1119740" } replace: - { + { "spawnflags" "256" } } diff --git a/cfg/stripper/nextmod/maps/c2m3_coaster.cfg b/cfg/stripper/nextmod/maps/c2m3_coaster.cfg index 4b335a972..e1cb4b1fb 100644 --- a/cfg/stripper/nextmod/maps/c2m3_coaster.cfg +++ b/cfg/stripper/nextmod/maps/c2m3_coaster.cfg @@ -16,7 +16,7 @@ add: ; ================ SAFEROOM NERF ==================== ; ===================================================== -; --- Discourage Survivors from fighting Tanks in the saferoom +; --- Discourage Survivors from fighting Tanks in the saferoom add: @@ -430,7 +430,7 @@ add: ; --- block shipping boxes to prevent climbing/being punched up on them { - ; invisible block above shipping box near pallet + ; invisible block above shipping box near pallet "origin" "-896 2241 459" "mins" "-68 -200 -330" "maxs" "68 196 330" @@ -825,7 +825,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} { "origin" "-2699 1972 238" "mins" "-4 -8.5 -109.5" @@ -833,7 +833,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} ; --- Block an exploit to skip to the end of the coaster { @@ -843,7 +843,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} ; --- Block a way for smokers to get under the map near the end { @@ -853,7 +853,7 @@ add: "initialstate" "1" "BlockType" "0" "classname" "env_physics_blocker" -} +} ; --- Block a way to skip to the end of the coaster from the first ramp { diff --git a/cfg/stripper/nextmod/maps/c2m4_barns.cfg b/cfg/stripper/nextmod/maps/c2m4_barns.cfg index baec1400f..7ad78bce3 100644 --- a/cfg/stripper/nextmod/maps/c2m4_barns.cfg +++ b/cfg/stripper/nextmod/maps/c2m4_barns.cfg @@ -288,7 +288,7 @@ add: "classname" "env_physics_blocker" } { - "origin" "3302 3840 -102" + "origin" "3302 3840 -102" "mins" "-77.5 -36.5 -93.5" "maxs" "77.5 36.5 93.5" "initialstate" "1" @@ -591,7 +591,7 @@ add: } ; --- block special infected glitch teleport spot on roof after barns { - ; invisible block + ; invisible block "origin" "-3072 -4 126" "mins" "-140 -54.5 -49.5" "maxs" "140 54.5 49.5" @@ -601,7 +601,7 @@ add: } ; --- block jesus spots on props near moustachio area { - ; invisible block + ; invisible block "origin" "2889 2570 229" "mins" "-36.5 -56 -421" "maxs" "36.5 56 421" @@ -610,7 +610,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "2778 2496 229" "mins" "-74 -130.5 -421" "maxs" "74 130.5 421" @@ -619,7 +619,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "2483 2498 378" "mins" "-70.5 -132.5 -570.5" "maxs" "70.5 132.5 570.5" @@ -742,7 +742,7 @@ add: "classname" "env_physics_blocker" } { - "origin" "3120 3928 -108" + "origin" "3120 3928 -108" "mins" "-272 -8 -80" "maxs" "272 8 80" "initialstate" "1" @@ -750,7 +750,7 @@ add: "classname" "env_physics_blocker" } { - "origin" "3384 3576 -108" + "origin" "3384 3576 -108" "mins" "-8 -343.5 -80" "maxs" "8 343.5 80" "initialstate" "1" diff --git a/cfg/stripper/nextmod/maps/c2m5_concert.cfg b/cfg/stripper/nextmod/maps/c2m5_concert.cfg index 223912141..545159e41 100644 --- a/cfg/stripper/nextmod/maps/c2m5_concert.cfg +++ b/cfg/stripper/nextmod/maps/c2m5_concert.cfg @@ -38,7 +38,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "1833723" } replace: @@ -49,7 +49,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "1833642" } replace: @@ -58,7 +58,7 @@ modify: } } filter: -{ +{ "hammerid" "1833737" } ; --- fix people getting kicked from the game for being in saferoom area @@ -134,7 +134,7 @@ add: ; --- block tops of awnings in starting area to prevent being punched on top of { - ; invisible block + ; invisible block "origin" "-1960 2261 -74" "mins" "-203 -22 -63" "maxs" "203 22 63" diff --git a/cfg/stripper/nextmod/maps/c3m1_plankcountry.cfg b/cfg/stripper/nextmod/maps/c3m1_plankcountry.cfg index 8d89b9b23..cb3033e17 100644 --- a/cfg/stripper/nextmod/maps/c3m1_plankcountry.cfg +++ b/cfg/stripper/nextmod/maps/c3m1_plankcountry.cfg @@ -273,15 +273,6 @@ add: "classname" "env_physics_blocker" } ; --- block off corner that SI can become unteleportably stuck -{ - ; invisible block inside corner by tank - "origin" "-10754 8610 216" - "mins" "-62 -58 -56" - "maxs" "62 58 56" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} ; --- block off stuck spot on a copy machine in the building near event { ; stuck fix - upper copy machine diff --git a/cfg/stripper/nextmod/maps/c3m3_shantytown.cfg b/cfg/stripper/nextmod/maps/c3m3_shantytown.cfg index cbd89c455..4f7a066fb 100644 --- a/cfg/stripper/nextmod/maps/c3m3_shantytown.cfg +++ b/cfg/stripper/nextmod/maps/c3m3_shantytown.cfg @@ -361,7 +361,7 @@ add: } ; --- avoid roof jump of shack before event shack { - ; invisible block at jumpspot + ; invisible block at jumpspot "origin" "-874 -3244 100" "mins" "-16 0 0" "maxs" "0 8 64" @@ -720,7 +720,7 @@ add: } ; --- block survivors from climbing barrel stack near the back of the house near the docks { - ; invisible block + ; invisible block "origin" "-5763 -1870 344" "mins" "-43.5 -22 -248.5" "maxs" "43.5 22 248.5" diff --git a/cfg/stripper/nextmod/maps/c4m2_sugarmill_a.cfg b/cfg/stripper/nextmod/maps/c4m2_sugarmill_a.cfg index e1c85ab98..28671259f 100644 --- a/cfg/stripper/nextmod/maps/c4m2_sugarmill_a.cfg +++ b/cfg/stripper/nextmod/maps/c4m2_sugarmill_a.cfg @@ -391,7 +391,7 @@ add: "classname" "env_physics_blocker" } -; --- reclip the ramp drop sugarmill building to take up less space and fix being unable to jump in some areas +; --- reclip the ramp drop sugarmill building to take up less space and fix being unable to jump in some areas { "origin" "247 -5834 356" "mins" "-12 -502 -256" @@ -548,7 +548,7 @@ add: add: ; --- block SI/tanks falling and getting stuck forever behind four silos opposite long wall { - ; invisible block along hole behind silos (left) + ; invisible block along hole behind silos (left) "origin" "1638 -5280 292" "mins" "-134 -32 -4" "maxs" "134 32 4" diff --git a/cfg/stripper/nextmod/maps/c4m3_sugarmill_b.cfg b/cfg/stripper/nextmod/maps/c4m3_sugarmill_b.cfg index 2ed5e650c..50e353aab 100644 --- a/cfg/stripper/nextmod/maps/c4m3_sugarmill_b.cfg +++ b/cfg/stripper/nextmod/maps/c4m3_sugarmill_b.cfg @@ -413,7 +413,7 @@ add: "classname" "env_physics_blocker" } -; --- reclip the ramp drop sugarmill building to take up less space and fix being unable to jump in some areas +; --- reclip the ramp drop sugarmill building to take up less space and fix being unable to jump in some areas { "origin" "247 -5834 356" "mins" "-12 -502 -256" @@ -570,7 +570,7 @@ add: add: ; --- block SI/tanks falling and getting stuck forever behind four silos opposite long wall { - ; invisible block along hole behind silos (left) + ; invisible block along hole behind silos (left) "origin" "1638 -5280 292" "mins" "-134 -32 -4" "maxs" "134 32 4" diff --git a/cfg/stripper/nextmod/maps/c4m4_milltown_b.cfg b/cfg/stripper/nextmod/maps/c4m4_milltown_b.cfg index 77b59c686..87fab90aa 100644 --- a/cfg/stripper/nextmod/maps/c4m4_milltown_b.cfg +++ b/cfg/stripper/nextmod/maps/c4m4_milltown_b.cfg @@ -103,7 +103,6 @@ modify: ; ===================================================== ; =========== PROMOD USELESS ITEM REMOVAL =========== ; ===================================================== - filter: ; --- filter items that spawn in the map 5 area ; --- didnt remove propane/gas cans and weapon_item_spawns that can spawn propane/gas @@ -204,7 +203,7 @@ filter: "hammerid" "1458857" } { - "hammerid" "2160336" + "hammerid" "2160336" } { "hammerid" "1458859" @@ -405,49 +404,6 @@ add: ; ===================================================== ; ================ NUISANCE CHANGES ================= ; ===================================================== -add: -; --- prevent SI getting unteleportably stuck behind fence near saferoom -{ - ; cardboard boxes near fence - "solid" "6" - "origin" "3644 -1736 100" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "disableshadows" "1" - "classname" "prop_dynamic" -} -{ - ; invisible block above boxes to boost height - "origin" "3671 -1713 132" - "angles" "0 -15 0" - "mins" "-41 -15 -34" - "maxs" "41 15 42" - "boxmins" "-41 -15 -34" - "boxmaxs" "41 15 42" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -; --- prevent SI getting unteleportably stuck behind two hedges near saferoom -{ - ; invisible block in hole near hedge (outside fence) - "origin" "3668 -1664 132" - "mins" "-60 -32 -36" - "maxs" "60 32 60" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -{ - ; invisible block in hole near hedge (inside fence) - "origin" "3408 -1760 144" - "mins" "-64 -64 -48" - "maxs" "64 64 48" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} - add: ; --- Improve clipping on the fence before map4 one-way drop { diff --git a/cfg/stripper/nextmod/maps/c5m1_waterfront.cfg b/cfg/stripper/nextmod/maps/c5m1_waterfront.cfg index 92edffa0a..1996f8ef7 100644 --- a/cfg/stripper/nextmod/maps/c5m1_waterfront.cfg +++ b/cfg/stripper/nextmod/maps/c5m1_waterfront.cfg @@ -184,7 +184,7 @@ add: "BlockType" "4" "classname" "env_physics_blocker" } -; --- block stuck spot on top of the jukebox +; --- block stuck spot on top of the jukebox { ; invisible block on roof "origin" "-1492 -1685 -287" diff --git a/cfg/stripper/nextmod/maps/c5m2_park.cfg b/cfg/stripper/nextmod/maps/c5m2_park.cfg index 13859f5a0..0eeeaf817 100644 --- a/cfg/stripper/nextmod/maps/c5m2_park.cfg +++ b/cfg/stripper/nextmod/maps/c5m2_park.cfg @@ -251,7 +251,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "1867414" } replace: @@ -262,7 +262,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "1867416" } replace: @@ -292,7 +292,7 @@ modify: { ; uzi match: - { + { "hammerid" "1867418" } replace: @@ -303,7 +303,7 @@ modify: { ; shotgun match: - { + { "hammerid" "1867424" } replace: @@ -314,7 +314,7 @@ modify: { ; hunting rifle match: - { + { "hammerid" "1867422" } replace: @@ -591,7 +591,7 @@ add: "initialstate" "1" "BlockType" "1" "classname" "env_physics_blocker" -} +} ; ===================================================== ; ================ NUISANCE CHANGES ================= @@ -829,7 +829,7 @@ add: } ; --- Promod props only --- make it easier for SI to cross pole to guard tower before event van { - ; invisible block + ; invisible block "origin" "-9651 -5302 -110" "mins" "-109 -16 -13" "maxs" "109 16 13" @@ -1275,7 +1275,7 @@ add: "rendercolor" "255 255 255" "solid" "6" "origin" "-9752 -5293 -132" -} +} { "classname" "prop_dynamic" "angles" "0 270 90" diff --git a/cfg/stripper/nextmod/maps/c5m3_cemetery.cfg b/cfg/stripper/nextmod/maps/c5m3_cemetery.cfg index ce5eae122..de94ae4a7 100644 --- a/cfg/stripper/nextmod/maps/c5m3_cemetery.cfg +++ b/cfg/stripper/nextmod/maps/c5m3_cemetery.cfg @@ -412,7 +412,7 @@ add: filter: ; --- remove barrels due to exploit potential -{ +{ "model" "models/props_urban/oil_drum001.mdl" } diff --git a/cfg/stripper/nextmod/maps/c5m4_quarter.cfg b/cfg/stripper/nextmod/maps/c5m4_quarter.cfg index ab75ce21a..c9fdac9fb 100644 --- a/cfg/stripper/nextmod/maps/c5m4_quarter.cfg +++ b/cfg/stripper/nextmod/maps/c5m4_quarter.cfg @@ -25,7 +25,7 @@ modify: add: { "classname" "weapon_ammo_spawn" - "origin" "-1234 528 277" + "origin" "-1234 528 277" "spawnflags" "2" "solid" "6" "model" "models/props/terror/ammo_stack.mdl" @@ -135,7 +135,7 @@ modify: add: ; --- block nearly every upper balcony you're not supposed to get to { - ; invisible block + ; invisible block "origin" "-3542 4573 395" "mins" "-41 -64 -171.5" "maxs" "41 64 171.5" @@ -144,7 +144,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-3360 4688 384" "mins" "-243 -50 -161" "maxs" "243 50 161" @@ -153,7 +153,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-2814 2912 615" "mins" "-131 -33 -232" "maxs" "131 33 232" @@ -162,7 +162,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-2401 2912 553" "mins" "-132.5 -33.5 -169.5" "maxs" "132.5 33.5 169.5" @@ -171,7 +171,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-1839 2896 632" "mins" "-261 -50 -409" "maxs" "261 50 409" @@ -180,7 +180,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-3326 2531 535" "mins" "-257.5 -34.5 -279.5" "maxs" "257.5 34.5 279.5" @@ -190,7 +190,7 @@ add: } ; --- block a survivor out of map exploit { - ; invisible block + ; invisible block "origin" "-2704 2272 545" "mins" "-112 -192 -336.5" "maxs" "112 192 336.5" @@ -199,7 +199,7 @@ add: "classname" "env_physics_blocker" } { - ; invisible block + ; invisible block "origin" "-2513 2440 632" "mins" "-81 -10 -568" "maxs" "81 10 568" @@ -209,7 +209,7 @@ add: } ; --- block the top of the porta potty at the end of the street { - ; invisible block + ; invisible block "origin" "-3673 2557 360" "mins" "-30 -30 -297.5" "maxs" "30 30 297.5" @@ -219,7 +219,7 @@ add: } ; --- block the electrical box survivors could use to get back from the one way drop { - ; invisible block + ; invisible block "origin" "-2950 3042 392" "mins" "-6 -31 -332" "maxs" "6 31 332" @@ -229,7 +229,7 @@ add: } ; --- block the top of the shutter door before entrance to pool room building { - ; invisible block + ; invisible block "origin" "-1490 2981 426" "mins" "-70 -13 -227.5" "maxs" "70 13 227.5" @@ -239,7 +239,7 @@ add: } ; --- block four jesus spots on the tops of the shutter doors and electrical box after the pool room drop { - ; invisible block + ; invisible block "origin" "-1419 2115 446" "mins" "-12 -69 -239.5" "maxs" "12 69 239.5" @@ -276,7 +276,7 @@ add: } ; --- blocked the top of the green fence after the pool room drop { - ; invisible block + ; invisible block "origin" "-1155 1603 292" "mins" "-131 -2.5 -229.5" "maxs" "131 2.5 229.5" @@ -348,7 +348,7 @@ add: } ; --- block survivors getting punched out of map in the alleyway -{ +{ "origin" "-2216 3190 309" "mins" "56 14.5 270" "maxs" "-56 -14.5 -270" @@ -357,7 +357,7 @@ add: "classname" "env_physics_blocker" } ; --- block survivors getting punched onto a roof near event -{ +{ "origin" "-986 1024 580" "mins" "426 72 290" "maxs" "-426 -72 -290" diff --git a/cfg/stripper/nextmod/maps/c5m5_bridge.cfg b/cfg/stripper/nextmod/maps/c5m5_bridge.cfg index feeddb930..6516b6900 100644 --- a/cfg/stripper/nextmod/maps/c5m5_bridge.cfg +++ b/cfg/stripper/nextmod/maps/c5m5_bridge.cfg @@ -46,7 +46,7 @@ filter: { "targetname" "InstanceAuto9-car_physics" } -{ +{ "parentname" "InstanceAuto9-car_physics" } @@ -54,7 +54,7 @@ filter: { "targetname" "InstanceAuto19-car_physics" } -{ +{ "parentname" "InstanceAuto19-car_physics" } @@ -62,7 +62,7 @@ filter: { "targetname" "InstanceAuto5-car_physics" } -{ +{ "parentname" "InstanceAuto5-car_physics" } @@ -70,7 +70,7 @@ filter: { "targetname" "InstanceAuto4-car_physics" } -{ +{ "parentname" "InstanceAuto4-car_physics" } @@ -78,7 +78,7 @@ filter: { "targetname" "InstanceAuto17-car_physics" } -{ +{ "parentname" "InstanceAuto17-car_physics" } @@ -86,7 +86,7 @@ filter: { "targetname" "InstanceAuto6-car_physics" } -{ +{ "parentname" "InstanceAuto6-car_physics" } @@ -94,7 +94,7 @@ filter: { "targetname" "InstanceAuto26-car_physics" } -{ +{ "parentname" "InstanceAuto26-car_physics" } @@ -102,7 +102,7 @@ filter: { "targetname" "InstanceAuto7-car_physics" } -{ +{ "parentname" "InstanceAuto7-car_physics" } @@ -110,7 +110,7 @@ filter: { "targetname" "InstanceAuto20-car_physics" } -{ +{ "parentname" "InstanceAuto20-car_physics" } @@ -118,7 +118,7 @@ filter: { "targetname" "InstanceAuto21-car_physics" } -{ +{ "parentname" "InstanceAuto21-car_physics" } @@ -126,7 +126,7 @@ filter: { "targetname" "InstanceAuto23-car_physics" } -{ +{ "parentname" "InstanceAuto23-car_physics" } @@ -134,7 +134,7 @@ filter: { "targetname" "InstanceAuto22-car_physics" } -{ +{ "parentname" "InstanceAuto22-car_physics" } @@ -142,7 +142,7 @@ filter: { "targetname" "InstanceAuto24-car_physics" } -{ +{ "parentname" "InstanceAuto24-car_physics" } @@ -150,7 +150,7 @@ filter: { "targetname" "InstanceAuto25-car_physics" } -{ +{ "parentname" "InstanceAuto25-car_physics" } @@ -158,7 +158,7 @@ filter: { "targetname" "InstanceAuto8-car_physics" } -{ +{ "parentname" "InstanceAuto8-car_physics" } @@ -1680,7 +1680,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "2338606" } replace: @@ -1691,7 +1691,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "2338604" } replace: @@ -1702,7 +1702,7 @@ modify: { ; no hr fix match: - { + { "hammerid" "2338608" } replace: diff --git a/cfg/stripper/nextmod/maps/c6m1_riverbank.cfg b/cfg/stripper/nextmod/maps/c6m1_riverbank.cfg index 25d6f15fa..46c359131 100644 --- a/cfg/stripper/nextmod/maps/c6m1_riverbank.cfg +++ b/cfg/stripper/nextmod/maps/c6m1_riverbank.cfg @@ -137,7 +137,7 @@ filter: "hammerid" "1003058" } { - ; car 10 - sprite3 + ; car 10 - sprite3 "hammerid" "1003061" } { @@ -145,7 +145,7 @@ filter: "hammerid" "1003064" } { - ; car 10 - spotlight1 + ; car 10 - spotlight1 "hammerid" "1003070" } { @@ -173,7 +173,7 @@ filter: "hammerid" "989868" } { - ; car 11 - sprite3 + ; car 11 - sprite3 "hammerid" "989871" } { @@ -181,7 +181,7 @@ filter: "hammerid" "989874" } { - ; car 11 - spotlight1 + ; car 11 - spotlight1 "hammerid" "989880" } { @@ -209,7 +209,7 @@ filter: "hammerid" "988092" } { - ; car 12 - sprite3 + ; car 12 - sprite3 "hammerid" "988095" } { @@ -217,7 +217,7 @@ filter: "hammerid" "988098" } { - ; car 12 - spotlight1 + ; car 12 - spotlight1 "hammerid" "988104" } { @@ -245,7 +245,7 @@ filter: "hammerid" "986316" } { - ; car 13 - sprite3 + ; car 13 - sprite3 "hammerid" "986319" } { @@ -253,7 +253,7 @@ filter: "hammerid" "986322" } { - ; car 13 - spotlight1 + ; car 13 - spotlight1 "hammerid" "986328" } { @@ -281,7 +281,7 @@ filter: "hammerid" "993420" } { - ; car 14 - sprite3 + ; car 14 - sprite3 "hammerid" "993423" } { @@ -289,7 +289,7 @@ filter: "hammerid" "993426" } { - ; car 14 - spotlight1 + ; car 14 - spotlight1 "hammerid" "993432" } { @@ -433,7 +433,7 @@ add: "BlockType" "1" "classname" "env_physics_blocker" } -; --- block shortcut to saferoom over tent after witch bride +; --- block shortcut to saferoom over tent after witch bride { ; invisible block above tent "origin" "-2744 184 1680" diff --git a/cfg/stripper/nextmod/maps/c6m3_port.cfg b/cfg/stripper/nextmod/maps/c6m3_port.cfg index 822ffc1da..06377aa28 100644 --- a/cfg/stripper/nextmod/maps/c6m3_port.cfg +++ b/cfg/stripper/nextmod/maps/c6m3_port.cfg @@ -33,7 +33,7 @@ modify: { ; no uzi fix match: - { + { "hammerid" "21242" } replace: @@ -44,7 +44,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "21252" } replace: diff --git a/cfg/stripper/nextmod/maps/c8m3_sewers.cfg b/cfg/stripper/nextmod/maps/c8m3_sewers.cfg index 4dff8b98b..45601d8b1 100644 --- a/cfg/stripper/nextmod/maps/c8m3_sewers.cfg +++ b/cfg/stripper/nextmod/maps/c8m3_sewers.cfg @@ -146,7 +146,7 @@ add: filter: ; --- trash cans that could block survivor progress at ladder choke -{ +{ "model" "models/props_street/trashbin01.mdl" } diff --git a/cfg/stripper/nextmod/maps/c8m4_interior.cfg b/cfg/stripper/nextmod/maps/c8m4_interior.cfg index 78c9615b1..172d74fa8 100644 --- a/cfg/stripper/nextmod/maps/c8m4_interior.cfg +++ b/cfg/stripper/nextmod/maps/c8m4_interior.cfg @@ -60,7 +60,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "6567273" } replace: @@ -71,7 +71,7 @@ modify: { ; remove hr filter: - { + { "hammerid" "6567279" } } diff --git a/cfg/stripper/nextmod/maps/c8m5_rooftop.cfg b/cfg/stripper/nextmod/maps/c8m5_rooftop.cfg index 171b3015b..3dde4b929 100644 --- a/cfg/stripper/nextmod/maps/c8m5_rooftop.cfg +++ b/cfg/stripper/nextmod/maps/c8m5_rooftop.cfg @@ -41,7 +41,7 @@ modify: { ; no shotgun fix match: - { + { "hammerid" "3319415" } replace: @@ -52,7 +52,7 @@ modify: { ; remove hr filter: - { + { "hammerid" "3319419" } } @@ -71,7 +71,7 @@ add: "BlockType" "1" "classname" "env_physics_blocker" } -; --- block SI ladder inaccessible spot you can zombie jump to +; --- block SI ladder inaccessible spot you can zombie jump to { ; invisible block above roof section "origin" "5984 7760 7153" diff --git a/cfg/stripper/nextmod/maps/c9m1_alleys.cfg b/cfg/stripper/nextmod/maps/c9m1_alleys.cfg index d7d8c5bac..34c383f86 100644 --- a/cfg/stripper/nextmod/maps/c9m1_alleys.cfg +++ b/cfg/stripper/nextmod/maps/c9m1_alleys.cfg @@ -96,7 +96,7 @@ add: ; modify: { - match: + match: { "targetname" "fire_howitzer" } diff --git a/cfg/stripper/nextmod/maps/cdta_04onarail.cfg b/cfg/stripper/nextmod/maps/cdta_04onarail.cfg index 2f3f51645..b2591f48f 100644 --- a/cfg/stripper/nextmod/maps/cdta_04onarail.cfg +++ b/cfg/stripper/nextmod/maps/cdta_04onarail.cfg @@ -27,7 +27,7 @@ modify: "count" "4" "weapon_selection" "tier1_shotgun" } -} +} ; Make it so the whole team doesn't have to be on the train track to start the event. ; This functionality was added by the map creator in newer versions of the map. diff --git a/cfg/stripper/nextmod/maps/cdta_05finalroad.cfg b/cfg/stripper/nextmod/maps/cdta_05finalroad.cfg index bd1a205e8..b63baa3dc 100644 --- a/cfg/stripper/nextmod/maps/cdta_05finalroad.cfg +++ b/cfg/stripper/nextmod/maps/cdta_05finalroad.cfg @@ -26,7 +26,7 @@ modify: match: { "angles" "0 99 90" - "classname" "weapon_spawn" + "classname" "weapon_spawn" } replace: { @@ -168,7 +168,6 @@ add: "pitchstart" "100" "lfotype" "0" "pitch" "100" - } ;Uncomment to prevent teams from running tank back to safe room diff --git a/cfg/stripper/nextmod/maps/cwm4_building.cfg b/cfg/stripper/nextmod/maps/cwm4_building.cfg index 652ea583b..dd0e01b98 100644 --- a/cfg/stripper/nextmod/maps/cwm4_building.cfg +++ b/cfg/stripper/nextmod/maps/cwm4_building.cfg @@ -44,7 +44,7 @@ add: } ; Make tank spawns equal for both teams -; This just starts a reoccurring script that will teleport the +; This just starts a reoccurring script that will teleport the ; tank to a safe distance away from the survivors once he spawns modify: { diff --git a/cfg/stripper/nextmod/maps/damitdc3.cfg b/cfg/stripper/nextmod/maps/damitdc3.cfg index 2f389ca77..96ca1196e 100644 --- a/cfg/stripper/nextmod/maps/damitdc3.cfg +++ b/cfg/stripper/nextmod/maps/damitdc3.cfg @@ -139,22 +139,17 @@ modify: delete: { ; Delete all cases that block nav - ;BAD - blocks nav "OnCase01" "waredoor_blockerBlockNav0-1" "OnCase01" "waredoor1oKill0-1" - ;GOOD - doesn't block nav (c = closed | o = open) ;"OnCase02" "waredoor1cKill0-1" - ; BAD "OnCase04" "waredoor1oKill0-1" "OnCase04" "waredoor_blockerBlockNav0-1" - ;GOOD ;"OnCase03" "waredoor1cKill0-1" ;"OnCase06" "waredoor1cKill0-1" - ;BAD "OnCase05" "waredoor_blockerBlockNav0-1" "OnCase05" "waredoor1oKill0-1" diff --git a/cfg/stripper/nextmod/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/nextmod/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/nextmod/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/nextmod/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/nextmod/maps/dkr_m1_motel.cfg b/cfg/stripper/nextmod/maps/dkr_m1_motel.cfg index 2f3a48082..313ce8547 100644 --- a/cfg/stripper/nextmod/maps/dkr_m1_motel.cfg +++ b/cfg/stripper/nextmod/maps/dkr_m1_motel.cfg @@ -11,7 +11,7 @@ filter: modify: { match: - { + { "classname" "info_gamemode" } delete: diff --git a/cfg/stripper/nextmod/maps/dkr_m2_carnival.cfg b/cfg/stripper/nextmod/maps/dkr_m2_carnival.cfg index 2f3a48082..313ce8547 100644 --- a/cfg/stripper/nextmod/maps/dkr_m2_carnival.cfg +++ b/cfg/stripper/nextmod/maps/dkr_m2_carnival.cfg @@ -11,7 +11,7 @@ filter: modify: { match: - { + { "classname" "info_gamemode" } delete: diff --git a/cfg/stripper/nextmod/maps/dkr_m4_ferris.cfg b/cfg/stripper/nextmod/maps/dkr_m4_ferris.cfg index 2f3a48082..313ce8547 100644 --- a/cfg/stripper/nextmod/maps/dkr_m4_ferris.cfg +++ b/cfg/stripper/nextmod/maps/dkr_m4_ferris.cfg @@ -11,7 +11,7 @@ filter: modify: { match: - { + { "classname" "info_gamemode" } delete: diff --git a/cfg/stripper/nextmod/maps/dkr_m5_stadium.cfg b/cfg/stripper/nextmod/maps/dkr_m5_stadium.cfg index 2f3a48082..313ce8547 100644 --- a/cfg/stripper/nextmod/maps/dkr_m5_stadium.cfg +++ b/cfg/stripper/nextmod/maps/dkr_m5_stadium.cfg @@ -11,7 +11,7 @@ filter: modify: { match: - { + { "classname" "info_gamemode" } delete: diff --git a/cfg/stripper/nextmod/maps/hf03_themansion.cfg b/cfg/stripper/nextmod/maps/hf03_themansion.cfg index 00c45a348..1c9045c19 100644 --- a/cfg/stripper/nextmod/maps/hf03_themansion.cfg +++ b/cfg/stripper/nextmod/maps/hf03_themansion.cfg @@ -24,7 +24,7 @@ filter: { "targetname" "navblocker_path2" } -{ +{ "targetname" "navblocker_path1" } { diff --git a/cfg/stripper/nextmod/maps/l4d2_bts01_forest.cfg b/cfg/stripper/nextmod/maps/l4d2_bts01_forest.cfg index 56c28722a..51b0b8ce7 100644 --- a/cfg/stripper/nextmod/maps/l4d2_bts01_forest.cfg +++ b/cfg/stripper/nextmod/maps/l4d2_bts01_forest.cfg @@ -72,7 +72,7 @@ modify: modify: { match: - { + { "classname" "func_breakable" "origin" "1631 -6794.44 5689.03" } @@ -85,7 +85,7 @@ modify: modify: { match: - { + { "classname" "func_breakable" "origin" "1966.7 -6566.51 5684.03" } @@ -118,7 +118,6 @@ modify: ;;;;;;;==== "Fix" Survivors getting stuck in the ground in safe room modify: - { match: { @@ -129,8 +128,6 @@ modify: "OnTrigger" "directorForceSurvivorPositions0-1" } } - - { match: { diff --git a/cfg/stripper/nextmod/maps/l4d2_bts06_school.cfg b/cfg/stripper/nextmod/maps/l4d2_bts06_school.cfg index a8ce246f9..ba5febdaf 100644 --- a/cfg/stripper/nextmod/maps/l4d2_bts06_school.cfg +++ b/cfg/stripper/nextmod/maps/l4d2_bts06_school.cfg @@ -56,7 +56,6 @@ modify: { ; Remove message that says to get the vaccines "OnTrigger" "final_ins9ShowHint23.6-1" - ; Make it so the heli actually leaves without making us grab vaccines "OnTrigger" "final_counter_heliAdd123.6-1" "FinaleEscapeStarted" "final_transort_heliAdd101" @@ -104,7 +103,7 @@ modify: } delete: { - ; Remove pilot sounds coming out of radio and + ; Remove pilot sounds coming out of radio and ; notifcation to touch radio "OnHitMax" "heli_varTrigger1.5-1" } @@ -130,7 +129,7 @@ modify: "targetname" "random_trigger" } replace: - { + { "StartDisabled" "1" } diff --git a/cfg/stripper/nextmod/maps/l4d2_darkblood03_platform.cfg b/cfg/stripper/nextmod/maps/l4d2_darkblood03_platform.cfg index d0fd412fc..2f084f92f 100644 --- a/cfg/stripper/nextmod/maps/l4d2_darkblood03_platform.cfg +++ b/cfg/stripper/nextmod/maps/l4d2_darkblood03_platform.cfg @@ -1,7 +1,7 @@ ; Dark Blood 3 ; Strip out health cabinet in end safe room -; and fuel barrels that are always on other sides +; and fuel barrels that are always on other sides ; of walls in the static pathing we've chosen filter: { diff --git a/cfg/stripper/nextmod/maps/l4d2_ff02_factory.cfg b/cfg/stripper/nextmod/maps/l4d2_ff02_factory.cfg index ee9385ac3..00292e5d4 100644 --- a/cfg/stripper/nextmod/maps/l4d2_ff02_factory.cfg +++ b/cfg/stripper/nextmod/maps/l4d2_ff02_factory.cfg @@ -92,7 +92,7 @@ add: ; ===================================================== -; --- remove 1 dumpster near button event +; --- remove 1 dumpster near button event ; --- 删除机关点的一个垃圾箱 filter: { diff --git a/cfg/stripper/nextmod/maps/l4d_dbd2dc_anna_is_gone.cfg b/cfg/stripper/nextmod/maps/l4d_dbd2dc_anna_is_gone.cfg index c2ebf08a2..f7480b127 100644 --- a/cfg/stripper/nextmod/maps/l4d_dbd2dc_anna_is_gone.cfg +++ b/cfg/stripper/nextmod/maps/l4d_dbd2dc_anna_is_gone.cfg @@ -100,7 +100,7 @@ modify: } ; Make it so the heli always comes -modify: +modify: { match: { @@ -130,7 +130,7 @@ modify: } } -; Make all hittables non-hittable except the green car in the beginning, +; Make all hittables non-hittable except the green car in the beginning, ; the dumpster just before the alarm car, and the alarm car filter: { @@ -368,7 +368,7 @@ modify: } { match: - { + { "targetname" "hunting_rifle_3" } replace: @@ -379,7 +379,7 @@ modify: { match: { - "targetname" "rifle_b_3" + "targetname" "rifle_b_3" } replace: { @@ -508,7 +508,7 @@ modify: add: { "classname" "prop_dynamic" - "origin" "-1303 6296 -500" + "origin" "-1303 6296 -500" "targetname" "exploit_block_1" "angles" "0 90 0" "solid" "6" diff --git a/cfg/stripper/nextmod/maps/l4d_dbd2dc_clean_up.cfg b/cfg/stripper/nextmod/maps/l4d_dbd2dc_clean_up.cfg index 5e88c6c13..c94250824 100644 --- a/cfg/stripper/nextmod/maps/l4d_dbd2dc_clean_up.cfg +++ b/cfg/stripper/nextmod/maps/l4d_dbd2dc_clean_up.cfg @@ -110,7 +110,7 @@ modify: } ; Slow down the zombie spawning because it grows continuously and -; servers are nearly crashing because there is too much horde to handle. +; servers are nearly crashing because there is too much horde to handle. modify: { match: @@ -241,7 +241,7 @@ modify: } ; Slow down the zombie spawning because it grows continuously and -; servers are nearly crashing because there is too much horde to handle. +; servers are nearly crashing because there is too much horde to handle. modify: { match: diff --git a/cfg/stripper/nextmod/maps/l4d_dbd2dc_new_dawn.cfg b/cfg/stripper/nextmod/maps/l4d_dbd2dc_new_dawn.cfg index 233a52c64..da60ed2ea 100644 --- a/cfg/stripper/nextmod/maps/l4d_dbd2dc_new_dawn.cfg +++ b/cfg/stripper/nextmod/maps/l4d_dbd2dc_new_dawn.cfg @@ -1,6 +1,6 @@ ; ====================================================== ; =============== Dead Before Dawn DC: 5 ============= -; ====================================================== +; ====================================================== ; Remove the radio voice ;filter: @@ -71,7 +71,6 @@ modify: { ; First Aid Kit "item2" "0" - ; Pipe Bombs "item5" "0" @@ -106,7 +105,7 @@ modify: { "targetname" "advancementtrigger_2" } - insert: + insert: { "OnTrigger" "tank_early_timer_2Disable0-1" "OnTrigger" "tank_spawned_timerEnable0-1" @@ -176,7 +175,6 @@ add: "pitchstart" "100" "lfotype" "0" "pitch" "100" - } ; Remove rooftop tank @@ -287,7 +285,6 @@ add: ; car laying on its side shortly after the white van in exploit_block_2 ; with the fire at the base of it can be hopped over { - "origin" "-432 371 -830" "classname" "prop_dynamic" "targetname" "exploit_block_3" diff --git a/cfg/stripper/nextmod/maps/l4d_dbd2dc_the_mall.cfg b/cfg/stripper/nextmod/maps/l4d_dbd2dc_the_mall.cfg index 9ddf00179..93e0190c8 100644 --- a/cfg/stripper/nextmod/maps/l4d_dbd2dc_the_mall.cfg +++ b/cfg/stripper/nextmod/maps/l4d_dbd2dc_the_mall.cfg @@ -324,7 +324,7 @@ modify: } } -; Block exploit to jump from cardboard boxes -> fusebox -> shelves to +; Block exploit to jump from cardboard boxes -> fusebox -> shelves to ; skip walking on the boards in the warehouse. add: { @@ -614,8 +614,8 @@ modify: } delete: { - ; Remove cases that spawn special infected, - ; Remove cases that trigger panic events, + ; Remove cases that spawn special infected, + ; Remove cases that trigger panic events, ; Remove cases that enable new events "OnCase03" "directorPanicEvent2-1" "OnCase04" "event_02_boss_spawner_roof01SpawnZombietank8-1" diff --git a/cfg/stripper/nextmod/maps/l4d_dbd2dc_undead_center.cfg b/cfg/stripper/nextmod/maps/l4d_dbd2dc_undead_center.cfg index 467fa88c1..c914c57af 100644 --- a/cfg/stripper/nextmod/maps/l4d_dbd2dc_undead_center.cfg +++ b/cfg/stripper/nextmod/maps/l4d_dbd2dc_undead_center.cfg @@ -1,6 +1,6 @@ ; ====================================================== ; =============== Dead Before Dawn DC: 4 ============= -; ====================================================== +; ====================================================== ; Remove the radio voice filter: @@ -100,7 +100,7 @@ add: ; Make forklift move faster ;modify: ;{ -; match: +; match: ; { ; "targetname" "forklift_mover" ; } @@ -214,7 +214,7 @@ add: "classname" "prop_dynamic" } { - ; scaffolding inside of the new scaffolding with a strange collision box to + ; scaffolding inside of the new scaffolding with a strange collision box to ; prevent survivors from going inside the new scaffolding on the main floor "solid" "2" "origin" "-7230 9107 -677" diff --git a/cfg/stripper/nextmod/maps/l4d_yama_3.cfg b/cfg/stripper/nextmod/maps/l4d_yama_3.cfg index 21b10f1be..786c1faf9 100644 --- a/cfg/stripper/nextmod/maps/l4d_yama_3.cfg +++ b/cfg/stripper/nextmod/maps/l4d_yama_3.cfg @@ -1,9 +1,8 @@ -add: ;----- Versus Relay modify: { match: - { + { "classname" "info_gamemode" } insert: diff --git a/cfg/stripper/nextmod/maps/plaza_espana.cfg b/cfg/stripper/nextmod/maps/plaza_espana.cfg index 11c8bb6d5..85712d38e 100644 --- a/cfg/stripper/nextmod/maps/plaza_espana.cfg +++ b/cfg/stripper/nextmod/maps/plaza_espana.cfg @@ -51,7 +51,7 @@ add: ;;;;;; ----- Make the vehicle dropping through the roof in the subway static ----- ;;;;;; modify: -{ +{ match: { "targetname" "aleatorio" @@ -67,7 +67,6 @@ modify: } insert: { - "OnCase01" "suelo3Break0-1" "OnCase02" "suelo3Break0-1" "OnCase03" "suelo3Break0-1" diff --git a/cfg/stripper/nextmod/maps/uf2_rooftops.cfg b/cfg/stripper/nextmod/maps/uf2_rooftops.cfg index 78afb0290..d4672031f 100644 --- a/cfg/stripper/nextmod/maps/uf2_rooftops.cfg +++ b/cfg/stripper/nextmod/maps/uf2_rooftops.cfg @@ -14,7 +14,7 @@ modify: { "OnMapSpawn" "apartment_door_navblockBlockNav0-1" } -} +} modify: { match: diff --git a/cfg/stripper/nextmod/maps/uf3_harbor.cfg b/cfg/stripper/nextmod/maps/uf3_harbor.cfg index be3644145..aba357666 100644 --- a/cfg/stripper/nextmod/maps/uf3_harbor.cfg +++ b/cfg/stripper/nextmod/maps/uf3_harbor.cfg @@ -305,7 +305,7 @@ modify: delete: { ; FenceD - blocks front door entrance to water-side boathouse - ; FenceC & FenceB - block survivors from cutting between two + ; FenceC & FenceB - block survivors from cutting between two ; boathouses instead of going into them ; FenceA - blocks exit door from land-side boathouse diff --git a/cfg/stripper/nextmod/maps/uf4_airfield.cfg b/cfg/stripper/nextmod/maps/uf4_airfield.cfg index 23c6b290f..9b1bfb9db 100644 --- a/cfg/stripper/nextmod/maps/uf4_airfield.cfg +++ b/cfg/stripper/nextmod/maps/uf4_airfield.cfg @@ -42,10 +42,9 @@ modify: { "Branch01" "branch_finale_cct" } - } add: -{ +{ "classname" "logic_branch" "InitialValue" "1" "targetname" "branch_finale_cct" diff --git a/cfg/stripper/nextmod/maps/uz_town.cfg b/cfg/stripper/nextmod/maps/uz_town.cfg index ca07feb39..6f192db47 100644 --- a/cfg/stripper/nextmod/maps/uz_town.cfg +++ b/cfg/stripper/nextmod/maps/uz_town.cfg @@ -12,7 +12,6 @@ modify: "OnPressed" "directorBeginScriptdirector_onslaught.nut1-1" } } - ; --- Reduce time it takes to open door at end saferoom modify: { diff --git a/cfg/stripper/nextmod/maps/x1m1_cliffs.cfg b/cfg/stripper/nextmod/maps/x1m1_cliffs.cfg index d69e49b78..6b3c86fc1 100644 --- a/cfg/stripper/nextmod/maps/x1m1_cliffs.cfg +++ b/cfg/stripper/nextmod/maps/x1m1_cliffs.cfg @@ -44,7 +44,6 @@ modify: "classname" "weapon_item_spawn" } } - ; --- Remove hittable truck from beginning tank fight area. filter: { diff --git a/cfg/stripper/pmelite/global_filters.cfg b/cfg/stripper/pmelite/global_filters.cfg index f55ee730d..d7cf6dc8b 100644 --- a/cfg/stripper/pmelite/global_filters.cfg +++ b/cfg/stripper/pmelite/global_filters.cfg @@ -560,19 +560,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props/cs_office/Paper_towels.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -1232,19 +1219,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_crates/supply_crate01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2450,19 +2424,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_plants/claypot03.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: @@ -2580,19 +2541,6 @@ insert: } } -modify: -{ -match: - { - "classname" "prop_physics" - "model" "models/props_unique/wheelchair01.mdl" - } -insert: - { - "spawnflags" "4" - } -} - modify: { match: diff --git a/cfg/stripper/pmelite/maps/c3m1_plankcountry.cfg b/cfg/stripper/pmelite/maps/c3m1_plankcountry.cfg index 83a869ea0..ba56c69e4 100644 --- a/cfg/stripper/pmelite/maps/c3m1_plankcountry.cfg +++ b/cfg/stripper/pmelite/maps/c3m1_plankcountry.cfg @@ -159,15 +159,6 @@ add: "classname" "env_physics_blocker" } ; --- block off corner that SI can become unteleportably stuck -{ - ; invisible block inside corner by tank - "origin" "-10754 8610 216" - "mins" "-62 -58 -56" - "maxs" "62 58 56" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} ; --- block off stuck spot on a copy machine in the building near event { ; stuck fix - upper copy machine diff --git a/cfg/stripper/pmelite/maps/c4m4_milltown_b.cfg b/cfg/stripper/pmelite/maps/c4m4_milltown_b.cfg index cd2641396..2fc0f0c96 100644 --- a/cfg/stripper/pmelite/maps/c4m4_milltown_b.cfg +++ b/cfg/stripper/pmelite/maps/c4m4_milltown_b.cfg @@ -404,49 +404,6 @@ add: ; ===================================================== ; ================ NUISANCE CHANGES ================= ; ===================================================== -add: -; --- prevent SI getting unteleportably stuck behind fence near saferoom -{ - ; cardboard boxes near fence - "solid" "6" - "origin" "3644 -1736 100" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "disableshadows" "1" - "classname" "prop_dynamic" -} -{ - ; invisible block above boxes to boost height - "origin" "3671 -1713 132" - "angles" "0 -15 0" - "mins" "-41 -15 -34" - "maxs" "41 15 42" - "boxmins" "-41 -15 -34" - "boxmaxs" "41 15 42" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -; --- prevent SI getting unteleportably stuck behind two hedges near saferoom -{ - ; invisible block in hole near hedge (outside fence) - "origin" "3668 -1664 132" - "mins" "-60 -32 -36" - "maxs" "60 32 60" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} -{ - ; invisible block in hole near hedge (inside fence) - "origin" "3408 -1760 144" - "mins" "-64 -64 -48" - "maxs" "64 64 48" - "initialstate" "1" - "BlockType" "2" - "classname" "env_physics_blocker" -} - add: ; --- Improve clipping on the fence before map4 one-way drop { diff --git a/cfg/stripper/pmelite/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/pmelite/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/pmelite/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/pmelite/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/pmelite/maps/l4d_yama_3.cfg b/cfg/stripper/pmelite/maps/l4d_yama_3.cfg index 61b5de121..ea51220dc 100644 --- a/cfg/stripper/pmelite/maps/l4d_yama_3.cfg +++ b/cfg/stripper/pmelite/maps/l4d_yama_3.cfg @@ -1,4 +1,3 @@ -add: ;----- Versus Relay modify: { diff --git a/cfg/stripper/zonemod/global_filters.cfg b/cfg/stripper/zonemod/global_filters.cfg index 08b9ec385..33ff78cf5 100644 --- a/cfg/stripper/zonemod/global_filters.cfg +++ b/cfg/stripper/zonemod/global_filters.cfg @@ -137,17 +137,6 @@ modify: "classname" "prop_physics" } } -{ - match: - { - "classname" "prop_physics_multiplayer" - "model" "models/props_vehicles/police_car.mdl" - } - replace: - { - "classname" "prop_physics" - } -} { match: { @@ -434,11 +423,11 @@ modify: ; == WEAPON SKINS == ; == Use random skins, see weapon_skin_enabler.nut == ; ===================================================== -add: -{ - "classname" "logic_auto" - "OnMapSpawn" "!self,RunScriptFile,weapon_skin_enabler,5,-1" -} +;add: +;{ +; "classname" "logic_auto" +; "OnMapSpawn" "!self,RunScriptFile,weapon_skin_enabler,5,-1" +;} ; ===================================================== ; == T2 WEAPON SPAWN FIX == @@ -1577,7 +1566,7 @@ filter: { "classname" "prop_mounted_machine_gun" } -; --- Gas Cans & First Aid Kits +; --- Gas Cans modify: { match: @@ -1587,7 +1576,6 @@ modify: replace: { "item8" "0" - "item2" "0" } } filter: @@ -1731,6 +1719,18 @@ filter: { "classname" "weapon_defibrillator" } +; --- First Aid Kits +modify: +{ + match: + { + "classname" "weapon_item_spawn" + } + replace: + { + "item2" "0" + } +} ; --- Adrenaline modify: { @@ -1839,62 +1839,6 @@ filter: ; ===================================================== ; --- Spawnflags = 8 (Motion disabled) modify: -; --- Barrels -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_fairgrounds/traffic_barrel.mdl" - } - replace: - { - "spawnflags" "8" - } -} -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props/cs_assault/barrelwarning.mdl" - } - replace: - { - "spawnflags" "8" - } -} -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_urban/oil_drum001.mdl" - } - replace: - { - "spawnflags" "8" - } -} -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_c17/oildrum001.mdl" - } - replace: - { - "spawnflags" "8" - } -} -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_industrial/pallet_barrels_water01_single.mdl" - } - replace: - { - "spawnflags" "8" - } -} ; --- Tables { match: @@ -2084,39 +2028,7 @@ modify: "spawnflags" "8" } } -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_trainstation/trashcan_indoor001b.mdl" - } - replace: - { - "spawnflags" "8" - } -} -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_interiors/sawhorse.mdl" - } - replace: - { - "spawnflags" "8" - } -} -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_equipment/cart_utility_01.mdl" - } - replace: - { - "spawnflags" "8" - } -} +; --- Generic cabinets across multiple maps { match: { @@ -2150,17 +2062,7 @@ modify: "spawnflags" "8" } } -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_wasteland/controlroom_filecabinet001a.mdl" - } - replace: - { - "spawnflags" "8" - } -} +; --- Green file cabinets { match: { @@ -2172,6 +2074,7 @@ modify: "spawnflags" "8" } } +; --- Blue file cabinets { match: { @@ -2183,7 +2086,6 @@ modify: "spawnflags" "8" } } - ; --- Chairs { match: @@ -2686,6 +2588,35 @@ filter: "classname" "/.*prop_physics.*/" "model" "models/props_unique/airport/line_post.mdl" } +; --- Nuisance props that are too big to be debris without causing confusing +{ + "classname" "/.*prop_physics.*/" + "model" "models/props_fairgrounds/traffic_barrel.mdl" +} +{ + "classname" "/.*prop_physics.*/" + "model" "models/props_urban/oil_drum001.mdl" +} +{ + "classname" "/.*prop_physics.*/" + "model" "models/props_c17/oildrum001.mdl" +} +{ + "classname" "/.*prop_physics.*/" + "model" "models/props_industrial/pallet_barrels_water01_single.mdl" +} +{ + "classname" "/.*prop_physics.*/" + "model" "models/props/cs_assault/barrelwarning.mdl" +} +{ + "classname" "/.*prop_physics.*/" + "model" "models/props_trainstation/trashcan_indoor001b.mdl" +} +{ + "classname" "/.*prop_physics.*/" + "model" "models/props_equipment/cart_utility_01.mdl" +} ; ===================================================== ; == PROP COLLISION FIX == @@ -2694,6 +2625,18 @@ filter: ; --- Physics Props: Spawnflags = 4 (Debris) ; --- Dynamic Props: Solid = 0 (No collision) modify: +; --- File cabinets +{ + match: + { + "classname" "/.*prop_physics.*/" + "model" "models/props_wasteland/controlroom_filecabinet001a.mdl" + } + replace: + { + "spawnflags" "4" + } +} ; --- Dead bodies { match: @@ -2795,17 +2738,6 @@ modify: "spawnflags" "4" } } -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_fortifications/traffic_barrier001.mdl" - } - insert: - { - "spawnflags" "4" - } -} { match: { @@ -3686,17 +3618,6 @@ modify: "spawnflags" "4" } } -{ - match: - { - "classname" "/.*prop_physics.*/" - "model" "models/props_interiors/chair_thonet.mdl" - } - insert: - { - "spawnflags" "4" - } -} { match: { @@ -3723,7 +3644,7 @@ modify: match: { "classname" "/.*prop_physics.*/" - "model" "models/props_interiors/foldingchair.mdl" + "model" "models/props_interiors/furniture_chair03a.mdl" } insert: { @@ -3852,6 +3773,17 @@ modify: "spawnflags" "4" } } +{ + match: + { + "classname" "/.*prop_physics.*/" + "model" "models/props_interiors/sawhorse.mdl" + } + replace: + { + "spawnflags" "4" + } +} ; --- Pots / Plants { match: @@ -4691,4 +4623,15 @@ modify: { "spawnflags" "4" } +} +{ + match: + { + "classname" "/.*prop_physics.*/" + "model" "models/props_normandy/haybale.mdl" + } + insert: + { + "spawnflags" "4" + } } \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c10m1_caves.cfg b/cfg/stripper/zonemod/maps/c10m1_caves.cfg index c640f45e1..6fcbec1fb 100644 --- a/cfg/stripper/zonemod/maps/c10m1_caves.cfg +++ b/cfg/stripper/zonemod/maps/c10m1_caves.cfg @@ -719,16 +719,37 @@ add: "initialstate" "1" "BlockType" "0" } -; --- Clipping on some cracks in the wall at the end of the tunnel to stop survivors from getting stuck +; --- Clipping on some cracks in the wall at the end of the tunnel to stop players from getting stuck { "classname" "env_physics_blocker" - "origin" "-12768 -5940 40" - "mins" "-1 -103 -88" - "maxs" "1 103 88" + "origin" "-12768.5 -6000.5 40" + "mins" "-1.5 -162.5 -88" + "maxs" "1.5 162.5 88" "initialstate" "1" - "BlockType" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-12767.1 -6163 40" + "angles" "0 45 0" + "mins" "-2 -2 -88" + "maxs" "2 2 88" + "boxmins" "-2 -2 -88" + "boxmaxs" "2 2 88" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-12767.1 -5838 40" + "angles" "0 45 0" + "mins" "-2 -2 -88" + "maxs" "2 2 88" + "boxmins" "-2 -2 -88" + "boxmaxs" "2 2 88" + "initialstate" "1" + "BlockType" "0" } - ; ########### ADDITIONAL PROPS AND SPAWNS ########### ; ===================================================== diff --git a/cfg/stripper/zonemod/maps/c10m2_drainage.cfg b/cfg/stripper/zonemod/maps/c10m2_drainage.cfg index ea8805cfb..4979cc8f7 100644 --- a/cfg/stripper/zonemod/maps/c10m2_drainage.cfg +++ b/cfg/stripper/zonemod/maps/c10m2_drainage.cfg @@ -97,6 +97,31 @@ modify: ; == Block intentionally performed exploits == ; ===================================================== add: +; --- Block standing on bridge supports at the event +{ + "classname" "env_physics_blocker" + "origin" "-8448 -8518 -152" + "mins" "-10 -6 -38" + "maxs" "10 6 38" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "-8360 -8520 -152" + "mins" "-10 -6 -38" + "maxs" "10 6 38" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "-8125 -8518 -165.5" + "mins" "-11 -6 -51.5" + "maxs" "11 6 51.5" + "initialstate" "1" + "BlockType" "1" +} ; --- Block standing on the pipe under the walkway after the bridge { "classname" "env_physics_blocker" @@ -112,18 +137,6 @@ add: ; == Block players getting outside / under the map == ; ===================================================== -add: -; --- Block pillar top of the bridge -{ - "classname" "env_physics_blocker" - "targetname" "EB_bridge_svv_fix01a" - "origin" "-8128 -8520 -208" - "maxs" "14 8 80" - "mins" "-8 -4 -80" - "initialstate" "1" - "BlockType" "1" -} - ; ===================================================== ; == STUCK SPOTS == ; == Prevent players from getting stuck in the map == @@ -211,6 +224,11 @@ filter: { "hammerid" "988448" } +; --- Remove file cabinets on the ground by the end saferoom +{ + "classname" "prop_physics" + "model" "models/props_wasteland/controlroom_filecabinet002a.mdl" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -369,4 +387,4 @@ modify: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== +; ===================================================== \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c10m3_ranchhouse.cfg b/cfg/stripper/zonemod/maps/c10m3_ranchhouse.cfg index 94576f153..07862d079 100644 --- a/cfg/stripper/zonemod/maps/c10m3_ranchhouse.cfg +++ b/cfg/stripper/zonemod/maps/c10m3_ranchhouse.cfg @@ -338,7 +338,6 @@ modify: replace: { "BreakableType" "0" - "minhealthdmg" "0" } delete: @@ -445,18 +444,6 @@ modify: ; "OnBreak" "break_rescue_window_01,SetDamageFilter,,0,1" ; } ;} -; --- Make the gravestones only breakable by tanks -modify: -{ - match: - { - "damagefilter" "filter_no_burn" - } - replace: - { - "damagefilter" "filter_tank" - } -} ; --- Block LOS in church window behind the map add: { diff --git a/cfg/stripper/zonemod/maps/c10m4_mainstreet.cfg b/cfg/stripper/zonemod/maps/c10m4_mainstreet.cfg index f6332b3b7..e329e5b90 100644 --- a/cfg/stripper/zonemod/maps/c10m4_mainstreet.cfg +++ b/cfg/stripper/zonemod/maps/c10m4_mainstreet.cfg @@ -657,6 +657,40 @@ add: "origin" "-787 -942 -50" "targetname" "losfix_bus_street_2e" } +; --- Clipping on sleeping bags in florist shop +{ + "classname" "env_physics_blocker" + "origin" "-301.69 -1905.25 -44" + "angles" "0 -15 0" + "mins" "-24 -43 -4" + "maxs" "24 43 4" + "boxmins" "-24 -43 -4" + "boxmaxs" "24 43 4" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-248 -1980 -43" + "angles" "0 25 0" + "mins" "-15 -19 -5" + "maxs" "15 19 5" + "boxmins" "-15 -19 -5" + "boxmaxs" "15 19 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-248 -1980 -34.5" + "angles" "0 25 0" + "mins" "-13 -17 -3.5" + "maxs" "13 17 3.5" + "boxmins" "-13 -17 -3.5" + "boxmaxs" "13 17 3.5" + "initialstate" "1" + "BlockType" "0" +} ; --- Clipping on car stoppers after the florist shop { "classname" "env_physics_blocker" @@ -1057,7 +1091,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Block LOS under the cement truck +; --- Block LOS under the ambulance { "classname" "logic_auto" "OnMapSpawn" "los_ambulance_a,AddOutput,mins -1 -62 -10,0,-1" @@ -1139,7 +1173,7 @@ add: ; --- Clip on added delivery van "OnMapSpawn" "anv_mapfixes_losblocker_deliveryclip,Kill,,30,-1" ; --- Clip on truck after florist (can be re-enabled if angled blockers get fixed) (#34) - "OnMapSpawn" "anv_mapfixes_cliprework_trucknuke,Kill,,30,-1" + ;"OnMapSpawn" "anv_mapfixes_cliprework_trucknuke,Kill,,30,-1" ; --- Clip above office roof "OnMapSpawn" "anv_mapfixes_meticulous_funcinfclip03,Kill,,30,-1" "OnMapSpawn" "anv_mapfixes_stainedroof_wrongway1,Kill,,30,-1" diff --git a/cfg/stripper/zonemod/maps/c11m2_offices.cfg b/cfg/stripper/zonemod/maps/c11m2_offices.cfg index 89f40a9b2..20aacf8bd 100644 --- a/cfg/stripper/zonemod/maps/c11m2_offices.cfg +++ b/cfg/stripper/zonemod/maps/c11m2_offices.cfg @@ -86,7 +86,7 @@ filter: { "hammerid" "7941040" } -{ +{ "hammerid" "9120351" } { diff --git a/cfg/stripper/zonemod/maps/c11m4_terminal.cfg b/cfg/stripper/zonemod/maps/c11m4_terminal.cfg index cd9b1ad76..7be4437e5 100644 --- a/cfg/stripper/zonemod/maps/c11m4_terminal.cfg +++ b/cfg/stripper/zonemod/maps/c11m4_terminal.cfg @@ -361,7 +361,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Barricades between the bathrooms and departure gate +; --- Barricades between the bathrooms and departure gate { "classname" "prop_dynamic" "origin" "3087 2776 152" @@ -436,14 +436,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "2792 4254 152" - "angles" "0 180 0" - "model" "models/props_unique/airport/temp_barricade.mdl" - "solid" "6" - "disableshadows" "1" -} { "classname" "prop_dynamic" "origin" "2792 4588 152" diff --git a/cfg/stripper/zonemod/maps/c11m5_runway.cfg b/cfg/stripper/zonemod/maps/c11m5_runway.cfg index 4d2dfeeaf..1fff3213c 100644 --- a/cfg/stripper/zonemod/maps/c11m5_runway.cfg +++ b/cfg/stripper/zonemod/maps/c11m5_runway.cfg @@ -75,7 +75,7 @@ add: "classname" "logic_auto" ; --- Remove TLS hittable "OnMapSpawn" "anv_mapfixes_replacement_baggagecart,Kill,,15,-1" - ; --- Spawn new bumper car + ; --- Spawn new baggage cart "OnMapSpawn" "original_baggagecart_template,ForceSpawn,,16,-1" } { @@ -383,13 +383,6 @@ filter: ; == CLIP REMOVAL == ; == Remove miscellaneous clips and brushes == ; ===================================================== -; --- Remove TLS clips -add: -{ - "classname" "logic_auto" - ; --- Angled survivor clip over boarding gate (can be re-enabled if angled blockers get fixed) (#34) - "OnMapSpawn" "anv_mapfixes_nav_skybridge,Kill,,30,-1" -} ; ===================================================== ; == TRIGGER REMOVAL / FIX == diff --git a/cfg/stripper/zonemod/maps/c12m5_cornfield.cfg b/cfg/stripper/zonemod/maps/c12m5_cornfield.cfg index d8ad81352..849849241 100644 --- a/cfg/stripper/zonemod/maps/c12m5_cornfield.cfg +++ b/cfg/stripper/zonemod/maps/c12m5_cornfield.cfg @@ -120,7 +120,6 @@ add: "solid" "6" "fadescale" "0" } - ; ############# MAP CLIPPING AND ISSUES ############# ; ===================================================== @@ -167,6 +166,15 @@ add: ; == Block players getting outside / under the map == ; ===================================================== add: +; --- Block out of bounds stuck spot in cliffs behind the saferoom +{ + "classname" "env_physics_blocker" + "origin" "7136 -1264 -922" + "mins" "-32 -80 -1126" + "maxs" "32 80 1126" + "initialstate" "1" + "BlockType" "0" +} ; --- Prevent infected from going behind tree cards right of the saferoom { "classname" "env_physics_blocker" @@ -703,4 +711,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== +; ===================================================== \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c13m2_southpinestream.cfg b/cfg/stripper/zonemod/maps/c13m2_southpinestream.cfg index 164d387b0..eeea818c2 100644 --- a/cfg/stripper/zonemod/maps/c13m2_southpinestream.cfg +++ b/cfg/stripper/zonemod/maps/c13m2_southpinestream.cfg @@ -233,6 +233,15 @@ add: ; == Prevent players from getting stuck in the map == ; ===================================================== add: +; --- Block a stuck spot behind the barricade below the static tank spawn +{ + "classname" "env_physics_blocker" + "origin" "6453 3716 950" + "mins" "-167 -80 -138" + "maxs" "167 80 138" + "initialstate" "1" + "BlockType" "0" +} ; --- Prevent a stuck spot on the ambulance one way drop fence { "classname" "env_physics_blocker" diff --git a/cfg/stripper/zonemod/maps/c14m1_junkyard.cfg b/cfg/stripper/zonemod/maps/c14m1_junkyard.cfg index 3c1893db6..5b6f02c2b 100644 --- a/cfg/stripper/zonemod/maps/c14m1_junkyard.cfg +++ b/cfg/stripper/zonemod/maps/c14m1_junkyard.cfg @@ -164,6 +164,28 @@ add: ; == SOUND REMOVAL == ; == Remove or adjust sounds played by the map == ; ===================================================== +; --- Remove plane sounds at the start of the map +filter: +{ + "targetname" "b_plane01_sound" +} +{ + "targetname" "b_plane01_sound2" +} +{ + "targetname" "b_plane01_sound3" +} +modify: +{ + match: + { + "hammerid" "5312564" + } + delete: + { + "OnStartTouch" "!activatorSpeakResponseConceptC14M1PlaneFlyBy1.5-1" + } +} ; ===================================================== ; == GFX / PARTICLES REMOVAL == diff --git a/cfg/stripper/zonemod/maps/c14m2_lighthouse.cfg b/cfg/stripper/zonemod/maps/c14m2_lighthouse.cfg index e86d07230..f15450698 100644 --- a/cfg/stripper/zonemod/maps/c14m2_lighthouse.cfg +++ b/cfg/stripper/zonemod/maps/c14m2_lighthouse.cfg @@ -135,6 +135,17 @@ add: "spawnflags" "2" "count" "5" } +; --- Ammo pile on the beach +{ + "classname" "weapon_ammo_spawn" + "origin" "-2368.99 4838.92 -56.2947" + "angles" "-1.01178 -45.1634 356.849" + "model" "models/props/terror/ammo_stack.mdl" + "solid" "6" + "disableshadows" "1" + "spawnflags" "2" + "count" "5" +} ; ===================================================== ; == HITTABLE CHANGES == diff --git a/cfg/stripper/zonemod/maps/c1m1_hotel.cfg b/cfg/stripper/zonemod/maps/c1m1_hotel.cfg index 75c831073..2c05644ce 100644 --- a/cfg/stripper/zonemod/maps/c1m1_hotel.cfg +++ b/cfg/stripper/zonemod/maps/c1m1_hotel.cfg @@ -3,128 +3,6 @@ ; == DIRECTOR & EVENT MODIFICATION == ; == Modify director behaviour and events == ; ===================================================== -; --- Make survivors have to call the elevator to the top before going to the ground floor -; --- Fake the elevator moving with visuals and sounds -; --- Remove logic_auto that opens the elevator doors on map spawn -filter: -{ - "hammerid" "1227763" -} -; --- Remove existing button as there are 2 buttons with the same targetname -{ - "hammerid" "329945" - "targetname" "elevbuttonoutsidefront" -} -; --- Create the new elevator button -add: -{ - "classname" "prop_dynamic" - "origin" "2048 5696 2516.17" - "angles" "0 270 0" - "model" "models/props_equipment/elevator_buttons.mdl" - "solid" "6" - "disableshadows" "1" - "targetname" "call_elevator_button_prop" - "fadescale" "0" - "glowrange" "1000" - "glowrangemin" "128" -} -{ - "classname" "func_button" - "origin" "2048 5706 2884.89" - "model" "*5" - "spawnflags" "1025" - "targetname" "call_elevator_button" - "glow" "call_elevator_button_prop" - "wait" "-1" - "sounds" "32" - ; --- Disable glow - "OnPressed" "call_elevator_button_prop,StopGlowing,,0,-1" - ; --- Button and elevator lights - "OnPressed" "call_elevator_button_prop,Skin,1,0,-1" - "OnPressed" "call_elevator_button_prop,Skin,0,0.3,-1" - "OnPressed" "call_elevator_lights,Skin,1,0.5,-1" - ; --- Elevator moving sound - "OnPressed" "elevator_movement_sound,PlaySound,,2,-1" - ; --- Survivors call out pressing the button - "OnPressed" "!activator,SpeakResponseConcept,c4m2_elevator_top_button,0,-1" - ; --- Start panic event - "OnPressed" "director,ForcePanicEvent,,3,-1" - ; --- Elevator opens after ~30 seconds - "OnPressed" "call_elevator_relay,Trigger,,34,-1" -} -; --- Create a relay for handling elevator arrival -{ - "classname" "logic_relay" - "origin" "2035 5661 2473" - "targetname" "call_elevator_relay" - ; --- Button and elevator lights - "OnTrigger" "call_elevator_lights,Skin,0,4,-1" - ; --- Stop elevator moving sound - "OnTrigger" "elevator_movement_sound,StopSound,,0,-1" - ; --- Elevator arrival sounds and dialogue - "OnTrigger" "elevator_stop_sound,PlaySound,,2,-1" - "OnTrigger" "sound_elevator_arrived,PlaySound,,4,-1" - "OnTrigger" "sound_elevator_arrived,StopSound,,10,-1" - ; --- Survivors call out the elevator arriving - "OnTrigger" "!activator,SpeakResponseConcept,PlayerMoveOn,5,-1" - ; --- Open the doors - "OnTrigger" "elevator_1_door1,Open,,5,-1" - "OnTrigger" "elevator_1_door2,Open,,5,-1" - ; --- Unblock nav - "OnTrigger" "elevator_event_nav_block_a,UnblockNav,,5,-1" - "OnTrigger" "elevator_event_nav_block_b,UnblockNav,,5,-1" -} -; --- Give a unique name to the relevant elevator arrow lights so we only change this one -modify: -{ - match: - { - "hammerid" "330225" - } - replace: - { - "targetname" "call_elevator_lights" - } -} -; --- Add a glow to the button when hitting a trigger just before the elevator room, and limit trigger to survivors -{ - match: - { - "hammerid" "4029721" - "origin" "1728 5736 2528" - } - insert: - { - "filtername" "filter_survivor" - "OnStartTouch" "call_elevator_button_prop,StartGlowing,,0,-1" - } -} -; --- Block elevator nav until doors open -add: -{ - "classname" "logic_auto" - "OnMapSpawn" "elevator_event_nav_block_a,AddOutput,mins -104 -100 -96,0,-1" - "OnMapSpawn" "elevator_event_nav_block_a,AddOutput,maxs 104 100 96,0,-1" - "OnMapSpawn" "elevator_event_nav_block_a,AddOutput,solid 2,0,-1" - "OnMapSpawn" "elevator_event_nav_block_a,BlockNav,,1,-1" - "OnMapSpawn" "elevator_event_nav_block_b,AddOutput,mins -44 -12 -96,0,-1" - "OnMapSpawn" "elevator_event_nav_block_b,AddOutput,maxs 44 12 96,0,-1" - "OnMapSpawn" "elevator_event_nav_block_b,AddOutput,solid 2,0,-1" - "OnMapSpawn" "elevator_event_nav_block_b,BlockNav,,1,-1" -} -{ - "classname" "func_nav_blocker" - "origin" "2168 5813 2560" - "targetname" "elevator_event_nav_block_a" - "teamToBlock" "-1" -} -{ - "classname" "func_nav_blocker" - "origin" "2164 5701 2560" - "targetname" "elevator_event_nav_block_b" - "teamToBlock" "-1" -} ; --- Remove scripted zombie spawns that fall through the windows by the end saferoom filter: { @@ -144,14 +22,14 @@ add: ; --- Single pickup tier 1 weapons in saferoom { "classname" "weapon_smg_silenced" - "origin" "429 5579 2850" + "origin" "429 5573 2850" "angles" "0 254 84" "ammo" "650" "spawnflags" "1" } { "classname" "weapon_shotgun_chrome" - "origin" "430 5545 2850" + "origin" "430 5531 2850" "angles" "0 254 84" "ammo" "96" "spawnflags" "1" @@ -168,29 +46,21 @@ add: "spawnflags" "2" "count" "1" } -; --- Single pickup T1s on table by cleaning cart around the corner in the first hallway +; --- Additional single pickup T1s at the corner in the first hallway { "classname" "weapon_smg" - "origin" "1684 5926 2692" - "angles" "0 270 90" + "origin" "1771 5781 2657" + "angles" "0 316 -90" "ammo" "650" "spawnflags" "1" } { "classname" "weapon_pumpshotgun" - "origin" "1687 5894 2692" - "angles" "0 255 90" + "origin" "1775 5742 2657" + "angles" "0 276.5 -90" "ammo" "72" "spawnflags" "1" } -{ - "classname" "prop_dynamic" - "origin" "1684 5901 2656" - "angles" "0 0 0" - "model" "models/props_interiors/table_kitchen.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Make the melee in the map room always spawn modify: { @@ -216,29 +86,6 @@ add: "spawnflags" "2" "count" "1" } -; --- Guns in the room by the elevator -{ - "classname" "weapon_spawn" - "origin" "2155 5367 2487" - "angles" "0 270 -90" - "weapon_selection" "any_smg" - "spawn_without_director" "1" - "solid" "6" - "disableshadows" "1" - "spawnflags" "2" - "count" "5" -} -{ - "classname" "weapon_spawn" - "origin" "2141 5413 2465" - "angles" "0 223 -90" - "weapon_selection" "tier1_shotgun" - "spawn_without_director" "1" - "solid" "6" - "disableshadows" "1" - "spawnflags" "2" - "count" "5" -} ; ===================================================== ; == STATIC AMMO PILES == @@ -343,20 +190,53 @@ add: "BlockType" "1" "targetname" "lower_ledge_block" } -; --- Remove the block once survivors have opened the stairwell door +; --- Remove the block once survivors hit a trigger after the stairwell to the lower floor modify: { match: { - "hammerid" "570190" + "hammerid" "4545120" + "origin" "1727.75 7589.71 2523.5" } insert: { - "OnBreak" "lower_ledge_block,Kill,,0,-1" - "OnOpen" "lower_ledge_block,Kill,,0,-1" + "OnStartTouch" "lower_ledge_block,Kill,,0,-1" } } add: +; --- Block survivors from standing on clips in the hospital bed room +{ + "classname" "env_physics_blocker" + "origin" "364 5064 1412" + "mins" "-68 -128 -44" + "maxs" "68 128 44" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "-156 4696 1412" + "mins" "-132 -72 -44" + "maxs" "132 72 44" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "-644 5040 1412" + "mins" "-68 -176 -44" + "maxs" "68 176 44" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "-636 5560 1412" + "mins" "-68 -128 -44" + "maxs" "68 128 44" + "initialstate" "1" + "BlockType" "1" +} ; --- Block survivors from standing on the awning above the check-in desk { "classname" "env_physics_blocker" @@ -404,7 +284,15 @@ add: ; == Prevent players from getting stuck in the map == ; ===================================================== add: -; --- Block getting stuck on top of the suitcase pile just before the kitchen +; --- Block getting stuck on top of suitcase piles just before the kitchen +{ + "classname" "env_physics_blocker" + "origin" "990 5418 1264" + "mins" "-46 -42 -80" + "maxs" "38 42 80" + "initialstate" "1" + "BlockType" "0" +} { "classname" "env_physics_blocker" "origin" "494 5436 1264" @@ -444,6 +332,7 @@ add: "angles" "0 0 0" "extent" "8.5 84 350" "StartDisabled" "0" + "targetname" "weapon_grief_protector" } { "classname" "script_clip_vphysics" @@ -451,6 +340,7 @@ add: "angles" "0 0 0" "extent" "191.5 8.5 350" "StartDisabled" "0" + "targetname" "weapon_grief_protector" } { "classname" "script_clip_vphysics" @@ -458,6 +348,7 @@ add: "angles" "0 0 0" "extent" "8.5 417.5 350" "StartDisabled" "0" + "targetname" "weapon_grief_protector" } { "classname" "script_clip_vphysics" @@ -465,6 +356,7 @@ add: "angles" "0 0 0" "extent" "191.5 8.5 350" "StartDisabled" "0" + "targetname" "weapon_grief_protector" } { "classname" "script_clip_vphysics" @@ -472,6 +364,7 @@ add: "angles" "0 0 0" "extent" "8.5 125.5 350" "StartDisabled" "0" + "targetname" "weapon_grief_protector" } { "classname" "script_clip_vphysics" @@ -479,6 +372,7 @@ add: "angles" "0 0 0" "extent" "8.5 208 296" "StartDisabled" "0" + "targetname" "weapon_grief_protector" } ; --- Remove window by elevator that prevents death charges and ledge hangs filter: @@ -569,11 +463,12 @@ add: ; --- Props in the Banquet Hall A area for spawns { "classname" "prop_dynamic" - "origin" "-358 5271 1184" + "origin" "-367 5285 1184" "angles" "0 81.5 0" - "model" "models/props_office/vending_machine01.mdl" + "model" "models/props/cs_office/vending_machine.mdl" "solid" "6" "disableshadows" "1" + "skin" "1" } { "classname" "prop_dynamic" @@ -598,11 +493,12 @@ add: ; --- Drinks machines behind the check-in desk by the end saferoom { "classname" "prop_dynamic" - "origin" "546 4942 1184" + "origin" "531 4944 1184" "angles" "0 90 0" - "model" "models/props_office/vending_machine01.mdl" + "model" "models/props/cs_office/vending_machine.mdl" "solid" "6" "disableshadows" "1" + "skin" "1" } { "classname" "prop_dynamic" @@ -612,109 +508,48 @@ add: "solid" "6" "disableshadows" "1" } -; --- Dressers by the end saferoom +; --- Drinks machine by the end saferoom { "classname" "prop_dynamic" - "origin" "1344 4908 1183" - "angles" "0 270 90" - "model" "models/props_downtown/dresser.mdl" + "origin" "1325 4923 1184" + "angles" "0 270 0" + "model" "models/props/cs_office/vending_machine.mdl" "solid" "6" "disableshadows" "1" + "skin" "1" } +; --- Pile of dressers, chairs and plants by the end saferoom { "classname" "prop_dynamic" - "origin" "1301 4908 1182" - "angles" "0 270 83.5" + "origin" "1400 4421 1184" + "angles" "0 185 0" "model" "models/props_downtown/dresser.mdl" "solid" "6" "disableshadows" "1" } -; --- Baggage cart by the end saferoom -{ - "classname" "prop_dynamic_override" - "origin" "1152 4914 1184" - "angles" "0 0 0" - "model" "models/props_interiors/luggagecarthotel01.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic_override" - "origin" "1143 4915 1185" - "angles" "0 0 0" - "model" "models/props_unique/airport/luggage1.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic_override" - "origin" "1155 4904 1207" - "angles" "0 0 -90" - "model" "models/props_unique/airport/luggage2.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic_override" - "origin" "1166 4923 1205" - "angles" "0 0 90" - "model" "models/props_unique/airport/luggage4.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic_override" - "origin" "1152 4927 1226" - "angles" "-83 0 90" - "model" "models/props_unique/airport/luggage3.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic_override" - "origin" "1177 4915 1236" - "angles" "-83 0 0" - "model" "models/props_unique/airport/luggage1.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Block LOS under baggage cart -{ - "classname" "logic_auto" - "OnMapSpawn" "los_baggage_cart,AddOutput,mins -20 -1 -3,0,-1" - "OnMapSpawn" "los_baggage_cart,AddOutput,maxs 20 1 3,0,-1" - "OnMapSpawn" "los_baggage_cart,AddOutput,solid 2,0,-1" -} -{ - "classname" "func_brush" - "origin" "1152 4914 1187" - "targetname" "los_baggage_cart" -} -; --- Chair by the end saferoom { "classname" "prop_dynamic" - "origin" "1275 4399 1184" - "angles" "0 90 0" + "origin" "1367 4350 1241" + "angles" "1.02272 89.47 86.6526" "model" "models/props_urban/hotel_chair001.mdl" "solid" "6" "disableshadows" "1" } -; --- Luggage pile by the end saferoom { "classname" "prop_dynamic" - "origin" "1583 4165 1183" - "angles" "0 197.5 0" - "model" "models/props_unique/airport/luggage_pile1.mdl" + "origin" "1331.22 4344 1184" + "angles" "0 0 0" + "model" "models/props_foliage/mall_pot_square02.mdl" "solid" "6" "disableshadows" "1" } { - "classname" "env_physics_blocker" - "origin" "1583 4173 1288" - "mins" "-69 -51 -104" - "maxs" "69 51 104" - "initialstate" "1" - "BlockType" "1" + "classname" "prop_dynamic" + "origin" "1331 4346 1216" + "angles" "0 180 0" + "model" "models/props_foliage/mall_small_palm01_cluster_medium.mdl" + "solid" "0" + "disableshadows" "1" } ; ===================================================== @@ -967,6 +802,169 @@ modify: ; ####### MISCELLANEOUS / MAP SPECIFIC CHANGES ###### ; ===================================================== -; == BLANK HEADER == -; == Blank description == -; ===================================================== \ No newline at end of file +; == ELEVATOR HOLDOUT == +; == Short holdout to access the elevator == +; ===================================================== +; --- Make survivors have to call the elevator to the top before going to the ground floor +; --- Fake the elevator moving with visuals and sounds +; --- Remove logic_auto that opens the elevator doors on map spawn +filter: +{ + "hammerid" "1227763" +} +; --- Remove existing button as there are 2 buttons with the same targetname +{ + "hammerid" "329945" + "targetname" "elevbuttonoutsidefront" +} +; --- Create the new elevator button +add: +{ + "classname" "prop_dynamic" + "origin" "2048 5696 2516.17" + "angles" "0 270 0" + "model" "models/props_equipment/elevator_buttons.mdl" + "solid" "6" + "disableshadows" "1" + "targetname" "call_elevator_button_prop" + "fadescale" "0" + "glowrange" "1000" + "glowrangemin" "128" +} +{ + "classname" "prop_dynamic" + "origin" "2048 5695.5 2516.17" + "angles" "0 90 0" + "model" "models/props_equipment/elevator_buttons.mdl" + "solid" "0" + "disableshadows" "1" + "rendermode" "10" + "targetname" "call_elevator_button_prop_glow" + "fadescale" "0" + "glowrange" "1000" + "glowrangemin" "128" +} +{ + "classname" "func_button" + "origin" "2048 5706 2884.89" + "model" "*5" + "spawnflags" "1025" + "targetname" "call_elevator_button" + "glow" "call_elevator_button_prop" + "wait" "-1" + "sounds" "32" + ; --- Disable glow + "OnPressed" "call_elevator_button_prop*,StopGlowing,,0,-1" + ; --- Button and elevator lights + "OnPressed" "call_elevator_button_prop,Skin,1,0,-1" + "OnPressed" "call_elevator_button_prop,Skin,0,0.3,-1" + "OnPressed" "call_elevator_lights,Skin,1,0.5,-1" + ; --- Elevator moving sound + "OnPressed" "elevator_movement_sound,PlaySound,,2,-1" + ; --- Survivors call out pressing the button + "OnPressed" "!activator,SpeakResponseConcept,c4m2_elevator_top_button,0,-1" + ; --- Start panic event + "OnPressed" "director,ForcePanicEvent,,3,-1" + ; --- Elevator opens after ~30 seconds + "OnPressed" "call_elevator_relay,Trigger,,34,-1" +} +; --- Create a relay for handling elevator arrival +{ + "classname" "logic_relay" + "origin" "2035 5661 2473" + "targetname" "call_elevator_relay" + ; --- Button and elevator lights + "OnTrigger" "call_elevator_lights,Skin,0,4,-1" + ; --- Stop elevator moving sound + "OnTrigger" "elevator_movement_sound,StopSound,,0,-1" + ; --- Elevator arrival sounds and dialogue + "OnTrigger" "elevator_stop_sound,PlaySound,,2,-1" + "OnTrigger" "sound_elevator_arrived,PlaySound,,4,-1" + "OnTrigger" "sound_elevator_arrived,StopSound,,10,-1" + ; --- Survivors call out the elevator arriving + "OnTrigger" "!activator,SpeakResponseConcept,PlayerMoveOn,5,-1" + ; --- Open the doors + "OnTrigger" "elevator_1_door1,Open,,5,-1" + "OnTrigger" "elevator_1_door2,Open,,5,-1" + ; --- Unblock nav + "OnTrigger" "elevator_event_nav_block_a,UnblockNav,,5,-1" + "OnTrigger" "elevator_event_nav_block_b,UnblockNav,,5,-1" +} +; --- Give a unique name to the relevant elevator arrow lights so we only change this one +modify: +{ + match: + { + "hammerid" "330225" + } + replace: + { + "targetname" "call_elevator_lights" + } +} +; --- Add a glow to the button when hitting a trigger just before the elevator room, and limit trigger to survivors +{ + match: + { + "hammerid" "4029721" + "origin" "1728 5736 2528" + } + insert: + { + "filtername" "filter_survivor" + "OnStartTouch" "call_elevator_button_prop*,StartGlowing,,0,-1" + } + replace: + { + "origin" "1728 5904 2528" + } +} +; --- Block elevator nav until doors open +add: +{ + "classname" "logic_auto" + "OnMapSpawn" "elevator_event_nav_block_a,AddOutput,mins -104 -100 -96,0,-1" + "OnMapSpawn" "elevator_event_nav_block_a,AddOutput,maxs 104 100 96,0,-1" + "OnMapSpawn" "elevator_event_nav_block_a,AddOutput,solid 2,0,-1" + "OnMapSpawn" "elevator_event_nav_block_a,BlockNav,,1,-1" + "OnMapSpawn" "elevator_event_nav_block_b,AddOutput,mins -44 -12 -96,0,-1" + "OnMapSpawn" "elevator_event_nav_block_b,AddOutput,maxs 44 12 96,0,-1" + "OnMapSpawn" "elevator_event_nav_block_b,AddOutput,solid 2,0,-1" + "OnMapSpawn" "elevator_event_nav_block_b,BlockNav,,1,-1" +} +{ + "classname" "func_nav_blocker" + "origin" "2168 5813 2560" + "targetname" "elevator_event_nav_block_a" + "teamToBlock" "-1" +} +{ + "classname" "func_nav_blocker" + "origin" "2164 5701 2560" + "targetname" "elevator_event_nav_block_b" + "teamToBlock" "-1" +} +; --- Guns in the room by the elevator +add: +{ + "classname" "weapon_spawn" + "origin" "2155 5367 2487" + "angles" "0 270 -90" + "weapon_selection" "any_smg" + "spawn_without_director" "1" + "solid" "6" + "disableshadows" "1" + "spawnflags" "2" + "count" "5" +} +{ + "classname" "weapon_spawn" + "origin" "2141 5413 2465" + "angles" "0 223 -90" + "weapon_selection" "tier1_shotgun" + "spawn_without_director" "1" + "solid" "6" + "disableshadows" "1" + "spawnflags" "2" + "count" "5" +} \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c1m2_streets.cfg b/cfg/stripper/zonemod/maps/c1m2_streets.cfg index ba7618909..32d3bef4e 100644 --- a/cfg/stripper/zonemod/maps/c1m2_streets.cfg +++ b/cfg/stripper/zonemod/maps/c1m2_streets.cfg @@ -93,28 +93,6 @@ add: "HDRColorScale" ".7" "GlowProxySize" "8" } -; --- Enable the 2 alarm cars after the event -modify: -{ - match: - { - "targetname" "branch_caralarm-car1_alarm" - } - replace: - { - "OnTrue" "relay_caralarm_on-car1_alarmTrigger0-1" - } -} -{ - match: - { - "targetname" "branch_caralarm-car2_alarm" - } - replace: - { - "OnTrue" "relay_caralarm_on-car2_alarmTrigger0-1" - } -} ; ################ ITEM SPAWN CHANGES ############### @@ -363,18 +341,6 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Block standing on the edge of the tent by the generator - Removed until angled clip bug is fixed (#34) -;{ -; "classname" "env_physics_blocker" -; "origin" "1610 2682 1073" -; "angles" "0 353.5 0" -; "mins" "-3 -190.5 -399.5" -; "maxs" "3 190.5 399.5" -; "boxmins" "-3 -190.5 -399.5" -; "boxmaxs" "3 190.5 399.5" -; "initialstate" "1" -; "BlockType" "1" -;} ; --- Block survivors from standing on the hedges on the first road { "classname" "env_physics_blocker" @@ -526,7 +492,28 @@ add: "mins" "-896 -32 -576" "maxs" "896 32 576" "initialstate" "1" - "BlockType" "2" + "BlockType" "0" +} +; --- Block players going out of bounds at the back of the highway +{ + "classname" "env_physics_blocker" + "origin" "-1504 -1940 192" + "mins" "-96 -1132 -192" + "maxs" "96 1132 192" + "initialstate" "1" + "BlockType" "0" +} +; --- Block players going out of bounds behind the gun store / end saferoom +{ + "classname" "env_physics_blocker" + "origin" "-4168.6 -3320 418.84" + "angles" "-6.75 0 0" + "mins" "-560 -8 -96" + "maxs" "560 8 96" + "boxmins" "-560 -8 -96" + "boxmaxs" "560 8 96" + "initialstate" "1" + "BlockType" "0" } ; ===================================================== @@ -853,15 +840,6 @@ add: "solid" "6" "disableshadows" "1" } -; --- Hedge to jump on a highway sign at the back of the underpass -{ - "classname" "prop_dynamic" - "origin" "-940 4800 553" - "angles" "0 0 0" - "model" "models/props_foliage/urban_hedge_128_64_high.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Fence cover by dumpster drop { "classname" "prop_dynamic" @@ -880,32 +858,24 @@ add: "solid" "6" "disableshadows" "1" } -; --- Boxes to jump on the platform after the one way drop -{ - "classname" "prop_dynamic" - "origin" "-4702 1568 384" - "angles" "0 225 0" - "model" "models/props/cs_militia/boxes_garage_lower.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Fences on platform up the stairs after the one way drop +; --- Traffic barrel to jump on the platform by the hedge before the overpass { "classname" "prop_dynamic" - "origin" "-4510 1444 448" - "angles" "0 345 0" - "model" "models/props_urban/fence003_64.mdl" + "origin" "-4701 1665 384" + "angles" "0 90 0" + "model" "models/props_fairgrounds/traffic_barrel.mdl" "solid" "6" "disableshadows" "1" } { - "classname" "prop_dynamic" - "origin" "-4502 1474 448" - "angles" "0 345 0" - "model" "models/props_urban/fence_post003.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "env_physics_blocker" + "origin" "-4693 1687 406" + "mins" "-13 -23 -22" + "maxs" "13 23 22" + "initialstate" "1" + "BlockType" "0" } +; --- Fences on platform up the stairs after the one way drop { "classname" "prop_dynamic" "origin" "-4470 1597 448" @@ -942,17 +912,6 @@ add: "initialstate" "1" "BlockType" "0" } -{ - "classname" "env_physics_blocker" - "origin" "-4508 1441 471" - "angles" "0 -14 0" - "mins" "-4 -34 -23" - "maxs" "4 34 23" - "boxmins" "-4 -34 -23" - "boxmaxs" "4 34 23" - "initialstate" "1" - "BlockType" "0" -} ; --- Boxes on the walkway { "classname" "prop_dynamic" @@ -987,7 +946,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Crashed bus after the event +; --- Bus after the event { "classname" "prop_dynamic" "origin" "-7980 -496 384" @@ -1058,7 +1017,7 @@ add: "solid" "6" "disableshadows" "1" } -; --- Block LOS under van +; --- Block LOS under bus { "classname" "logic_auto" "OnMapSpawn" "losfix_bus_endsaferoom_a,AddOutput,mins -1 -95 -10,0,-1" @@ -1200,6 +1159,17 @@ add: "normal.z" "0.00" "team" "2" } +; --- Infected ladder to climb on a highway sign by the van +{ + "classname" "func_simpleladder" + "origin" "-266 8176 -82" + "angles" "0 180 0" + "model" "*41" + "normal.x" "1" + "normal.y" "0" + "normal.z" "0" + "team" "2" +} ; --- Infected ladder to get above the back of the underpass by the white van { "classname" "func_simpleladder" diff --git a/cfg/stripper/zonemod/maps/c1m3_mall.cfg b/cfg/stripper/zonemod/maps/c1m3_mall.cfg index 06648187b..dd74ecb29 100644 --- a/cfg/stripper/zonemod/maps/c1m3_mall.cfg +++ b/cfg/stripper/zonemod/maps/c1m3_mall.cfg @@ -8,10 +8,6 @@ filter: { "hammerid" "8442672" } -; --- Remove entity that affects the event path route based on the "event" removed above -{ - "targetname" "compare_minifinale" -} ; --- Remove natural horde script after the event modify: { @@ -28,160 +24,6 @@ modify: "OnPressed" "director,EndScript,,0,-1" } } -; --- Force survivors to always take the lower path leading to the event -modify: -{ - match: - { - "hammerid" "1310374" - } - insert: - { - "OnMapSpawn" "relay_hallway_closeTrigger0-1" - } -} -; --- Open up the Just For Kidz store so tanks don't need to use the vent, survivors can still go to this area but the path back remains blocked -filter: -{ - "targetname" "trigger_glass_breakable" -} -{ - "targetname" "brush_shop_blocked" -} -{ - "targetname" "breakble_glass_minifinale" -} -{ - "targetname" "nav_blocker_storefront" -} -{ - "targetname" "window_glow" -} -{ - "targetname" "instructor_window" -} -{ - "targetname" "filter_breakglass" -} -{ - "targetname" "filter_melee" -} -{ - "targetname" "filter_invunerable" -} -{ - "targetname" "trigger_glass_breakable" -} -{ - "targetname" "prop_door_mallshop_straight" -} -; --- Remove a trigger on the upper path that sets the escalator positions -{ - "hammerid" "221997" -} -; --- Close the partially open door before the store -modify: -{ - match: - { - "hammerid" "118980" - } - replace: - { - "ajarangles" "0 315 0" - } -} -; --- Create our own custom case for spawning the escalators we want -add: -{ - "classname" "logic_relay" - "targetname" "relay_elevator_path_custom" - "origin" "1280 -3328 9" - "StartDisabled" "0" - "spawnflags" "0" - ; --- Event - Lower floor - Spawn both - "OnTrigger" "escalator_lower_01*,FireUser1,,0,-1" - "OnTrigger" "escalator_lower_02*,FireUser1,,0,-1" - ; --- Event - Upper floor - Spawn standard versus path - "OnTrigger" "escalator_upper_01*,FireUser1,,0,-1" - ; --- Saferoom - Lower floor - Spawn escalator leading away from the upper escalators - "OnTrigger" "escalator_lower_04*,FireUser1,,0,-1" - ; --- Saferoom - Upper floor - Spawn standard versus path - "OnTrigger" "escalator_upper_03*,FireUser1,,0,-1" -} -modify: -{ - match: - { - "targetname" "relay_director_set_paths" - } - delete: - { - "OnTrigger" "director_query_elevator_pathHowAngry01" - } - insert: - { - "OnTrigger" "relay_elevator_path_custom,Trigger,,0,-1" - } -} -; --- Remove other relay for setting paths as a precaution (the trigger for it seems to be missing) -filter: -{ - "targetname" "relay_director_set_paths2" -} -; --- Remove items on the upper path -; --- Keep the items in the Just For Kidz area so survivors can still choose to shop for items/ammo -; --- Room opposite to Just For Kidz pill room -{ - "hammerid" "1549716" -} -{ - "hammerid" "1549729" -} -{ - "hammerid" "1313698" -} -; --- Bathroom items -{ - "hammerid" "321240" -} -{ - "hammerid" "321242" -} -{ - "hammerid" "321244" -} -{ - "hammerid" "321246" -} -{ - "hammerid" "321238" -} -{ - "hammerid" "321236" -} -{ - "hammerid" "321316" -} -{ - "hammerid" "321318" -} -{ - "hammerid" "321314" -} -{ - "hammerid" "321310" -} -{ - "hammerid" "321312" -} -; --- Room opposite to bathrooms -{ - "hammerid" "1551939" -} -{ - "hammerid" "1551926" -} ; ################ ITEM SPAWN CHANGES ############### @@ -218,18 +60,7 @@ modify: "weapon_selection" "any_smg" } } -; --- Move the pill cabinet on the lower route to the other side of the wall -{ - match: - { - "hammerid" "354455" - } - replace: - { - "origin" "880 -2457 0.224243" - "angles" "0 180 0" - } -} + ; ===================================================== ; == STATIC AMMO PILES == @@ -260,11 +91,11 @@ modify: } } add: -; --- Ammo pile on boxes near the start of the path leading to the event +; --- Ammo pile in stairwell in offices before event { "classname" "weapon_ammo_spawn" - "origin" "746 -681 32" - "angles" "0 90 0" + "origin" "538 -566 88" + "angles" "0 30 0" "model" "models/props/terror/ammo_stack.mdl" "solid" "6" "disableshadows" "1" @@ -287,7 +118,7 @@ add: ; == HITTABLE CHANGES == ; == Add/remove/modify hittables == ; ===================================================== -; --- Move the hand truck at the start of the event path to a less obtrusive position +; --- Move the hand truck at the start of the event path to a less obstructive position modify: { match: @@ -341,6 +172,38 @@ add: ; == NUISANCE CHANGES == ; == Clipping improvements, QOL map changes == ; ===================================================== +; --- Clipping to eliminate need to jump into tall shelves by the saferoom +add: +{ + "classname" "env_physics_blocker" + "origin" "6331 -1636.5 25.6" + "mins" "-112 -0.5 -2" + "maxs" "112 0.5 2" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "7185.55 -1796.55 25.6" + "angles" "0 135 0" + "mins" "-112 -0.5 -2" + "maxs" "112 0.5 2" + "boxmins" "-112 -0.5 -2" + "boxmaxs" "112 0.5 2" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "7424.45 -2035.45 25.6" + "angles" "0 135 0" + "mins" "-112 -0.5 -2" + "maxs" "112 0.5 2" + "boxmins" "-112 -0.5 -2" + "boxmaxs" "112 0.5 2" + "initialstate" "1" + "BlockType" "0" +} ; --- Make the office chair used for the return shortcut solid modify: { @@ -353,6 +216,36 @@ modify: "spawnflags" "256" } } +; --- Fix event trigger doors on the lower route opening slowly +modify: +{ + match: + { + "targetname" "door_hallway_lower4" + } + replace: + { + "speed" "200" + } + delete: + { + "OnOpen" "!selfSetSpeed1000.1-1" + } +} +{ + match: + { + "targetname" "door_hallway_lower4a" + } + replace: + { + "speed" "200" + } + delete: + { + "OnOpen" "!selfSetSpeed1000.1-1" + } +} ; --- Remove glass that looks like leftover beta content hiding inside another glass panel filter: { @@ -360,6 +253,7 @@ filter: } ; --- Remove some glass panels around the event to help infected ; --- Glass by main escalator +filter: { "hammerid" "1663586" } @@ -482,179 +376,67 @@ filter: ; == New props for balance and SI spawns == ; ===================================================== add: -; --- Fence cover prop immediately outside saferoom +; --- Shelves by second set of escalators behind the collapsed gate { "classname" "prop_dynamic" - "origin" "6708 -1748 -18" - "angles" "0 97.5 0" - "model" "models/props_urban/fence_cover001_128.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Fence cover prop by the collapsed gate after the first set of escalators -{ - "classname" "prop_dynamic" - "origin" "5196 -2585 280" - "angles" "0 75 0" + "origin" "5134 -2376 280" + "angles" "0 155.5 0" "model" "models/props_mall/mall_display_07.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "5196 -2585 428" - "angles" "0 75 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" - "initialstate" "1" - "BlockType" "1" -} -; --- Fence cover props in front of the escalators on the far side in the second escalator room +; --- Boxes by fences by second set of escalators { "classname" "prop_dynamic" - "origin" "3598 -2691 280" - "angles" "0 39 0" - "model" "models/props_mall/mall_display_07.mdl" + "origin" "3629 -2480 280" + "angles" "0 113.5 0" + "model" "models/props/cs_militia/boxes_garage_lower.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "3598 -2691 428" - "angles" "0 39 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" - "initialstate" "1" - "BlockType" "1" -} -; --- Fence cover prop in the dark area in the second escalator room +; --- Additional kiosks after second set of escalators { "classname" "prop_dynamic" - "origin" "2928 -2814 280" - "angles" "0 136.5 0" - "model" "models/props_mall/mall_display_07.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "env_physics_blocker" - "origin" "2928 -2814 428" - "angles" "0 136.5 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" - "initialstate" "1" - "BlockType" "1" -} -; --- Fence cover prop on the right after going down second set of escalators -{ - "classname" "prop_dynamic" - "origin" "3703 -2285 0" - "angles" "0 129 0" - "model" "models/props_mall/mall_display_07.mdl" + "origin" "2694.03 -2553.97 0" + "angles" "0 180 0" + "model" "models/props_mall/mall_kioskc.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "3703 -2285 148" - "angles" "0 129 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" - "initialstate" "1" - "BlockType" "1" -} -; --- Fence cover prop in front after going down second set of escalators +; --- Kiosks in dark area before drop into the offices { "classname" "prop_dynamic" - "origin" "3167 -2707 0" - "angles" "0 189.5 0" - "model" "models/props_mall/mall_display_07.mdl" + "origin" "2268 -1514 280" + "angles" "0 90 0" + "model" "models/props_mall/mall_kioskc.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "3167 -2707 148" - "angles" "0 189.5 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" - "initialstate" "1" - "BlockType" "1" -} -; --- Fence cover prop to the left of the drop leading to the event path { "classname" "prop_dynamic" - "origin" "1778 -1144 280" - "angles" "0 264 0" - "model" "models/props_mall/mall_display_07.mdl" + "origin" "2268 -1627 280" + "angles" "0 270 0" + "model" "models/props_mall/mall_kioskc.mdl" "solid" "6" "disableshadows" "1" } { "classname" "env_physics_blocker" - "origin" "1778 -1144 428" - "angles" "0 264 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" + "origin" "2268 -1570.5 384" + "mins" "-43 -107.5 -104" + "maxs" "43 107.5 104" "initialstate" "1" "BlockType" "1" } -; --- Props to separate the open area before the drop leading to the event -{ - "classname" "prop_dynamic" - "origin" "2272 -1680 251" - "angles" "0 0 0" - "model" "models/props_mall/mall_column_large.mdl" - "solid" "6" - "disableshadows" "1" -} +; --- Shelves by fences before drop into the offices { "classname" "prop_dynamic" - "origin" "2220.12 -1736.43 280" - "angles" "0 150 0" + "origin" "1836 -1293 280" + "angles" "0 90 0" "model" "models/props_mall/mall_display_07.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "2220.12 -1736.43 424" - "angles" "0 -30 0" - "mins" "-16 -48 -64" - "maxs" "16 48 64" - "boxmins" "-16 -48 -64" - "boxmaxs" "16 49 64" - "initialstate" "1" - "BlockType" "1" -} -{ - "classname" "prop_dynamic" - "origin" "2192 -1899 280" - "angles" "0 180 0" - "model" "models/props_mall/mall_display_08.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "env_physics_blocker" - "origin" "2192 -1899 448" - "mins" "-18 -112 -40" - "maxs" "18 112 40" - "initialstate" "1" - "BlockType" "1" -} ; --- Desk to block survivors from standing in a safe on the drop to the event path { "classname" "prop_dynamic" @@ -690,26 +472,15 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Fence cover props at the entrance of the final area after the event +; --- Shelves at the entrance of the saferoom escalator room { "classname" "prop_dynamic" - "origin" "-91 -4425 280" - "angles" "0 67.5 0" + "origin" "-107 -4463 280" + "angles" "0 247 0" "model" "models/props_mall/mall_display_07.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-91 -4425 428" - "angles" "0 67.5 0" - "mins" "-18 -48 -60" - "maxs" "18 48 60" - "boxmins" "-18 -48 -60" - "boxmaxs" "18 48 60" - "initialstate" "1" - "BlockType" "1" -} ; --- Kiosk on floor below the end saferoom { "classname" "prop_dynamic" @@ -813,213 +584,296 @@ modify: ; ####### MISCELLANEOUS / MAP SPECIFIC CHANGES ###### ; ===================================================== -; == SAFEROOM ROUTE REWORK == -; == Make the route to the saferoom to be longer == +; == LOWER EVENT PATH == +; == Use the lower route for the path to the event == ; ===================================================== +; --- Remove the original logic for determining the path leading to the event +filter: +{ + "hammerid" "196210" +} +{ + "targetname" "compare_minifinale" +} +; --- Force survivors to always take the lower path leading to the event add: -; --- Block going immediately left through the fences after the under construction area { - "classname" "prop_dynamic" - "origin" "-760 -4689 280" - "angles" "0 166 0" - "model" "models/props_fortifications/barricade001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "logic_auto" + "OnMapSpawn" "relay_hallway_close,Trigger,,0,-1" } -; --- Shelves to block going directly to the escalator +; --- Force the specific set of escalators we want to spawn for the event +add: { - "classname" "prop_dynamic" - "origin" "-960 -4128 280" - "angles" "0 270 0" - "model" "models/props_mall/mall_display_08.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "logic_auto" + ; --- Event - Lower floor - Spawn both + "OnMapSpawn" "escalator_lower_01*,FireUser1,,0,-1" + "OnMapSpawn" "escalator_lower_02*,FireUser1,,0,-1" + ; --- Event - Upper floor - Spawn standard versus path + "OnMapSpawn" "escalator_upper_01*,FireUser1,,0,-1" } +; --- Remove relay on lower path that sets the escalator positions when the doors that trigger the event are opened +filter: { - "classname" "prop_dynamic" - "origin" "-900 -4124 409" - "angles" "0 90 0" - "model" "models/props_fortifications/barricade_razorwire001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" + "targetname" "relay_director_set_paths" } +; --- Remove an unused relay for setting paths from the lower path { - "classname" "prop_dynamic" - "origin" "-1020 -4124 409" - "angles" "0 90 0" - "model" "models/props_fortifications/barricade_razorwire001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" + "targetname" "relay_director_set_paths2" } +; --- Remove a trigger on the upper path that sets the escalator positions { - "classname" "prop_dynamic" - "origin" "-861 -4122 283" - "angles" "0 195 0" - "model" "models/deadbodies/cemetary/pose_c.mdl" - "solid" "0" - "disableshadows" "1" + "hammerid" "221997" } +; --- Open up the Just For Kidz store so tanks don't need to use the vent, survivors can still go to this area but the path back remains blocked +filter: { - "classname" "env_physics_blocker" - "origin" "-960 -4128 635" - "mins" "-112 -18 -227" - "maxs" "112 18 227" - "initialstate" "1" - "BlockType" "1" + "targetname" "trigger_glass_breakable" } { - "classname" "prop_dynamic" - "origin" "-684 -4204 280" - "angles" "0 0 0" - "model" "models/props_mall/mall_display_08.mdl" - "solid" "6" - "disableshadows" "1" + "targetname" "brush_shop_blocked" } { - "classname" "prop_dynamic" - "origin" "-692 -4144 409" - "angles" "0 180 0" - "model" "models/props_fortifications/barricade_razorwire001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" + "targetname" "breakble_glass_minifinale" } { - "classname" "prop_dynamic" - "origin" "-692 -4264 409" - "angles" "0 180 0" - "model" "models/props_fortifications/barricade_razorwire001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" + "targetname" "nav_blocker_storefront" } { - "classname" "env_physics_blocker" - "origin" "-684 -4204 448" - "mins" "-18 -112 -40" - "maxs" "18 112 40" - "initialstate" "1" - "BlockType" "1" + "targetname" "window_glow" } -; --- Fences to block going directly to the escalator { - "classname" "prop_dynamic" - "origin" "-680 -4032 280" - "angles" "0 165 0" - "model" "models/props_fortifications/barricade001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" + "targetname" "instructor_window" } { - "classname" "env_physics_blocker" - "origin" "-671 -4034 456" - "angles" "0 165 0" - "mins" "-8 -48 -32" - "maxs" "8 48 32" - "boxmins" "-8 -48 -32" - "boxmaxs" "8 48 32" - "initialstate" "1" - "BlockType" "1" + "targetname" "filter_breakglass" +} +{ + "targetname" "filter_melee" } +{ + "targetname" "filter_invunerable" +} +{ + "targetname" "trigger_glass_breakable" +} +{ + "targetname" "prop_door_mallshop_straight" +} +; --- Close the partially open door before the store +modify: +{ + match: + { + "hammerid" "118980" + } + replace: + { + "spawnpos" "0" + } +} +; --- Remove item spawns on the upper path +filter: +; --- Just For Kidz store items +;{ +; "hammerid" "8569913" ; --- Ammo pile on table +;} +{ + "hammerid" "354419" +} +{ + "hammerid" "8569915" +} +{ + "hammerid" "8569911" +} +; --- Room opposite to Just For Kidz pill room +{ + "hammerid" "1549716" +} +{ + "hammerid" "1549729" +} +{ + "hammerid" "1313698" +} +; --- Bathroom items +{ + "hammerid" "321240" +} +{ + "hammerid" "321242" +} +{ + "hammerid" "321244" +} +{ + "hammerid" "321246" +} +{ + "hammerid" "321238" +} +{ + "hammerid" "321236" +} +{ + "hammerid" "321316" +} +{ + "hammerid" "321318" +} +{ + "hammerid" "321314" +} +{ + "hammerid" "321310" +} +{ + "hammerid" "321312" +} +; --- Room opposite to bathrooms +{ + "hammerid" "1551939" +} +{ + "hammerid" "1551926" +} + +; ===================================================== +; == SAFEROOM ROUTE REWORK == +; == Extend the path to the end saferoom == +; ===================================================== +; --- Modify map logic so the escalators are always spawned +add: +{ + "classname" "logic_auto" + ; --- Lower floor - Spawn escalator set facing towards the saferoom + "OnMapSpawn" "escalator_lower_04*,FireUser1,,0,-1" + ; --- Upper floor - Spawn escalators leading to saferoom + "OnMapSpawn" "escalator_upper_03*,FireUser1,,1,-1" +} +modify: +{ + match: + { + "hammerid" "1310675" + } + delete: + { + "OnMapSpawn" "escalator_upper_03-liftDisableCollision0-1" + } +} +; --- Move the escalator by the end saferoom over the hole +{ + match: + { + "targetname" "escalator_upper_03-lift" + } + replace: + { + "origin" "-1404 -4281 381.669" + } + delete: + { + "OnUser1" "escalator_upper_03-railing_breakableKill0-1" + "OnUser1" "escalator_upper_03-navblockerUnblockNav0-1" + "OnUser1" "escalator_upper_03-railingDisable0-1" + "OnUser1" "escalator_upper_03-navblocker_blockBlockNav0-1" + } +} +{ + match: + { + "targetname" "escalator_03-brush_lift_collision" + } + replace: + { + "origin" "-1403.99 -4258.01 409.1" + } +} +; --- Remove glass at top and bottom of new escalator position +filter: +{ + "hammerid" "661312" +} +{ + "hammerid" "661724" +} +; -- Add fences to block the short path to the escalator +add: { "classname" "prop_dynamic" - "origin" "-668 -3928 280" - "angles" "0 180 0" + "origin" "-1125 -3957 280" + "angles" "0 0 0" "model" "models/props_fortifications/barricade001_128_reference.mdl" "solid" "6" "disableshadows" "1" } { "classname" "prop_dynamic" - "origin" "-668 -3820 280" - "angles" "0 180 0" - "model" "models/props_fortifications/barricade001_128_reference.mdl" + "origin" "-1120 -3876 280" + "angles" "0 1 0" + "model" "models/props_fortifications/barricade001_64_reference.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-659 -3874 456" - "mins" "-8 -102 -32" - "maxs" "8 102 32" - "initialstate" "1" - "BlockType" "1" -} -; --- Fences on construction lift to block jumping around { "classname" "prop_dynamic" - "origin" "-1139 -4176 249" - "angles" "0 270 0" - "model" "models/props_exteriors/roadsidefence_64.mdl" + "origin" "-1118 -3798 280" + "angles" "0 5 0" + "model" "models/props_fortifications/barricade001_128_reference.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-1139 -4176 572" - "mins" "-33 -3 -290" - "maxs" "33 3 290" - "initialstate" "1" - "BlockType" "1" -} { "classname" "prop_dynamic" - "origin" "-1167 -4208 249" - "angles" "0 0 0" - "model" "models/props_exteriors/roadsidefence_64.mdl" + "origin" "-1181.9 -3991 280" + "angles" "0 268 0" + "model" "models/props_fortifications/barricade001_64_reference.mdl" "solid" "6" "disableshadows" "1" } { "classname" "env_physics_blocker" - "origin" "-1168 -4209 572" - "mins" "-4 -31 -290" - "maxs" "4 31 290" + "origin" "-1166.5 -4013 353" + "mins" "-39.5 -3 -72" + "maxs" "39.5 3 72" "initialstate" "1" "BlockType" "1" + "targetname" "saferoom_barricade_blocker1" } -; --- Dead body on construction lift -{ - "classname" "prop_dynamic" - "origin" "-1171 -4276 278" - "angles" "0 165 0" - "model" "models/deadbodies/common_worker_male01_fence01.mdl" - "solid" "0" - "disableshadows" "1" -} -; --- Additional clipping to prevent gaps survivors can go through { "classname" "env_physics_blocker" - "origin" "-1089 -4128 572" - "mins" "-16 -18 -290" - "maxs" "16 18 290" + "origin" "-1234.5 -4013 353" + "mins" "-28.5 -3 -72" + "maxs" "28.5 3 72" "initialstate" "1" "BlockType" "1" + "targetname" "saferoom_barricade_blocker2" } +; --- Trigger to remove the extended part of the blocker once survivors reach the escalator { - "classname" "env_physics_blocker" - "origin" "-1103 -4163 572" - "mins" "-2 -16 -290" - "maxs" "2 16 290" - "initialstate" "1" - "BlockType" "1" + "classname" "logic_auto" + "OnMapSpawn" "saferoom_barricade_trigger,AddOutput,mins -16 -208 -96,0,-1" + "OnMapSpawn" "saferoom_barricade_trigger,AddOutput,maxs 16 208 96,0,-1" + "OnMapSpawn" "saferoom_barricade_trigger,AddOutput,boxmins -16 -208 -96,0,-1" + "OnMapSpawn" "saferoom_barricade_trigger,AddOutput,boxmaxs 16 208 96,0,-1" + "OnMapSpawn" "saferoom_barricade_trigger,AddOutput,solid 2,0,-1" } -; --- Infected ladders to climb over the shelves { - "classname" "func_simpleladder" - "origin" "-389.93 -1136.49 23" - "angles" "0 315 0" - "model" "*172" - "normal.x" "0.00" - "normal.y" "-1.00" - "normal.z" "0.00" - "team" "2" + "classname" "trigger_once" + "origin" "-1472 -3888 376" + "targetname" "saferoom_barricade_trigger" + "filtername" "filter_survivor" + "spawnflags" "1" + ; --- Trigger event output here + "OnTrigger" "saferoom_barricade_blocker2,Kill,,0,-1" } +; --- Kiosk where the original escalators were before the end saferoom { - "classname" "func_simpleladder" - "origin" "-1528.06 -7119.5 23" - "angles" "0 135 0" - "model" "*172" - "normal.x" "0.00" - "normal.y" "1.00" - "normal.z" "0.00" - "team" "2" + "classname" "prop_dynamic" + "origin" "-840 -4222 280" + "angles" "0 270 0" + "model" "models/props_mall/mall_kioskc.mdl" + "solid" "6" + "disableshadows" "1" } \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c1m4_atrium.cfg b/cfg/stripper/zonemod/maps/c1m4_atrium.cfg index 2487ead43..c407a787c 100644 --- a/cfg/stripper/zonemod/maps/c1m4_atrium.cfg +++ b/cfg/stripper/zonemod/maps/c1m4_atrium.cfg @@ -331,10 +331,10 @@ add: { "classname" "env_physics_blocker" "origin" "-6247 -3354 736" - "mins" "-175 -134 -3" - "maxs" "175 134 3" - "boxmins" "-175 -134 -3" - "boxmaxs" "175 134 3" + "mins" "-175 -134 -8" + "maxs" "175 134 8" + "boxmins" "-175 -134 -8" + "boxmaxs" "175 134 8" "initialstate" "1" "BlockType" "4" } @@ -486,7 +486,7 @@ add: ; == LADDER / ELEVATOR NERF == ; == Nerf ladder & elevator attacks for infected == ; ===================================================== -; --- Add a railing elevator so survivors can stand on it +; --- Add a railing in the elevator so survivors can stand on it add: { "classname" "prop_dynamic" diff --git a/cfg/stripper/zonemod/maps/c2m1_highway.cfg b/cfg/stripper/zonemod/maps/c2m1_highway.cfg index 5a25bf174..1c4928889 100644 --- a/cfg/stripper/zonemod/maps/c2m1_highway.cfg +++ b/cfg/stripper/zonemod/maps/c2m1_highway.cfg @@ -572,6 +572,39 @@ add: ; == Clipping improvements, QOL map changes == ; ===================================================== add: +; --- Ledge for infected to jump to on interstate sign outside saferoom +{ + "classname" "env_physics_blocker" + "origin" "8720 7798 -367" + "mins" "-20 -3 -6" + "maxs" "20 3 6" + "initialstate" "1" + "BlockType" "2" +} +{ + "classname" "env_physics_blocker" + "origin" "8720 7800 -351" + "mins" "-20 -3 -3" + "maxs" "20 3 3" + "initialstate" "1" + "BlockType" "2" +} +{ + "classname" "prop_dynamic" + "origin" "8711.55 7801 -359" + "angles" "0 90 -180" + "model" "models/gibs/metal_gib2.mdl" + "solid" "0" + "disableshadows" "1" +} +{ + "classname" "prop_dynamic" + "origin" "8728 7801 -359" + "angles" "0 90 -180" + "model" "models/gibs/metal_gib2.mdl" + "solid" "0" + "disableshadows" "1" +} ; --- Clipping on car window in the middle saferoom path to stop players getting stuck { "classname" "env_physics_blocker" @@ -617,19 +650,52 @@ add: "disableshadows" "1" "rendermode" "10" } -; --- Make the door for the smoker pull down at the billboard start open -modify: +; --- Clipping on police car lights outside saferoom { - match: - { - "hammerid" "455654" - } - replace: - { - "spawnpos" "2" - } + "classname" "env_physics_blocker" + "origin" "7260.58 7073.06 -567.5" + "angles" "0 -15 0" + "mins" "-11 -23 -5.5" + "maxs" "11 23 5.5" + "boxmins" "-11 -23 -5.5" + "boxmaxs" "11 23 5.5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "7253.25 7075.37 -568" + "angles" "0 -15 0" + "mins" "-14 -16 -5" + "maxs" "14 16 5" + "boxmins" "-14 -16 -5" + "boxmaxs" "14 16 5" + "initialstate" "1" + "BlockType" "0" +} +; --- Clipping on police car lights by the offramp +{ + "classname" "env_physics_blocker" + "origin" "6304.36 7036.45 -620.5" + "angles" "0 -3 0" + "mins" "-11 -23 -5.5" + "maxs" "11 23 5.5" + "boxmins" "-11 -23 -5.5" + "boxmaxs" "11 23 5.5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "6296.71 7037.18 -621" + "angles" "0 -3 0" + "mins" "-14 -16 -5" + "maxs" "14 16 5" + "boxmins" "-14 -16 -5" + "boxmaxs" "14 16 5" + "initialstate" "1" + "BlockType" "0" } -add: ; --- Add missing glass to vehicles { "classname" "prop_dynamic" @@ -647,6 +713,42 @@ add: "solid" "6" "disableshadows" "1" } +; --- Block LOS under floating AC vents on the motel cafeteria roof +{ + "classname" "logic_auto" + "OnMapSpawn" "losfix_cafe_ac1,AddOutput,mins -71 -30.5 -1,0,-1" + "OnMapSpawn" "losfix_cafe_ac1,AddOutput,maxs 71 30.5 1,0,-1" + "OnMapSpawn" "losfix_cafe_ac1,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_cafe_ac2,AddOutput,mins -15 -30 -0.5,0,-1" + "OnMapSpawn" "losfix_cafe_ac2,AddOutput,maxs 15 30 0.5,0,-1" + "OnMapSpawn" "losfix_cafe_ac2,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_cafe_ac3,AddOutput,mins -15 -30 -0.5,0,-1" + "OnMapSpawn" "losfix_cafe_ac3,AddOutput,maxs 15 30 0.5,0,-1" + "OnMapSpawn" "losfix_cafe_ac3,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_cafe_ac4,AddOutput,mins -15 -30 -0.5,0,-1" + "OnMapSpawn" "losfix_cafe_ac4,AddOutput,maxs 15 30 0.5,0,-1" + "OnMapSpawn" "losfix_cafe_ac4,AddOutput,solid 2,0,-1" +} +{ + "classname" "func_brush" + "origin" "2481 5679.5 -767" + "targetname" "losfix_cafe_ac1" +} +{ + "classname" "func_brush" + "origin" "2640 5844 -767.5" + "targetname" "losfix_cafe_ac2" +} +{ + "classname" "func_brush" + "origin" "2080 5796 -799.5" + "targetname" "losfix_cafe_ac3" +} +{ + "classname" "func_brush" + "origin" "1760 5796 -799.5" + "targetname" "losfix_cafe_ac4" +} ; --- Clip off car stops to prevent players getting stuck { "classname" "env_physics_blocker" @@ -761,18 +863,47 @@ add: "spawnflags" "1" "OnTrigger" "pool_fence_navblock,UnblockNav,,0,-1" } -; --- Clipping on police car lights +; --- Clipping on police car lights before the highway + +{ + "classname" "env_physics_blocker" + "origin" "3413.41 3856.02 -940.5" + "angles" "0 60 0" + "mins" "-11 -23 -5.5" + "maxs" "11 23 5.5" + "boxmins" "-11 -23 -5.5" + "boxmaxs" "11 23 5.5" + "initialstate" "1" + "BlockType" "0" +} { "classname" "env_physics_blocker" - "origin" "3412 3856 -941" - "angles" "0 150 0" - "mins" "-23 -11 -6" - "maxs" "23 11 6" - "boxmins" "-23 -11 -6" - "boxmaxs" "23 11 6" + "origin" "3409.29 3849.54 -941" + "angles" "0 60 0" + "mins" "-14 -16 -5" + "maxs" "14 16 5" + "boxmins" "-14 -16 -5" + "boxmaxs" "14 16 5" "initialstate" "1" "BlockType" "0" } +; --- Ledge for infected to climb on top of a tree on the highway before the one way drop +{ + "classname" "prop_dynamic_override" + "origin" "4083 4479 -763" + "angles" "0 329 90" + "model" "models/props_junk/wood_crate001a_chunk05.mdl" + "solid" "6" + "disableshadows" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "4085 4498 -757" + "mins" "-11 -7 -3" + "maxs" "11 7 3" + "initialstate" "1" + "BlockType" "2" +} ; --- Fences to show where skybox blocks off the motel roof { "classname" "prop_dynamic" @@ -870,7 +1001,107 @@ add: "solid" "6" "disableshadows" "1" } - +; --- Roof trim to help with the crossing on the motel roof by the drop +{ + "classname" "prop_dynamic" + "origin" "795 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_512_damaged.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "1299 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_128.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "1563 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_128.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "1691 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_512_damaged.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "2203 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_512_damaged.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "2715 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_128.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "2843 3136 -646" + "angles" "0 180 0" + "model" "models/props_street/building_trim_piece02_128.mdl" + "solid" "6" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "2971 3135 -657" + "angles" "0 90 0" + "model" "models/props_interiors/railing_trim_64.mdl" + "solid" "0" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "2907 3135 -657" + "angles" "0 90 0" + "model" "models/props_interiors/railing_trim_64.mdl" + "solid" "0" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} +{ + "classname" "prop_dynamic" + "origin" "2843 3135 -657" + "angles" "0 90 0" + "model" "models/props_interiors/railing_trim_64.mdl" + "solid" "0" + "disableshadows" "1" + "fademindist" "1600" + "fademaxdist" "1800" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### ; ===================================================== @@ -1074,44 +1305,59 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Shrubs in grassy area on street before one way drop +; --- Shrub in grassy area on the highway before the one way drop { "classname" "prop_dynamic" - "origin" "4234 4730 -969" - "angles" "-4.99065 3.51334 -0.306017" - "model" "models/props_foliage/swamp_shrubwall_block_512_deep.mdl" + "origin" "4294 4685 -912.99" + "angles" "-13.8104 329.01 8.15905" + "model" "models/props_foliage/swamp_shrubwall_block_128_deep.mdl" "solid" "6" "disableshadows" "1" } +{ + "classname" "env_physics_blocker" + "origin" "4233 4685 -508" + "mins" "-23 -67 -276" + "maxs" "23 67 276" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "4280 4685 -502" + "mins" "-24 -72 -270" + "maxs" "24 72 270" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "4316 4682 -494" + "mins" "-12 -54 -262" + "maxs" "12 54 262" + "initialstate" "1" + "BlockType" "1" +} ; --- Shrub by the drop after the highway { "classname" "prop_dynamic" - "origin" "2817 2782 -1056" + "origin" "2789 2738 -1057.81" "angles" "0 168 0" "model" "models/props_foliage/swamp_shrubwall_block_256_deep.mdl" "solid" "6" "disableshadows" "1" } -; --- Clipping above shrubs { "classname" "env_physics_blocker" - "origin" "2811 2767 -656" - "mins" "-64 -78 -400" - "maxs" "64 78 400" + "origin" "2784 2715 -656" + "mins" "-64 -71 -400" + "maxs" "64 71 400" "initialstate" "1" "BlockType" "1" } { "classname" "env_physics_blocker" - "origin" "2840 2873 -656" - "mins" "-23 -28 -400" - "maxs" "23 28 400" - "initialstate" "1" - "BlockType" "1" -} -{ - "classname" "env_physics_blocker" - "origin" "2790 2860 -656" + "origin" "2762 2816 -656" "angles" "0 44 0" "mins" "-50 -8 -400" "maxs" "50 8 400" @@ -1120,64 +1366,70 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Boards to assist with crossing around the skybox on the motel roof { - "classname" "prop_dynamic" - "origin" "2807 3130 -647" - "angles" "0 270 0" - "model" "models/lighthouse/props/wood_plank_128.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "env_physics_blocker" + "origin" "2808 2848 -656" + "mins" "-16 -8 -400" + "maxs" "16 8 400" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "2827.49 2816.44 -656" + "angles" "0 110 0" + "mins" "-38 -8 -400" + "maxs" "38 8 400" + "boxmins" "-38 -8 -400" + "boxmaxs" "38 8 400" + "initialstate" "1" + "BlockType" "1" } +; --- Tree in back corner before the final hill { "classname" "prop_dynamic" - "origin" "2807 3118 -647" - "angles" "0 90 0" - "model" "models/lighthouse/props/wood_plank_128.mdl" + "origin" "-2062 1790 -1796" + "angles" "0 195 0" + "model" "models/props_foliage/urban_tree_giant01.mdl" "solid" "6" "disableshadows" "1" } +; --- Van at the top of the hill before the end saferoom { "classname" "prop_dynamic" - "origin" "2910 3130 -646.9" - "angles" "0 270 0" - "model" "models/lighthouse/props/wood_plank_128.mdl" + "origin" "-107 -838 -1087" + "angles" "0 80 0" + "model" "models/props_vehicles/van.mdl" "solid" "6" "disableshadows" "1" } { "classname" "prop_dynamic" - "origin" "2910 3118 -646.9" - "angles" "0 90 0" - "model" "models/lighthouse/props/wood_plank_128.mdl" + "origin" "-107 -838 -1087" + "angles" "0 80 0" + "model" "models/props_vehicles/van_glass.mdl" "solid" "6" "disableshadows" "1" } +; --- Block LOS under van { - "classname" "env_physics_blocker" - "origin" "2858.5 3124 -647" - "mins" "-115.5 -12 -1" - "maxs" "115.5 12 1.15" - "initialstate" "1" - "BlockType" "0" + "classname" "logic_auto" + "OnMapSpawn" "losfix_end_van_a,AddOutput,mins -106 -1 -11,0,-1" + "OnMapSpawn" "losfix_end_van_a,AddOutput,maxs 106 1 11,0,-1" + "OnMapSpawn" "losfix_end_van_a,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_end_van_b,AddOutput,mins -1 -33 -11,0,-1" + "OnMapSpawn" "losfix_end_van_b,AddOutput,maxs 1 33 11,0,-1" + "OnMapSpawn" "losfix_end_van_b,AddOutput,solid 2,0,-1" } -; --- Tree in back corner before the final hill { - "classname" "prop_dynamic" - "origin" "-2062 1790 -1796" - "angles" "0 195 0" - "model" "models/props_foliage/urban_tree_giant01.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "func_brush" + "origin" "-113 -825 -1079" + "targetname" "losfix_end_van_a" } -; --- Bus at the top of the hill before the end saferoom { - "classname" "prop_dynamic" - "origin" "-40 -812 -1088" - "angles" "0 180 0" - "model" "models/props_vehicles/bus01_2.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "func_brush" + "origin" "-8 -859 -1079" + "targetname" "losfix_end_van_b" } ; --- Bus outside the end saferoom { @@ -1188,12 +1440,9 @@ add: "solid" "6" "disableshadows" "1" } -; --- Block LOS under buses +; --- Block LOS under bus { "classname" "logic_auto" - "OnMapSpawn" "losfix_end_bus_a,AddOutput,mins -212 -1 -10,0,-1" - "OnMapSpawn" "losfix_end_bus_a,AddOutput,maxs 212 1 10,0,-1" - "OnMapSpawn" "losfix_end_bus_a,AddOutput,solid 2,0,-1" "OnMapSpawn" "losfix_end_bus_b,AddOutput,mins -1 -93 -10,0,-1" "OnMapSpawn" "losfix_end_bus_b,AddOutput,maxs 1 93 10,0,-1" "OnMapSpawn" "losfix_end_bus_b,AddOutput,solid 2,0,-1" @@ -1204,11 +1453,6 @@ add: "OnMapSpawn" "losfix_end_bus_d,AddOutput,maxs 1 93 10,0,-1" "OnMapSpawn" "losfix_end_bus_d,AddOutput,solid 2,0,-1" } -{ - "classname" "func_brush" - "origin" "-47 -812 -1080" - "targetname" "losfix_end_bus_a" -} { "classname" "func_brush" "origin" "-1463 -2337 -1080" @@ -1412,27 +1656,7 @@ modify: } } add: -; --- Infected ladders to climb to the motel balcony before the drop -{ - "classname" "func_simpleladder" - "origin" "-2722 4507 122" - "angles" "0 270 0" - "model" "*139" - "normal.x" "0.00" - "normal.y" "-1.00" - "normal.z" "0.00" - "team" "2" -} -{ - "classname" "func_simpleladder" - "origin" "-2722 4507 -6" - "angles" "0 270 0" - "model" "*139" - "normal.x" "0.00" - "normal.y" "-1.00" - "normal.z" "0.00" - "team" "2" -} +; --- Infected ladder to climb on the motel roof above the campsite { "classname" "func_simpleladder" "origin" "-3948 4507 122" @@ -1453,32 +1677,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Infected clipping to help reach balcony -{ - "classname" "env_physics_blocker" - "origin" "2772 3128 -786" - "mins" "-18 -5 -20" - "maxs" "18 5 20" - "initialstate" "1" - "BlockType" "2" -} -; --- Props for ladder -{ - "classname" "prop_dynamic" - "origin" "2706 3134 -649" - "angles" "0 0 0" - "model" "models/props_rooftop/gutter_pipe_256.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "2706 3134 -905" - "angles" "0 0 0" - "model" "models/props_rooftop/gutter_pipe_256.mdl" - "solid" "0" - "disableshadows" "1" -} { "classname" "prop_dynamic" "origin" "1480 3134 -649" diff --git a/cfg/stripper/zonemod/maps/c2m2_fairgrounds.cfg b/cfg/stripper/zonemod/maps/c2m2_fairgrounds.cfg index 680914b2e..ee9303e11 100644 --- a/cfg/stripper/zonemod/maps/c2m2_fairgrounds.cfg +++ b/cfg/stripper/zonemod/maps/c2m2_fairgrounds.cfg @@ -113,7 +113,7 @@ add: ; == Block intentionally performed exploits == ; ===================================================== add: -; --- Block standing on tents by the start saferoom +; --- Block standing on tents by the starting saferoom { "classname" "env_physics_blocker" "origin" "1906 1092 456" @@ -122,6 +122,14 @@ add: "initialstate" "1" "BlockType" "1" } +{ + "classname" "env_physics_blocker" + "origin" "1372 1372 456" + "mins" "-64 -64 -312" + "maxs" "64 64 312" + "initialstate" "1" + "BlockType" "1" +} ; --- Block standing on hedges by the restrooms at the start of the map { "classname" "env_physics_blocker" @@ -439,14 +447,6 @@ add: "initialstate" "1" "BlockType" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-1152 1072 391" - "mins" "-64 -64 -377" - "maxs" "64 64 377" - "initialstate" "1" - "BlockType" "1" -} { "classname" "env_physics_blocker" "origin" "-1008 1104 391" @@ -548,17 +548,17 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Block jumping on the buggies ride (can be re-enabled if angled blockers get fixed) (#34) -;{ -; "classname" "env_physics_blocker" -; "origin" "-1341 -1333 401" -; "angles" "0 10 0" -; "mins" "-106 -10 -367" -; "maxs" "106 10 367" -; "boxmins" "-106 -10 -367" -; "boxmaxs" "106 10 367" -; "initialstate" "1" -; "BlockType" "1" +; --- Block jumping on the buggies ride +{ + "classname" "env_physics_blocker" + "origin" "-1341 -1333 412" + "angles" "0 10 0" + "mins" "-106 -10 -367" + "maxs" "106 10 367" + "boxmins" "-106 -10 -367" + "boxmaxs" "106 10 367" + "initialstate" "1" + "BlockType" "1" } { "classname" "env_physics_blocker" @@ -568,18 +568,18 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Block jumping on the trains ride (can be re-enabled if angled blockers get fixed) (#34) -;{ -; "classname" "env_physics_blocker" -; "origin" "-2114 -564 401" -; "angles" "0 10 0" -; "mins" "-106 -10 -367" -; "maxs" "106 10 367" -; "boxmins" "-106 -10 -367" -; "boxmaxs" "106 10 367" -; "initialstate" "1" -; "BlockType" "1" -;} +; --- Block jumping on the trains ride +{ + "classname" "env_physics_blocker" + "origin" "-2114 -564 412" + "angles" "0 10 0" + "mins" "-106 -10 -367" + "maxs" "106 10 367" + "boxmins" "-106 -10 -367" + "boxmaxs" "106 10 367" + "initialstate" "1" + "BlockType" "1" +} { "classname" "env_physics_blocker" "origin" "-2176 -256 441" @@ -659,6 +659,15 @@ add: "initialstate" "1" "BlockType" "1" } +; --- Block standing on the telephone pole by the ladder +{ + "classname" "env_physics_blocker" + "origin" "-3850.5 -1165 520.5" + "mins" "-64.5 -28 -247.5" + "maxs" "64.5 28 247.5" + "initialstate" "1" + "BlockType" "1" +} ; --- Block standing on wooden supports for wall before the slide { "classname" "env_physics_blocker" @@ -711,14 +720,15 @@ add: "BlockType" "1" } ; --- Block getting on the left platform at the one way drop - Removed while "Carousel Room" is open -;{ -; "classname" "env_physics_blocker" -; "origin" "-1916 -4160 392" -; "mins" "-132 -320 -376" -; "maxs" "132 320 376" -; "initialstate" "1" -; "BlockType" "1" -;} +{ + "classname" "env_physics_blocker" + "origin" "-1916 -4160 392" + "mins" "-132 -320 -376" + "maxs" "132 320 376" + "initialstate" "1" + "BlockType" "1" + "targetname" "carousel_room_blocker" +} ; --- Block jumping on the light post to common jump back up the one way drop { "classname" "env_physics_blocker" @@ -731,9 +741,9 @@ add: ; --- Block jumping on the ice machine to common jump back up the one way drop { "classname" "env_physics_blocker" - "origin" "-3400 -4124 -86" - "mins" "-40 -28 -42.5" - "maxs" "40 28 42.5" + "origin" "-3400 -4124 -82" + "mins" "-40 -28 -46" + "maxs" "40 28 46" "initialstate" "1" "BlockType" "1" } @@ -819,6 +829,15 @@ add: "initialstate" "1" "BlockType" "1" } +; --- Block skip to jump up to the fence by the carousel from below after clearing the event +{ + "classname" "env_physics_blocker" + "origin" "-3014 -5185.5 -42.5" + "mins" "-6 -1.5 -21.5" + "maxs" "6 1.5 21.5" + "initialstate" "1" + "BlockType" "1" +} ; ===================================================== ; == OUT OF BOUNDS == @@ -986,6 +1005,59 @@ modify: "spawnflags" "1" } } +; --- Block LOS under the fences on the monorail track +add: +{ + "classname" "logic_auto" + "OnMapSpawn" "monorail_back_fence_a,AddOutput,mins -257 -0.5 -2,0,-1" + "OnMapSpawn" "monorail_back_fence_a,AddOutput,maxs 257 0.5 2,0,-1" + "OnMapSpawn" "monorail_back_fence_a,AddOutput,solid 2,0,-1" + "OnMapSpawn" "monorail_back_fence_b,AddOutput,mins -257 -0.5 -2,0,-1" + "OnMapSpawn" "monorail_back_fence_b,AddOutput,maxs 257 0.5 2,0,-1" + "OnMapSpawn" "monorail_back_fence_b,AddOutput,solid 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_a,AddOutput,mins -0.5 -128 -2,0,-1" + "OnMapSpawn" "monorail_slide_fence_a,AddOutput,maxs 0.5 128 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_a,AddOutput,solid 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_b,AddOutput,mins -0.5 -128 -2,0,-1" + "OnMapSpawn" "monorail_slide_fence_b,AddOutput,maxs 0.5 128 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_b,AddOutput,solid 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_c,AddOutput,mins -0.5 -128 -2,0,-1" + "OnMapSpawn" "monorail_slide_fence_c,AddOutput,maxs 0.5 128 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_c,AddOutput,solid 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_d,AddOutput,mins -0.5 -128 -2,0,-1" + "OnMapSpawn" "monorail_slide_fence_d,AddOutput,maxs 0.5 128 2,0,-1" + "OnMapSpawn" "monorail_slide_fence_d,AddOutput,solid 2,0,-1" +} +{ + "classname" "func_brush" + "origin" "-1375 1160.5 135" + "targetname" "monorail_back_fence_a" +} +{ + "classname" "func_brush" + "origin" "-1375 1272.5 135" + "targetname" "monorail_back_fence_b" +} +{ + "classname" "func_brush" + "origin" "-1591.5 -2047.51 134" + "targetname" "monorail_slide_fence_a" +} +{ + "classname" "func_brush" + "origin" "-1479.5 -2047.51 134" + "targetname" "monorail_slide_fence_b" +} +{ + "classname" "func_brush" + "origin" "-1591.5 -2623.51 134" + "targetname" "monorail_slide_fence_c" +} +{ + "classname" "func_brush" + "origin" "-1479.5 -2623.51 134" + "targetname" "monorail_slide_fence_c" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -1004,7 +1076,7 @@ add: "disableshadows" "1" "rendercolor" "0 180 246" } -; --- Add collision to sign and block LOS +; --- Add collision to sign and block LOS { "classname" "logic_auto" "OnMapSpawn" "losfix_gamehut_sign,AddOutput,mins -104 -2 -34,0,-1" @@ -1079,15 +1151,6 @@ add: "solid" "6" "disableshadows" "1" } -; --- Concrete block to spawn behind and jump over the fences by the warehouse entrance -{ - "classname" "prop_dynamic" - "origin" "3023 -1888 42" - "angles" "0 90 -45" - "model" "models/props_fortifications/concrete_block001_128_reference.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- AC vent on the warehouse roof for spawns and to get on the upper roof section { "classname" "prop_dynamic" @@ -1191,7 +1254,6 @@ add: "solid" "0" "disableshadows" "1" } -; --- Clip to make pipe solid for infected { "classname" "env_physics_blocker" "origin" "-900 -1536 72" @@ -1200,7 +1262,7 @@ add: "initialstate" "1" "BlockType" "2" } -; --- Props under the slide pill room to make chipping through the fence more risky +; --- Vending machine under the room before the one way drop { "classname" "prop_dynamic" "origin" "-2082 -3607 -128" @@ -1271,23 +1333,6 @@ add: "solid" "6" "disableshadows" "1" } -; --- Fence under platforms before the carousel -;{ -; "classname" "prop_dynamic" -; "origin" "-1855 -4478 -121" -; "angles" "0 90 0" -; "model" "models/props_urban/fence001_128.mdl" -; "solid" "6" -; "disableshadows" "1" -;} -;{ -; "classname" "prop_dynamic" -; "origin" "-1855 -4478 -121" -; "angles" "0 90 0" -; "model" "models/props_urban/fence_cover001_128.mdl" -; "solid" "6" -; "disableshadows" "1" -;} ; --- Vending machine under platforms before the carousel - Removed due to "Carousel Room" being open ;{ ; "classname" "prop_dynamic" @@ -1297,22 +1342,6 @@ add: ; "solid" "6" ; "disableshadows" "1" ;} -; --- Hedge by the stairs leading to the end saferoom -{ - "classname" "prop_dynamic" - "origin" "-3071 -6180 -123" - "angles" "0 180 0" - "model" "models/props_foliage/urban_hedge_256_128_high.mdl" - "solid" "6" - "disableshadows" "1" - "rendercolor" "218 200 184" - "lightingorigin" "hedge_lighting" -} -{ - "classname" "info_target" - "origin" "-2924 -6274 -127" - "targetname" "hedge_lighting" -} ; --- Tent after the stairs by the end saferoom { "classname" "prop_dynamic" @@ -1366,7 +1395,6 @@ add: "solid" "6" "disableshadows" "1" } -; --- Clipping on porta potties { "classname" "env_physics_blocker" "origin" "-3558 -5072 412" @@ -2093,21 +2121,114 @@ add: "origin" "1741 2854 156" "targetname" "saferoom_roof_lighting1" } -; --- Stop infected falling in the small gap +; --- Fill in the gap at the back - Bottom { - "classname" "env_physics_blocker" - "origin" "1563 2787 160" - "mins" "-6 -223.5 -13" - "maxs" "6 223.5 13" - "initialstate" "1" - "BlockType" "0" + "classname" "prop_dynamic" + "origin" "1565 2654.05 156" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1565 2746 156" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1565 2838 156" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1565 2930 156" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1565.05 3010 156" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +; --- Fill in the gap at the back - Top +{ + "classname" "prop_dynamic" + "origin" "1564.95 2653.95 165.05" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1564.95 2746 164.95" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1564.95 2838 164.95" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1564.95 2930 164.95" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" +} +{ + "classname" "prop_dynamic" + "origin" "1565 3010 164.90" + "angles" "0 0 90" + "model" "models/props_urban/concreteblock_corner001.mdl" + "solid" "6" + "disableshadows" "1" + "disablereceiveshadows" "1" + "rendercolor" "140 192 221" } ; --- Clip the pipes { "classname" "env_physics_blocker" "origin" "1653 2786 177" - "mins" "-11 -31 -5" - "maxs" "11 31 5" + "mins" "-16 -36 -5" + "maxs" "16 36 5" "initialstate" "1" "BlockType" "0" } @@ -2214,37 +2335,6 @@ modify: "origin" "985.459 865.531 2" } } -; --- ITEMS -add: -; --- Add pistol/deagle and melee spawns to new area -{ - "classname" "weapon_spawn" - "origin" "1686 -278 33" - "angles" "0 259.5 -90" - "weapon_selection" "any_pistol" - "spawn_without_director" "1" - "solid" "6" - "disableshadows" "1" - "spawnflags" "2" - "count" "5" -} -{ - "classname" "weapon_melee_spawn" - "origin" "1208 296 32" - "angles" "0 60 -90" - "melee_weapon" "any" - "spawn_without_director" "1" - "solid" "0" - "disableshadows" "1" - "spawnflags" "2" - "count" "1" -} -; --- Add a potential pill spawn on one of the game buildings -{ - "classname" "weapon_pain_pills_spawn" - "origin" "1341 -74 42" - "angles" "0 0 0" -} ; ===================================================== ; == CAROUSEL ROOM == @@ -2411,7 +2501,7 @@ add: "spawnflags" "0" "targetname" "carouselroom_lights" } -; --- Trigger to turn lights on +; --- Trigger to turn lights on and remove blocker on the platform { "classname" "logic_auto" "OnMapSpawn" "carouselroom_lights_trigger,AddOutput,mins -64 -16 -72,0,-1" @@ -2428,6 +2518,7 @@ add: "filtername" "survivor_filter" "spawnflags" "1" "OnTrigger" "carouselroom_lights,TurnOn,,0,-1" + "OnTrigger" "carousel_room_blocker,Kill,,0,-1" } ; ===================================================== diff --git a/cfg/stripper/zonemod/maps/c2m3_coaster.cfg b/cfg/stripper/zonemod/maps/c2m3_coaster.cfg index 841d7c5be..a4c64eaaa 100644 --- a/cfg/stripper/zonemod/maps/c2m3_coaster.cfg +++ b/cfg/stripper/zonemod/maps/c2m3_coaster.cfg @@ -17,7 +17,7 @@ add: ; == PILL / ITEM / WEAPON SPAWNS == ; == Remove or change pill, item & weapon spawns == ; ===================================================== -; --- Make the gun spawns on the table at the tunnel of love exit always spawn different types +; --- Make the gun spawns on the table at the tunnel of love exit always spawn an SMG and shotgun modify: { match: @@ -69,12 +69,12 @@ add: ; == STATIC AMMO PILES == ; == Add or modify ammo pile spawns == ; ===================================================== -; --- Add an ammo pile by the second tunnel of love painting +; --- Add an ammo pile in the side room by the collapsed pipe in the tunnel of love add: { "classname" "weapon_ammo_spawn" - "origin" "3125 2939 -8" - "angles" "0 0 0" + "origin" "2221 2895 -4" + "angles" "0 285 0" "model" "models/props/terror/ammo_stack.mdl" "solid" "6" "disableshadows" "1" @@ -147,6 +147,24 @@ add: "initialstate" "1" "BlockType" "1" } +; --- Block standing on the electrial box next to the water tank in the swan room +{ + "classname" "env_physics_blocker" + "origin" "553 4859.5 221" + "mins" "-28 -4.5 -84" + "maxs" "28 4.5 84" + "initialstate" "1" + "BlockType" "1" +} +; --- Block standing on the infected ladder by the console in the swan room +{ + "classname" "env_physics_blocker" + "origin" "501 4865 189" + "mins" "-16 -2 -37" + "maxs" "16 2 37" + "initialstate" "1" + "BlockType" "1" +} ; --- Block a high tickrate jump in the swan room { "classname" "env_physics_blocker" @@ -227,7 +245,7 @@ add: { "classname" "env_physics_blocker" "origin" "-896 2241 560" - "mins" " -68 -197 -400" + "mins" "-68 -197 -400" "maxs" "68 197 400" "initialstate" "1" "BlockType" "1" @@ -533,6 +551,15 @@ add: ; == Prevent players from getting stuck in the map == ; ===================================================== add: +; --- Fix a sliding stuck spot by the console in the swan room +{ + "classname" "env_physics_blocker" + "origin" "436 4846 145" + "mins" "-4 -1 -19" + "maxs" "4 1 19" + "initialstate" "1" + "BlockType" "0" +} ; --- Block a stuck spot before the coaster one way drop, between some hedges and support beams { "classname" "env_physics_blocker" @@ -1429,19 +1456,3 @@ add: "disableshadows" "1" "skin" "1" } -; --- Extend the middle railings to the wall -{ - "classname" "prop_dynamic" - "origin" "-5251.63 1940.39 4.25" - "angles" "0 180 0" - "model" "models/props_urban/wood_railing001_128.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "end_railing_lighting" -} -; --- Fix lighting origin -{ - "classname" "info_target" - "origin" "-5252 1812 4" - "targetname" "end_railing_lighting" -} \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c2m4_barns.cfg b/cfg/stripper/zonemod/maps/c2m4_barns.cfg index 81fc47faf..445d209b7 100644 --- a/cfg/stripper/zonemod/maps/c2m4_barns.cfg +++ b/cfg/stripper/zonemod/maps/c2m4_barns.cfg @@ -91,10 +91,10 @@ filter: ; == Add or modify ammo pile spawns == ; ===================================================== add: -; --- Ammo pile after bumper cars section +; --- Ammo pile in the bumper cars area { "classname" "weapon_ammo_spawn" - "origin" "431 1990 -192" + "origin" "1547 1399 -148" "angles" "0 180 0" "model" "models/props/terror/ammo_stack.mdl" "solid" "6" @@ -217,6 +217,32 @@ add: "initialstate" "1" "BlockType" "1" } +; --- Block standing on the first set of tents outside the saferoom +{ + "classname" "env_physics_blocker" + "origin" "2483 2497 544" + "mins" "-66.5 -129 -608" + "maxs" "66.5 129 608" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "2778 2432 544" + "mins" "-66.5 -64 -608" + "maxs" "66.5 64 608" + "initialstate" "1" + "BlockType" "1" +} +; --- Block standing on the food cart by the tends outside the saferoom +{ + "classname" "env_physics_blocker" + "origin" "2816 2568 490" + "mins" "-107 -53 -534" + "maxs" "107 53 534" + "initialstate" "1" + "BlockType" "1" +} ; --- Block standing on the food carts by the coaster entrance { "classname" "env_physics_blocker" @@ -335,45 +361,46 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Block standing on the hedges at the barns exit +; --- Block standing on the hedges outside the barn exit { - "classname" "prop_dynamic" - "origin" "136 256 -112" - "angles" "0 180 0" - "model" "models/props_foliage/urban_hedge_256_128_high.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "env_physics_blocker" + "origin" "12 256 480" + "mins" "-252 -24 -544" + "maxs" "252 24 544" + "initialstate" "1" + "BlockType" "1" } { - "classname" "prop_dynamic" - "origin" "272 128 -112" - "angles" "0 90 0" - "model" "models/props_foliage/urban_hedge_256_128_high.mdl" - "solid" "6" - "disableshadows" "1" + "classname" "env_physics_blocker" + "origin" "253 -210 416" + "mins" "-3 -462 -608" + "maxs" "3 462 608" + "initialstate" "1" + "BlockType" "1" } +; --- Block standing on shrub walls next to the barn { "classname" "env_physics_blocker" - "origin" "252 -220 416" - "mins" "-4 -452 -608" - "maxs" "4 452 608" + "origin" "-1320 -669 532" + "mins" "-1504 -4 -492" + "maxs" "1504 4 492" "initialstate" "1" "BlockType" "1" } { "classname" "env_physics_blocker" - "origin" "139 256 530" - "mins" "-125 -22 -494" - "maxs" "125 22 494" + "origin" "-2368 -669 -76" + "mins" "-1 -4 -116" + "maxs" "1 4 116" "initialstate" "1" "BlockType" "1" } -; --- Block standing on shrub walls next to the barn +; --- Block standing on a fence near the barn one way drop { "classname" "env_physics_blocker" - "origin" "-1032 -669 532" - "mins" "-1216 -4 -492" - "maxs" "1216 4 492" + "origin" "-2819.5 -591.5 416" + "mins" "-4.5 -80.5 -608" + "maxs" "4.5 80.5 608" "initialstate" "1" "BlockType" "1" } @@ -543,45 +570,6 @@ add: ; == NUISANCE CHANGES == ; == Clipping improvements, QOL map changes == ; ===================================================== -add: -; --- Teleport survivors that get stuck inside new saferoom props -{ - "classname" "info_teleport_destination" - "origin" "3060 3579 -179" - "angles" "0 180 0" - "targetname" "saferoom_teleport_position" -} -{ - "classname" "logic_auto" - "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,mins -46 -46 -63,0,-1" - "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,maxs 46 46 63,0,-1" - "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,boxmins -46 -46 -63,0,-1" - "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,boxmaxs 46 46 63,0,-1" - "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,solid 2,0,-1" - "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,mins -30 -30 -30,0,-1" - "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,maxs 30 30 30,0,-1" - "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,boxmins -30 -30 -30,0,-1" - "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,boxmaxs 30 30 30,0,-1" - "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,solid 2,0,-1" -} -{ - "classname" "trigger_teleport" - "origin" "3329 3873 -124" - "targetname" "large_crate_teleport_trigger" - "filtername" "filter_survivors" - "spawnflags" "1" - "StartDisabled" "0" - "target" "saferoom_teleport_position" -} -{ - "classname" "trigger_teleport" - "origin" "3344 3789 -156" - "targetname" "small_crate_teleport_trigger" - "filtername" "filter_survivors" - "spawnflags" "1" - "StartDisabled" "0" - "target" "saferoom_teleport_position" -} filter: ; --- Disable the Strongman event { @@ -598,10 +586,30 @@ filter: { "targetname" "game_start_button" } -; --- Remove one of the windows on the building before the barn -filter: +; --- Remove trash bins that allow survivors to jump on the tents by the bumper cars +; --- Group of 3 on the right +{ + "hammerid" "1682336" +} +{ + "hammerid" "1682332" +} +{ + "hammerid" "1682340" +} +; --- Group of 2 on the right { - "hammerid" "1405561" + "hammerid" "1682352" +} +{ + "hammerid" "1682356" +} +; --- Group of 2 on the left +{ + "hammerid" "1682320" +} +{ + "hammerid" "1682324" } add: ; --- Fix LOS on carnival sign props before barns @@ -764,6 +772,39 @@ add: "disableshadows" "1" "rendermode" "10" } +; --- Clipping on fallen fence at the top of the stairs by the event +{ + "classname" "env_physics_blocker" + "origin" "-2626 729 -190" + "mins" "-74 -35 -2" + "maxs" "74 35 2" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-2626 737.5 -186" + "mins" "-70 -22.5 -2" + "maxs" "70 22.5 2" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-2626 729 -182.5" + "mins" "-67 -7 -1.5" + "maxs" "67 7 1.5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-2626 746 -181.5" + "mins" "-66 -10 -2.5" + "maxs" "66 10 2.5" + "initialstate" "1" + "BlockType" "0" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -772,7 +813,7 @@ add: ; == New props for balance and SI spawns == ; ===================================================== add: -; --- Dumpster after bumper cars +; --- Static dumpster after bumper cars { "classname" "prop_dynamic" "origin" "443 2146 -166.75" @@ -955,20 +996,12 @@ add: "solid" "6" "disableshadows" "1" } -; --- Plywood to block LOS on the CEDA balcony at the event +; --- Vending machine on the balcony by the event { "classname" "prop_dynamic" - "origin" "-3078 1284 -55" - "angles" "0 90 -90" - "model" "models/props_highway/plywood_01.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-3078 1212 -55" - "angles" "0 90 -90" - "model" "models/props_highway/plywood_03.mdl" + "origin" "-3129 1182 -96" + "angles" "0 0 0" + "model" "models/props_office/vending_machine01.mdl" "solid" "6" "disableshadows" "1" } @@ -982,7 +1015,6 @@ add: "disableshadows" "1" "rendercolor" "69 118 102" } -; --- Clipping on tent { "classname" "env_physics_blocker" "origin" "-2369 1235 444" @@ -991,7 +1023,7 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Additional porta potties at the end of the event +; --- Additional porta potty at the end of the event { "classname" "prop_dynamic" "origin" "208 1856 -256" @@ -1000,7 +1032,6 @@ add: "solid" "6" "disableshadows" "1" } -; --- Clipping on porta potties { "classname" "env_physics_blocker" "origin" "209 1857 453" @@ -1078,6 +1109,17 @@ add: ; == Add or change ladders == ; ===================================================== add: +; --- Infected ladder to climb on yellow tents by the saferoom +{ + "classname" "func_simpleladder" + "origin" "4417 4874 -113" + "angles" "0 180 0" + "model" "*90" + "normal.x" "-1" + "normal.y" "0" + "normal.z" "0" + "team" "2" +} ; --- Infected ladder to climb over gazebo fence behind the garbage area { "classname" "func_simpleladder" @@ -1241,21 +1283,43 @@ add: "initialstate" "1" "BlockType" "0" } -; --- Extend the middle railings to the wall +; --- Teleport survivors that get stuck inside new saferoom props { - "classname" "prop_dynamic" - "origin" "3116.37 3860.39 -187.75" + "classname" "info_teleport_destination" + "origin" "3060 3579 -179" "angles" "0 180 0" - "model" "models/props_urban/wood_railing001_128.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "start_railing_lighting" + "targetname" "saferoom_teleport_position" +} +{ + "classname" "logic_auto" + "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,mins -46 -46 -63,0,-1" + "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,maxs 46 46 63,0,-1" + "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,boxmins -46 -46 -63,0,-1" + "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,boxmaxs 46 46 63,0,-1" + "OnMapSpawn" "large_crate_teleport_trigger,AddOutput,solid 2,0,-1" + "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,mins -30 -30 -30,0,-1" + "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,maxs 30 30 30,0,-1" + "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,boxmins -30 -30 -30,0,-1" + "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,boxmaxs 30 30 30,0,-1" + "OnMapSpawn" "small_crate_teleport_trigger,AddOutput,solid 2,0,-1" } -; --- Fix lighting origin { - "classname" "info_target" - "origin" "3116 3732 -188" - "targetname" "start_railing_lighting" + "classname" "trigger_teleport" + "origin" "3329 3873 -124" + "targetname" "large_crate_teleport_trigger" + "filtername" "filter_survivors" + "spawnflags" "1" + "StartDisabled" "0" + "target" "saferoom_teleport_position" +} +{ + "classname" "trigger_teleport" + "origin" "3344 3789 -156" + "targetname" "small_crate_teleport_trigger" + "filtername" "filter_survivors" + "spawnflags" "1" + "StartDisabled" "0" + "target" "saferoom_teleport_position" } ; ===================================================== @@ -1289,61 +1353,8 @@ modify: "OnMapSpawn" "randompath_1_navblocker,BlockNav,,0,-1" } } -; --- Remove trash bins that allow survivors to jump on the tents by the bumper cars -filter: -; --- Group of 3 on the right -{ - "hammerid" "1682336" -} -{ - "hammerid" "1682332" -} -{ - "hammerid" "1682340" -} -; --- Group of 2 on the right -{ - "hammerid" "1682352" -} -{ - "hammerid" "1682356" -} -; --- Group of 2 on the left -{ - "hammerid" "1682320" -} -{ - "hammerid" "1682324" -} -; --- Block getting on the props by the blocked route +; --- Block getting on the fence add: -; --- Tents -{ - "classname" "env_physics_blocker" - "origin" "2483 2497 544" - "mins" "-66.5 -129 -608" - "maxs" "66.5 129 608" - "initialstate" "1" - "BlockType" "1" -} -{ - "classname" "env_physics_blocker" - "origin" "2778 2432 544" - "mins" "-66.5 -64 -608" - "maxs" "66.5 64 608" - "initialstate" "1" - "BlockType" "1" -} -; --- Food cart -{ - "classname" "env_physics_blocker" - "origin" "2816 2568 490" - "mins" "-107 -53 -534" - "maxs" "107 53 534" - "initialstate" "1" - "BlockType" "1" -} -; --- Fence { "classname" "env_physics_blocker" "origin" "2640 2632 488" @@ -1352,7 +1363,7 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Infected ladder on fence blocking the route at the start +; --- Infected ladders on fence blocking the route at the start { "classname" "func_simpleladder" "origin" "5033 632 -74" @@ -1363,25 +1374,13 @@ add: "normal.z" "0.00" "team" "2" } -; --- Infected ladder on food cart by the blocked route at the start -{ - "classname" "func_simpleladder" - "origin" "5172 182 -13" - "angles" "0 90 0" - "model" "*91" - "normal.x" "-1.00" - "normal.y" "0.00" - "normal.z" "0.00" - "team" "2" -} -; --- Infected ladder on the green fence by the blocked route at the start { - "classname" "func_simpleladder" - "origin" "4782 4916 0" - "angles" "0 180 0" - "model" "*91" - "normal.x" "0.00" - "normal.y" "-1.00" - "normal.z" "0.00" - "team" "2" + "classname" "func_simpleladder" + "origin" "224 4626 -74" + "angles" "0 270 0" + "model" "*90" + "normal.x" "0" + "normal.y" "-1" + "normal.z" "0" + "team" "2" } \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c2m5_concert.cfg b/cfg/stripper/zonemod/maps/c2m5_concert.cfg index f0e8919c9..720b19f27 100644 --- a/cfg/stripper/zonemod/maps/c2m5_concert.cfg +++ b/cfg/stripper/zonemod/maps/c2m5_concert.cfg @@ -228,7 +228,6 @@ add: ; --- Disable shadows early on props added that start with shadows enabled to ensure the fix works "OnMapSpawn" "anv_mapfixes_yesdraw_infecteddoorway,DisableShadow,,29,-1" "OnMapSpawn" "anv_mapfixes_yesdraw_infectedroom,DisableShadow,,29,-1" - } ; --- Additional toggle on finale start modify: @@ -541,4 +540,40 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== + + +; by harry +; Prevent infected and tank stuck under the seating large area after final starts +add: +{ + "classname" "trigger_multiple" + "origin" "-3548.87 2926.25 -309.876098" + "targetname" "final_stuck_warp" + "spawnflags" "1" + "wait" "1" + "StartDisabled" "1" + "entireteam" "0" + "allowincap" "0" + "allowghost" "1" + + "OnStartTouch" "!activator,AddOutput,origin -4079.96 3902.36 66,0,-1" +} +{ + "classname" "logic_auto" + "OnMapSpawn" "final_stuck_warp,AddOutput,mins -10 0 0,0,-1" + "OnMapSpawn" "final_stuck_warp,AddOutput,maxs 0 200 100,0,-1" + "OnMapSpawn" "final_stuck_warp,AddOutput,solid 2,0,-1" +} + +modify: +{ + match: + { + "classname" "trigger_finale" + } + insert: + { + "FinaleStart" "final_stuck_warp,Enable,,0,-1" + } +} \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c3m2_swamp.cfg b/cfg/stripper/zonemod/maps/c3m2_swamp.cfg index b0fa9b337..e45101c80 100644 --- a/cfg/stripper/zonemod/maps/c3m2_swamp.cfg +++ b/cfg/stripper/zonemod/maps/c3m2_swamp.cfg @@ -660,14 +660,6 @@ add: "initialstate" "1" "BlockType" "1" } -{ - "classname" "env_physics_blocker" - "origin" "4481 1943 391" - "mins" "-4 -38 -249" - "maxs" "4 38 249" - "initialstate" "1" - "BlockType" "1" -} { "classname" "env_physics_blocker" "origin" "4481 1772 391" @@ -769,155 +761,6 @@ add: ; == Clipping improvements, QOL map changes == ; ===================================================== add: -; --- Additional trees to show where invisible walls are between some trees -; --- Left of docks near start - 2 sets -{ - "classname" "prop_dynamic" - "origin" "-4756 4831 -3" - "angles" "0 99 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-4803 4867 -3" - "angles" "0 219 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-4847 4848 -3" - "angles" "0 234 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-5345 5438 -3" - "angles" "0 309 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-5304 5401 -3" - "angles" "0 354 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-5242 5337 -3" - "angles" "0 39 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -; --- Right of docks near start - 2 sets -{ - "classname" "prop_dynamic" - "origin" "-6318 3530 -3" - "angles" "0 318 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-6356 3536 -3" - "angles" "0 213 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-6400 3576 -3" - "angles" "0 258 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-6056 3418 -3" - "angles" "0 242.5 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-6071 3416 -3" - "angles" "0 107.5 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-5972 3439 -3" - "angles" "0 69 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -; --- Water by docks -{ - "classname" "prop_dynamic" - "origin" "-4425 3531 0" - "angles" "0 66 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-4365 3488 0" - "angles" "0 36 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "-4437 3513 -13" - "angles" "0 15 0" - "model" "models/props_foliage/urban_tree_base_bushes01_large.mdl" - "solid" "0" - "disableshadows" "1" -} -; --- By the sunken house near the end of the map -{ - "classname" "prop_dynamic" - "origin" "6536 1082 -17" - "angles" "0 36 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "6626 1033 -17" - "angles" "0 246 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "6605 1046 -17" - "angles" "0 201 0" - "model" "models/props_foliage/swamp_trees_small01.mdl" - "solid" "0" - "disableshadows" "1" -} ; --- Block LOS under floating trees { "classname" "logic_auto" @@ -2201,7 +2044,7 @@ add: "initialstate" "1" "BlockType" "2" } -; --- Trailer and pickup truck by the end saferoom +; --- Trailer by the end saferoom { "classname" "prop_dynamic" "origin" "7399 -345 120" @@ -2222,7 +2065,7 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Fix LOS under trailer / car +; --- Fix LOS under trailer { "classname" "logic_auto" "OnMapSpawn" "losfix_end_trailer,AddOutput,mins -3 -134 -14,0,-1" diff --git a/cfg/stripper/zonemod/maps/c3m3_shantytown.cfg b/cfg/stripper/zonemod/maps/c3m3_shantytown.cfg index ed9019f37..14d7aafe9 100644 --- a/cfg/stripper/zonemod/maps/c3m3_shantytown.cfg +++ b/cfg/stripper/zonemod/maps/c3m3_shantytown.cfg @@ -646,8 +646,8 @@ add: { "classname" "env_physics_blocker" "origin" "-1826 -21 59" - "mins" "-26 -116 -65" - "maxs" "26 116 65" + "mins" "-25 -110 -65" + "maxs" "25 110 65" "initialstate" "1" "BlockType" "1" } @@ -683,7 +683,32 @@ add: "solid" "6" "disableshadows" "1" } +; --- Make 2 barrels outside the saferoom static +add: +{ + "classname" "prop_dynamic" + "origin" "-5636.76 1163.97 128.25" + "angles" "0 0 0" + "model" "models/props_urban/oil_drum001.mdl" + "solid" "6" + "disableshadows" "1" +} +{ + "classname" "prop_dynamic" + "origin" "-5652 1200 128.25" + "angles" "0 255 0" + "model" "models/props_urban/oil_drum001.mdl" + "solid" "6" + "disableshadows" "1" +} +; --- Remove all original barrels +filter: +{ + "classname" "prop_physics" + "model" "models/props_urban/oil_drum001.mdl" +} ; --- Make orange fences solid to hittables +add: { "classname" "env_physics_blocker" "origin" "-3322 880 -1" @@ -1108,25 +1133,6 @@ add: "OnMapSpawn" "InstanceAuto84-2f_screen01,Break,,0,-1" "OnMapSpawn" "InstanceAuto84-2g_screen01,Break,,0,-1" } -; --- Solidify non-solid trash clusters inside the buildings in the event area -{ - "classname" "prop_dynamic" - "origin" "553 -4140 117" - "angles" "0 15 0" - "model" "models/props_junk/trashcluster01a_corner.mdl" - "solid" "6" - "disableshadows" "1" - "rendermode" "10" -} -{ - "classname" "prop_dynamic" - "origin" "1315 -3419 69" - "angles" "0 15 0" - "model" "models/props_junk/trashcluster01a_corner.mdl" - "solid" "6" - "disableshadows" "1" - "rendermode" "10" -} ; --- Block LOS under floating trees { "classname" "logic_auto" @@ -2222,12 +2228,12 @@ add: "solid" "6" "disableshadows" "1" } -; --- Tractor by the walkway at the end saferoom +; --- Shrub wall by the walkway at the end saferoom { "classname" "prop_dynamic" - "origin" "4621 -4483 206" - "angles" "-12.4995 359.889 0.512139" - "model" "models/props_vehicles/tractor01.mdl" + "origin" "4640.59 -4374.65 211.01" + "angles" "-0.499696 270.026 10.5003" + "model" "models/props_foliage/swamp_shrubwall_block_256_deep.mdl" "solid" "6" "disableshadows" "1" } diff --git a/cfg/stripper/zonemod/maps/c3m4_plantation.cfg b/cfg/stripper/zonemod/maps/c3m4_plantation.cfg index 69a11dbc2..3bef62df8 100644 --- a/cfg/stripper/zonemod/maps/c3m4_plantation.cfg +++ b/cfg/stripper/zonemod/maps/c3m4_plantation.cfg @@ -815,16 +815,6 @@ add: "fademindist" "300" "fademaxdist" "20" } -{ - "classname" "prop_dynamic" - "origin" "-682 -2820 420" - "angles" "0 270 0" - "model" "models/props_misc/wrongway_sign01_optimized.mdl" - "solid" "0" - "disableshadows" "1" - "fademindist" "300" - "fademaxdist" "20" -} { "classname" "prop_dynamic" "origin" "-642 -2762 444" diff --git a/cfg/stripper/zonemod/maps/c4m1_milltown_a.cfg b/cfg/stripper/zonemod/maps/c4m1_milltown_a.cfg index 67d6a2df5..c8d91bb11 100644 --- a/cfg/stripper/zonemod/maps/c4m1_milltown_a.cfg +++ b/cfg/stripper/zonemod/maps/c4m1_milltown_a.cfg @@ -661,6 +661,7 @@ add: "extent" "8 648 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -669,6 +670,7 @@ add: "extent" "134 8 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -677,6 +679,7 @@ add: "extent" "80 8 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -685,6 +688,7 @@ add: "extent" "80 8 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -693,6 +697,7 @@ add: "extent" "90 8 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -701,6 +706,7 @@ add: "extent" "84 8 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -709,6 +715,7 @@ add: "extent" "8 118 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -717,6 +724,7 @@ add: "extent" "134 8 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } { "classname" "script_clip_vphysics" @@ -725,8 +733,36 @@ add: "extent" "23 32 224" "filtername" "filter_hittables" "StartDisabled" "0" + "targetname" "dock_weapons_clip" } -; --- Cliping on pickup truck by burger tank to make the jump to the awning possible on all tickrates +{ + "classname" "script_clip_vphysics" + "origin" "-7113.5 7978.5 89" + "angles" "0 0 0" + "extent" "66.5 725.5 25" + "filtername" "filter_hittables" + "StartDisabled" "0" + "targetname" "dock_weapons_clip" +} +; --- Trigger to remove the clips after going through the burger tank to prevent unintended blocking of hittables etc. +{ + "classname" "logic_auto" + "OnMapSpawn" "dock_weapons_clip_trigger,AddOutput,mins -16 -736 -736,0,-1" + "OnMapSpawn" "dock_weapons_clip_trigger,AddOutput,maxs 16 736 736,0,-1" + "OnMapSpawn" "dock_weapons_clip_trigger,AddOutput,boxmins -16 -736 -736,0,-1" + "OnMapSpawn" "dock_weapons_clip_trigger,AddOutput,boxmaxs 16 736 736,0,-1" + "OnMapSpawn" "dock_weapons_clip_trigger,AddOutput,solid 2,0,-1" +} +{ + "classname" "trigger_once" + "origin" "-6096 7328 800" + "targetname" "dock_weapons_clip_trigger" + "filtername" "filter_survivor" + "spawnflags" "1" + ; --- Trigger event output here + "OnTrigger" "dock_weapons_clip,Kill,,0,-1" +} +; --- Cliping on pickup truck by burger tank to make the jump to the awning possible on standard gravity { "classname" "env_physics_blocker" "origin" "-5374 7281 193" @@ -906,6 +942,46 @@ add: "initialstate" "1" "BlockType" "0" } +; --- Clipping on the SUV by the sugarmill saferoom +{ + "classname" "env_physics_blocker" + "origin" "3246.23 -1401.01 165" + "angles" "0 -40 0" + "mins" "-12 -33 -5" + "maxs" "12 33 5" + "boxmins" "-12 -33 -5" + "boxmaxs" "12 33 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "3239.92 -1395.7 175" + "angles" "0 -40 0" + "mins" "-12 -31 -5" + "maxs" "12 31 5" + "boxmins" "-12 -31 -5" + "boxmaxs" "12 31 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "3229.83 -1387.49 183" + "angles" "0 -40 0" + "mins" "-12 -29 -3" + "maxs" "12 29 3" + "boxmins" "-12 -29 -3" + "boxmaxs" "12 29 3" + "initialstate" "1" + "BlockType" "0" +} +; --- Remove non-static traffic barrels by the sugarmill saferoom +filter: +{ + "classname" "prop_physics" + "model" "models/props_fairgrounds/traffic_barrel.mdl" +} ; --- Remove 2 doors in the upstairs room by the balcony filter: { @@ -1069,6 +1145,21 @@ add: "disableshadows" "1" "spawnflags" "264" } +; --- Box under the tree house +{ + "classname" "prop_dynamic" + "origin" "1735 3087 108.484" + "angles" "0 0 0" + "model" "models/props/cs_assault/washer_box.mdl" + "solid" "6" + "disableshadows" "1" + "lightingorigin" "treehouse_box_lighting" +} +{ + "classname" "info_target" + "origin" "1735 3037 108.484" + "targetname" "treehouse_box_lighting" +} ; --- Fences behind tree house so players that skip over the fence still have to go around to the usual area { "classname" "prop_dynamic" @@ -1131,12 +1222,12 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Chimney on house by the blue SUV +; --- AC unit on house by the blue SUV { "classname" "prop_dynamic" - "origin" "2468 2392 394" - "angles" "0 90 0" - "model" "models/props_exteriors/chimney2.mdl" + "origin" "2393.01 2391.98 332" + "angles" "0 180 0" + "model" "models/props/de_train/acunit1.mdl" "solid" "6" "disableshadows" "1" } @@ -1211,23 +1302,6 @@ add: "origin" "3395 -856 110" "targetname" "losfix_blue_pickup_b" } -; --- Washer boxes at house by the sugarmill saferoom -{ - "classname" "prop_dynamic" - "origin" "3858 -810 97" - "angles" "1 270 -2" - "model" "models/props/cs_assault/washer_box.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "3550 -471 96" - "angles" "0 270 0" - "model" "models/props/cs_assault/washer_box.mdl" - "solid" "6" - "disableshadows" "1" -} ; ===================================================== ; == LADDER / ELEVATOR NERF == @@ -1262,6 +1336,8 @@ add: "OnMapSpawn" "anv_mapfixes_booster_ginnytop,Kill,,30,-1" ; --- Replace blocker on fence by garage sale "OnMapSpawn" "anv_mapfixes_treehouse_whitefence,Kill,,30,-1" + ; --- Infected ladder on raised house, replaced with better ladder + "OnMapSpawn" "anv_mapfixes_ladder_cornerhomeplants_cloned_garagesalehome,Kill,,30,-1" } ; --- Replacement for anv_mapfixes_booster_ginnyjon { @@ -1563,7 +1639,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Prop for ladder { "classname" "prop_dynamic" "origin" "-3680 8145 277" @@ -1583,7 +1658,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Prop for ladder { "classname" "prop_dynamic" "origin" "-2746 8144 280" @@ -1592,6 +1666,27 @@ add: "solid" "0" "disableshadows" "1" } +; --- Replacement infected ladder to get on the roof of the raised house at the end of the street (anv_mapfixes_ladder_cornerhomeplants_cloned_garagesalehome) +{ + "classname" "func_simpleladder" + "origin" "-1924 9145.5 161" + "angles" "0 270 0" + "model" "*187" + "normal.x" "0" + "normal.y" "1" + "normal.z" "0" + "team" "2" +} +{ + "classname" "func_simpleladder" + "origin" "-1924 9145.5 129" + "angles" "0 270 0" + "model" "*187" + "normal.x" "0" + "normal.y" "1" + "normal.z" "0" + "team" "2" +} ; --- Infected ladder to get on the back of the boat garage building { "classname" "func_simpleladder" @@ -1603,7 +1698,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Prop for ladder { "classname" "prop_dynamic" "origin" "4169 -454 248" diff --git a/cfg/stripper/zonemod/maps/c4m2_sugarmill_a.cfg b/cfg/stripper/zonemod/maps/c4m2_sugarmill_a.cfg index 84969373b..9196086ca 100644 --- a/cfg/stripper/zonemod/maps/c4m2_sugarmill_a.cfg +++ b/cfg/stripper/zonemod/maps/c4m2_sugarmill_a.cfg @@ -301,17 +301,36 @@ add: } { "classname" "env_physics_blocker" - "origin" "2821 -4730 132" - "mins" "-70.5 -21.5 -44" - "maxs" "70.5 21.5 44" + "origin" "2827 -4716 104" + "mins" "-32 -28 -100" + "maxs" "32 28 100" "initialstate" "1" "BlockType" "1" } { "classname" "env_physics_blocker" - "origin" "2249 -4408 202" - "mins" "-20 -38 -38.5" - "maxs" "20 38 38.5" + "origin" "2278 -4395 220" + "mins" "-14 -25 -12" + "maxs" "14 25 12" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "2253 -4406 220" + "mins" "-11 -14 -12" + "maxs" "11 14 12" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "2264 -4391.2 219.5" + "angles" "0 45 0" + "mins" "-15 -15 -12" + "maxs" "15 15 12" + "boxmins" "-15 -15 -12" + "boxmaxs" "15 15 12" "initialstate" "1" "BlockType" "1" } @@ -1133,15 +1152,6 @@ add: ; == New props for balance and SI spawns == ; ===================================================== add: -; --- Additional porta potty in the construction site -{ - "classname" "prop_dynamic" - "origin" "4481 -4413 112" - "angles" "-2.93438 12.016 -0.624281" - "model" "models/props_urban/outhouse001.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Prop on roof by 2 silos for spawns { "classname" "prop_dynamic" @@ -1167,7 +1177,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1176,7 +1186,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1185,7 +1195,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1194,7 +1204,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1203,7 +1213,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } { "classname" "prop_dynamic" @@ -1212,7 +1222,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } { "classname" "prop_dynamic" @@ -1221,7 +1231,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } { "classname" "prop_dynamic" @@ -1230,18 +1240,18 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } ; --- Fix lighting origin { "classname" "info_target" "origin" "-1553.1 -9573 684" - "targetname" "scrath_blocker_lighting1" + "targetname" "scratch_blocker_lighting1" } { "classname" "info_target" "origin" "-1553.1 -9573 204" - "targetname" "scrath_blocker_lighting2" + "targetname" "scratch_blocker_lighting2" } ; ===================================================== @@ -1419,6 +1429,17 @@ add: "normal.z" "0.00" "team" "2" } +; --- Infected ladder to prevent a perma-stuck spot behind the fence near the two shacks +{ + "classname" "func_simpleladder" + "origin" "4334 -10015.7 -18.6454" + "angles" "0 180 0" + "model" "*16" + "normal.x" "1" + "normal.y" "0" + "normal.z" "0" + "team" "2" +} ; --- Infected ladder to get on the gas station roof from the street without jumping over props { "classname" "func_simpleladder" diff --git a/cfg/stripper/zonemod/maps/c4m3_sugarmill_b.cfg b/cfg/stripper/zonemod/maps/c4m3_sugarmill_b.cfg index 830ef7f8c..6c873974c 100644 --- a/cfg/stripper/zonemod/maps/c4m3_sugarmill_b.cfg +++ b/cfg/stripper/zonemod/maps/c4m3_sugarmill_b.cfg @@ -19,19 +19,6 @@ filter: "targetname" "spawn_witch_vskeep" } -; adjust postion of trigger area ,avoid svv from being locked out of the elevator the moment it closes -; 调整检测区域,降低卡出电梯的几率 -modify: -{ - match: - { - "targetname" "trigger_elevator" - } - replace: - { - "origin" "-1484 -9546 196" - } -} ; ################ ITEM SPAWN CHANGES ############### ; ===================================================== @@ -326,23 +313,36 @@ add: } { "classname" "env_physics_blocker" - "origin" "2821 -4730 132" - "mins" "-70.5 -21.5 -44" - "maxs" "70.5 21.5 44" + "origin" "2827 -4716 104" + "mins" "-32 -28 -100" + "maxs" "32 28 100" "initialstate" "1" "BlockType" "1" } -; block plyers jump on the cooling tank model by metal step -; change angles to solve stuck spot, and keep block jump { "classname" "env_physics_blocker" - "targetname" "eb871" - "origin" "2254 -4413 202" - "angles" "0 -20 0" - "mins" "-20 -38 -39" - "maxs" "20 38 39" - "boxmins" "-20 -38 -39" - "boxmaxs" "20 38 39" + "origin" "2278 -4395 220" + "mins" "-14 -25 -12" + "maxs" "14 25 12" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "2253 -4406 220" + "mins" "-11 -14 -12" + "maxs" "11 14 12" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "2264 -4391.2 219.5" + "angles" "0 45 0" + "mins" "-15 -15 -12" + "maxs" "15 15 12" + "boxmins" "-15 -15 -12" + "boxmaxs" "15 15 12" "initialstate" "1" "BlockType" "1" } @@ -1156,6 +1156,18 @@ add: "initialstate" "1" "BlockType" "0" } +; --- Attempt to prevent survivors from being able to escape the elevator door before it closes by moving the check trigger +modify: +{ + match: + { + "targetname" "trigger_elevator" + } + replace: + { + "origin" "-1483.82 -9546.5 196" + } +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -1164,15 +1176,6 @@ add: ; == New props for balance and SI spawns == ; ===================================================== add: -; --- Additional porta potty in the construction site -{ - "classname" "prop_dynamic" - "origin" "4481 -4413 112" - "angles" "-2.93438 12.016 -0.624281" - "model" "models/props_urban/outhouse001.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Prop on roof by 2 silos for spawns { "classname" "prop_dynamic" @@ -1198,7 +1201,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1207,7 +1210,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1216,7 +1219,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1225,7 +1228,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting1" + "lightingorigin" "scratch_blocker_lighting1" } { "classname" "prop_dynamic" @@ -1234,7 +1237,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } { "classname" "prop_dynamic" @@ -1243,7 +1246,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } { "classname" "prop_dynamic" @@ -1252,7 +1255,7 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } { "classname" "prop_dynamic" @@ -1261,18 +1264,18 @@ add: "model" "models/props_urban/metal_plate001.mdl" "solid" "6" "disableshadows" "1" - "lightingorigin" "scrath_blocker_lighting2" + "lightingorigin" "scratch_blocker_lighting2" } ; --- Fix lighting origin { "classname" "info_target" "origin" "-1553.1 -9573 684" - "targetname" "scrath_blocker_lighting1" + "targetname" "scratch_blocker_lighting1" } { "classname" "info_target" "origin" "-1553.1 -9573 204" - "targetname" "scrath_blocker_lighting2" + "targetname" "scratch_blocker_lighting2" } ; ===================================================== @@ -1493,6 +1496,17 @@ add: "normal.z" "0.00" "team" "2" } +; --- Infected ladder to prevent a stuck spot behind the fence near the two shacks +{ + "classname" "func_simpleladder" + "origin" "4334 -10015.7 -18.6454" + "angles" "0 180 0" + "model" "*24" + "normal.x" "1" + "normal.y" "0" + "normal.z" "0" + "team" "2" +} ; --- Infected ladder to get on the gas station roof from the street without jumping over props { "classname" "func_simpleladder" @@ -1530,4 +1544,4 @@ modify: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== +; ===================================================== \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c4m4_milltown_b.cfg b/cfg/stripper/zonemod/maps/c4m4_milltown_b.cfg index 3a85465ed..ff51f4a2c 100644 --- a/cfg/stripper/zonemod/maps/c4m4_milltown_b.cfg +++ b/cfg/stripper/zonemod/maps/c4m4_milltown_b.cfg @@ -723,6 +723,46 @@ add: "initialstate" "1" "BlockType" "0" } +; --- Clipping on the SUV by the sugarmill saferoom +{ + "classname" "env_physics_blocker" + "origin" "3246.23 -1401.01 165" + "angles" "0 -40 0" + "mins" "-12 -33 -5" + "maxs" "12 33 5" + "boxmins" "-12 -33 -5" + "boxmaxs" "12 33 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "3239.92 -1395.7 175" + "angles" "0 -40 0" + "mins" "-12 -31 -5" + "maxs" "12 31 5" + "boxmins" "-12 -31 -5" + "boxmaxs" "12 31 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "3229.83 -1387.49 183" + "angles" "0 -40 0" + "mins" "-12 -29 -3" + "maxs" "12 29 3" + "boxmins" "-12 -29 -3" + "boxmaxs" "12 29 3" + "initialstate" "1" + "BlockType" "0" +} +; --- Remove non-static traffic barrels by the sugarmill saferoom +filter: +{ + "classname" "prop_physics" + "model" "models/props_fairgrounds/traffic_barrel.mdl" +} ; --- Remove 2 doors in the upstairs room by the balcony filter: { @@ -868,6 +908,21 @@ add: "disableshadows" "1" "spawnflags" "264" } +; --- Box under the tree house +{ + "classname" "prop_dynamic" + "origin" "1735 3087 108.484" + "angles" "0 0 0" + "model" "models/props/cs_assault/washer_box.mdl" + "solid" "6" + "disableshadows" "1" + "lightingorigin" "treehouse_box_lighting" +} +{ + "classname" "info_target" + "origin" "1735 3037 108.484" + "targetname" "treehouse_box_lighting" +} ; --- Fences behind tree house so players that skip over the fence still have to go around to the usual area { "classname" "prop_dynamic" @@ -930,12 +985,12 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Chimney on house by the blue SUV +; --- AC unit on house by the blue SUV { "classname" "prop_dynamic" - "origin" "2468 2392 394" - "angles" "0 90 0" - "model" "models/props_exteriors/chimney2.mdl" + "origin" "2393.01 2391.98 332" + "angles" "0 180 0" + "model" "models/props/de_train/acunit1.mdl" "solid" "6" "disableshadows" "1" } @@ -1010,23 +1065,6 @@ add: "origin" "3395 -856 110" "targetname" "losfix_blue_pickup_b" } -; --- Washer boxes at house by the sugarmill saferoom -{ - "classname" "prop_dynamic" - "origin" "3858 -810 97" - "angles" "1 270 -2" - "model" "models/props/cs_assault/washer_box.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "3550 -471 96" - "angles" "0 270 0" - "model" "models/props/cs_assault/washer_box.mdl" - "solid" "6" - "disableshadows" "1" -} ; ===================================================== ; == LADDER / ELEVATOR NERF == @@ -1080,6 +1118,8 @@ add: "classname" "logic_auto" ; --- Replace blocker on fence by garage sale "OnMapSpawn" "anv_mapfixes_treehouse_whitefence,Kill,,30,-1" + ; --- Infected ladder on raised house, replaced with better ladder + "OnMapSpawn" "anv_mapfixes_ladder_cornerhomeplants_cloned_garagesalehome,Kill,,30,-1" } ; --- Remove Valve's commentary blockers so we can replace them with our own add: @@ -1222,7 +1262,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Prop for ladder { "classname" "prop_dynamic" "origin" "-2746 8144 280" @@ -1231,6 +1270,27 @@ add: "solid" "0" "disableshadows" "1" } +; --- Replacement infected ladder to get on the roof of the raised house at the end of the street (anv_mapfixes_ladder_cornerhomeplants_cloned_garagesalehome) +{ + "classname" "func_simpleladder" + "origin" "-1924 9145.5 161" + "angles" "0 270 0" + "model" "*186" + "normal.x" "0" + "normal.y" "1" + "normal.z" "0" + "team" "2" +} +{ + "classname" "func_simpleladder" + "origin" "-1924 9145.5 129" + "angles" "0 270 0" + "model" "*186" + "normal.x" "0" + "normal.y" "1" + "normal.z" "0" + "team" "2" +} ; --- Infected ladder to get on the back of the boat garage building { "classname" "func_simpleladder" @@ -1242,7 +1302,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Prop for ladder { "classname" "prop_dynamic" "origin" "4169 -454 248" @@ -1502,4 +1561,18 @@ add: "normal.y" "0.00" "normal.z" "0.00" "team" "2" +} +; --- Nav blocker on the blocked door to prevent AI from trying to path through it +{ + "classname" "logic_auto" + "OnMapSpawn" "blocked_door_nav_blocker,AddOutput,mins -4 -34 -12,0,-1" + "OnMapSpawn" "blocked_door_nav_blocker,AddOutput,maxs 4 34 12,0,-1" + "OnMapSpawn" "blocked_door_nav_blocker,AddOutput,solid 2,0,-1" + "OnMapSpawn" "blocked_door_nav_blocker,BlockNav,,1,-1" +} +{ + "classname" "func_nav_blocker" + "origin" "-892 5742 116" + "targetname" "blocked_door_nav_blocker" + "teamToBlock" "-1" } \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c4m5_milltown_escape.cfg b/cfg/stripper/zonemod/maps/c4m5_milltown_escape.cfg index 876f896ca..f88765b45 100644 --- a/cfg/stripper/zonemod/maps/c4m5_milltown_escape.cfg +++ b/cfg/stripper/zonemod/maps/c4m5_milltown_escape.cfg @@ -180,7 +180,7 @@ add: ; == Clipping improvements, QOL map changes == ; ===================================================== add: -; --- Cliping on pickup truck by burger tank to make the jump to the awning possible on all tickrates +; --- Cliping on pickup truck by burger tank to make the jump to the awning possible on standard gravity { "classname" "env_physics_blocker" "origin" "-5374 7281 193" @@ -581,7 +581,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Prop for ladder { "classname" "prop_dynamic" "origin" "-3680 8145 277" diff --git a/cfg/stripper/zonemod/maps/c5m1_waterfront.cfg b/cfg/stripper/zonemod/maps/c5m1_waterfront.cfg index 23377d754..953c049b4 100644 --- a/cfg/stripper/zonemod/maps/c5m1_waterfront.cfg +++ b/cfg/stripper/zonemod/maps/c5m1_waterfront.cfg @@ -50,6 +50,29 @@ modify: ; == Block intentionally performed exploits == ; ===================================================== add: +; --- Block getting on top of fence on the left outside saferoom (Replaces TLS blocker) +{ + "classname" "env_physics_blocker" + "origin" "589 -141.5 -24" + "angles" "0 29.5 0" + "mins" "-2 -48.5 -168" + "maxs" "2 48.5 168" + "boxmins" "-2 -48.5 -168" + "boxmaxs" "2 48.5 168" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "592.5 -132 -36" + "angles" "0 32.5 0" + "mins" "-2.5 -38 -180" + "maxs" "2.5 38 180" + "boxmins" "-2.5 -38 -180" + "boxmaxs" "2.5 38 180" + "initialstate" "1" + "BlockType" "1" +} ; --- Block standing under a sign at the start to avoid infected { "classname" "env_physics_blocker" @@ -504,6 +527,13 @@ add: "mapupdate" "1" "BlockType" "1" ; --- Type was originally unspecified, blocking infected too } +; --- Remove TLS entities after loading +add: +{ + "classname" "logic_auto" + ; --- On the fence on the left outside saferoom + "OnMapSpawn" "anv_mapfixes_ledgehang_startfenceleft,Kill,,30,-1" +} ; ===================================================== ; == TRIGGER REMOVAL / FIX == diff --git a/cfg/stripper/zonemod/maps/c5m2_park.cfg b/cfg/stripper/zonemod/maps/c5m2_park.cfg index 1211d079c..adbc79eca 100644 --- a/cfg/stripper/zonemod/maps/c5m2_park.cfg +++ b/cfg/stripper/zonemod/maps/c5m2_park.cfg @@ -1143,23 +1143,15 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Extend a hedge by exit to the middle section of the park on the right side +; --- Small hedge at the exit of the right side of the center section of the park { "classname" "prop_dynamic" - "origin" "-7243 -1687 -260" - "angles" "0 0 0" - "model" "models/props_foliage/urban_hedge_256_128_high.mdl" + "origin" "-7201 -1694 -256.241" + "angles" "0 321.5 0" + "model" "models/props_foliage/urban_hedge_128_64_high.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "-7243 -1687 700" - "mins" "-125 -22 -964" - "maxs" "125 22 964" - "initialstate" "1" - "BlockType" "1" -} ; --- Tree in the park by the restrooms on the right side { "classname" "prop_dynamic" diff --git a/cfg/stripper/zonemod/maps/c5m3_cemetery.cfg b/cfg/stripper/zonemod/maps/c5m3_cemetery.cfg index 93e879e83..29f5b1bf9 100644 --- a/cfg/stripper/zonemod/maps/c5m3_cemetery.cfg +++ b/cfg/stripper/zonemod/maps/c5m3_cemetery.cfg @@ -203,18 +203,7 @@ add: ; == Block intentionally performed exploits == ; ===================================================== add: -; --- Block survivors from standing on the fence by the saferoom - Replaced until angled clip bug fixed (#34) -;{ -; "classname" "env_physics_blocker" -; "origin" "6092 8456 404" -; "angles" "0 -5.5 0" -; "mins" "-116 -4 -236" -; "maxs" "116 4 236" -; "boxmins" "-116 -4 -236" -; "boxmaxs" "116 4 236" -; "initialstate" "1" -; "BlockType" "1" -;} +; --- Block survivors from standing on the fence by the saferoom { "classname" "env_physics_blocker" "origin" "6072 8456 58" @@ -274,6 +263,38 @@ add: "initialstate" "1" "BlockType" "1" } +; --- Block survivors from standing on the large dumpster by the stairs (via a low-gravity jump onto a TLS infected ladder) +{ + "classname" "env_physics_blocker" + "origin" "3864.5 6109 316" + "angles" "0 23 0" + "mins" "-192.5 -65 -324" + "maxs" "192.5 65 324" + "boxmins" "-192.5 -65 -324" + "boxmaxs" "192.5 65 324" + "initialstate" "1" + "BlockType" "1" +} +{ + "classname" "env_physics_blocker" + "origin" "3759.5 5992.5 380" + "angles" "0 23 0" + "mins" "-20.5 -2.5 -260" + "maxs" "20.5 2.5 260" + "boxmins" "-20.5 -2.5 -260" + "boxmaxs" "20.5 2.5 260" + "initialstate" "1" + "BlockType" "1" +} +; --- Block section of rooftop by the shack survivors can stand on +{ + "classname" "env_physics_blocker" + "origin" "5152 5256 440" + "mins" "-256 -8 -200" + "maxs" "256 8 200" + "initialstate" "1" + "BlockType" "1" +} ; --- Block survivors from climbing electrical box by the shack { "classname" "env_physics_blocker" @@ -535,20 +556,10 @@ add: ; == Clipping improvements, QOL map changes == ; ===================================================== filter: -; --- Remove 2 fallen oil barrels near the saferoom -{ - "hammerid" "1588934" -} -{ - "hammerid" "1588938" -} -; --- Remove fallen oil barrel by the shed -{ - "hammerid" "1549590" -} -; --- Remove oil barrel on top of stack by the shed after the bridge +; --- Remove oil barrels that block movement / can be exploited { - "hammerid" "1549682" + "classname" "prop_physics" + "model" "models/props_urban/oil_drum001.mdl" } add: ; --- Add missing glass to vehicles @@ -602,6 +613,29 @@ add: "parentname" "destruction_car_phys" "targetname" "destruction_car_glass" } +; --- Clipping on dryers by the shack +{ + "classname" "env_physics_blocker" + "origin" "5036.77 4186.99 50" + "angles" "0 210 0" + "mins" "-2 -15 -4" + "maxs" "2 15 4" + "boxmins" "-2 -15 -4" + "boxmaxs" "2 15 4" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "4983.01 4229.81 49" + "angles" "0 285 0" + "mins" "-2 -15 -4" + "maxs" "2 15 4" + "boxmins" "-2 -15 -4" + "boxmaxs" "2 15 4" + "initialstate" "1" + "BlockType" "0" +} ; --- Clipping on draped bodies by the shack { "classname" "env_physics_blocker" @@ -724,6 +758,15 @@ add: "initialstate" "1" "BlockType" "0" } +; --- Prop for ladder on shack after the bridge as a visual indicator +{ + "classname" "prop_dynamic" + "origin" "7021 -4032 248" + "angles" "0 90 0" + "model" "models/props_downtown/gutter_downspout_straight02.mdl" + "solid" "0" + "disableshadows" "1" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -840,21 +883,54 @@ add: "origin" "4226 1714 9" "targetname" "losfix_sewer_street_van" } -; --- Manhole cover by the sewer drop +; --- Fence cover by the sewer drop { "classname" "prop_dynamic" - "origin" "4075 376 29" - "angles" "84 334.5 0" - "model" "models/props_street/manhole_cover.mdl" + "origin" "4368 -80 9" + "angles" "0 180 0" + "model" "models/props_urban/fence_cover001_256.mdl" "solid" "6" "disableshadows" "1" } -; --- Extend concrete block behind fence at the sewer drop +; --- Fridges by the sewer drop { "classname" "prop_dynamic" - "origin" "4256 -240 37" - "angles" "0 285.5 0" - "model" "models/props_fortifications/concrete_block001_128_reference.mdl" + "origin" "4377 580 1.12648" + "angles" "0 195.5 0" + "model" "models/props_urban/fridge001.mdl" + "solid" "6" + "disableshadows" "1" +} +{ + "classname" "prop_dynamic" + "origin" "4377 552 15.1265" + "angles" "-85.427 84.9924 19.7675" + "model" "models/props_urban/fridge001.mdl" + "solid" "6" + "disableshadows" "1" +} +; --- Oil barrels behind the fence by the sewer drop +{ + "classname" "prop_dynamic" + "origin" "4391.54 755.298 1" + "angles" "0 95.5 0" + "model" "models/props_urban/oil_drum001.mdl" + "solid" "6" + "disableshadows" "1" +} +{ + "classname" "prop_dynamic" + "origin" "4393.46 735.39 49" + "angles" "0 95.5 0" + "model" "models/props_urban/oil_drum001.mdl" + "solid" "6" + "disableshadows" "1" +} +{ + "classname" "prop_dynamic" + "origin" "4395.18 717.473 1" + "angles" "0 95.5 0" + "model" "models/props_urban/oil_drum001.mdl" "solid" "6" "disableshadows" "1" } @@ -912,32 +988,6 @@ add: "initialstate" "1" "BlockType" "1" } -; --- Extend wall at the cemetery entrance - Lighting cannot be made to match joining incorrectly lit walls -{ - "classname" "prop_dynamic" - "origin" "6712 -4832 96" - "angles" "0 0 0" - "model" "models/props_urban/gate_wall001_64.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "6712 -4800 96" - "angles" "0 270 0" - "model" "models/props_urban/gate_column001_32.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Clipping on wall -{ - "classname" "env_physics_blocker" - "origin" "6712 -4820 528" - "mins" "-12 -32 -432" - "maxs" "12 32 432" - "initialstate" "1" - "BlockType" "1" -} ; ===================================================== ; == LADDER / ELEVATOR NERF == @@ -947,37 +997,12 @@ add: ; --- Pipe to stand on at the ladder in the sewer { "classname" "prop_dynamic" - "origin" "5952 403 -99" + "origin" "5952 403 -73" "angles" "0 0 -90" "model" "models/props_pipes/pipeset08d_256_001a.mdl" "solid" "6" "disableshadows" "1" } -{ - "classname" "env_physics_blocker" - "origin" "5945 405 -48" - "mins" "-17 -3 -48" - "maxs" "17 3 48" - "initialstate" "1" - "BlockType" "0" -} -; --- Fences at the top of the sewer ladder -{ - "classname" "prop_dynamic" - "origin" "5997 376 20" - "angles" "0 180 0" - "model" "models/props_c17/handrail04_medium.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "5891 376 20" - "angles" "0 180 0" - "model" "models/props_c17/handrail04_medium.mdl" - "solid" "6" - "disableshadows" "1" -} ; ############ MAP SOUND AND GFX CHANGES ############ @@ -985,7 +1010,7 @@ add: ; == SOUND REMOVAL == ; == Remove or adjust sounds played by the map == ; ===================================================== -; --- Stop survivors saying some of the same annoying lines every single round +; --- Stop survivors saying some of the same voice lines every round filter: ; --- When leaving saferoom { @@ -1101,6 +1126,34 @@ filter: ; == LADDER ADDITIONS / FIXES == ; == Add or change ladders == ; ===================================================== +; --- Remove TLS ladders after loading and replace them with our own +add: +{ + "classname" "logic_auto" + ; --- Ladders on green fence before the sewer + "OnMapSpawn" "anv_mapfixes_ladder_fencecornerright_cloned_fencebacksouthl,Kill,,30,-1" + "OnMapSpawn" "anv_mapfixes_ladder_fencecornerleft_cloned_fencebackeastr,Kill,,30,-1" +} +{ + "classname" "func_simpleladder" + "origin" "4353 893 0" + "angles" "0 180 0" + "model" "*371" + "normal.x" "1" + "normal.y" "0" + "normal.z" "0" + "team" "2" +} +{ + "classname" "func_simpleladder" + "origin" "6005 -275 0" + "angles" "0 180 0" + "model" "*117" + "normal.x" "0" + "normal.y" "1" + "normal.z" "0" + "team" "2" +} ; --- Fix the sewer ladder ending slightly before the top of the hole, causing players to fall off near the top modify: { @@ -1125,7 +1178,7 @@ add: "normal.z" "0.00" "team" "2" } -; --- Infected ladder behind the fence at the start in the open area +; --- Infected ladder behind the fence by the fire at the start of the map { "classname" "func_simpleladder" "origin" "8857 9854 -16" @@ -1159,127 +1212,19 @@ add: "team" "2" } { - "classname" "func_simpleladder" - "origin" "-369 -1649 6" - "angles" "0 0 0" - "model" "*374" - "normal.x" "1.00" - "normal.y" "0.00" - "normal.z" "0.00" - "team" "2" + "classname" "func_simpleladder" + "origin" "4781 -3867 -52" + "angles" "0 90 0" + "model" "*122" + "normal.x" "0" + "normal.y" "1" + "normal.z" "0" + "team" "2" } ; ####### MISCELLANEOUS / MAP SPECIFIC CHANGES ###### ; ===================================================== -; == CEMETERY PATHING == -; == Change route through cemetery section == -; ===================================================== -; --- Modify names of entities so that they get spawned on the default versus path (Path A) -modify: -; --- Crypt walls at the start of the path -{ - match: - { - "hammerid" "1058418" - } - replace: - { - "targetname" "Path_A_clip" - } -} -{ - match: - { - "hammerid" "1058416" - } - replace: - { - "targetname" "Path_A_navblock" - "affectsFlow" "0" - } -} -{ - match: - { - "hammerid" "1058408" - } - replace: - { - "targetname" "Path_A_fence" - } -} -{ - match: - { - "hammerid" "1058412" - } - replace: - { - "targetname" "Path_A_fence" - } -} -; --- Fence by the tree at the first corner -{ - match: - { - "hammerid" "1058629" - } - replace: - { - "targetname" "Path_A_clip" - } -} -{ - match: - { - "hammerid" "1058619" - } - replace: - { - "targetname" "Path_A_navblock" - "affectsFlow" "0" - } -} -{ - match: - { - "hammerid" "1058625" - } - replace: - { - "targetname" "Path_A_fence" - } -} -{ - match: - { - "hammerid" "1058621" - } - replace: - { - "targetname" "Path_A_fence" - } -} -; --- Infected ladders to climb over blocked route -add: -{ - "classname" "func_simpleladder" - "origin" "-476 1448 -84" - "angles" "0 0 0" - "model" "*268" - "normal.x" "-1.00" - "normal.y" "0.00" - "normal.z" "0.00" - "team" "2" -} -{ - "classname" "func_simpleladder" - "origin" "-386 1472 -84" - "angles" "0 0 0" - "model" "*283" - "normal.x" "1.00" - "normal.y" "0.00" - "normal.z" "0.00" - "team" "2" -} \ No newline at end of file +; == BLANK HEADER == +; == Blank description == +; ===================================================== \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c6m1_riverbank.cfg b/cfg/stripper/zonemod/maps/c6m1_riverbank.cfg index 6115321f6..a03979301 100644 --- a/cfg/stripper/zonemod/maps/c6m1_riverbank.cfg +++ b/cfg/stripper/zonemod/maps/c6m1_riverbank.cfg @@ -1314,6 +1314,124 @@ modify: "spawnflags" "1" } } +; --- Clipping on window frames throughout the map to make jumping onto them easiser +add: +; --- Outside saferoom +{ + "classname" "env_physics_blocker" + "origin" "752 2636 325" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "1008 2636 325" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "1136 2636 325" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "1664 2636 357" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "1920 2636 357" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "2048 2636 357" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +; --- In the store +{ + "classname" "env_physics_blocker" + "origin" "3136 2604 234" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "3520 2604 234" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "3648 2604 234" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +; --- Above the alarm cars +{ + "classname" "env_physics_blocker" + "origin" "1416 1620 542" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "888 1620 542" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "888 1596 542" + "mins" "-32 -1 -5" + "maxs" "32 1 5" + "initialstate" "1" + "BlockType" "0" +} +; --- End saferoom +{ + "classname" "env_physics_blocker" + "origin" "-3860 -400 1030" + "mins" "-1 -32 -5" + "maxs" "1 32 5" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "-3860 -144 1030" + "mins" "-1 -32 -5" + "maxs" "1 32 5" + "initialstate" "1" + "BlockType" "0" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -1508,8 +1626,8 @@ add: ; --- Boxes to get on the bus by the ramp { "classname" "prop_dynamic" - "origin" "-1067 1172 206" - "angles" "0 324 0" + "origin" "-1068.17 1171.21 204.916" + "angles" "2.14234 -36.1901 352.132" "model" "models/props/cs_militia/boxes_garage_lower.mdl" "solid" "6" "disableshadows" "1" @@ -1566,26 +1684,34 @@ add: "initialstate" "1" "BlockType" "0" } -; --- Bus behind tent by the end saferoom +; --- Van by the end saferoom { "classname" "prop_dynamic" - "origin" "-3105 543 703" - "angles" "0 174.5 0.4" - "model" "models/props_vehicles/bus01_2.mdl" + "origin" "-3185 540 704" + "angles" "0 78 0" + "model" "models/props_vehicles/van.mdl" "solid" "6" "disableshadows" "1" } -; --- Block LOS under bus +{ + "classname" "prop_dynamic" + "origin" "-3185 540 704" + "angles" "0 78 0" + "model" "models/props_vehicles/van_glass.mdl" + "solid" "6" + "disableshadows" "1" +} +; --- Block LOS under van { "classname" "logic_auto" - "OnMapSpawn" "losfix_bus_end,AddOutput,mins -163 -2 -10,0,-1" - "OnMapSpawn" "losfix_bus_end,AddOutput,maxs 163 2 10,0,-1" - "OnMapSpawn" "losfix_bus_end,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_van_end,AddOutput,mins -108 -2 -10,0,-1" + "OnMapSpawn" "losfix_van_end,AddOutput,maxs 108 2 10,0,-1" + "OnMapSpawn" "losfix_van_end,AddOutput,solid 2,0,-1" } { "classname" "func_brush" - "origin" "-3127 542 712" - "targetname" "losfix_bus_end" + "origin" "-3186 539 712" + "targetname" "losfix_van_end" } ; ===================================================== @@ -1902,4 +2028,4 @@ add: "maxs" "8 19 5" "initialstate" "1" "BlockType" "0" -} +} \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c6m2_bedlam.cfg b/cfg/stripper/zonemod/maps/c6m2_bedlam.cfg index 911c8fcf8..97cd2cfd8 100644 --- a/cfg/stripper/zonemod/maps/c6m2_bedlam.cfg +++ b/cfg/stripper/zonemod/maps/c6m2_bedlam.cfg @@ -361,18 +361,18 @@ add: } { "classname" "env_physics_blocker" - "origin" "894 579 168" - "mins" "-47 -3 -24" - "maxs" "47 3 24" + "origin" "894 579 132" + "mins" "-47 -3 -60" + "maxs" "47 3 60" "initialstate" "1" "BlockType" "1" } -; --- Block survivors from standing on the AC units by the Jones & Sons building exit +; --- Block survivors from standing on the AC units on the street before the jazz club { "classname" "env_physics_blocker" - "origin" "-50 3709 268" - "mins" "-60.5 -32 -158" - "maxs" "60.5 32 158" + "origin" "-49.5 3710.5 456" + "mins" "-60.5 -30.5 -312" + "maxs" "60.5 30.5 312" "initialstate" "1" "BlockType" "1" } @@ -384,6 +384,26 @@ add: "initialstate" "1" "BlockType" "1" } +{ + "classname" "env_physics_blocker" + "origin" "-128 4577 496" + "mins" "-60 -31 -272" + "maxs" "60 31 272" + "initialstate" "1" + "BlockType" "1" +} +; --- Block survivors from standing on the barricade in the corner of the street before the jazz club +{ + "classname" "env_physics_blocker" + "origin" "-209.27 4589.73 408" + "angles" "0 135 0" + "mins" "-19.5 -48 -360" + "maxs" "19.5 48 360" + "boxmins" "-19.5 -48 -360" + "boxmaxs" "19.5 48 360" + "initialstate" "1" + "BlockType" "1" +} ; --- Block survivors from standing on the red awning at the Jones & Sons building exit { "classname" "env_physics_blocker" @@ -559,6 +579,34 @@ add: "initialstate" "1" "BlockType" "0" } +; --- Fix gate by the bar lacking proper collisions +{ + "classname" "logic_auto" + "OnMapSpawn" "losfix_bar_fence1,AddOutput,mins -5 -0.5 -47.5,0,-1" + "OnMapSpawn" "losfix_bar_fence1,AddOutput,maxs 5 0.5 47.5,0,-1" + "OnMapSpawn" "losfix_bar_fence1,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_bar_fence2,AddOutput,mins -5 -0.5 -47.5,0,-1" + "OnMapSpawn" "losfix_bar_fence2,AddOutput,maxs 5 0.5 47.5,0,-1" + "OnMapSpawn" "losfix_bar_fence2,AddOutput,solid 2,0,-1" + "OnMapSpawn" "losfix_bar_fence3,AddOutput,mins -32 -0.5 -1,0,-1" + "OnMapSpawn" "losfix_bar_fence3,AddOutput,maxs 32 0.5 1,0,-1" + "OnMapSpawn" "losfix_bar_fence3,AddOutput,solid 2,0,-1" +} +{ + "classname" "func_brush" + "origin" "437 1943.5 -16.5" + "targetname" "losfix_bar_fence1" +} +{ + "classname" "func_brush" + "origin" "491.5 1943.5 -16.5" + "targetname" "losfix_bar_fence2" +} +{ + "classname" "func_brush" + "origin" "464 1943.5 32" + "targetname" "losfix_bar_fence3" +} ; --- Fix right end of jazz club awning having no collision { "classname" "prop_dynamic" @@ -581,6 +629,9 @@ filter: { "hammerid" "565846" } +{ + "hammerid" "565860" +} ; --- Clipping on debris piles at the drop into the sewer add: { @@ -607,7 +658,7 @@ add: "initialstate" "1" "BlockType" "0" } -; --- Clipping on non-solid debris pile for consistency +; --- Clipping on non-solid debris pile for consistency with water movement speed { "classname" "env_physics_blocker" "origin" "678 5316 -1185" @@ -625,6 +676,12 @@ add: "initialstate" "1" "BlockType" "0" } +; --- Remove non-static traffic barrels +filter: +{ + "classname" "prop_physics" + "model" "models/props_fairgrounds/traffic_barrel.mdl" +} ; ########### ADDITIONAL PROPS AND SPAWNS ########### @@ -659,6 +716,15 @@ add: "solid" "6" "disableshadows" "1" } +; --- Traffic barrel to allow players to jump onto the large dumpster by the cement truck (replaces physics prop) +{ + "classname" "prop_dynamic" + "origin" "-14 1410 -72.234" + "angles" "0 224.5 0" + "model" "models/props_fairgrounds/traffic_barrel.mdl" + "solid" "6" + "disableshadows" "1" +} ; --- Bricks to climb into the pool room from the construction site { "classname" "prop_dynamic" @@ -676,15 +742,6 @@ add: "solid" "6" "disableshadows" "1" } -; --- Prop to spawn behind on unused fire escape -{ - "classname" "prop_dynamic" - "origin" "950 2768 263" - "angles" "0 0 0" - "model" "models/props_junk/trashcluster01b_corner.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Van on the street outside the jazz club { "classname" "prop_dynamic" @@ -966,7 +1023,7 @@ modify: ; == Add or change ladders == ; ===================================================== add: -; --- Ladders to climb up the middle section diving the construction area +; --- Ladders to climb up the middle section dividing the construction area { "classname" "func_simpleladder" "origin" "5706 135 1000" @@ -1329,301 +1386,6 @@ add: ; ####### MISCELLANEOUS / MAP SPECIFIC CHANGES ###### ; ===================================================== -; == PLANK CROSSING REWORK == -; == Open alternative route at the plank crossing == -; ===================================================== -add: -; --- Block survivors from avoiding the Red Flight bar building entirely by going through the alleyway -{ - "classname" "prop_dynamic" - "origin" "464 1944 -64" - "angles" "0 270 0" - "model" "models/props_urban/gate_wall_gate003_64.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Fix collision issues with gate -{ - "classname" "logic_auto" - "OnMapSpawn" "losfix_gate_alley,AddOutput,mins -34 -1 -49,0,-1" - "OnMapSpawn" "losfix_gate_alley,AddOutput,maxs 34 1 49,0,-1" - "OnMapSpawn" "losfix_gate_alley,AddOutput,solid 2,0,-1" -} -{ - "classname" "func_brush" - "origin" "464 1944 -16" - "targetname" "losfix_gate_alley" -} -; --- Infected ladder to get over fence -{ - "classname" "func_simpleladder" - "origin" "1136 5614.5 68" - "angles" "0 180 0" - "model" "*92" - "normal.x" "0.00" - "normal.y" "-1.00" - "normal.z" "0.00" - "team" "2" -} -; --- Open up an alternative route to the right (tunnel used for survival/scavenge) -filter: -{ - "targetname" "navblock_tunnel_shortcut" -} -{ - "targetname" "brush_tunnel_shortcut" -} -; --- Exit sign and lighting to highlight the path -add: -{ - "classname" "prop_dynamic" - "origin" "1073 3168 -12" - "angles" "0 180 0" - "model" "models/props/cs_office/exit_wall.mdl" - "solid" "0" - "disableshadows" "1" -} -{ - "classname" "beam_spotlight" - "origin" "1073 3157 -15" - "angles" "87 270 0" - "spawnflags" "3" - "HDRColorScale" ".35" - "rendercolor" "0 255 0" - "renderamt" "255" - "spotlightwidth" "40" - "spotlightlength" "150" - "disablereceiveshadows" "1" - "rendermode" "0" -} -; --- Force survivors to go inside the building at the tunnel exit so that the route takes a similar amount of time to the plank -{ - "classname" "prop_dynamic" - "origin" "1150 3739 -160" - "angles" "0 0 0" - "model" "models/props_street/police_barricade2.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "1080 3815 -161" - "angles" "0 90 0" - "model" "models/props_street/police_barricade2.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "985 3807 -161" - "angles" "0 99.5 0" - "model" "models/props_street/police_barricade.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "915 3739 -160" - "angles" "0 144.5 0" - "model" "models/props_street/police_barricade2.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "logic_auto" - "OnMapSpawn" "barricade_path_navblock1,BlockNav,,1,-1" - "OnMapSpawn" "barricade_path_navblock2,BlockNav,,1,-1" - "OnMapSpawn" "barricade_path_navblock3,BlockNav,,1,-1" - "OnMapSpawn" "barricade_path_navblock4,BlockNav,,1,-1" - "OnMapSpawn" "barricade_path_navblock5,BlockNav,,1,-1" -} -{ - "classname" "script_nav_blocker" - "origin" "1036 3739 -152" - "extent" "140 71 18" - "targetname" "barricade_path_navblock1" - "teamToBlock" "2" - "affectsFlow" "1" -} -{ - "classname" "script_nav_blocker" - "origin" "1055 3816 -152" - "extent" "95 24 18" - "targetname" "barricade_path_navblock2" - "teamToBlock" "2" - "affectsFlow" "1" -} -{ - "classname" "script_nav_blocker" - "origin" "868 3688 -152" - "extent" "28 24 18" - "targetname" "barricade_path_navblock3" - "teamToBlock" "2" - "affectsFlow" "1" -} -{ - "classname" "script_nav_blocker" - "origin" "826 3870 -152" - "extent" "24 24 18" - "targetname" "barricade_path_navblock4" - "teamToBlock" "2" - "affectsFlow" "1" -} -{ - "classname" "script_nav_blocker" - "origin" "811 3235 22" - "extent" "35 35 18" - "targetname" "barricade_path_navblock5" - "teamToBlock" "2" - "affectsFlow" "1" -} -; --- Plywood on barricades for spawns and ladder visibility -{ - "classname" "prop_dynamic" - "origin" "1100 3814 -162" - "angles" "90 270 0" - "model" "models/props_highway/plywood_03.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "1151 3810 -161" - "angles" "90 180 0" - "model" "models/props_highway/plywood_03.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Infected ladders to get over the barricade -{ - "classname" "func_simpleladder" - "origin" "1795 7486 -58" - "angles" "0 180 0" - "model" "*92" - "normal.x" "0.00" - "normal.y" "-1.00" - "normal.z" "0.00" - "team" "2" -} -{ - "classname" "func_simpleladder" - "origin" "-2521 4456 -57" - "angles" "0 270 0" - "model" "*92" - "normal.x" "1.00" - "normal.y" "0.00" - "normal.z" "0.00" - "team" "2" -} -; --- Clipping to stop players getting stuck between the car and barricades -{ - "classname" "env_physics_blocker" - "origin" "1082 3831 -138" - "mins" "-70 -15 -20" - "maxs" "70 15 20" - "initialstate" "1" - "BlockType" "0" -} -{ - "classname" "env_physics_blocker" - "origin" "1097 3831 -108" - "mins" "-35 -15 -10" - "maxs" "35 15 10" - "initialstate" "1" - "BlockType" "0" -} -; --- Boxes to get over the barricades from the outside (nearby car can also be used) -{ - "classname" "prop_dynamic" - "origin" "907 3787 -161" - "angles" "0 54.5 0" - "model" "models/props_crates/static_crate_40.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "878 3743 -161" - "angles" "0 54.5 0" - "model" "models/props_crates/static_crate_40.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "901 3759 -123" - "angles" "0 54.5 0" - "model" "models/props_crates/static_crate_40.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic_override" - "origin" "909 3753 -77" - "angles" "0 144.5 0" - "model" "models/props_crates/supply_crate01.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Block survivors from jumping into a window from the barricade -{ - "classname" "env_physics_blocker" - "origin" "851 3675 68" - "mins" "-2.5 -11 -57.5" - "maxs" "2.5 11 57.5" - "initialstate" "1" - "BlockType" "1" -} -; --- Block the path at the lower stairs in the Jones & Sons building, forcing survivors to go to the top floor -{ - "classname" "prop_dynamic" - "origin" "859 3201 8" - "angles" "0 90 0" - "model" "models/props_interiors/dresser_tall.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "859 3233 8" - "angles" "0 90 0" - "model" "models/props_interiors/dresser_tall.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "907 3263 8" - "angles" "0 0 0" - "model" "models/props_street/police_barricade.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "867 3269 8" - "angles" "0 0 0" - "model" "models/props_crates/static_crate_40.mdl" - "solid" "6" - "disableshadows" "1" -} -; --- Clipping for survivors on shelves to stop a skip -{ - "classname" "env_physics_blocker" - "origin" "861 3215 47" - "mins" "-32 -31 -37" - "maxs" "32 31 37" - "initialstate" "1" - "BlockType" "1" -} -; --- Infected ladder to get over boxes -{ - "classname" "func_simpleladder" - "origin" "-2781.5 3871 61" - "angles" "0 270 0" - "model" "*92" - "normal.x" "1.00" - "normal.y" "0.00" - "normal.z" "0.00" - "team" "2" -} +; == BLANK HEADER == +; == Blank description == +; ===================================================== \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c7m1_docks.cfg b/cfg/stripper/zonemod/maps/c7m1_docks.cfg index 2ad41f48d..96a91b22e 100644 --- a/cfg/stripper/zonemod/maps/c7m1_docks.cfg +++ b/cfg/stripper/zonemod/maps/c7m1_docks.cfg @@ -3,77 +3,6 @@ ; == DIRECTOR & EVENT MODIFICATION == ; == Modify director behaviour and events == ; ===================================================== -add: -; --- Fix scavenge spawn positions when using thesaccing addon, as the spawn points use the L4D1 survivor names but the addon spawns L4D2 survivors -{ - "classname" "info_survivor_position" - "origin" "6089.54 342.04 146.017" - "angles" "0 195 0" - "targetname" "scavenge_position3" - "SurvivorName" "Rochelle" - "Order" "1" - "GameMode" "scavenge" -} -{ - "classname" "info_survivor_position" - "origin" "6077.26 256.76 149.017" - "angles" "0 195 0" - "targetname" "scavenge_position4" - "SurvivorName" "Ellis" - "Order" "1" - "GameMode" "scavenge" -} -{ - "classname" "info_survivor_position" - "origin" "6147.4 267.4 150.017" - "angles" "0 180 0" - "targetname" "scavenge_position2" - "SurvivorName" "Nick" - "Order" "1" - "GameMode" "scavenge" -} -{ - "classname" "info_survivor_position" - "origin" "6139.4 315.4 149.017" - "angles" "0 180 0" - "targetname" "scavenge_position1" - "SurvivorName" "Coach" - "Order" "1" - "GameMode" "scavenge" -} -; --- Add L4D2 survivor spawn positions to the saferoom, as thesaccing.vpk causes L4D2 survivors to be used when transitioning to this map -{ - "classname" "info_survivor_position" - "origin" "13915 2567 32.2028" - "angles" "0 270 0" - "targetname" "survivorPos_intro_01" - "SurvivorName" "Nick" - "Order" "1" -} -{ - "classname" "info_survivor_position" - "origin" "13864.5 2593.2 32.2028" - "angles" "0 270 0" - "targetname" "survivorPos_intro_02" - "SurvivorName" "Rochelle" - "Order" "1" -} -{ - "classname" "info_survivor_position" - "origin" "13806.5 2583 33" - "angles" "0 270 0" - "targetname" "survivorPos_intro_03" - "SurvivorName" "Coach" - "Order" "1" -} -{ - "classname" "info_survivor_position" - "origin" "13765.1 2545 33" - "angles" "0 270 0" - "targetname" "survivorPos_intro_04" - "SurvivorName" "Ellis" - "Order" "1" -} ; --- Automatically open the 2nd train car door 20 seconds after the tank is spawned modify: { @@ -368,14 +297,6 @@ add: "initialstate" "1" "BlockType" "0" } -{ - "classname" "env_physics_blocker" - "origin" "10664 -264 -108" - "mins" "-16 -26 -6" - "maxs" "16 26 6" - "initialstate" "1" - "BlockType" "0" -} { "classname" "env_physics_blocker" "origin" "10400 -129 -69" @@ -419,7 +340,7 @@ add: { "classname" "env_physics_blocker" "origin" "10252 -40 -73" - "mins" "-20 -32 -6" + "mins" "-20 -32 -6" "maxs" "20 32 6" "initialstate" "1" "BlockType" "0" @@ -627,33 +548,6 @@ add: "normal.z" "0.00" "team" "2" } -; --- Infected ladder to climb on the boat at the back of the tank area -{ - "classname" "func_simpleladder" - "origin" "8679 9717 -31" - "angles" "0 270 0" - "model" "*10" - "normal.x" "0.00" - "normal.y" "1.00" - "normal.z" "0.00" - "team" "2" -} -{ - "classname" "env_physics_blocker" - "origin" "9114 298 127" - "mins" "-16 -3 -6" - "maxs" "16 3 6" - "initialstate" "1" - "BlockType" "3" -} -{ - "classname" "env_physics_blocker" - "origin" "9114 293 136" - "mins" "-16 -5 -3" - "maxs" "16 5 3" - "initialstate" "1" - "BlockType" "3" -} ; --- Infected ladder on the bricks by the yellow pickup truck { "classname" "func_simpleladder" @@ -671,4 +565,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== +; ===================================================== \ No newline at end of file diff --git a/cfg/stripper/zonemod/maps/c7m2_barge.cfg b/cfg/stripper/zonemod/maps/c7m2_barge.cfg index 5651db6ca..9173843f9 100644 --- a/cfg/stripper/zonemod/maps/c7m2_barge.cfg +++ b/cfg/stripper/zonemod/maps/c7m2_barge.cfg @@ -3,45 +3,6 @@ ; == DIRECTOR & EVENT MODIFICATION == ; == Modify director behaviour and events == ; ===================================================== -add: -; --- Fix scavenge spawn positions when using thesaccing addon, as the spawn points use the L4D1 survivor names but the addon spawns L4D2 survivors -{ - "classname" "info_survivor_position" - "origin" "-3209.14 269.716 2.08984" - "angles" "0 195 0" - "targetname" "scavenge_position4" - "SurvivorName" "Ellis" - "Order" "1" - "GameMode" "scavenge" -} -{ - "classname" "info_survivor_position" - "origin" "-3139 280.356 2.08984" - "angles" "0 180 0" - "targetname" "scavenge_position2" - "SurvivorName" "Nick" - "Order" "1" - "GameMode" "scavenge" -} -{ - "classname" "info_survivor_position" - "origin" "-3147 328.356 2.08984" - "angles" "0 180 0" - "targetname" "scavenge_position1" - "SurvivorName" "Coach" - "Order" "1" - "GameMode" "scavenge" -} -{ - "classname" "info_survivor_position" - "origin" "-3196.86 354.997 4.08984" - "angles" "0 195 0" - "targetname" "scavenge_position3" - "SurvivorName" "Rochelle" - "Order" "1" - "GameMode" "scavenge" -} - ; ################ ITEM SPAWN CHANGES ############### ; ===================================================== @@ -98,32 +59,6 @@ filter: ; == HITTABLE CHANGES == ; == Add/remove/modify hittables == ; ===================================================== -; --- Make a car in the fueling area unhittable -filter: -{ - "targetname" "car03" -} -{ - "parentname" "car03" -} -add: -{ - "classname" "prop_dynamic" - "origin" "4256 1776 129" - "angles" "0 150 0" - "model" "models/props_vehicles/cara_84sedan.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "4256 1776 129" - "angles" "0 150 0" - "model" "models/props_vehicles/cara_84sedan_glass.mdl" - "solid" "6" - "disableshadows" "1" -} - ; ############# MAP CLIPPING AND ISSUES ############# ; ===================================================== @@ -212,7 +147,30 @@ add: "disableshadows" "1" "parentname" "car05" } +; --- Clipping on trees after the saferoom +{ + "classname" "env_physics_blocker" + "origin" "7372 365 141" + "mins" "-66 -70 -6" + "maxs" "66 70 6" + "initialstate" "1" + "BlockType" "0" +} +{ + "classname" "env_physics_blocker" + "origin" "8677 1393 127" + "mins" "-67 -67 -6" + "maxs" "67 67 6" + "initialstate" "1" + "BlockType" "0" +} +; --- Remove leaning filing cabinet in the car shop +filter: +{ + "hammerid" "638358" +} ; --- Clipping on fallen lamp post before open water section to stop players from getting stuck +add: { "classname" "env_physics_blocker" "origin" "2365 1641 136" @@ -270,7 +228,7 @@ add: ; == New props for balance and SI spawns == ; ===================================================== add: -; --- Tree by the first silo +; --- Tree by the first silo on the platform { "classname" "prop_dynamic" "origin" "7497 215 254" @@ -279,104 +237,15 @@ add: "solid" "6" "disableshadows" "1" } -; --- Pipes in the water after the saferoom -{ - "classname" "prop_dynamic" - "origin" "7836 1508 39" - "angles" "0 180 0" - "model" "models/props_pipes/pipeset32d_corner128d_001a.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "pond_pipe_lighting" -} -{ - "classname" "prop_dynamic" - "origin" "7516 1508 78" - "angles" "0 180 0" - "model" "models/props_pipes/pipeset32d_512_001a.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "pond_pipe_lighting" -} -{ - "classname" "prop_dynamic" - "origin" "7132 1508 78" - "angles" "0 180 0" - "model" "models/props_pipes/pipeset32d_256_001a.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "pond_pipe_lighting" -} -{ - "classname" "prop_dynamic" - "origin" "7804 1494 4" - "angles" "0 180 0" - "model" "models/props_pipes/pipeset32d_corner128d_001a.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "pond_pipe_lighting" -} -{ - "classname" "prop_dynamic" - "origin" "7484 1494 43" - "angles" "0 180 0" - "model" "models/props_pipes/pipeset32d_512_001a.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "pond_pipe_lighting" -} +; --- Cargo container under the first silo { "classname" "prop_dynamic" - "origin" "7100 1494 43" - "angles" "0 180 0" - "model" "models/props_pipes/pipeset32d_256_001a.mdl" - "solid" "6" - "disableshadows" "1" - "lightingorigin" "pond_pipe_lighting" -} -{ - "classname" "logic_auto" - "OnMapSpawn" "pond_pipe_brush,AddOutput,mins -402 -0.1 -31,0,-1" - "OnMapSpawn" "pond_pipe_brush,AddOutput,maxs 402 0.1 31,0,-1" - "OnMapSpawn" "pond_pipe_brush,AddOutput,solid 2,0,-1" -} -{ - "classname" "func_brush" - "origin" "7435 1506 40" - "targetname" "pond_pipe_brush" -} -{ - "classname" "info_target" - "origin" "7449 1507 83" - "targetname" "pond_pipe_lighting" -} -; --- Infected ladder on the pipes -{ - "classname" "func_simpleladder" - "origin" "-360 1206 -156" - "angles" "0 0 0" - "model" "*236" - "normal.x" "0.00" - "normal.y" "1.00" - "normal.z" "0.00" - "team" "2" -} -; --- Extra pole clusters by the sunken fishing boat -{ - "classname" "prop_dynamic" - "origin" "142 1562 36" - "angles" "0 0 0" - "model" "models/props_docks/dock01_polecluster01d_256.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "141 1863 34" - "angles" "0 180 0" - "model" "models/props_docks/dock01_polecluster01d_256.mdl" + "origin" "7700 450 142" + "angles" "0 90 0" + "model" "models/props_equipment/cargo_container01_fixed.mdl" "solid" "6" "disableshadows" "1" + "rendercolor" "119 152 191" } ; --- Rock by the sunken barge { diff --git a/cfg/stripper/zonemod/maps/c8m3_sewers.cfg b/cfg/stripper/zonemod/maps/c8m3_sewers.cfg index a7f8c7a17..0292324b8 100644 --- a/cfg/stripper/zonemod/maps/c8m3_sewers.cfg +++ b/cfg/stripper/zonemod/maps/c8m3_sewers.cfg @@ -618,7 +618,6 @@ filter: ; ===================================================== add: ; --- Remove TLS clips after loading -add: { "classname" "logic_auto" ; --- Clips behind the burger tank @@ -906,4 +905,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== diff --git a/cfg/stripper/zonemod/maps/c9m1_alleys.cfg b/cfg/stripper/zonemod/maps/c9m1_alleys.cfg index 65144bb9e..85d0db722 100644 --- a/cfg/stripper/zonemod/maps/c9m1_alleys.cfg +++ b/cfg/stripper/zonemod/maps/c9m1_alleys.cfg @@ -665,23 +665,25 @@ filter: "parentname" "car_sedan19-car_physics" } ; --- Reduce number of hittable dumpsters (+ other hittables) -; --- By the saferoom (was 6 dumpsters, now 1) +; --- By the saferoom (was 6 dumpsters, now 2) filter: +; --- "origin" "-8904.63 -9744.28 -0.6875" { "hammerid" "187" } +; --- "origin" "-8751.44 -9730.56 1.90625" { "hammerid" "153" } +; --- "origin" "-8048.5 -10203.8 -2.875" { "hammerid" "119751" } +; --- Removed by TLS +; --- "origin" "-10274.9 -9823.31 -0.34375" { "hammerid" "637" } -{ - "hammerid" "199" -} ; --- Around the warehouse (was 2 dumpsters + 1 forklift, now 2 dumpsters + 0 forklifts) filter: { diff --git a/cfg/stripper/zonemod/maps/c9m2_lots.cfg b/cfg/stripper/zonemod/maps/c9m2_lots.cfg index 94bf0dd7f..39e53f8f2 100644 --- a/cfg/stripper/zonemod/maps/c9m2_lots.cfg +++ b/cfg/stripper/zonemod/maps/c9m2_lots.cfg @@ -319,7 +319,7 @@ modify: ; == HITTABLE CHANGES == ; == Add/remove/modify hittables == ; ===================================================== -; --- By the saferoom (was 3 cars, now 0) +; --- By the saferoom (was 3 cars, now 1) filter: { "targetname" "car_sedan1-car_physics" @@ -368,30 +368,6 @@ add: "solid" "6" "disableshadows" "1" } -filter: -{ - "targetname" "car_hatchback1-car_physics" -} -{ - "parentname" "car_hatchback1-car_physics" -} -add: -{ - "classname" "prop_dynamic" - "origin" "1943.91 -152.099 -217.962" - "angles" "-0.566462 45.5974 0.453201" - "model" "models/props_vehicles/cara_82hatchback.mdl" - "solid" "6" - "disableshadows" "1" -} -{ - "classname" "prop_dynamic" - "origin" "1943.91 -152.099 -217.962" - "angles" "-0.566462 45.5974 0.453201" - "model" "models/props_vehicles/cara_82hatchback_glass.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- By the alarm car/humvee (was 4 cars, now 1) filter: { @@ -545,27 +521,6 @@ filter: "parentname" "car_hatchback4-car_physics" } ; --- Around the finale area (was 2 cars, unchanged) -; --- Reduce number of hittable dumpsters (was 9 dumpsters, now 6 dumpsters) -; --- By the saferoom (was 2 dumpsters, now 1) -filter: -{ - "hammerid" "110215" -} -; --- By the alarm car/humvee (was 0 dumpsters, unchanged) -; --- By the warehouses (was 1 dumpster, now 0) -filter: -{ - "hammerid" "67369" -} -; --- After the shipping containers (was 3 dumpsters, now 1) -filter: -{ - "hammerid" "48656" -} -{ - "hammerid" "248947" -} -; --- Around the finale area (was 3 dumpsters, unchanged) ; ############# MAP CLIPPING AND ISSUES ############# @@ -579,7 +534,7 @@ add: "classname" "env_physics_blocker" "origin" "7479 6764 189" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } @@ -587,7 +542,7 @@ add: "classname" "env_physics_blocker" "origin" "6835 5901 183" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } @@ -595,7 +550,7 @@ add: "classname" "env_physics_blocker" "origin" "8438 5464 189" "mins" "-6 -6 -143" - "maxs" "6 6 143" + "maxs" "6 6 143" "initialstate" "1" "BlockType" "1" } diff --git a/cfg/stripper/zonemod/maps/daredux_map5_garage_aw.cfg b/cfg/stripper/zonemod/maps/daredux_map5_garage_aw.cfg index ee0524ecf..1f5c6f24a 100644 --- a/cfg/stripper/zonemod/maps/daredux_map5_garage_aw.cfg +++ b/cfg/stripper/zonemod/maps/daredux_map5_garage_aw.cfg @@ -754,14 +754,6 @@ add: "solid" "6" "disableshadows" "1" } -{ - "classname" "prop_dynamic" - "origin" "-1756 3395 296" - "angles" "0 0 0" - "model" "models/props/cs_militia/boxes_frontroom.mdl" - "solid" "6" - "disableshadows" "1" -} ; --- Phone booths on the walkway { "classname" "prop_dynamic" diff --git a/cfg/stripper/zonemod/maps/dcr_m2_streets.cfg b/cfg/stripper/zonemod/maps/dcr_m2_streets.cfg index e903c3b88..677c634ab 100644 --- a/cfg/stripper/zonemod/maps/dcr_m2_streets.cfg +++ b/cfg/stripper/zonemod/maps/dcr_m2_streets.cfg @@ -640,7 +640,7 @@ add: "origin" "79.77 71.25 -214.72" "angles" "0.00 14.00 0.00" } -; --- infected ladder climb on 4th tent is opposite gas station +; --- infected ladder climb on 4th tent is opposite gas station { "model" "*359" "normal.z" "0.00" diff --git a/cfg/stripper/zonemod/maps/dcr_m4_atrium.cfg b/cfg/stripper/zonemod/maps/dcr_m4_atrium.cfg index 54a5ac8f3..c1c0dc670 100644 --- a/cfg/stripper/zonemod/maps/dcr_m4_atrium.cfg +++ b/cfg/stripper/zonemod/maps/dcr_m4_atrium.cfg @@ -263,7 +263,7 @@ add: "initialstate" "1" "BlockType" "1" } -; --- barricade by the second generator to reduce death charge +; --- barricade by the second generator to reduce death charge { "classname" "prop_dynamic" "origin" "-9175 -4386 1216" @@ -341,7 +341,7 @@ add: { "classname" "trigger_multiple" "origin" "-7968.41 -4912.32 1133" - "angles" "0 23 0" + "angles" "0 23 0" "targetname" "ganerator_trigger" "filtername" "filter_survivor" "entireteam" "2" @@ -637,4 +637,4 @@ add: "boxmaxs" "3 58 1159" "initialstate" "1" "BlockType" "1" -} \ No newline at end of file +} diff --git a/cfg/stripper/zonemod/maps/l4d2_city17_02.cfg b/cfg/stripper/zonemod/maps/l4d2_city17_02.cfg index 43ca4973f..05412b2f6 100644 --- a/cfg/stripper/zonemod/maps/l4d2_city17_02.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_city17_02.cfg @@ -160,7 +160,7 @@ modify: } replace: { - "solid" "0" + "solid" "0" } } @@ -174,7 +174,7 @@ modify: } replace: { - "origin" "4516 3664 592" + "origin" "4516 3664 592" } } @@ -445,4 +445,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== diff --git a/cfg/stripper/zonemod/maps/l4d2_city17_03.cfg b/cfg/stripper/zonemod/maps/l4d2_city17_03.cfg index 9acdc7078..965d6f45e 100644 --- a/cfg/stripper/zonemod/maps/l4d2_city17_03.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_city17_03.cfg @@ -242,15 +242,6 @@ add: "origin" "1832 -1400 40" "solid" "6" } -{ - "classname" "prop_dynamic" - "angles" "0 60 0" - "disableshadows" "1" - "model" "models/props_foliage/urban_tree_giant01_medium.mdl" - "rendercolor" "255 255 255" - "origin" "1856 -1424 40" - "solid" "6" -} { "classname" "prop_dynamic" "angles" "0 207 0" @@ -317,7 +308,7 @@ add: "classname" "prop_dynamic" "angles" "0 135 0" "disableshadows" "1" - "model" "models/props_fortifications/concrete_barrier001_96_reference.mdl" + "model" "models/props_fortifications/concrete_barrier001_96_reference.mdl" "rendercolor" "150 127 18" "origin" "-352 520 -8" "solid" "6" @@ -641,4 +632,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== diff --git a/cfg/stripper/zonemod/maps/l4d2_city17_05.cfg b/cfg/stripper/zonemod/maps/l4d2_city17_05.cfg index 963b32ab5..72331267d 100644 --- a/cfg/stripper/zonemod/maps/l4d2_city17_05.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_city17_05.cfg @@ -105,7 +105,7 @@ add: ; --- add a car on square 在广场上放置一个车铁 add: -;"id" " 1377153 " +;"id" "1377153" { "classname" "prop_physics" "origin" "10090 10386 -816" @@ -316,4 +316,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== diff --git a/cfg/stripper/zonemod/maps/l4d2_diescraper4_top_361.cfg b/cfg/stripper/zonemod/maps/l4d2_diescraper4_top_361.cfg index 76d9a0358..2ce7c8c5f 100644 --- a/cfg/stripper/zonemod/maps/l4d2_diescraper4_top_361.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_diescraper4_top_361.cfg @@ -330,7 +330,7 @@ add: "maxs" "64 40 120" "mins" "-64 -40 -20" "targetname" "stair_blocker_03" - "origin" "origin" "-192 -112 -280" + "origin" "-192 -112 -280" } { @@ -372,7 +372,7 @@ add: ; put a step under the shortcut , avoid ppl drop down the killing area { "classname" "prop_dynamic" - "origin" "-208 -32 -568" + "origin" "-208 -32 -568" "angles" "0 0 0" "solid" "6" "rendercolor" "255 255 255" diff --git a/cfg/stripper/zonemod/maps/l4d2_ff01_woods.cfg b/cfg/stripper/zonemod/maps/l4d2_ff01_woods.cfg index dc82a74dc..cbd36ac3e 100644 --- a/cfg/stripper/zonemod/maps/l4d2_ff01_woods.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_ff01_woods.cfg @@ -209,7 +209,7 @@ add: add: { "classname" "prop_dynamic" - "origin" "-4408 2948 -24" + "origin" "-4408 2948 -24" "angles" "0 0 0" "model" "models/props_equipment/cargo_container04.mdl" "solid" "6" @@ -218,7 +218,7 @@ add: } { "classname" "prop_dynamic" - "origin" "-4324 3004 104" + "origin" "-4324 3004 104" "angles" "0 0 0" "model" "models/props_equipment/cargo_container04.mdl" "solid" "6" @@ -227,7 +227,7 @@ add: } { "classname" "prop_dynamic" - "origin" "-4260 3068 -24" + "origin" "-4260 3068 -24" "angles" "0 0 0" "model" "models/props_equipment/cargo_container04.mdl" "solid" "6" @@ -255,7 +255,7 @@ add: } { "classname" "prop_dynamic" - "origin" "-3276 2328 -24" + "origin" "-3276 2328 -24" "angles" "0 90 0" "model" "models/props_fortifications/police_barrier001_128_reference.mdl" "solid" "6" @@ -433,4 +433,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== diff --git a/cfg/stripper/zonemod/maps/l4d2_ff02_factory.cfg b/cfg/stripper/zonemod/maps/l4d2_ff02_factory.cfg index d34796f30..7b8f94dd1 100644 --- a/cfg/stripper/zonemod/maps/l4d2_ff02_factory.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_ff02_factory.cfg @@ -92,7 +92,7 @@ add: ; ===================================================== -; --- remove 1 dumpster near button event +; --- remove 1 dumpster near button event ; --- 删除机关点的一个垃圾箱 filter: { diff --git a/cfg/stripper/zonemod/maps/l4d2_ff03_highway.cfg b/cfg/stripper/zonemod/maps/l4d2_ff03_highway.cfg index 6d60b9c43..69b9b9589 100644 --- a/cfg/stripper/zonemod/maps/l4d2_ff03_highway.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_ff03_highway.cfg @@ -377,9 +377,9 @@ add: add: { "classname" "prop_dynamic" - "origin" "8912 2104 -592" + "origin" "8912 2104 -592" "angles" "0 300 0" - "model" "models/props_foliage/swamp_shrubwall_256a.mdl" + "model" "models/props_foliage/swamp_shrubwall_256a.mdl" "solid" "6" "disableshadows" "1" } @@ -387,7 +387,7 @@ add: "classname" "prop_dynamic" "origin" "9232 2320 -592" "angles" "0 300 0" - "model" "models/props_foliage/swamp_shrubwall_256a.mdl" + "model" "models/props_foliage/swamp_shrubwall_256a.mdl" "solid" "6" "disableshadows" "1" } @@ -395,7 +395,7 @@ add: "classname" "prop_dynamic" "origin" "10008 2464 -472" "angles" "0 225.5 0" - "model" "models/props/cs_militia/boxes_garage_lower.mdl" + "model" "models/props/cs_militia/boxes_garage_lower.mdl" "solid" "6" "disableshadows" "1" } @@ -742,4 +742,4 @@ add: ; ===================================================== ; == BLANK HEADER == ; == Blank description == -; ===================================================== \ No newline at end of file +; ===================================================== diff --git a/cfg/stripper/zonemod/maps/l4d2_stadium1_apartment.cfg b/cfg/stripper/zonemod/maps/l4d2_stadium1_apartment.cfg index 26bf4757a..29f758783 100644 --- a/cfg/stripper/zonemod/maps/l4d2_stadium1_apartment.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_stadium1_apartment.cfg @@ -142,7 +142,7 @@ modify: "targetname" "glass3_trigger" } } - + ;---- Fix Randoming Pathing/Weapon Spawns. (Forced to take the longer route) filter: { diff --git a/cfg/stripper/zonemod/maps/l4d2_vs_stadium2_riverwalk.cfg b/cfg/stripper/zonemod/maps/l4d2_vs_stadium2_riverwalk.cfg index 26267cb2e..807d081b6 100644 --- a/cfg/stripper/zonemod/maps/l4d2_vs_stadium2_riverwalk.cfg +++ b/cfg/stripper/zonemod/maps/l4d2_vs_stadium2_riverwalk.cfg @@ -71,7 +71,7 @@ add: "disableshadows" "1" } -; --- fix 2 Si stuck spots before the event +; --- fix 2 Si stuck spots before the event ; --- 修复4个特感卡住点(机关点前) { "classname" "env_player_blocker" diff --git a/cfg/stripper/zonemod/maps/l4d_dbd2dc_clean_up.cfg b/cfg/stripper/zonemod/maps/l4d_dbd2dc_clean_up.cfg index d04bc3c2f..5886c001d 100644 --- a/cfg/stripper/zonemod/maps/l4d_dbd2dc_clean_up.cfg +++ b/cfg/stripper/zonemod/maps/l4d_dbd2dc_clean_up.cfg @@ -611,7 +611,7 @@ modify: "origin" "-2550 6632.25 -660.712" } } -; --- Clean up entities +; --- Clean up entities filter: { "targetname" "Andy_Helpyou" diff --git a/cfg/stripper/zonemod/maps/l4d_dbd2dc_undead_center.cfg b/cfg/stripper/zonemod/maps/l4d_dbd2dc_undead_center.cfg index 7d382c68f..dbb041787 100644 --- a/cfg/stripper/zonemod/maps/l4d_dbd2dc_undead_center.cfg +++ b/cfg/stripper/zonemod/maps/l4d_dbd2dc_undead_center.cfg @@ -1056,15 +1056,6 @@ add: "BlockType" "1" "targetname" "block_scaffolding_skips" } -{ - "classname" "env_physics_blocker" - "origin" "-6873 8787 -345" - "mins" "-166 -53 -121" - "maxs" "166 35 121" - "initialstate" "1" - "BlockType" "1" - "targetname" "block_scaffolding_skips" -} { "classname" "env_physics_blocker" "origin" "-7268 9128 -304" diff --git a/cfg/stripper/zonemod/maps/l4d_yama_3.cfg b/cfg/stripper/zonemod/maps/l4d_yama_3.cfg index 61b5de121..ea51220dc 100644 --- a/cfg/stripper/zonemod/maps/l4d_yama_3.cfg +++ b/cfg/stripper/zonemod/maps/l4d_yama_3.cfg @@ -1,4 +1,3 @@ -add: ;----- Versus Relay modify: { diff --git a/cfg/stripper/zonemod/maps/versus_3.cfg b/cfg/stripper/zonemod/maps/versus_3.cfg index a9360633c..beb411534 100644 --- a/cfg/stripper/zonemod/maps/versus_3.cfg +++ b/cfg/stripper/zonemod/maps/versus_3.cfg @@ -79,7 +79,7 @@ add: } ;block exploit onto roof -add +add: { "solid" "6" "origin" "9891 5143 -1319" @@ -89,7 +89,7 @@ add } ;barrier in "labrynth" because it just leads to a dead end and a broken infected ladder -add +add: { "solid" "6" "origin" "10923 4402 -1560" diff --git a/cfg/stripper/zonemod/maps/x1m1_cliffs.cfg b/cfg/stripper/zonemod/maps/x1m1_cliffs.cfg index 99e1d397d..aa527c47c 100644 --- a/cfg/stripper/zonemod/maps/x1m1_cliffs.cfg +++ b/cfg/stripper/zonemod/maps/x1m1_cliffs.cfg @@ -226,7 +226,7 @@ add: } -; +; modify: { match: