RE:NODE

Руководства15 мин чтения

Сервер Counter-Strike 1.6: ReHLDS и AMX Mod X

Как устроен сервер CS 1.6 сегодня: ReHLDS вместо обычного HLDS, важные настройки server.cfg, Metamod, админы AMX Mod X, карты, боты и порты.

1 прочтений

Серверу Counter-Strike 1.6 нужно около 256 МБ памяти, одно ядро процессора, из которого он всё равно использует только один поток, и один UDP-порт. За двадцать лет это не изменилось. Изменилось другое: оригинальным HLDS от Valve почти никто больше не пользуется. Серверы, на которых реально играют, работают на ReHLDS - переписанном движке, - а Metamod поверх него загружает AMX Mod X. Именно этот набор отличает сервер, который ощущается как в 2004 году, от сервера-музея.

В этом руководстве разобрано всё целиком: что такое ReHLDS и ReGameDLL и почему они заменили оригиналы, установка через SteamCMD, все настройки server.cfg, которые стоит менять, Metamod и AMX Mod X, флаги админов и список команд, карты и загрузки, боты и честный разговор про читеров и клиенты без Steam. Установки CS 1.6 на RE:NODE поставляются с уже настроенными ReHLDS, AMX Mod X и Metamod, так что если вы на одной из них, читайте это как объяснение того, что там уже есть.

Что запускает сервер CS 1.6: HLDS, ReHLDS и ReGameDLL#

Оригинальный набор состоит из трёх частей. Движок (hlds_linux с engine_i686.so в Linux, hlds.exe с swds.dll в Windows) управляет миром и сетью. Игровая библиотека (cstrike/dlls/cs.so в Linux, mp.dll в Windows) реализует саму Counter-Strike: меню покупок, бомбу, деньги. А папка мода cstrike/ содержит карты, конфиги и всё, что вы на самом деле будете редактировать.

Первые две части сообщество заменило:

КомпонентОригиналЗаменаЗачем
ДвижокHLDSReHLDSИсправления падений и уязвимостей, лучшая производительность, дополнительные cvar
Игровая библиотекаcs.so / mp.dllReGameDLL_CSИсправлены давние ошибки, зашитое в код поведение вынесено в cvar
Загрузчик плагиновнетMetamod или Metamod-rПозволяет AMX Mod X и другим плагинам подключаться к игре

ReHLDS ставится поверх: вы перезаписываете бинарный файл движка, и всё остальное продолжает работать. С ReGameDLL_CS то же самое для игровой библиотеки, и именно она добавляет большинство новых cvar с mp_, о которых все говорят: режим free-for-all, бесконечные раунды, поведение оружия, которое раньше было зашито в код. По умолчанию ни то, ни другое не меняет саму игру. Обе разработки живут на GitHub, и обе стоит взять: в обычном HLDS уже очень давно не было существенных исправлений, а часть его ошибок можно вызвать удалённо.

Базовая игра ставится через SteamCMD как приложение 90, выделенный сервер Half-Life, причём мод нужно выбрать до запуска обновления:

bash
$ steamcmd +force_install_dir /home/cs16/server +login anonymous \    +app_set_config 90 mod cstrike +app_update 90 validate +quit$ cd /home/cs16/server$ ./hlds_run -game cstrike +ip 0.0.0.0 +port 27015 \    +maxplayers 24 +map de_dust2

С приложением 90 знаменито много возни. SteamCMD часто падает с первого раза с ошибкой подписки или манифеста и срабатывает со второй-третьей одинаковой попытки, а +app_set_config 90 mod cstrike должно стоять раньше +app_update, иначе вы получите deathmatch для Half-Life. GoldSrc - 32-битный движок, поэтому на 64-битной Linux-машине до запуска нужно поставить 32-битную библиотеку C. На хостинге с панелью всё это уже сделано, и вы получаете готовое дерево.

hlds_run - это скрипт-обёртка, которая перезапускает сервер, если он завершился; hlds_linux - сам бинарный файл. В старых руководствах советуют -pingboost со значением 1, 2 или 3, который меняет то, как движок засыпает между кадрами. Это был обходной путь для ядер, которых давно нет, и на ReHLDS его лучше не использовать.

Требования и потребление ресурсов#

КонфигурацияRAMCPUПримечания
12-16 слотов, ваниль плюс AMXX256-512 МБ1 ядроОбычный публичный сервер
24-32 слота, дюжина плагинов512 МБ - 1 ГБ1 ядроЧисло плагинов важнее числа слотов
Zombie Plague, CSDM, Jailbreak на 32 слота1-2 ГБ1 быстрое ядроТяжёлые моды AMXX с состоянием для каждого игрока
Два сервера на одной машинеВдвое большепо 1 ядру на каждыйОдин поток они с пользой не разделят

Сама установка занимает меньше гигабайта. Растёт только добавленное вами содержимое: пользовательские карты, спрайты, звуки и модели, - и именно под них на самом деле нужен диск в тарифе.

В процессоре 1.6 необычна. GoldSrc выполняет всю симуляцию в одном потоке, поэтому число ядер не значит ничего, а тактовая частота значит всё. sys_ticrate задаёт целевую частоту кадров сервера, и общепринятое значение 1000 действительно тратит процессорное время ради более плавного движения и регистрации попаданий. На тарифе, где вы покупаете лишь долю ядра, sys_ticrate 500 - разумный компромисс, разницу почти не почувствовать; а вот sys_ticrate 100 почувствуют, и игроки заметят.

По современным меркам сетевой трафик крошечный: полный сервер на 32 слота - это несколько сотен килобайт в секунду. Важны задержка и джиттер, потому что компенсация лага в 1.6 хорошая, но не волшебная, а сервер за две страны от вас - это сервер, на котором вы проигрываете дуэли.

server.cfg, строка за строкой#

cstrike/server.cfg читается при запуске и при каждой смене карты. Вот полный конфиг для публичного сервера, без украшений:

cstrike/server.cfg
hostname "Longship 1.6 // Classic maps // EU"rcon_password "a-long-random-string"sv_password ""sv_contact "you@example.com"sv_lan 0sv_region 3// Rounds and rulesmp_timelimit 30mp_maxrounds 0mp_winlimit 0mp_freezetime 6mp_roundtime 2.5mp_buytime 0.25mp_c4timer 35mp_startmoney 800mp_friendlyfire 0mp_tkpunish 0mp_autoteambalance 1mp_limitteams 2mp_autokick 0mp_flashlight 1mp_footsteps 1mp_forcecamera 0mp_fadetoblack 0mp_hostagepenalty 0mp_chattime 10mp_playerid 0// Physicssv_gravity 800sv_maxspeed 320sv_airaccelerate 10sv_cheats 0pausable 0// Networksys_ticrate 1000sv_maxrate 25000sv_minrate 5000sv_maxupdaterate 101sv_minupdaterate 20sv_unlag 1sv_maxunlag 0.5sv_timeout 65// Contentsv_allowupload 1sv_allowdownload 1sv_downloadurl ""mp_consistency 1// Logslog onmp_logmessages 1mp_logdetail 3sv_logbans 1sv_logecho 1exec banned.cfgexec listip.cfg
НастройкаПо умолчаниюЧто делает
mp_roundtime5Длина раунда в минутах, от 1 до 9. В соревновательных матчах 1.75
mp_freezetime6Заморозка на покупки в начале раунда, в секундах
mp_buytime1.5Время меню покупок в минутах. 0.25 - это пятнадцать секунд
mp_c4timer45Таймер бомбы. 35 - соревновательное значение
mp_startmoney800Деньги в первом раунде, от 800 до 16000
mp_friendlyfire0Включают для соревновательных матчей, выключают на публичном сервере, который хочет сохранить онлайн
mp_autoteambalance1В конце раунда переводит игроков, чтобы уравнять команды
mp_limitteams2Максимальная разница в размере команд, после которой вход блокируется
mp_forcecamera01 ограничивает погибших наблюдением только за своей командой
mp_fadetoblack01 затемняет экран после смерти. Защита от подсказок в матчах
mp_playerid00 - имена видны всем, 1 - только своей команды, 2 - никому
sv_maxupdaterate60Число снимков в секунду на клиента. 101 - стандарт сообщества
sv_unlag1Компенсация лага. Никогда не выключайте
mp_consistency1Отклоняет клиентов, у которых файлы моделей и спрайтов не совпадают

Последние две строки конфига важнее, чем кажется. banned.cfg и listip.cfg - это файлы, куда движок записывает баны при выполнении writeid и writeip, и не во всех сборках они загружаются автоматически: если подключить их через exec из server.cfg, баны переживут перезапуск. Если это забыть, получится классическое «я вчера забанил его, а он вернулся».

Порты, RCON и подключение#

ПортПротоколНазначение
27015UDPИгровой трафик и запрос Steam, который использует браузер серверов
27015UDPRCON. GoldSrc гонит RCON по UDP на игровом порту
27020UDPHLTV, только если вы запускаете прокси

Строка про RCON - ловушка для всех, кто пришёл из игр на Source. CS:GO и CS2 говорят по RCON через TCP; GoldSrc - через UDP на том же порту, что и игра, открытым текстом, с паролем в каждом пакете. Любой, кто перехватывает трафик между вами и сервером, получает пароль, и никакой версии протокола, которая это исправляет, нет. Пользуйтесь консолью панели, которая вместо этого проверяет вашу учётную запись, а rcon_password делайте длинным и меняйте. Общий случай разобран в статье безопасная работа с RCON, и здесь всё сказанное в ней применимо вдвойне.

Тариф CS 1.6 на RE:NODE идёт с одним выделенным портом, а серверу больше и не нужно. HLTV - это второй процесс на втором порту, и его при желании добавляют на вкладке Network.

Игроки подключаются тремя способами: через встроенный браузер в разделе Find Servers, через избранное, добавленное по адресу, или командой connect 203.0.113.10:27015 в консоли. Прямое подключение работает, когда мастер-список тормозит, и именно с него стоит начинать проверку, прежде чем верить в реальность проблемы. Если вместо адреса вы хотите раздавать имя, в статье как привязать домен к игровому серверу разобрана запись A; для 1.6 она отлично работает, пока порт остаётся в адресе.

Metamod и AMX Mod X#

Metamod - это прослойка между движком и игровой библиотекой, благодаря которой к игре могут подключаться сразу несколько плагинов. AMX Mod X - платформа плагинов, на которой работает почти каждый сервер 1.6, и загружается она как плагин Metamod. Ни у чего другого в мире 1.6 нет и доли такого каталога плагинов.

Metamod устанавливается так: мод направляют на него, а не на игровую библиотеку. В cstrike/liblist.gam:

cstrike/liblist.gam
gamedll "addons\metamod\dlls\metamod.dll"gamedll_linux "addons/metamod/dlls/metamod_i386.so"

Дальше Metamod загружает всё, что перечислено в cstrike/addons/metamod/plugins.ini, по одному плагину в строке, с платформой в начале:

cstrike/addons/metamod/plugins.ini
linux addons/amxmodx/dlls/amxmodx_mm_i386.sowin32 addons\amxmodx\dlls\amxmodx_mm.dll
читается при запускеplugins.iniconfigs/plugins.iniReHLDSбинарный файл движкаliblist.gamназывает игровую dllMetamodaddons/metamodAMX Mod Xamxmodx_mm_i386.soReGameDLL_CScs.so, сама играПлагиныфайлы .amxx
Что что загружает на сервере CS 1.6

Запустите сервер и введите в консоли meta list. Если AMX Mod X отображается как работающий, введите amxx version. Две команды, тридцать секунд - и вы знаете, жив ли набор. Дерево под ним выглядит так:

code
cstrike/addons/amxmodx/  configs/    amxx.cfg        core settings    users.ini       admins    plugins.ini     which plugins load    modules.ini     which modules load    maps.ini        the map vote list    cmds.ini        commands run at map start  plugins/          the .amxx files  modules/          engine, fun, cstrike, fakemeta, hamsandwich  data/lang/        translations  logs/             one file per day  scripting/        .sma sources and the compiler

Плагины - это файлы .amxx в plugins/, и включаются они добавлением имени файла в configs/plugins.ini. Некоторым плагинам сначала нужно включить модуль в modules.ini: обычные подозреваемые - fun, cstrike, fakemeta и hamsandwich, и плагин, который не загрузился со строкой «module not found» в logs/, почти всегда упирается именно в это. Плагины на Pawn компилируются из .sma в .amxx компилятором из scripting/; это полезно знать, потому что половина полезных плагинов для 1.6 выложена в виде исходников.

В configs/amxx.cfg лежат основные настройки. amx_default_access задаёт, что может делать игрок без записи в users.ini, и должен оставаться пустым. amx_show_activity 2 объявляет действия админов с указанием имени админа - эта настройка удерживает команду модераторов в рамках. amx_password_field "_pw" называет клиентскую переменную, в которую кладётся пароль админа, - то есть строку setinfo _pw "yourpassword", которую админ добавляет в собственный конфиг.

Админы, флаги и команды#

Админы живут в cstrike/addons/amxmodx/configs/users.ini, по одному в строке, в четырёх полях: идентификатор, пароль, флаги доступа, флаги учётной записи.

configs/users.ini
; identity            password     access flags            account flags"STEAM_0:1:123456"    ""           "abcdefghijklmnopqrstu" "ce""STEAM_0:0:987654"    ""           "bcdefijmnu"            "ce""Anna"                "herring42"  "bcdefij"               "a"

Флаги учётной записи определяют, как админа распознают. c означает, что идентификатор - это SteamID, d - что это IP-адрес, e - что пароль не требуется, а a отключает всякого, кто ввёл неверный пароль под этим именем. SteamID с ce - правильный ответ для тех, кому вы доверяете; имя плюс пароль - для тех, чьего ID у вас пока нет, и надёжно это ровно настолько, насколько надёжен пароль.

Флаги доступа - это отдельные буквы, и они складываются:

ФлагДаёт
aИммунитет от других админов
bЗарезервированный слот
camx_kick
damx_ban, amx_unban, amx_banip
eamx_slay, amx_slap
famx_map
gamx_cvar для большинства cvar
hamx_cfg
iamx_chat, amx_say, amx_psay, amx_tsay
jКоманды голосования
kДоступ к защищённым cvar, таким как sv_password
lamx_rcon и rcon_password
m - tПользовательские уровни, которые определяют отдельные плагины
uДоступ к админ-меню
zОбычный пользователь, без прав админа

Раздача abcdefghijklmnopqrstu всем подряд - вот как серверы 1.6 разрушаются собственным персоналом. Модератору нужно bcdefiju и ничего больше; l даёт RCON, то есть весь сервер, и принадлежит одному человеку.

КомандаДействие
amx_kick <name> [reason]Выгоняет игрока
amx_ban <minutes> <name> [reason]Банит по SteamID. 0 - навсегда
amx_banip <minutes> <name>Банит по адресу
amx_addban <steamid> <minutes>Банит того, кого нет на сервере
amx_unban <steamid>Снимает бан
amx_slay <name> / amx_slap <name> [damage]Убивает либо бьёт и толкает
amx_map <map>Меняет карту
amx_extendmap <minutes>Добавляет время текущей карте
amx_votemap <map...>Запускает голосование за карту
amx_cvar <cvar> [value]Читает или задаёт cvar
amx_rcon <command>Выполняет серверную команду
amx_whoПоказывает игроков с их доступом
amx_reloadadminsПеречитывает users.ini без перезапуска
amx_plugins / amx_modulesЧто загрузилось, а что нет
amxmodmenuОткрывает админ-меню в игре

Запомнить стоит amx_reloadadmins: добавить модератора посреди вечера ничего не стоит и не требует перезапуска.

Карты, ротация карт и загрузки#

Карты - это файлы .bsp в cstrike/maps/, часто рядом с файлом .res, перечисляющим дополнительные звуки, спрайты и модели, нужные карте, чтобы клиенты знали, что скачивать. mapcycle.txt в cstrike/ - это ротация, по одному названию карты в строке, а motd.txt - текст, который игроки видят при подключении.

На большинстве серверов ротацию берёт на себя AMX Mod X. configs/maps.ini - список, который предлагают плагины голосования, а стандартные плагины mapchooser, nextmap и timeleft вместе проводят голосование в конце карты, объявляют, что будет дальше, и отвечают на say timeleft. Если вам нужна фиксированная ротация, уберите mapchooser из plugins.ini и пусть работает mapcycle.txt.

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

  1. Загрузка средствами движка при sv_allowdownload 1. Работает, но мучительно медленно: карта в 20 МБ - это две минуты взгляда на полосу прогресса. Некоторые клиенты сдаются.
  2. sv_downloadurl "http://files.example.com/cstrike", указывающий на веб-сервер с зеркалом структуры папок - maps/, sound/, sprites/, models/. Файлы можно хранить сжатыми bzip2 как de_yourmap.bsp.bz2, и клиент их распакует. Это в десятки раз быстрее, и так делает каждый загруженный сервер.

Для второго варианта подойдёт любой статический веб-хостинг, в том числе небольшой тариф веб-хостинга: это папка с файлами по HTTP, ничего хитрого. Держите содержимое идентичным тому, что лежит на сервере, потому что несовпавший спрайт при mp_consistency 1 приводит к выкидыванию игрока с сообщением, которое никто не понимает.

Боты, читеры и клиенты без Steam#

CS 1.6 поставляется с ZBot - ботом, перенесённым из Condition Zero. bot_add, bot_add_t, bot_add_ct, bot_quota <n>, bot_difficulty от 0 до 3 и bot_kick - весь интерфейс. Ботам нужен навигационный файл для карты, maps/de_dust2.nav: у официальных карт он есть, у пользовательских почти никогда. Альтернатива - бот для Metamod вроде YaPB или POD-Bot: у них собственные вейпойнты, они лучше справляются с пользовательскими картами и настраиваются для каждой карты отдельно, поэтому почти каждый населённый сервер 1.6, где есть боты, использует один из них, а не ZBot.

Читерство - честное слабое место игры. VAC существует и ловит неосторожных. Серверная защита - это sv_cheats 0, mp_consistency 1 и античит-плагин AMX Mod X, который следит за невозможным поведением, плюс ReAuthCheck на стороне ReHLDS, отклоняющий клиентов, предъявляющих чужие SteamID. Ничто из этого не решает проблему до конца, и растущему серверу нужен активный админ больше, чем ещё один плагин. Статья как держать сервер с модами чистым о модах, а не о читах, но дисциплина там та же.

И есть ещё то, что пропускает каждое руководство по 1.6. Значительная часть оставшихся игроков 1.6 сидит на клиентах без Steam, а серверы, желающие принимать этих игроков, ставят ReUnion, который их пускает и выдаёт им сгенерированные идентификаторы. Это настоящая развилка, а не мелочь. Примете их - получите более людный сервер, население без аутентификации и баны по SteamID и админку по SteamID, которые почти ничего не значат, потому что забаненный игрок возвращается с новым идентификатором. Откажетесь - сохраните sv_lan 0, настоящую аутентификацию Steam, баны, которые действуют, и меньший пул игроков. Существуют серверы обоих видов, и оба работают. Решайте обдуманно: менять решение на уже работающем сервере - значит заново собирать списки админов и банов.

Устранение неполадок#

SteamCMD не может установить приложение 90. Запустите снова. И ещё раз. Дело не в вас: манифест приложения 90 периодически ломается, и та же команда срабатывает при следующей попытке. Проверьте, что +app_set_config 90 mod cstrike стоит раньше +app_update 90.

Сервер запускается, но не появляется в браузере. Проверьте sv_lan 0 и sv_region, затем попробуйте прямой connect по адресу. Если прямое подключение работает, сервер в порядке, а мастер-список просто медленный.

`meta list` ничего не выводит. liblist.gam по-прежнему указывает на оригинальную игровую библиотеку. Проверьте обе строки, gamedll и gamedll_linux: править только строку для своей платформы нормально, а вот не править ни одну - обычная ошибка.

AMX Mod X загружается, а плагин нет. Прочитайте addons/amxmodx/logs/. Там будет назван недостающий модуль или указана ошибка компиляции. Модули включаются в modules.ini, плагины - в plugins.ini, а сам файл плагина должен лежать в plugins/.

У админов нет прав. Либо SteamID в users.ini не совпадает в точности с тем, что у игрока, либо в флагах учётной записи нет c. Выполните amx_who, пока они подключены, чтобы увидеть, кем их считает сервер, а затем amx_reloadadmins.

Игроков выкидывает за несовпадение файлов. mp_consistency 1 при том, что содержимое на сервере отличается от отдаваемого по адресу загрузки. Сделайте их идентичными.

Всё тормозит на 32 игроках. Сравните sys_ticrate с лимитом процессора, прежде чем винить плагины. Сервер, упёршийся в жёсткий лимит CPU, работает медленно, а не сломан, и о себе не сообщает ничем, кроме частоты кадров.

FAQ#

Стоит ли размещать Counter-Strike 1.6 в 2026 году?

Да, если иметь в виду, что серверы с сообществом по-прежнему заполняются каждый вечер. Это самая дешёвая игра для хостинга с огромным отрывом, у мод-сцены за плечами двадцать лет глубины, а весь оставшийся онлайн сознательно остался. Но это не та игра, для которой вы запускаете сервер и ждёте, пока вас найдут.

Чем HLDS отличается от ReHLDS?

ReHLDS - это переписанный тот же движок, бинарно совместимый с существующими модами и плагинами, с исправленными накопившимися падениями и уязвимостями и дополнительными cvar. Он ставится вместо оригинала, и сегодня нет практической причины запускать оригинальный HLDS.

Сколько RAM нужно серверу CS 1.6?

256 МБ для маленького сервера, 512 МБ для полного сервера на 32 слота с обычным набором плагинов и 1 ГБ или больше для тяжёлых режимов AMXX вроде Zombie Plague, которые хранят состояние каждого игрока. Память в 1.6 почти никогда не бывает пределом; предел - это производительность одного потока процессора.

Как сделать себя админом?

Добавьте в cstrike/addons/amxmodx/configs/users.ini строку со своим SteamID, без пароля, с нужными флагами доступа и флагами учётной записи ce. Выполните в консоли amx_reloadadmins. Затем введите в игре amxmodmenu.

Почему игроки так медленно скачивают карты?

Потому что собственная передача файлов в движке - из 1998 года. Задайте sv_downloadurl на веб-сервер с теми же папками maps/, sound/ и sprites/, лучше со сжатыми bzip2 копиями, и загрузки станут достаточно быстрыми, чтобы люди оставались.

Могут ли клиенты без Steam зайти на мой сервер?

Только если вы установите ReUnion, который их принимает и назначает сгенерированные идентификаторы. Платой за это становится то, что баны по SteamID и админка на основе SteamID сильно слабеют. Сервер по умолчанию с sv_lan 0 принимает только клиентов Steam.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000