diff --git a/.env b/.env deleted file mode 100644 index 9e21534..0000000 --- a/.env +++ /dev/null @@ -1,11 +0,0 @@ -# Server vars -HOSTNAME=GO YASOZDAL | CSDM -PORT=27015 -HLTV_PORT=27020 -VAC="secure" -SV_LAN=0 - -# Gameplay settings -START_MAP="de_dust2" -MAX_PLAYERS=32 -RCON_PASSWORD=9OrEQYdj/ulkf0uC4JKr220+ diff --git a/.env.example b/.env.example deleted file mode 100644 index 7272772..0000000 --- a/.env.example +++ /dev/null @@ -1,10 +0,0 @@ -# Server vars -SERVER_NAME="GO YASOZDAL | CSDM" -PORT=27015 -HLTV_PORT=27020 -VAC="insecure" -SV_LAN=0 - -# Gameplay settings -START_MAP="de_dust2" -MAX_PLAYERS=32 diff --git a/Dockerfile b/Dockerfile index 62713e8..f16686d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,49 +1,63 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 -ENV DEBIAN_FRONTEND=noninteractive +RUN echo "=== Updating Ubuntu ===" && \ + dpkg --add-architecture i386 && \ + apt-get update && \ + apt-get install -y software-properties-common && \ + add-apt-repository ppa:ubuntu-toolchain-r/test && \ + apt-get update && \ + apt-get install -y \ + build-essential \ + gcc-11 \ + g++-11 \ + g++-11-multilib \ + libc6-dev:i386 \ + libc6:i386 \ + libstdc++6:i386 \ + lib32stdc++6 \ + zlib1g:i386 \ + wget \ + cmake \ + git \ + ca-certificates && \ + rm -rf /var/lib/apt/lists/* -RUN apt update && apt install -y \ - curl \ - ca-certificates \ - lib32gcc-s1 \ - lib32stdc++6 \ - unzip \ - && rm -rf /var/lib/apt/lists/* +# Устанавливаем SteamCMD и загружаем через него оригинальный HLDS + CS 1.6: +RUN echo "=== Installing SteamCMD & HLDS ===" && \ + mkdir -p /opt/hlds /opt/steamcmd && cd /opt/steamcmd && \ + wget http://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && \ + tar xvfz steamcmd_linux.tar.gz && \ + ./steamcmd.sh \ + +@sSteamCmdForcePlatformType linux \ + +force_install_dir /opt/hlds \ + +login anonymous \ + +app_set_config 90 mod cstrike \ + +app_update 90 -beta steam_legacy validate \ + +quit -# Создаем нужные директории -RUN mkdir -p /steamcmd /hlds +# Устанавливаем ReHLDS и помещаем с заменой в HLDS +RUN echo "=== Installing ReHLDS ===" && \ + cd /opt/ && \ + git clone https://github.com/rehlds/ReHLDS.git && \ + cd ReHLDS && \ + chmod +x build.sh && \ + ./build.sh --compiler=gcc --jobs=$(nproc) -DDEBUG=OFF && \ + mv ./build/rehlds/HLTV/Console/hltv /opt/hlds/hltv && \ + mv ./build/rehlds/HLTV/Core/core.so /opt/hlds/core.so && \ + mv ./build/rehlds/HLTV/DemoPlayer/demoplayer.so /opt/hlds/demoplayer.so && \ + mv ./build/rehlds/HLTV/Director/director.so /opt/hlds/valve/dlls/director.so && \ + mv ./build/rehlds/HLTV/Proxy/proxy.so /opt/hlds/proxy.so && \ + mv ./build/rehlds/engine_i486.so /opt/hlds/engine_i486.so && \ + mv ./build/rehlds/dedicated/hlds_linux /opt/hlds/hlds_linux && \ + mv ./build/rehlds/filesystem/FileSystem_Stdio/filesystem_stdio.so /opt/hlds/filesystem_stdio.so && \ + cd /opt/ && \ + rm -rf ReHLDS && \ + rm /opt/hlds/libstdc++.so.6 && \ + rm /opt/hlds/libgcc_s.so.1 -WORKDIR /steamcmd - -# Скачиваем и распаковываем steamcmd -RUN curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xz - -# Скачиваем HLDS с нужной beta-версией -RUN ./steamcmd.sh +@sSteamCmdForcePlatformType linux \ - +login anonymous \ - +force_install_dir /hlds \ - +app_set_config 90 mod cstrike \ - +app_update 90 -beta steam_legacy validate \ - +quit - -# Удаляем ненужные steam-библиотеки, если вдруг попали -RUN rm -f /hlds/steamclient.so /hlds/libsteam_api.so /hlds/steam_api.so - -# Копируем файлы ReHLDS (должен быть ./rehlds/bin/linux32/ внутри контекста билда) -COPY rehlds/ /hlds/ - -# Делаем основной бинарник исполняемым -RUN chmod +x /hlds/hlds_linux - -# Копируем start.sh (обязателен для запуска) -COPY start.sh /start.sh -RUN chmod +x /start.sh - -# Указываем точку входа -ENTRYPOINT ["/start.sh"] - -# Открываем нужные порты +# Открываем порт и задаём команду запуска сервера EXPOSE 27015/udp -EXPOSE 27020/udp +WORKDIR /opt/hlds +CMD ["/opt/hlds/hlds_run", "-console", "-game", "cstrike", "+map", "de_dust2"] -SHELL ["/bin/bash", "-c"] +#CMD ["sleep", "infinity"] diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index e2bc17a..0000000 --- a/Jenkinsfile +++ /dev/null @@ -1,48 +0,0 @@ -pipeline { - agent any - - environment { - FASTDL_CONTAINER = "fastdl" - FASTDL_PATH = "/usr/share/nginx/html" - TARGET_DIR = "/opt/game-servers/csdm" - REPO_URL = "https://gitea.go-yasozdal.ru/yvnger/csdm" - BRANCH = "main" - } - - stages { - stage("Prepare Deploy Directory") { - steps { - sh ''' - rm -rf $TARGET_DIR - git clone --branch $BRANCH $REPO_URL $TARGET_DIR - ''' - } - } - - stage("Build Docker Image") { - steps { - dir("$TARGET_DIR") { - sh 'docker build -t csserver:csdm .' - } - } - } - - stage("Deploy with Compose") { - steps { - dir("$TARGET_DIR") { - sh 'docker-compose down || true' - sh 'docker-compose up -d' - } - } - } - } - - post { - failure { - echo 'Build failed. Check logs.' - } - success { - echo 'Server deployed successfully.' - } - } -} \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index d3bf1c3..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# csdm - diff --git a/configs/amxx.cfg b/configs/amxx.cfg new file mode 100644 index 0000000..c8859da --- /dev/null +++ b/configs/amxx.cfg @@ -0,0 +1,105 @@ +// AMX Mod X - Глобальный файл конфигурации (amxx.cfg) +// Все настройки ниже применяются ко всем картам при запуске AMX Mod X. + +echo [AMX Mod X] Исполняется файл конфигурации AMX Mod X + +// Стандартный доступ для всех игроков (не админов): +amx_default_access "z" // по умолчанию флаг "z" (нет админских прав) + +// Название поля setinfo для пароля администратора (если используется авторизация по нику) +amx_password_field "pass" // (Например: setinfo _pass "mypassword") + +// Режим проверки админов (логирование): +// 0 - не проверять (логирование выкл., админские права не устанавливаются) +// 1 - обычный режим (проверять по users.ini с соблюдением флагов доступа) +// 2 - выгонять всех, кто не в списке (users.ini) +amx_mode "1" + +// Отображение активности админов в чате: +// 0 - отключено ничего не показывать +// 1 - показывать действия админа без имени ("Админ: ...") +// 2 - показывать действия с указанием имени администратора +amx_show_activity "0" + +// Прокручиваемое сообщение (бегущая строка) и частота: +// format: amx_scrollmsg "сообщение" <интервал_в_секундах> +amx_scrollmsg "Добро пожаловать на наш сервер CS 1.6! Приятной игры!" 80 + +// Центрированное цветное сообщение и цвет в формате RRRGGGBBB (закомментировано, при необходимости замените * на текст): +//amx_imessage "Текст сообщения в центре экрана" "000255000" + +// Частота вывода цветного сообщения (в секундах) +amx_freq_imessage "60" + +// Настройка защиты от флуд-чата (через сколько секунд можно снова отправить сообщение) +amx_flood_time "0.35" + +// Количество зарезервированных слотов (требуется amx_hideslots 1, подробнее в описании плагина) +amx_reservation "1" + +// Скрывать зарезервированные слоты (1 = да, слот не виден в счетчике игроков для обычных игроков) +amx_hideslots "1" + +// Настройки отображения оставшегося времени карты (для команды timeleft): +// a - показывать белым текстом внизу экрана +// b - озвучивать голосом +// c - не добавлять слово "remaining/осталось" (в голосовом оповещении) +// d - не озвучивать единицы времени "hours/minutes/seconds" (в голосовом) +// e - показывать/озвучивать предупреждение, если оставшееся время меньше заданного +amx_time_display "a 1200" "a 600" "a 300" "a 180" "ab 60" "bcde 11" + +// Озвучивать голосом команды "thetime" и "timeleft" (текущее время/осталось времени) +amx_time_voice "0" + +// Минимальная задержка между голосованиями (секунд) +amx_vote_delay "15" + +// Длительность голосования (секунд) +amx_vote_time "15" + +// Показывать, кто за что проголосовал (1 = показывать, 0 = не показывать) +amx_vote_answers "1" + +// Требуемый процент игроков для успешного голосования (kick, ban, map и обычное) +amx_votekick_ratio "0.40" +amx_voteban_ratio "0.75" +amx_votemap_ratio "0.40" +amx_vote_ratio "0.50" + +// Максимальное время продления карты (в минутах) +amx_extendmap_max "90" + +// Шаг продления карты при голосовании (в минутах) +amx_extendmap_step "15" + +// Режим ранжирования игроков (статистика HLstatsX / csstats): +// 0 - по нику игрока +// 1 - по уникальному идентификатору (SteamID/AuthID) +// 2 - по IP адресу +csstats_rank "1" + +// Сброс статистики (0 - не сбрасывать, 1 - сбросить статистику) +csstats_reset "0" + +// Максимальный размер файла со статистикой (число записей рейтинга) +csstats_maxsize "3500" + +// Длительность показа статистики HUD после убийства (секунд) +amx_statsx_duration "12.0" + +// Задержка очистки HUD-статистики относительно конца фризтайма раунда (секунд) +// (отрицательное значение очистит HUD-статистику до окончания фризтайма) +amx_statsx_freeze "2.0" + +// Разрешить клиентам выбирать язык сообщений AMX Mod X (0 - фиксированный сервером, 1 - клиент может выбрать) +amx_client_languages "1" + +// Режим отладки плагинов: +// 0 - отключить отладку +// 1 - только для плагинов с флагом "debug" в plugins.ini +// 2 - для всех плагинов (может снизить производительность!) +amx_debug "0" + +// Режим отладки мультиязычных сообщений (для отладки конкретного языка укажите код, например "en") +// По умолчанию "" (пустая строка) = отключено +amx_mldebug "" diff --git a/addons/.gitkeep b/configs/reunion.cfg similarity index 100% rename from addons/.gitkeep rename to configs/reunion.cfg diff --git a/configs/server.cfg b/configs/server.cfg new file mode 100644 index 0000000..423d0c3 --- /dev/null +++ b/configs/server.cfg @@ -0,0 +1,59 @@ +// Основной конфигурационный файл сервера Counter-Strike 1.6 + +hostname "Публичный сервер CS 1.6" // имя сервера в списке +rcon_password "SOME_RCON_PASSWORD" // Пароль rcon (смените на свой!) +sv_password "" // Пароль на вход (пусто для публичного сервера) +sv_lan "0" // Режим LAN (0 = интернет сервер) +sv_region "255" // Регион сервера (255 = весь мир) +sv_contact "admin@myserver.ru" // Контактные данные администратора + +// Настройки логирования и защиты rcon +log "on" // Включить логирование событий в файл лога +sv_logbans "1" // Логировать баны в файл +sv_logecho "0" // Не дублировать логи в консоль сервера +sv_logfile "1" // Логировать события в файл (1 - да) +sv_rcon_banpenalty "60" // Время бана (в минутах) за неверный rcon пароль +sv_rcon_maxfailures "5" // Число попыток rcon перед баном +sv_rcon_minfailures "2" // Минимальное число неверных попыток для бана +sv_rcon_minfailuretime "30" // Интервал (в секундах) для подсчета неверных rcon попыток +sv_cheats "0" // Запрет читерских команд (sv_cheats) + +// Настройки загрузки файлов +sv_allowupload "1" // Разрешить загрузку пользовательских спрей-логотипов на сервер +sv_allowdownload "1" // Разрешить загрузку файлов с сервера клиентам +sv_downloadurl "" // URL для быстрой скачки файлов (FastDL), если есть + +// Настройки голосового общения +sv_voiceenable "1" // Включить голосовой чат +sv_voicecodec "voice_speex" // Кодек для голосового чата (Speex для лучшего качества) +sv_voicequality "5" // Качество звука 1-5 (5 = наилучшее, требует voice_speex) + +// Ограничения частоты обновления и передачи данных +sv_maxrate "0" // Максимальная скорость передачи данных (0 = без лимита) +sv_minrate "0" // Минимальная скорость передачи данных +sv_maxupdaterate "101" // Максимальная частота обновления (кадров в секунду) от сервера +sv_minupdaterate "20" // Минимальная частота обновлений от сервера + +// Настройки игры +mp_autoteambalance "1" // Включить авто-баланс команд +mp_limitteams "2" // Ограничение разницы игроков в командах (макс. 2) +mp_friendlyfire "0" // Отключить friendly fire (урон по союзникам) +mp_autokick "0" // Отключить автокик за бездействие/ командное убийство + +// Настройки производительности +sys_ticrate "1000" // Максимальная частота тиков сервера (для высоких FPS) +fps_max "1000" // Максимальный FPS сервера + +// Прочие настройки +mapchangecfgfile "server.cfg" // Файл настроек, выполняемый при смене карты +mapcyclefile "mapcycle.txt" // Файл списка карт (цикл карт) +motdfile "motd.txt" // Файл сообщения дня (приветствие MOTD) +exec banned.cfg // Автозагрузка списка забаненных SteamID +exec listip.cfg // Автозагрузка списка забаненных IP + +// Загрузка настроек ботов (если используются боты) +exec addons/podbot/podbot.cfg // Настройки PodBot (путь при использовании PodBot) +//exec bot.cfg // Использовать этот файл, если применяются стандартные CZ-bots + +// Включение статистических плагинов AMX Mod X (таких как statsx.amxx) +amx_statscfgmenu 0 // Отключить меню настроек статистики (будет настроено вручную плагином) diff --git a/configs/users.ini b/configs/users.ini new file mode 100644 index 0000000..0408fc2 --- /dev/null +++ b/configs/users.ini @@ -0,0 +1,44 @@ +; AMX Mod X - Файл пользователей (admins) +; Формат записи: +; "идентификатор" "пароль" "флаги_доступа" "флаги_авторизации" +; Идентификатор может быть SteamID, адрес IP или ник игрока. +; Для SteamID в качестве идентификатора используйте формат "STEAM_X:X:XXXXXXX". +; Пароль обычно не требуется для SteamID и IP (оставлять пустым между кавычками). +; Флаги доступа: +; a - иммунитет (защита от кика/бана и т.д.), +; b - резервирование слота, +; c - базовые команды администратора (kick, slap и др.), +; d - бан игроков, +; e - удаление банов, +; f - slay и slap, +; g - смена карт, +; h - изменение CVAR, +; i - выполнение конфигов (exec), +; j - высокая чат активность (использование @ в чате), +; k - голосование, +; l - пароль (установленный с amx_password), +; m - режим (слот) (более не используется), +; n - amx_cfg в консоли и т.д., +; o - чат админа (say @@), +; p - голосовой чат (ключ "u"), +; q - доступ к amx_cvar и amx_rcon, +; r - custom level A (для модулей), +; s - custom level B, +; t - custom level C, +; u - полный доступ (все флаги) **(Примечание: флаг "u" обычно означает все флаги, но здесь перечислены по отдельности все флаги a-t)** +; Флаг "z" (по умолчанию) означает никаких прав (для обычных игроков). +; Флаги авторизации: +; a - по имени (ник игрока), +; b - по паролю (из файла users и setinfo), +; c - по SteamID, +; d - по IP, +; e - требовать пароль (для a и b методов). +; Пример для SteamID: "STEAM_0:1:XXXXXXXX" "" "abcdefghijklmnopqrstu" "ce" +; Пример для IP: "127.0.0.1" "" "abcdefghijklmnopqrstu" "de" +; Пример для ника с паролем: "PlayerName" "mypassword" "abcdefghijklmnopqrstu" "a" +; Добавьте Ваших администраторов ниже: + +"STEAM_0:1:19618836" "" "abcdefghijklmnopqrstu" "c" ; Администратор (полные права по SteamID) + +; Ниже пример для локальной консоли сервера (loopback) - раскомментируйте при необходимости: +; "loopback" "" "abcdefghijklmnopqrstu" "de" diff --git a/docker-compose.yml b/docker-compose.yml index c9a8cca..31a8ba6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,17 +3,11 @@ services: build: . container_name: csdm ports: - - "${PORT}:${PORT}/udp" - - "${HLTV_PORT}:${HLTV_PORT}/udp" + - "27015:27015/udp" volumes: - - ./server.cfg:/hlds/cstrike/server.cfg - restart: unless-stopped + - ./configs:/opt/hlds/cstrike/addons/amxmodx/configs + - ./logs:/opt/hlds/cstrike/logs environment: - HOSTNAME: "${HOSTNAME}" - MAP: "${START_MAP}" - MAX_PLAYERS: "${MAX_PLAYERS}" - PORT: "${PORT}" - HLTV_PORT: "${HLTV_PORT}" - RCON_PASSWORD: "${RCON_PASSWORD}" - SV_LAN: "${SV_LAN}" - VAC: "${VAC}" \ No newline at end of file + - TZ=Europe/Moscow + - LANG=C.UTF-8 + restart: unless-stopped diff --git a/init.sh b/init.sh deleted file mode 100755 index 86ac802..0000000 --- a/init.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -ENV_FILE=".env" -TEMPLATE_FILE=".env.example" - -# Генерация пароля -generate_password() { - openssl rand -base64 18 -} - -# Создание .env на основе шаблона -if [ -f "$ENV_FILE" ]; then - echo "[INFO] $ENV_FILE already exists. Skipping creation." -else - echo "[INFO] Creating $ENV_FILE from $TEMPLATE_FILE..." - - # Копируем шаблон - cp "$TEMPLATE_FILE" "$ENV_FILE" - - # Генерируем и подставляем RCON пароль - RCON_PASSWORD=$(generate_password) - echo "RCON_PASSWORD=$RCON_PASSWORD" >> "$ENV_FILE" - - echo "[OK] .env created with generated RCON_PASSWORD:" - echo "$RCON_PASSWORD" -fi \ No newline at end of file diff --git a/maps/.gitkeep b/maps/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/models/.gitkeep b/models/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/rehlds/core.so b/rehlds/core.so deleted file mode 100644 index 90e374b..0000000 Binary files a/rehlds/core.so and /dev/null differ diff --git a/rehlds/demoplayer.so b/rehlds/demoplayer.so deleted file mode 100644 index a2cb0f4..0000000 Binary files a/rehlds/demoplayer.so and /dev/null differ diff --git a/rehlds/engine_i486.so b/rehlds/engine_i486.so deleted file mode 100644 index c2de03b..0000000 Binary files a/rehlds/engine_i486.so and /dev/null differ diff --git a/rehlds/filesystem_stdio.so b/rehlds/filesystem_stdio.so deleted file mode 100644 index c54d2b9..0000000 Binary files a/rehlds/filesystem_stdio.so and /dev/null differ diff --git a/rehlds/hlds_linux b/rehlds/hlds_linux deleted file mode 100644 index be305f3..0000000 Binary files a/rehlds/hlds_linux and /dev/null differ diff --git a/rehlds/hltv b/rehlds/hltv deleted file mode 100644 index c0f0c7e..0000000 Binary files a/rehlds/hltv and /dev/null differ diff --git a/rehlds/proxy.so b/rehlds/proxy.so deleted file mode 100644 index a836643..0000000 Binary files a/rehlds/proxy.so and /dev/null differ diff --git a/rehlds/valve/dlls/director.so b/rehlds/valve/dlls/director.so deleted file mode 100644 index 5e30915..0000000 Binary files a/rehlds/valve/dlls/director.so and /dev/null differ diff --git a/server.cfg b/server.cfg deleted file mode 100644 index 138a056..0000000 --- a/server.cfg +++ /dev/null @@ -1,15 +0,0 @@ -hostname "GO YASOZDAL | CSDM" -sv_lan "0" -rcon_password "9OrEQYdj/ulkf0uC4JKr220+" -mp_autoteambalance 0 -mp_limitteams 2 -mp_freezetime 3 -mp_roundtime 2 -mp_timelimit 30 -mp_startmoney 2025 -sv_aim 0 -pausable 0 -sv_maxspeed 320 -mp_timelimit 20 -sv_cheats 0 -maxplayers "" diff --git a/sounds/.gitkeep b/sounds/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/start.sh b/start.sh deleted file mode 100644 index 0fba910..0000000 --- a/start.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -cd /hlds - -./hlds_run \ - -game cstrike \ - -console \ - -port "$PORT" \ - +map "$MAP" \