MadWars
БАЗА ЗНАНИЙ · Q3

Vanilla Quake III и q3ded: полное руководство по серверу 1.32

Версии и protocol 68, запуск q3ded, server.cfg, карты, RCON, логи, безопасность и отличие vanilla от ioquake3 и OSP.

MadWars · 28.07.2026

Область действия

Это руководство описывает оригинальный Quake III Arena 1.32/1.32b и финальный патч 1.32c. Здесь нет OSP-команд и расширений ioquake3, если они не помечены отдельно.

  • Q3 1.30 использует protocol 66;
  • Q3 1.31 — protocol 67;
  • Q3 1.32, 1.32b и 1.32c — protocol 68;
  • 1.32c от 8 мая 2006 года — минимальная разумная версия оригинального бинарника для Интернета;
  • GPL-репозиторий id Software основан на 1.32b и остаётся первичным источником поведения vanilla.

Для нового публичного сервера безопаснее актуальный ioq3ded с оригинальными данными baseq3. Оригинальный q3ded полезен для совместимости и истории, но старые бинарники не следует выставлять в Интернет без финальных исправлений.

Что нужно серверу

Движок с открытым исходным кодом не включает коммерческие данные игры. Нужны законно полученные:

  • baseq3/pak0.pk3 из купленной Quake III Arena;
  • официальные patch data pak1.pk3pak8.pk3;
  • собственные карты и моды — только с правом распространения.

Если сервер пишет Couldn't load default.cfg, почти всегда он не видит baseq3/pak0.pk3 или запущен с неправильным fs_basepath.

q3ded, quake3 и ioq3ded

  • q3ded / linuxq3ded — оригинальный выделенный сервер id Software;
  • quake3 +set dedicated 2 — полный оригинальный клиент в dedicated-режиме;
  • ioq3ded — современный сервер ioquake3, совместимый по сети с финальной линией 1.32c;
  • q3ded не является OSP: OSP подключается отдельным +set fs_game osp.

Минимальный запуск

Оригинальный Linux dedicated:


./linuxq3ded +set dedicated 2 +set net_port 27960 +set com_hunkMegs 64 +exec server.cfg

Оригинальный полный binary:


./quake3 +set dedicated 2 +set net_port 27960 +exec server.cfg

Современный ioquake3:


./ioq3ded.x86_64 +set dedicated 2 +set net_port 27960 +exec server.cfg

dedicated 1 — LAN и прямое подключение. dedicated 2 — публичный сервер с heartbeat master-серверам. Без команды map сервер останется в консоли и не начнёт матч.

Критические параметры лучше задавать до +exec:

  • dedicated;
  • net_ip, net_port;
  • fs_basepath, fs_homepath, fs_game;
  • com_hunkMegs;
  • bot_enable.

server.cfg не исполняется автоматически по имени. Автоматически читаются default.cfg, q3config.cfg и autoexec.cfg; серверный файл нужно вызвать через +exec server.cfg.

Базовый server.cfg


// Identity and slots
set sv_hostname "^1MadWars ^7Vanilla Q3"
set sv_maxclients "12"
set sv_privateClients "0"
set sv_privatePassword ""

// Access
set g_password ""
set rconPassword "CHANGE_TO_A_LONG_RANDOM_SECRET"

// Integrity and downloads
set sv_pure "1"
set sv_allowDownload "0"

// Network
set sv_fps "20"
set sv_maxRate "25000"
set sv_minPing "0"
set sv_maxPing "0"
set sv_floodProtect "1"
set sv_lanForceRate "1"

// FFA
set g_gametype "0"
set fraglimit "30"
set timelimit "15"
set capturelimit "8"
set g_friendlyFire "0"
set g_teamAutoJoin "0"
set g_teamForceBalance "1"
set g_doWarmup "1"
set g_warmup "20"
set g_forcerespawn "20"
set g_inactivity "180"
set g_allowVote "1"
set g_motd "^7Welcome to MadWars"

// Logging
set g_log "games.log"
set g_logSync "0"
set logfile "2"

// Rotation
set d1 "map q3dm6;  set nextmap vstr d2"
set d2 "map q3dm13; set nextmap vstr d3"
set d3 "map q3dm17; set nextmap vstr d1"
vstr d1

В серверном cfg достаточно set: файл выполняется при каждом старте. seta дополнительно записывает значение в генерируемый q3config.cfg, что особенно нежелательно для секретов.

Главные engine cvar vanilla

  • sv_hostname "noname" — имя сервера;
  • sv_maxclients 8 — слоты, engine limit 64;
  • sv_privateClients 0 и sv_privatePassword — резерв;
  • net_port 27960 — игровой UDP-порт;
  • net_ip "localhost" — историческая ловушка: в оригинальном коде это bind на все IPv4-интерфейсы, а не только 127.0.0.1;
  • sv_fps 20 — частота серверной симуляции;
  • sv_maxRate 0 — серверный предел трафика на клиента, 0 снимает cap;
  • sv_minPing 0, sv_maxPing 0 — фильтр ping;
  • sv_floodProtect 1 — ограничение частых reliable-команд;
  • sv_timeout 200, sv_zombietime 2, sv_reconnectlimit 3;
  • sv_pure 1 — проверка PK3;
  • sv_allowDownload 0 — старая UDP-загрузка;
  • fs_game ""baseq3, либо имя каталога мода;
  • com_hunkMegs — память hunk, practically 64–128+.

У vanilla нет sv_dlURL, CIDR-ban и IPv6. Это расширения современных портов.

Правила игры

Vanilla g_gametype:

  • 0 — FFA;
  • 1 — Tournament / duel;
  • 2 — Single Player FFA, не для публичного сервера;
  • 3 — Team Deathmatch;
  • 4 — Capture the Flag.

Значения 5–7 относятся к Team Arena.

Базовые defaults 1.32:

  • fraglimit 20, timelimit 0, capturelimit 8;
  • g_friendlyFire 0;
  • g_teamAutoJoin 0, g_teamForceBalance 0;
  • g_doWarmup 0, g_warmup 20;
  • g_forcerespawn 20, g_inactivity 0;
  • g_allowVote 1;
  • g_weaponrespawn 5, g_weaponTeamRespawn 30;
  • g_speed 320, g_gravity 800, g_knockback 1000, g_quadfactor 3.

dmflags — сумма битов: 8 отключает falling damage, 16 фиксирует FOV, 32 отключает footsteps.

Карты и ротация

Основные имена: q3dm0q3dm19, q3tourney1q3tourney6, q3ctf1q3ctf4. Point release добавляет q3tourney6_ctf, pro-q3dm6, pro-q3dm13, pro-q3tourney2, pro-q3tourney4.


map q3dm6
map_restart
map_restart 5
vstr nextmap

devmap включает cheats и для обычного публичного матча не используется. Надёжная vanilla-ротация строится цепочкой vstr; последний cfg должен запустить первый map или vstr.

RCON и команды администратора


set rconPassword "длинный-уникальный-секрет"

С подключённого клиента:


/rconPassword секрет
/rcon status
/rcon map q3dm6
/rcon map_restart 5
/rcon clientkick 3

Без подключения задайте /rconAddress host:27960. Полезны status, serverinfo, systeminfo, dumpuser, map, map_restart, kick, clientkick, say, forceteam, heartbeat, killserver.

RCON передаёт пароль в незашифрованном UDP-пакете. Используйте VPN/firewall allowlist, уникальный пароль и закрытые права на cfg. Не помещайте пароль в аргументы командной строки.

Vanilla IP-фильтр:


addip 192.0.2.*
removeip 192.0.2.*
listip

g_filterBan 1 делает список banlist, 0 — allowlist. CIDR и banaddr относятся к ioquake3.

Боты

  • +set bot_enable 1 включает subsystem;
  • bot_minplayers дополняет сервер ботами;
  • addbot <name> [skill 1-5] [team];
  • botlist;
  • kick allbots.

Если боты не нужны, задайте +set bot_enable 0 до запуска.

Логи

Есть два разных журнала:

  • g_log "games.log" — игровые события InitGame, connect, kill, score, shutdown;
  • logfile 1|2 — engine console в qconsole.log.

g_logSync 1 синхронно сбрасывает каждую строку: удобно live-parser, но создаёт больше I/O. Встроенной нормальной ротации нет; используйте systemd/logrotate или служебный скрипт. Храните games.log, stdout/stderr и qconsole.log раздельно.

Безопасный сервер

  • не публиковать оригинальный binary ниже 1.32c;
  • для нового сервера предпочесть актуальный ioq3ded;
  • запускать непривилегированным пользователем;
  • открыть только нужный UDP-порт;
  • оставить sv_pure 1 и sv_floodProtect 1;
  • отключить vanilla download, если он не нужен;
  • не считать PunkBuster современной защитой;
  • закрыть cfg, логи и RCON;
  • packet flood и DDoS фильтровать на firewall/хостинге.

Серверные cvar не способны остановить насыщение канала.

Типовые ошибки

  • Couldn't load default.cfg — нет pak0.pk3 или неверен basepath;
  • Can't find map — нет PK3 карты или patch data;
  • VM_Create on game failed — нет vm/qagame.qvm, повреждён pak или неверен fs_game;
  • Server uses protocol version 68 — клиент 1.30/1.31;
  • Unpure client detected — различаются PK3/checksum/order;
  • Couldn't allocate IP port — порт занят;
  • сервер не виден — нет карты, dedicated 1, NAT/firewall/master;
  • Hunk_Alloc failed — увеличить +set com_hunkMegs;
  • Bad rconpassword — другой или пустой пароль;
  • нет games.log — неверен homepath или права записи.

Источники

Далее: полное руководство по ioquake3 и OSP 1.03a.