Counter-Strike 1.6 (hlds-сервер)
Установка hlds-сервера + WEB-статистики.
Живой сервер тут - http://65.108.82.45/ps/ , steam.
Для кого
В первую очередь для себя.
В нулевых общежитие института активно погрузилось в Quake3, StarCraft BW и CS.1.6. Сейчас мне 40+, но игра по прежнему неплохо чистит мозг после работы.
Зачем
Public internet предлагает сотни серверов, но большинство из них перегружено диким количеством плагинов. Бесконечные VIP-привелегии, бесконечные деньги, какие-то новые сущности неведомые в оригинальной версии. Valve создал Вселенную, люди породили франкенштейна.
Захотелось свой чистый сервер от Steam. Пришло понимание, что все инструкции на большинстве форумов сводятся к покупке готового хостинга с готовой сборкой какой-то версии сервера с предустановленными какими-то плагинами.
Так не годится. Собираем свое, никому не платим.
Как все устроено
Для установки сервера Valve community предлагает SteamCMD. Это даст нам оригинальный сервер с официальным VAC.
Стоит отметить, что сейчас большое распостранение получила неофициальная сборка RE-HLDS. Утверждается, что Valve давно не уделяет должное внимание уязвимостям и производительности своего сервера. Новая сборка от энтузиастов делает сервер в 100500 раз круче и добавляет возможность использовать самые новомодные плагины.
Плагины
Сервер без плагинов - печальное зрелище. Плагинам быть!
Чтобы добраться до ядра CS не пересобирая его, был придуман проект AMX Mod X. Он дает возможность писать скрипты в текстовых .sma-файлах, компилировать их в бинарные .amxx-файлы.
В интернете сотни уже готовых amxx-плагинов. Задача сводится к единственному действию - подкинуть файл в нужную директорию совего сервера и все.
amxx в свою очередь общается с ядром CS через посредника metamod. Его последнюю версию я брал, с сайта AMX Mod X, см. Downloads.
Берем оригинал
Я выбрал оригинальный сервер.
Вылезла только одна проблема - не запускается metamod-модуль dproto.
Это неведомый черный ящик с неведомыми исходниками, дающий возможность подключаться к нашему серверу No-Steam клиентам. Нормальная игра, купленная в Steam за 259 рублей, использует протокол p48, а подвальная ломаная сборка работает на протоколе p47.
Да да, очень многие дядьки качают откуда попало неведомый бинарник игры, бесплатно ведь! Запускают это на своем компьютере!
В нашем случае, сервер не сможет обслужить No-Steam клиентов. Поразительно, но таких игроков больше половины по моему опыту.
На смену dproto сейчас пришел новомодный модуль reunion, но он работает только на RE-HLDS-сервере.
Под RE-HLDS идут уже другие плагины, работают через другой RE-API. Не ставил, не пробовал.
Установка
У меня есть свой VPS в Финляндии, на нем крутится OpenVPN-сервер. Полезная теперь штука, ну вы понимаете...
Вот на нем (Debian11) и раскатаем наш HLDS-сервер. Туда же подкинем WEB-сервер, чтобы рисовать статистику игроков.
Весь процесс установки расписан у меня на GitHub.
Люблю Docker за изоляцию процессов от хостовой машины, на нем и соберем.
Нам потребуются контейнеры:
nginx - веб страничка
php-fpm - статистика PsychoStats это древнючий код на PHP 5.4
mysql - статистике нужна БД, да и плагины CS некоторые тоже хотят БД
hlds16 - наш HLDS-сервер
Если в контейнерах какие-то файлы требуют частой правки, такие директории я подключаю к хостовой машине в папочку ~/share. Удобно потом расшарить эту папку и со своей домашней Windows-машины просто подкидывать нужные изменения напрямую.
Правда, в итоге, я чаще использовал VSCode-плагин SFTP: тыкнуть "upload" мне оказалось удобней чем водить мышкой по windows explorer-окнам.
Пошаговая инструкция на GitHub, ниже просто список действий, для понимания общей картины.
Поднимаем контейнеры
Закидываем содержимое директории ~/share на VPS-сервер. На это содержимое будут опираться контейнеры, там конфиги для nginx, Dockerfile для сборки контейнеров, конфиги и плагины HLDS, ...
Собираем свою docker image hlds16:latest, см. Dockerfile.
Поднимаем временный docker container, забираем из него к себе на хостовую машину директорию addons (сюда будем накидывать необходимые amxx-плагины в дальнейшем)
Поднимаем рабочий docker container hlds16 с привязкой к директории addons. Так же привязываем к хостовой машине директорию logs (логи потребуются страничке статистики).
Поднимаем docker container mysql с привязкой к директории /mnt/mysql (там можно складировать бэкапы БД).
Поднимаем docker container nginx с привязкой к директории /mnt/www (туда будем накидывать HTML/PHP файлы)
Собираем свою docker image php-fpm-my:54, см. Dockerfile.
Поднимаем docker container php-fpm-54 с привязкой к директории logs от контейнера hlds16, и /mnt/www от контейнера nginx.
С этого места у нас работает hlds + nginx + php-fpm + mysql.
Инициализируем сайт статистики
Распаковываем из zip-архива ~/cstrike необходимое в /mnt/www/ps. Теперь страничка доступна по URL http://65.108.82.45/ps/
Подменяем несколько кривых PHP-скриптов на исправленные, см. ~/cstrike/ps
Инсталируем сайт - http://65.108.82.45/ps/install/
Рассказываем сайту где смотреть логи http://65.108.82.45/ps/admin/logsources_edit.php - вписываем /mnt/cstrike/logs
Распаковываем из zip-архива ~/cstrike perl-скрипты парсера логов в /mnt/www/ps.stat_parser, вписываем атрибуты доступа к БД в /mnt/www/ps/stat_parser/stats.pl. Запускаем парсер в cron.
Доводим под себя сервер HLDS
Правим под себя server.cfg, motd.txt в директории ~/cstrike, закидываем в контейнер hlds16
Накидываем нужные плагины из ~/cstrike или из интернета в директорию addons
Включаем плагины в plugins.ini. Рестартуем контейнер hlds16
Итог
Инсталяция HLDS-сервера + Сайта статистики займет минут 15.
Доводка конфигов + выбор нужных плагинов (+ их настройка) займет несколько дней. Я выбрал только самые необходимые amxmodx:
Blue_Fade.sma - фоновая вспышка при поражении противника
amx_parachute.sma - парашют за $1000
damager.sma - показвает урон от наших выстрелов/гранат
map_chooser.sma - rtv голосование за смену карты
Такую конфигурацию считаю классической, минимально необходимой.
UPDATE
Сервер прожил до марта 2022 года (5 месяцев). Никто его не взломал, не покалечил. Все исправно работало до тех пор, пока не потерял возможность оплачивать VPS-машину на ресурсах Hetzner (привет спецоперации РФ).
Если требуется большой онлайн и раскрутка, лучше выбирать современный RE-HLDS. Располагать необходимо в РФ поближе к совей аудитории. Хельсинки добавляли +25ms задержки, в итоге на сервере играли только европейцы.
Хотим игроков за Уральским хребтом - арендуем VPS в Ебурге. Целевая аудитория Сибирь - разворачиваем в Иркутске/Новосибирске.