Создание и настройка собственного сервера Counter-Strike 2 на VPS

Прокомментировать Просмотры: 4

Практически каждый из нас в прошлом проводил уйму времени на кастомных публичных серверах различных итераций Counter-Strike — от классической версии 1.6 до Global Offensive. Всех их объединяла неповторимая атмосфера легкого хаоса, уникальные модификации, живые знакомства и задушевные ночные беседы. Однако с развитием киберспортивной дисциплины культура пабликов отошла на второй план: современное поколение геймеров предпочитает соревновательные матчи на FaceIT или в Премьер-режиме.

Релиз CS2 и последовавший за ним переход на технологичный движок Source 2 существенно усложнили задачу энтузиастам: устаревшие плагины перестали функционировать, а инструментарий для кастомных серверов потребовал полной адаптации. Со временем разработчики освоили создание пользовательского контента под новую итерацию шутера, и публичные серверы вновь стали набирать популярность.

В сегодняшнем материале мы подробно рассмотрим процесс развертывания собственного сервера Counter-Strike 2 на VPS, интеграцию плагинов, конфигурирование арендованной карты и внедрение уникальных визуальных элементов.

Создание своего сервера

Переходим на платформу RUVDS и подбираем дата-центр, географически расположенный ближе к вашей аудитории, поскольку стабильно низкий пинг — залог комфортного игрового процесса.

Официальные минимальные системные требования зафиксированы на портале Valve Developer Community:

  • Оперативная память: 2 ГБ.

  • Дисковое пространство: 65 ГБ.

  • Процессор: x86-64-v2 (с обязательной поддержкой инструкций POPCNT/SSE4.2).

  • ОС: Linux (необходима glibc 2.31+, что соответствует Ubuntu 20.04+, Debian 11+ и более поздним дистрибутивам) либо Windows 10/11.

Стоит учитывать, что 2 ГБ ОЗУ — это абсолютный минимум, которого едва хватит для запуска, но не для одновременного присутствия нескольких игроков. Рекомендуется закладывать 4–8 ГБ памяти. К выбору процессора также стоит подойти ответственно: архитектура Source 2 крайне чувствительна к тактовой частоте CPU.

Подключаемся к удаленному серверу по протоколу SSH и заводим изолированный пользовательский аккаунт исключительно под нужды игрового процесса. Подобная изоляция минимизирует риски безопасности: даже при компрометации какого-либо плагина злоумышленники не получат полный доступ к системе.

sudo useradd -m -s /bin/bash steam
sudo passwd steam

Перед инсталляцией SteamCMD инсталлируем базовые пакеты от имени суперпользователя. Поскольку Ubuntu по умолчанию функционирует в 64-битной среде, а утилита SteamCMD и некоторые элементы Source 2 по-прежнему завязаны на 32-битный код, предварительно активируем архитектуру i386:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install wget curl nano software-properties-common lib32gcc-s1 lib32stdc++6 -y

По завершении установки менеджер пакетов может запросить подтверждение перезапуска системных служб — в этом случае выбираем вариант «none of the above».

Выполняем переход на учетную запись steam командой su - steam и скачиваем дистрибутив SteamCMD:

mkdir -p ~/steamcmd
cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

Инициируем запуск исполняемого файла ./steamcmd.sh. В открывшейся консоли задаем целевую директорию, проходим авторизацию в анонимном режиме и инициируем загрузку файлов CS2 (цифра 730 соответствует системному AppID шутера в каталоге Steam).

force_install_dir /home/steam/cs2-server
login anonymous
app_update 730 validate
quit

Запуск

Для предотвращения остановки сервера при обрыве SSH-соединения и обеспечения постоянного контроля над консолью задействуем мультиэкранный менеджер tmux. Инсталлируем его командой sudo apt install tmux -y, после чего создаем обособленную сессию под учетной записью steam:

su - steam
tmux new -s cs2

Запускаем серверное окружение. Во избежание типичной ошибки «segmentation fault» в Steamworks SDK при первом старте предварительно прописываем переменную окружения LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/home/steam/cs2-server/game/bin/linuxsteamrt64:/home/steam/cs2-server/game/csgo/bin/linuxsteamrt64:$LD_LIBRARY_PATH
cd /home/steam/cs2-server/game/bin/linuxsteamrt64/
./cs2 -dedicated +map de_mirage

Генерируем символическую ссылку на библиотеку steamclient.so (по умолчанию она расположена в каталоге /home/steam/steamcmd/linux64).

mkdir -p ~/.steam/sdk64
ln -sf /home/steam/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

При корректном выполнении всех шагов в консоли отобразятся отчеты об инициализации сетевых протоколов и успешном старте сессии:

  • SV: VAC secure mode is activated

  • GC Connection established for server version …

Теперь к созданному узлу можно присоединиться прямо из игры, введя в консоль разработчика команду connect IP_ВАШЕГО_VPS.

На текущий момент у нас функционирует стандартная конфигурация со стандартным ботом. Смена локации осуществляется через tmux-консоль командой map ИМЯ_КАРТЫ либо host_workshop_map ID_ИЗ_МАСТЕРСКОЙ для контента из Steam Workshop. Для настройки игровых параметров (длительности раунда, гравитации, чит-режимов) сформируем персональный конфигурационный файл:

cd /home/steam/cs2-server/game/csgo/cfg/
nano server.cfg

В качестве демонстрации мы задействовали карту de_dust2 и интегрировали

Сохраняем изменения и активируем их в сеансе tmux командой exec server.cfg.

Варианты монетизации

По мере роста популярности проекта владелец может задуматься о монетизации. Самый распространенный путь — интеграция рекламы в виде регулярной рассылки текстовых уведомлений в чат либо размещение брендированных баннеров непосредственно на геометрии карт.

Рассылка в чате

Для реализации автоматических объявлений установим связку из фреймворков Metamod и CounterStrikeSharp (скачиваем релиз с маркировкой with-runtime). Распаковываем загруженные архивы в папку addons, расположенную по пути /game/csgo. Затем открываем файл game/csgo/gameinfo.gi и внутри структуры SearchPath прописываем строку Game csgo/addons/metamod прямо над директивой Game csgo.

Сохраняем файл и проверяем работоспособность через консоль сервера (команды meta version и meta list). В выводимом перечне должен отобразиться CounterStrikeSharp. Обязательно зафиксируйте его версию — она понадобится при компиляции собственных скриптов:

Теперь переходим к загрузке кастомного плагина. Для этого направляемся в директорию /game/csgo/addons/counterstrikesharp/plugins и создаем отдельную папку под наш модуль (помните правило: каждый плагин должен содержаться в изолированном каталоге с идентичным наименованием).

Исходный код можно написать непосредственно на сервере, однако на практике удобнее задействовать локальную среду разработки Visual Studio. Создаем новый проект .NET и через менеджер NuGet подключаем пакет CounterStrikeSharp.API, номер версии которого строго совпадает с установленным на игровом сервере фреймворком (в нашем случае это версия 1.0.373, совместимая с платформой net10.0).

Прописываем простейшую логику вывода текстового сообщения в чат по таймеру (интервал функции AddTimer задается в секундах):

using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Timers;
namespace HabrAnnouncer;
public class HabrAnnouncer : BasePlugin
{
public override string ModuleName => "Habr Announcer";
public override string ModuleVersion => "1.0.0";
public override void Load(bool hotReload)
{
AddTimer(10.0f, () =>
{
Server.PrintToChatAll(" Привет, SE7EN!");
}, TimerFlags.REPEAT);
}
}

Сверяем параметры в конфигурационном файле проекта .csproj:



net10.0
enable
enable





Компилируем проект релизной сборкой при помощи команды dotnet publish -c Release. Полученные файлы из директории \bin\Release\net10.0 переносим на удаленный сервер в ранее созданную папку плагина:

Возвращаемся в игровую консоль, подгружаем модуль командой css_plugins load НАЗВАНИЕ_ПЛАГИНА и убеждаемся в его активации через css_plugins list.

Заходим в матч и наблюдаем успешный результат нашей работы:

Баннер на карте

Открываем локальный каталог на ПК по пути content\csgo_addons и формируем структуру директорий addon1\materials. Перемещаем туда подготовленное графическое изображение и создаем текстовый файл с расширением .vmat.

Заполняем его следующим содержимым:

Layer0
{
    shader "csgo_complex.vfx"
    TextureColor "materials/image.png"  //укажите имя вашего изображения
}

Далее графический файл формата .png необходимо конвертировать в игровой формат .vtex_c с помощью штатной утилиты resourcecompiler, поставляемой вместе с клиентом CS2 (она находится в папке game\bin\win64).

Запускаем командную строку, переходим в указанную директорию и вводим команду: resourcecompiler.exe -i "абсолютный_путь_к_файлу.vmat". В нашем случае компилятор выдал ошибку при обработке файла из Photoshop, поэтому пришлось пересохранить картинку через стандартный Paint. Готовые ресурсы будут ожидать нас по адресу game\csgo_addons\addon1\materials.

Существует два теоретических метода внедрения рекламного баннера: подмена стандартных текстур по аналогичному пути либо полная декомпиляция локации с последующей правкой в официальном редакторе Valve Hammer Editor.

Как вариант, можно упаковать скомпилированные файлы материалов в персональный .vpk-архив, заставив игровой движок считывать его приоритетнее оригинальных файлов.

Разберем вариант с декомпиляцией. Для этого используем стороннее ПО Source 2 Viewer. Находим в нем скомпилированный файл .vmap_c нужной локации в директории game/csgo/maps/ИМЯ_КАРТЫ.vpk, кликаем правой кнопкой мыши, выбираем пункт Decompile & Export и указываем путь назначения content\csgo_addons\addon1\maps:

Затем переходим в клиент Steam, открываем свойства CS2 и переходим на вкладку «DLC» («Дополнительный контент»).

Инсталлируем компонент Workshop Tools и во вкладке «Общие» задаем параметр запуска, принудительно выводящий диалог выбора режима работы игры.

Запускаем игру в режиме Workshop Tools:

Двойным кликом выбираем созданный ранее проект addon1:

В верхнем правом углу панели Asset Browser щелкаем по значку шестеренки и открываем Hammer Editor:

Внутри редактора через меню File → Open загружаем нашу декомпилированную карту:

В левом нижнем углу кликаем Browse, в строке поиска находим и выбираем наш кастомный материал.

Переключаемся в режим работы с гранями объектов (Faces, горячая клавиша 3) и исследуем карту в поисках оптимальной локации. Зажав клавишу Shift, выделяем нужные грани поверхностей, вызываем контекстное меню правой кнопкой мыши и применяем текстуру через опцию Apply Material.

При некорректном масштабировании или позиционировании текстуры ее легко скорректировать через панель Tool Properties.

По завершении правок выбираем File → Build Map, настраиваем параметры компиляции и жмем Build. Скомпилированная локация сохранится в корневом каталоге аддона. Останется перенести ее на удаленный сервер, прописав в параметрах запуска -addon_name addon1 либо подключив аддон через конфиг, а затем запустить карту консольной командой map addon_de_dust2_d (имя файла зависит от результатов компиляции).

Важно учитывать, что данный метод сопряжен с рисками появления артефактов компиляции, что и произошло в нашем случае:

Подобные проблемы возникают из-за того, что компиляция производилась не по оригинальным исходникам, а по декомпилированному файлу .vmap_c. Утилита Source 2 Viewer предупреждает, что геометрия и скайбоксы могут восстанавливаться с потерями: сетки объединяются по материалам, а мелкие детали исчезают. Как следствие, при повторной сборке сцена воссоздается лишь приблизительно, что приводит к черным текстурам, искаженному освещению и прочим дефектам.

Итог

Таким образом создаются собственные игровые площадки и формируются комьюнити вокруг Counter-Strike 2. Развитие проекта не ограничивается рамками сервера: создание Discord-каналов, проведение стримов, публикация хайлайтов в TikTok и YouTube, анонсы ивентов в соцсетях — все это укрепляет игровое сообщество. В конце концов, игроки возвращаются не ради конкретных карт, а за уникальной атмосферой.

Вы можете лично протестировать наш сервер, введя в консоль разработчика CS2 команду connect 191.44.37.29 (сервер останется доступен в течение некоторого времени после публикации материала).

© 2026 ООО «МТ ФИНАНС»

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов