Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
41bc422
Remove redundant IsHearingClient gamedata
Vauff Jul 15, 2026
7638baa
Ignore targetname player events in ButtonWatch
Vauff Jul 15, 2026
d61614b
Update actions
Vauff Jul 17, 2026
873f27b
Use lower severity for a common warning log
Vauff Jul 18, 2026
8abdaa8
Update SDK
Vauff Jul 23, 2026
0686a80
Fix unparented beams/lasers hitting infinite loops on spawn
Vauff Jul 26, 2026
c355056
Add custom ConVar whitelist & cfg parser systems (#456)
Vauff Jul 28, 2026
aa203b7
Fix nom player limits only being checked once & add player count cache
Vauff Jul 28, 2026
6f69439
Propagate all HTTP API error states
Vauff Aug 3, 2026
0c23015
Add optional timeout config to HTTP API
Vauff Aug 3, 2026
963afd9
Add CCheckTransmitInfoExtended
Vauff Aug 3, 2026
df6bc9e
Fix hide crash (missing client entity)
Vauff Aug 9, 2026
7f36a2c
Remove explicit weapon hiding
Vauff Aug 11, 2026
5046892
Fix user prefs not loading when a player authenticates early
Vauff Aug 13, 2026
e1e3c2f
Replace some gamedata lookups with VScript function bindings (#459)
komashchenko Aug 16, 2026
989c923
Migrate to build containers & start SteamRT4 builds
Vauff Aug 16, 2026
58d9c78
Update to VS 2026
Vauff Aug 19, 2026
e5a3557
Fix several exploits in chat command processing
Vauff Aug 19, 2026
3622854
EntWatch clantag colours (#462)
tilgep Aug 20, 2026
ac326a9
Update signatures for 2026-08-24 CS2 update
Vauff Aug 25, 2026
10afbd6
Add AI usage guidelines
Vauff Aug 25, 2026
9808241
Fix entwatch score reset bug
tilgep Aug 25, 2026
35445bc
Idle manager updates
tilgep Aug 25, 2026
f5a95f6
Add low population features to Map Vote System (#461)
Faramour Aug 25, 2026
37aa587
Tidying
Vauff Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 24 additions & 27 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,57 +22,49 @@ on:

jobs:
build:
name: Build
name: ${{ matrix.name }} Build
runs-on: ${{ matrix.os }}
env:
HL2SDKCS2: ${{ github.workspace }}/CS2Fixes/sdk
container: ${{ matrix.container }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
include:
- os: windows-latest
name: Windows
- os: ubuntu-latest
container: registry.gitlab.steamos.cloud/steamrt/sniper/sdk
name: SteamRT3
container: ghcr.io/source2ze/build-containers:steamrt3
- os: ubuntu-latest
name: SteamRT4
container: ghcr.io/source2ze/build-containers:steamrt4
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v7
with:
path: CS2Fixes
submodules: recursive
fetch-depth: 0

- name: Checkout Metamod
uses: actions/checkout@v4
uses: actions/checkout@v7
with:
repository: alliedmodders/metamod-source
ref: master
path: mmsource-2.0
submodules: recursive

- name: Checkout AMBuild
uses: actions/checkout@v4
if: matrix.os == 'windows-latest'
uses: actions/checkout@v7
with:
repository: alliedmodders/ambuild
path: ambuild

- name: Install AMBuild
shell: bash
run: |
if [ "$RUNNER_OS" == "Windows" ]; then
pip install setuptools
fi
cd ambuild && python setup.py install && cd ..

- name: Install Clang 21
if: matrix.os == 'ubuntu-latest'
run: |
echo "deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-21 main" >> /etc/apt/sources.list.d/llvm.list
echo "deb-src http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-21 main" >> /etc/apt/sources.list.d/llvm.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
apt update && apt install -y clang-21
ln -sf /usr/bin/clang-21 /usr/bin/clang && ln -sf /usr/bin/clang++-21 /usr/bin/clang++
if: matrix.os == 'windows-latest'
run: pip install setuptools && cd ambuild && python setup.py install && cd ..

- name: Build
working-directory: CS2Fixes
Expand All @@ -83,9 +75,9 @@ jobs:
ambuild

- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: ${{ runner.os }}
name: ${{ matrix.name }}
path: CS2Fixes/build/package/cs2

release:
Expand All @@ -96,15 +88,20 @@ jobs:

steps:
- name: Download artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8

- name: Package
run: |
version=`echo $GITHUB_REF | sed "s/refs\/tags\///"`
ls -Rall
if [ -d "./Linux/" ]; then
cd ./Linux/
tar -czf ../${{ github.event.repository.name }}-${version}-linux.tar.gz *
if [ -d "./SteamRT3/" ]; then
cd ./SteamRT3/
tar -czf ../${{ github.event.repository.name }}-${version}-steamrt3.tar.gz *
cd -
fi
if [ -d "./SteamRT4/" ]; then
cd ./SteamRT4/
tar -czf ../${{ github.event.repository.name }}-${version}-steamrt4.tar.gz *
cd -
fi
if [ -d "./Windows/" ]; then
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
- Your primary job is to assist human developers, if making an upstream contribution then [CONTRIBUTING.md](CONTRIBUTING.md) must be followed
- For compilation tests, run `docker compose up` in the project directory
3 changes: 3 additions & 0 deletions AMBuilder
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ for sdk_target in MMSPlugin.sdk_targets:
'src/utils/weapon.cpp',
'src/utils/hud_manager.cpp',
'src/utils/utils.cpp',
'src/utils/vscript_function.cpp',
'src/cs2_sdk/entity/services.cpp',
'src/cs2_sdk/schema.cpp',
'src/ctimer.cpp',
Expand All @@ -70,6 +71,8 @@ for sdk_target in MMSPlugin.sdk_targets:
'src/buttonwatch.cpp',
'src/topdefender.cpp',
'src/idlemanager.cpp',
'src/cvarwhitelist.cpp',
'src/cfgparser.cpp',
'src/mapmigrations.cpp',
'sdk/entity2/entitysystem.cpp',
'sdk/entity2/entityidentity.cpp',
Expand Down
9 changes: 9 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Use of AI Tools

**Human Accountability:** A human contributor will be held fully responsible for the code, documentation, description, and (to a reasonable extent) testing of a pull request. They must review all AI output.

**Disclosure Requirements:** Substantial use of AI tools must be disclosed in pull request descriptions.

**No Autonomous Agents:** AI tools are barred from autonomously opening pull requests, pushing commits, and making comments.

**Quality Over Volume:** Maintainers have explicit permission to close low-evidence or generic AI dumps without deep review.
16 changes: 12 additions & 4 deletions CS2Fixes.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset>v145</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset>v145</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset>v145</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset>v145</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
Expand Down Expand Up @@ -213,6 +213,8 @@
<ClCompile Include="src\zombiereborn.cpp" />
<ClCompile Include="src\entitylistener.cpp" />
<ClCompile Include="src\leader.cpp" />
<ClCompile Include="src\cvarwhitelist.cpp" />
<ClCompile Include="src\cfgparser.cpp" />
<ClCompile Include="src\mapmigrations.cpp" />
<ClCompile Include="sdk\tier1\convar.cpp" />
<ClCompile Include="src\utils\entity.cpp" />
Expand All @@ -221,6 +223,7 @@
<ClCompile Include="src\utils\weapon.cpp" />
<ClCompile Include="src\utils\hud_manager.cpp" />
<ClCompile Include="src\utils\utils.cpp" />
<ClCompile Include="src\utils\vscript_function.cpp" />
<ClCompile Include="src\cs2_sdk\entity\services.cpp" />
</ItemGroup>
<ItemGroup>
Expand All @@ -232,6 +235,7 @@
<ClInclude Include="src\cs2_sdk\entity\cbasebutton.h" />
<ClInclude Include="src\cs2_sdk\entity\cbaseentity.h" />
<ClInclude Include="src\cs2_sdk\entity\cbasemodelentity.h" />
<ClInclude Include="src\cs2_sdk\entity\cbeam.h" />
<ClInclude Include="src\cs2_sdk\entity\cbaseplayercontroller.h" />
<ClInclude Include="src\cs2_sdk\entity\cbaseplayerpawn.h" />
<ClInclude Include="src\cs2_sdk\entity\cbasetoggle.h" />
Expand Down Expand Up @@ -262,6 +266,7 @@
<ClInclude Include="src\cs2_sdk\entity\cpointorient.h" />
<ClInclude Include="src\cs2_sdk\schema.h" />
<ClInclude Include="src\cs2_sdk\entityio.h" />
<ClInclude Include="src\cs2_sdk\cchecktransmitinfo.h" />
<ClInclude Include="src\cdetour.h" />
<ClInclude Include="src\ctimer.h" />
<ClInclude Include="src\customio.h" />
Expand Down Expand Up @@ -290,10 +295,13 @@
<ClInclude Include="src\zombiereborn.h" />
<ClInclude Include="src\entitylistener.h" />
<ClInclude Include="src\leader.h" />
<ClInclude Include="src\cvarwhitelist.h" />
<ClInclude Include="src\cfgparser.h" />
<ClCompile Include="src\mapmigrations.h" />
<ClInclude Include="src\utils\entity.h" />
<ClInclude Include="src\utils\module.h" />
<ClInclude Include="src\utils\plat.h" />
<ClInclude Include="src\utils\vscript_function.h" />
<ClInclude Include="src\utils\virtual.h" />
<ClInclude Include="src\cs2_sdk\netmessages.h" />
<ClInclude Include="src\utils\weapon.h" />
Expand Down
24 changes: 24 additions & 0 deletions CS2Fixes.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@
<ClCompile Include="src\entwatch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\cvarwhitelist.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\cfgparser.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\utils\weapon.cpp">
<Filter>Source Files\utils</Filter>
</ClCompile>
Expand All @@ -188,6 +194,9 @@
<ClCompile Include="src\utils\utils.cpp">
<Filter>Source Files\utils</Filter>
</ClCompile>
<ClCompile Include="src\utils\vscript_function.cpp">
<Filter>Source Files\utils</Filter>
</ClCompile>
<ClCompile Include="src\cs2_sdk\entity\services.cpp">
<Filter>Source Files\cs2_sdk\entity</Filter>
</ClCompile>
Expand Down Expand Up @@ -217,6 +226,9 @@
<ClInclude Include="src\utils\virtual.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\utils\vscript_function.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\cs2_sdk\schema.h">
<Filter>Header Files\cs2_sdk</Filter>
</ClInclude>
Expand Down Expand Up @@ -244,6 +256,9 @@
<ClInclude Include="src\cs2_sdk\entity\cbasemodelentity.h">
<Filter>Header Files\cs2_sdk\entity</Filter>
</ClInclude>
<ClInclude Include="src\cs2_sdk\entity\cbeam.h">
<Filter>Header Files\cs2_sdk\entity</Filter>
</ClInclude>
<ClInclude Include="src\cs2fixes.h">
<Filter>Header Files</Filter>
</ClInclude>
Expand Down Expand Up @@ -388,9 +403,18 @@
<ClInclude Include="src\cs2_sdk\netmessages.h">
<Filter>Header Files\cs2_sdk</Filter>
</ClInclude>
<ClInclude Include="src\cs2_sdk\cchecktransmitinfo.h">
<Filter>Header Files\cs2_sdk</Filter>
</ClInclude>
<ClInclude Include="src\entwatch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\cvarwhitelist.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\cfgparser.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\cs2_sdk\entity\cpointworldtext.h">
<Filter>Header Files\cs2_sdk\entity</Filter>
</ClInclude>
Expand Down
9 changes: 1 addition & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
FROM registry.gitlab.steamos.cloud/steamrt/sniper/sdk
FROM ghcr.io/source2ze/build-containers:steamrt3

WORKDIR /app

RUN echo "deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-21 main" >> /etc/apt/sources.list.d/llvm.list
RUN echo "deb-src http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-21 main" >> /etc/apt/sources.list.d/llvm.list
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
RUN apt update && apt install -y clang-21
RUN ln -sf /usr/bin/clang-21 /usr/bin/clang && ln -sf /usr/bin/clang++-21 /usr/bin/clang++
RUN git clone https://github.com/alliedmodders/ambuild
RUN cd ambuild && python setup.py install && cd ..
RUN git clone https://github.com/alliedmodders/metamod-source
RUN git config --global --add safe.directory /app

Expand Down
2 changes: 2 additions & 0 deletions PackageScript
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ for task in MMSPlugin.binaries:
builder.AddCopy(os.path.join('configs', 'admins.jsonc.example'), configs_folder)
builder.AddCopy(os.path.join('configs', 'discordbots.jsonc.example'), configs_folder)
builder.AddCopy(os.path.join('configs', 'maplist.jsonc.example'), configs_folder)
builder.AddCopy(os.path.join('configs', 'cvar_whitelist.jsonc.example'), configs_folder)
builder.AddCopy(os.path.join('cfg', MMSPlugin.metadata['name'], 'cs2fixes.cfg'), cfg_folder)
builder.AddCopy(os.path.join('cfg', MMSPlugin.metadata['name'], 'server.cfg.example'), cfg_folder)
builder.AddCopy(os.path.join('cfg', MMSPlugin.metadata['name'], 'maps', 'de_somemap.cfg'), mapcfg_folder)
builder.AddCopy(os.path.join('configs', 'zr', 'playerclass.jsonc.example'), zr_folder)
builder.AddCopy(os.path.join('configs', 'zr', 'weapons.cfg.example'), zr_folder)
Expand Down
7 changes: 5 additions & 2 deletions cfg/cs2fixes/cs2fixes.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ cs2f_noblock_grenades 0 // Whether to use noblock on grenade projectiles
cs2f_block_team_messages 0 // Whether to block team join messages
cs2f_movement_unlocker_enable 0 // Whether to enable movement unlocker, clients will not predict
cs2f_use_old_push 0 // Whether to use the old CSGO trigger_push behavior (Necessary for surf and other modes that heavily use ported pushes)
cs2f_hide_enable 0 // Whether to enable hide (WARNING: randomly crashes clients since 2023-12-13 CS2 update)
cs2f_hide_enable 0 // Whether to enable hide
cs2f_votemanager_enable 0 // Whether to enable votemanager features such as map vote fix, nominations, RTV and extends
cs2f_trigger_timer_enable 0 // Whether to process countdown messages said by Console (e.g. Hold for 10 seconds) and append the round time where the countdown resolves
cs2f_block_nav_lookup 0 // Whether to block navigation mesh lookup, improves server performance but breaks bot navigation
Expand All @@ -24,6 +24,7 @@ cs2f_prevent_using_players 0 // Whether to prevent +use from hitting players (
cs2f_map_steamids_enable 0 // Whether to make Steam ID's available to maps
cs2f_fix_game_bans 0 // Whether to fix CS2 game bans spreading to all new joining players
cs2f_free_armor 0 // Whether kevlar (1+) and/or helmet (2) are given automatically
cs2f_cvarwhitelist_enable 0 // Whether to enable the custom ConVar whitelist for maps
cs2f_block_particle_msgs 0 // Whether to block CUserMsg_ParticleManager messages to fix lag/crashes, experimental
cs2f_disable_setmodel 0 // Whether to disable SetModel usage from maps (custom input, cs_script function)
cs2f_allow_duck_spam 0 // Whether to allow duck spamming by removing the duck slowdown, clients will only partially predict [0 = disabled, 1 = both teams, 2 = T only, 3 = CT only]
Expand Down Expand Up @@ -59,7 +60,6 @@ cs2f_burn_slowdown 0.6 // The slowdown of each burn damage tick as a multipl
cs2f_burn_interval 0.3 // The interval between burn damage ticks

// Hide settings
cs2f_hide_weapons 0 // Whether to hide weapons along with their holders
cs2f_hide_distance_default 250 // The default distance for hide
cs2f_hide_distance_max 2000 // The max distance for hide
cs2f_hide_teammates_only 0 // Whether to hide teammates only
Expand Down Expand Up @@ -98,6 +98,7 @@ cs2f_vote_maps_cooldown 6.0 // Default number of hours until a map can be pla
cs2f_vote_maps_cooldown_rng 0.0 // Randomness range in both directions to apply to map cooldowns
cs2f_vote_max_nominations 10 // Number of nominations to include per vote, out of a maximum of 10
cs2f_vote_max_maps 10 // Number of total maps to include per vote, including nominations, out of a maximum of 10
cs2f_vote_bypass_cd_max_count 0 // Maximum amount of players allowed to enable bypassing map cooldowns

// User preferences settings
cs2f_user_prefs_api "" // User Preferences REST API endpoint
Expand Down Expand Up @@ -160,6 +161,8 @@ cs2f_enable_button_watch 0 // INCOMPATIBLE WITH CS#. Whether to enable button
entwatch_enable 0 // INCOMPATIBLE WITH CS#. Whether to enable EntWatch features
entwatch_auto_filter 1 // Whether to automatically block non-item holders from triggering uses
entwatch_clantag 1 // Whether to set item holder's clantag and set 9999 score
entwatch_clantag_colour_mode 1 // Whether to set item clantag colours (0=No colour, 1=Use item colour, 2=Use entwatch_clantag_colour value)
entwatch_clantag_colour "FFFFFF" // Hex colour (RRGGBB) to use if entwatch_clantag_colour_mode 2
entwatch_hud 1 // Whether to enable the EntWatch hud and related commands
entwatch_score 9999 // Score to give item holders (0 = dont change score at all) Requires entwatch_clantag 1
entwatch_glow 1000 // Distance that dropped item weapon glow will be visible (0 = glow disabled)
Expand Down
3 changes: 3 additions & 0 deletions cfg/cs2fixes/server.cfg.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// This config is executed every map start like cfg/server.cfg, but fixes a bug for properly bypassing the ConVar whitelist
// Like exec, use exec_custom to execute another cfg through this custom cfg parser:
// exec_custom gamemode_casual_custom
Loading