教程

教程来源Azure GPT4.1,以及之前使用Ubuntu搭建cs2server的经验

流程

steamcmd download cs2server

依次输入,下载cs2server版本(其实游戏本体就包含一个cs2server,具体见:https://www.youtube.com/watch?v=1ZrEn0CiMi4,这样只为了好管理,但花费了额外的空间)

cd E:\cs2ServerProject\steamcmd
./steamcmd.exe
force_install_dir E:\cs2server#cs2server的下载地址
login anonymous
app_update 730 validate
#下载时间比较久,如果中断,需要再次进入steamcmd中从force_install_dir开始再重新输入一遍继续下载
quit

steamcmdsteamcmd.png

下载完成

cs2server_install_sccuesscs2server_install_sccuess.png

Test cs2server

Windows cmd/powershell

>cd E:\cs2server\game\bin\win64
>./cs2.exe -dedicated +map de_dust2 +maxplayers 20 +game_type 0 +game_mode 1 -usercon -nographics

test_cs2servertest_cs2server.png

打开客户端游戏控制台输入

connect 127.0.0.1

cs2服务器搭建完毕

weaponPaint

下载Windows版本前置依赖以及weaponPaint本体,下载链接和简介如下

weaponPaint_and_dependencyweaponPaint_and_dependency.png

meta:https://www.metamodsource.net/downloads.php?branch=dev (choose windows version)

cs2sharp:CounterStrikeSharp

weaponPaint_dependency:

weaponPaint:https://github.com/Nereziel/cs2-WeaponPaints

  • WeaponPaints
  • WeaponPaints-Website

简述一下 关系:meta是cs2sharp的前置依赖,cs2sharp是所有插件的前置依赖,weaponpaint插件的前置依赖还有插件PlayerSettingsCS2,AnyBaseLibCS2,MenuManagerCS2(全都出自作者:NickFox007 (Nick Fox) · GitHub

具体解释:CS2服务器 - 满十&跑图&道具练习(Linux MatchZy) - 哔哩哔哩

How to use meta and cs2Sharp

metaWindows版本压缩包,移动到csgo文件夹,eg:E:\cs2server\game\csgo,然后“提取到当前位置”

unZIPunZIP.png

在gameinfo.gi文件中添加路径:Game ./addons/metamod,至此meta配置完成

Test meta

启动cs2server后在控制台输入meta

test_metatest_meta.png

cs2sharp

同样:CounterStrikeSharp移动到csgo文件夹,eg:E:\cs2server\game\csgo,然后“提取到当前位置”

启动cs2server,在控制台输入meta list,查看MetaMod已加载的所有插件

test_cs2sharptest_cs2sharp.png

至此meta和cs2sharp配置完成!

Add plug-in WeaponPaints

本小结配置基于GitHub - Nereziel/cs2-WeaponPaints

先要配置前置依赖,同样PlayerSettingsAnyBaseLibCS2MenuManagerCS2移动到csgo文件夹,eg:E:\cs2server\game\csgo,然后“提取到当前位置”

启动cs2server在控制台中输入

meta list

css_plugins list

test_dependency_pluginstest_dependency_plugins.png

AnyBaseLibCS2在E:\cs2server\game\csgo\addons\counterstrikesharp\shared\AnyBaseLib中,weaponpaints依赖插件完成

WeaponPaints config

WeaponPaints中的WeaponPaints.zip复制到E:\cs2server\game\csgo\addons\counterstrikesharp\plugins,解压“提取到当前位置”

(再次运行cs2sharp,weaponpaints会自动创建addons/counterstrikesharp/configs/plugins/WeaponPaints/WeaponPaints.json和csgo/gamedata/weaponpaints.json,这里手动创建是不对的)

addons/counterstrikesharp/configs/plugins/文件夹创建WeaponPaints/WeaponPaints.json

touch_weaponpainttouch_weaponpaint.png

修改addons/counterstrikesharp/configs/plugins/WeaponPaints/WeaponPaints.json

{
  "ConfigVersion": 10,
  "SkinsLanguage": "zh-CN",
  "DatabaseHost": "数据库IP地址",
  "DatabasePort": 3306,
  "DatabaseUser": "数据库用户名",
  "DatabasePassword": "数据库密码",
  "DatabaseName": "数据库名",
  "CmdRefreshCooldownSeconds": 3,
  "Website": "weaponpaints网址",
  "Additional": {
    "KnifeEnabled": true,
    "GloveEnabled": true,
    "MusicEnabled": true,
    "AgentEnabled": true,
    "SkinEnabled": true,
    "PinsEnabled": true,
    "CommandWpEnabled": true,
    "CommandKillEnabled": true,
    "CommandKnife": [
      "knife"
    ],
    "CommandMusic": [
      "music"
    ],
    "CommandPin": [
      "pin", "pins", "coin", "coins"
    ],
    "CommandGlove": [
      "gloves"
    ],
    "CommandAgent": [
      "agents"
    ],
    "CommandStattrak": [
      "stattrak", "st"
    ],
    "CommandSkin": [
      "ws"
    ],
    "CommandSkinSelection": [
      "skins"
    ],
    "CommandRefresh": [
      "wp"
    ],
    "CommandKill": [
      "kill"
    ],
    "GiveRandomKnife": false,
    "GiveRandomSkin": false,
    "ShowSkinImage": true
  },
  "MenuType": "selectable"
}
  • In addons/counterstrikesharp/configs/core.json set FollowCS2ServerGuidelines to false
  • 将core.json中字段FollowCS2ServerGuidelines改成false,与后文Troubleshooting有关

需要配置MySQL数据库,教程链接:https://www.q2019.com/2025/04/18/3571/

补充:csgo/gamedata/weaponpaints.json

{
    "ChangeSubclass": {
        "signatures": {
            "library": "server",
            "windows": "48 89 6C 24 ? 56 48 83 EC ? 48 8B EA 48 8B F1 E8 ? ? ? ? 84 C0 0F 84",
            "linux": "55 48 89 E5 41 57 41 56 41 55 49 89 F5 41 54 49 89 FC 53 48 81 EC A8 00 00 00"
        }
    },
    "CAttributeList_SetOrAddAttributeValueByName": {
        "signatures": {
            "library": "server",
            "windows": "40 53 41 56 41 57 48 81 EC 90 00 00 00 0F 29 74 24 70",
            "linux": "55 48 89 E5 41 57 41 56 49 89 FE 41 55 41 54 49 89 F4 53 48 83 EC 78"
        }
    },
    "CBaseModelEntity_SetBodygroup": {
        "signatures": {
            "library": "server",
            "windows": "48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 41 8B F8 48 8B F2 48 8B D9 E8 ? ? ? ?",
            "linux": "55 48 89 E5 41 56 49 89 F6 41 55 41 89 D5 41 54 49 89 FC 48 83 EC 08"
        }
    }
}
WeaponPaints-Website config

参考: https://b23.tv/58nJOVB

下载php >= 7.4,PHP For Windows: Binaries and sources Releases

选择:php-8.4.7-Win32-vs17-x86.zip

  • 任选一种配置(推荐用生产环境),将 php.ini-production 复制一份并重命名为 php.ini
  • 搜索并取消注释以下扩展(去掉前面的分号;)

    extension_dir = "D:\php-8.4.7\php-8.4.7-Win32-vs17-x86\ext"
    extension=curl
    extension=pdo_mysql

    使用

    php -m

    查看扩展文件

修改class/config.php

<?php
define('SKIN_LANGUAGE', 'skins_zh-CN');

define('DB_HOST', '');
define('DB_PORT', '3306');
define('DB_NAME', '');
define('DB_USER', '');
define('DB_PASS', '');

define('WEB_STYLE_DARK', true);

define('STEAM_API_KEY', '随便填一个例如:5EBB0CA931C7347B91E875AC531799F1');
define('STEAM_DOMAIN_NAME', '127.0.0.1');//如果让他人访问使用内网环境地址
//define('STEAM_DOMAIN_NAME', '192.168.137.1');
define('STEAM_LOGOUT_PAGE', '');
define('STEAM_LOGIN_PAGE', '');

在WeaponPaints-Website文件路径下输入

php -S localhost:27075

php_startphp_start.png

访问http://localhost:27075

点击登录steam出现

http://192.168.103.27/?login&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fsteamcommunity.com%2Fopenid%2Flogin&openid.claimed_id=https%3A%2F%2Fsteamcommunity.com%2Fopenid%2Fid%2F76561199849146476&openid.identity=https%3A%2F%2Fsteamcommunity.com%2Fopenid%2Fid%2F76561199849146476&openid.return_to=http%3A%2F%2F192.168.103.27%2F%3Flogin&openid.response_nonce=2025-05-13T11%3A13%3A24ZKI%2BjsyGxRYNnhMtN9J5ikOKagbY%3D&openid.assoc_handle=1234567890&openid.signed=signed%2Cop_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle&openid.sig=PRfcuJfwfzLKK1HmmpWRpXtEz20%3D

拒绝访问

修改配置ip,class/config.php和config/WeaponPaints/WeaponPaints.json为内网IP如192.168.31.188

使用命令

php -S 192.168.31.188:80

运行网站

Test WeaponPaints

运行cs2server后报错:

15:25:37 [EROR] (cssharp:PluginManager) Failed to load plugin from E:\cs2server\game\csgo\addons\counterstrikesharp\plugins\WeaponPaints\WeaponPaints.dll
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.TypeInitializationException: The type initializer for 'WeaponPaints.WeaponPaints' threw an exception.
 ---> System.ArgumentException: Method CAttributeList_SetOrAddAttributeValueByName not found in gamedata.json

在cs2sharp gamedata文件夹中gamedata.json找不到CAttributeList_SetOrAddAttributeValueByName

说明cs2sharp版本与cs2服务器不匹配,或者没有gamedata/gamedata.json(由于直接创建没有生成出现的错误)

退回cs2sharp版本到counterstrikesharp-with-runtime-windows-1.0.316.zip后再次启动cs2server

或创建gamedata/gamedata.json,都不行

  • Copy from plugins folder gamedata file weaponpaints.json to folder addons/counterstrikesharp/gamedata/
  • 将文件夹gamedata 中weaponpaints.json的内容复制到addons/counterstrikesharp/gamedata/gamedata.json

成功截图

sccuesssccuess.png

Updata

更新完成cs2server后,gameinfo.gi文件会重置,重新添加Game csgo/addons/metamod路径

gameinfogameinfo.png

Troubleshooting

使用weaponpaints插件不会VAC封禁,不会VAC封禁,不会VAC封禁

可能会GSLT封禁

  • 使用您游戏服务器登录令牌的一个服务器已被封禁。 您的帐户现已被永久禁止管理游戏服务器,并且连接游戏服务器时会产生冷却时间。

GSLT详情:steam GSLT封禁
Snipaste_2025-04-30_12-22-08.png
Snipaste_2025-05-13_23-20-40.png
Snipaste_2025-05-13_23-22-29.png