Ставим сервер Counter-Strike 1.6

Захотелось мне поднять игровой сервер Counter-Strike в локальной сети с ботами, так в процессе настройки этого самого сервера и появилась эта статья. Нам потребуется машина с установленной на ней фряхой, у меня FreeBSD 7.4, немного времени и прямые руки :). 

Подготавливаем платформу для сервера - включаем эмуляцию linux, для этого делаем следующее:

# echo 'linux_load="YES"' >> /boot/loader.conf
# kldload linux

# sysctl linux.compat.osrelease=2.6.16
# echo 'linux.compat.osrelease=2.6.16' >> /etc/sysctl.conf

# echo 'linux_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/abi start

# cd /usr/ports/emulators/linux_base-f10
# make install clean

# echo 'linproc /compat/linux/proc libprocfs rw 0 0' >> /etc/fstab
# mount /compat/linux/proc

Системный параметр linux.compat.osrelease меняем, чтобы установить порт linux_base-f10 (на FreeBSD 8.0+ этого делать не требуется, там порт встает без проблем). Эта фича требуется для нормальной работы сервера контры. С портом linux_base-fc4 сервер не стал работать, выдав при этом такую ошибку:

[S_API FAIL] SteamAPI_Init() failed; unable to update local steamclient. Continuing with current version anyway.
[S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam, or a local steamclient.dll.
FATAL ERROR (shutting down): Unable to initialize Steam.

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

# mkdir /home/steam 
# pw groupadd steam 
# pw useradd steam -g steam -d /home/steam -s /bin/csh -c 'Conter-Strike 1.6 server' 
# chown steam:steam /home/steam 
# chmod 750 /home/steam 

Логинемся под новым юзером или можно сделать так: 

# su -l steam 

Качаем с сайта следующую тулзу и даем ей права на запуск: 

% wget http://steampowered.com/download/hldsupdatetool.bin 
% chmod +x hldsupdatetool.bin 

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

% mkdir /home/steam/cs 
% ./steam -command update -game cstrike -dir /home/steam/cs 
Checking bootstrapper version ...
Updating Installation
Checking/Installing 'Counter-Strike Base Content' version 35
Checking/Installing 'Linux Server Engine' version 55
Checking/Installing 'Half-Life Base Content' version 12
HLDS installation up to date

Теперь нам нужно установить несколько дополнений к контре и написать под себя конфиг для сервера.
Дополнения, которые нам понадобятся (ссылки для скачивания приведены в конце статьи):

  • Metamod - менеджер плагинов, позволяет динамически загружать/выгружать DLL плагины для добавления новых возможностей в движок Half-Life
  • dproto - благодаря ему сервер будет принимать соединения по протоколу версии 47 и 48
  • PodBot - собственно мод, который добавляет игроков в контру, управляемых компьютером

Скачиваем Metamod, распаковываем архив и правим liblist.gam, чтобы сервер подгружал библиотеку во время запуска:

% pwd
/home/steam/mods/metamod
% tar -xvf metamod-1.19-linux.tar.gz
% cd /home/steam/cs/cstrike
% mkdir -p addons/metamod/dlls && cd addons/metamod/dlls
% mv /home/steam/mods/metamod/metamod_i386.so ./

Теперь правим файл cstrike/liblist.gam, заменяем следующие строки:

gamedll "dlls\mp.dll"
gamedll_linux "dlls/cs_i386.so"

на

gamedll "addons/metamod/dlls/metamod.dll"
gamedll_linux "addons/metamod/dlls/metamod_i386.so"

Плагины описываются в файле plugins.ini, каждая строка в котором имеет следующий формат:

<platform> <filepath> [<description>]

Сам файл должен находиться в cstrike/addons/metamod. Колонки должны разделяться пробелом либо табом.

  • Ключевое слово platform принимает два значения - "linux" или "win32"
  • filepath - путь до динамической библиотеки. Можно указывать как релятивный путь (началом считается директория игры - cstrike), так и абсолютный. В путях могут использоваться слеши только в Unix-стиле, даже если сервер работает под Windows.
  • description  - это не обязательное поле, используется как внутреннее имя плагина, которое отображается в логах и в выводе сообщений на консоль. В этом поле допускается использовать знаки разделения. Двойные или одинарные кавычки не обязательны. Комментарии можно размещать только вначале строки, они могут начинаться с символов - "#" или "//".

Пример конфига cstrike/addons/metamod/plugins.ini:

//linux    dlls/mybot.so
# win32     dlls/mybot-old.dll         Mybot old
win32       dlls/mybot.dll             Mybot current
linux       /tmp/stub_mm_i386.so
win32       /tmp/stub_mm_i386.dll
linux       ../dlls/trace_mm_i386.so
win32       ../dlls/trace_mm_i386.dll
linux       dlls/admin_MM_i386.so
win32       dlls/admin_MM_i386.dll

Учтите, что плагины загружаются в порядке, в котором они указаны в файле. Для некоторых плагинов порядок загрузки может оказаться важным.

Файл перечитывается при каждом изменении уровня. Когда файл перечитывается, происходит следующее:

  • загружаются новые плагины, если такие были добавлены
  • выгружаются плагины, которые были удалены из файла. Это работает только для плагинов, которые загружены из ini файла
  • любой плагин перезагружается, если его местоположение на диске было изменено.

Теперь когда с Metamod разобрались, приступим к установке и настройке других плагинов. Скачиваем и устанавливаем dproto.

% pwd
/home/steam/mods/dproto
% unrar e dproto_0_9_87.rar
% cd /home/steam/cs/cstrike/addons
% mkdir dproto && cd dproto
% mv /home/steam/mods/dproto/bin/Linux/dproto_i386.so ./
% cd /home/steam/cs/cstrike
% mv /home/steam/mods/dproto/dproto.cfg ./

Кстати, все распакованные файлы имели права на запуск, я их убрал, потому что для этих файлов они совсем не нужны и для безопасности не хорошо. Так же для этого плагина необходим бинарник сервера собранный с набором инструкций i686 (файл hlds_i686), это важно когда будете запускать сервер.
Добавим новый плагин в автозагрузку. Для этого редактируем файл cstrike/addons/metamod/plugins.ini:

linux addons/dproto/dproto_i386.so

Ну вот добрались и до установки ботов. Скачиваем, устанавливаем, настраиваем:

% pwd
/home/steam/mods/podbot
% tar -xvf podbot_full_V3B21.zip
% cd /home/steam/cs/cstrike/addons
% mv /home/steam/mods/podbot/podbot ./
% cd podbot
% find . -type f -exec chmod -x {} \;

После распаковки, файлы тоже имеют права на запуск, я убрал их.
Правим конфиг ботов - podbot.cfg. У меня он получился такой:

# Это конфигурационный файл для Pod-Bot (для HL Counter-Strike)
#
# Любая строка, начинающаяся с '#' считается комментарием
#
# Ни одна строка не должна превышать длину в 80 символов
#
# Далее перечислены допустимые команды в файле podbot.cfg:
#
# Все аргументы в квадратных скобках являются не обязательными,
# если вы их не укажите, то будет подставлено случайное значение
#
# pb add [skill [personality [team [model [name]]]]] - добавляет бота:
#      с уровнем мастерства (skill) из диапазона от 0 до 100
#      тактикой (personality) 1 - номальная, 2- агрессивная, 3 - защитная
#      командой (team) 1- террористы, 2 - спецназ, 5 - автовыбор
#      модель (model), это тоже самое что, видит игрок на экране выбора
#      модели
#      имя (name) это конечно же имя бота, отображаемое в игре
#      
#      Если вы опустите аргументы, то будет создан бот со случайным
#      уровнем мастерства (между pb_minbotskil и pb_maxbotskill),
#      так же бот получит случайную модель и случайное имя,
#      взятое из файла "Botnames.txt". Вы можете добавить свои
#      имена для ботов в этот файл.
#      ! Ни в коем случае не удаляйте файл BotChat.txt, он всегда используется !

# pb fillserver [skill [personality [team [model]]]] - автоматически
# добавляет ботов на сервер, пока не будет исчерпан лимит
# боты + игроки:
# 1. pb_maxbots, если задана (значение должно быть отлично от 0)
# 2. если предыдущее значение не задано или равно 0, то в роли
#     ограничителя используется значение mp_maxplayers

# Этот параметр устанавливает директорию, из которой
# загружаются (или сохраняются) вэйпоинты (относительно
# директории POD-Bot). Не используйте в пути косую черту
# и пробелы. Это не будет работать для первой созданной
# вами игры (она стартует со значением wptdefault). Но когда
# создадите во второй раз или загрузите новую карту, то
# используется, указанная вами директория.
# По умолчанию, занчение этой переменной - wptdefault
pb_wptfolder wptdefault

# Установите значение в 1, чтобы отображалось приветствие
# при старте игры
# По умолчанию: 0
pb_welcomemsgs 0

# Используйте этот параметр, чтобы вкл/выкл Speech Synthesis.
# По умолчанию: 0 (выключено).
pb_usespeech 0

# Следующие два параметра устанавливают минимальное и
# максимальное количество ботов на сервере. Эти значения
# работают вместе с pb fillserver и pb removebots. Актуальное
# количество ботов находится в указанном диапазоне, с помощью
# этих параметров.
# Ботов можно будет добавлять, пока общее количество
# игроков (ботов и людей) не исчерпает значение pb_maxbots.
# Каждый раз, при подключении нового игрока к серверу,
# будет удаляться бот с сервера до тех пор, пока количество
# ботов не достигнет pb_minbots. После того, как игроки
# отключатся от сервера, будут автоматически добавляться боты,
# пока общее число игроков на сервере (боты + люди) снова 
# не исчерпает значение pb_maxbots. Значение pb_maxbots должно
# быть хотя бы на 1 меньше, чем значение maxplayers (иначе никто
# не сможет подключиться к серверу). Вы можете отключить эту
# функцию установив значение pb_maxbots в 0. Так же эта функция
# не будет работать в случае, если значение переменной
# pb_bot_quota_match больше 0 (в этом случае общее количество ботов
# будет вычисляться выражением люди * pb_bot_quota_match - конечно
# с учетом лимитов)
# По умолчанию:
# pb_bot_quota_match = 0.
# pb_minbots = 0,  pb_maxbots = 16.
pb_minbots 0
pb_maxbots 16
pb_bot_quota_match 0

# С помощью следующей опции можно указать команду, в которую
# будут добавляться боты. Полезна, если вы хотите иметь одну
# команду, состоящую только из ботов.
# Возможные значения: "ANY", "T", "CT". По умолчанию: "ANY"
pb_bot_join_team "ANY"

# С помощью следующей опции можно указать модель, которую
# боты "возьмут" при добавлении. Полезна, если вы хотите, чтобы
# в одной команде имели одинакоые модели.
# Возможные значения: 1,2,3,4 - модели, 5 - по умолчанию, автовыбор
pb_skin 5

# Следующие настройки определяют частоту (в секундах) обновления
# некоторых событий в алгоритме работы ботов. Если у вас медленный
# комп, то вы можете увеличить значения для повышения
# производительности
# NOTE: This seriously affects the Bots Perception. If you have a
# fast computer you might try lowering them to get even better
# playing results.
# По умолчанию:
# pb_timer_sound = 0.5
# pb_timer_pickup = 0.3
# pb_timer_grenade = 0.5.
pb_timer_sound 0.5
pb_timer_pickup 0.3
pb_timer_grenade 0.5

# Установите этот параметр в 0, чтобы запретить ботам рисовать логотип
pb_spray 1

# Установите этот параметр в 1, чтобы боты могли ранить своих
pb_ffa 0

# Через этот параметр можно разрешить ботам стрелять через стены
# (так же эото параметр задается в файле "botskill.cfg")
# По умолчанию: 1
pb_shootthruwalls 1

# passwordkey - этот параметр нужно задать, чтобы получить доступ к 
# меню ботов. Как в примере ниже, вы должны задать свой
# собственный пароль, вместо стандартного _pbadminpw:
# setinfo _pbadminpw "your_password"
# Вышеуказанная строка должна использоваться в autoexec.cfg 
# на вашем компе, с которого подключаетесь или на сервере:
# в обоих случаях этот файл должен находиться в корне директорий
# cstrike/czero.
pb_passwordkey "_pbadminpw"

# Через эту переменную указывается пароль для доступа к меню
# управления ботами. 
pb_password "your_password"

# Здесь указывается максимальное количество ботов, которые будут
# следовать за игроков при подаче команды "Follow Me" через радио.
# По умолчанию: 5
pb_numfollowuser 5

# Минимально возможный уровень мастерства при добавления бота
# без указания этого параметра.
# По умолчанию: 95
pb_minbotskill 95

# Максимально возможный уровень мастерства при добавления бота
# без указания этого параметра.
# По умолчанию: 100
pb_maxbotskill 100

# Здесь указывается максимально возможное количество оружия,
# которое бот может поднять за раунд.
# По умолчанию: 10.
pb_maxweaponpickup 10

# Задержка, по истечению которой боты начнут добавляться на новую
# карту.
# По умолчанию: 10.
pb_mapstartbotdelay 10

# Установите этот параметр в 1, чтобы автоматически убивать ботов,
# если не осталось ниодного живого человека.
# По умолчанию: 0.
pb_autokill 0

# Задержка, по истечению которой боты  будут автоматом прибиты,
# если включена предыдущая опция.
# По умолчанию: 45.
pb_autokilldelay 45

# Укажите здесь максимально количество времени  секундах, которое
# бот может находиться на одном месте.
# По умолчанию: 30.
pb_maxcamptime 30

# Включить/Выключить режим Джэйсона. Это значит, что боты не будут
# покупать оружие и будут драться только на ножах.
# По умолчанию: 0.
pb_jasonmode 0

# Здесь настраивается формат имени бота:
# 0 - не показывать уровень мастерства и префикс [POD] в имени бота;
# 1 - показывать уровень мастерсва и префикс [POD] в имени бота;
# 2 - показывать только префикс [POD] в имени бота;
# 3 - показывать только уровень мастерства в имени бота.;
# Префикс бота с агрессивной тактикой будет выглядеть так - [P*D],
# с нормальной - [POD], а с защитной - [P0D] (просто ноль, вместо символа O).
# По умолчанию: 1.
pb_detailnames 1

# С помощью следующего параметра можно задать фактор опасности, учитывая
# который боты будут выбирать свой маршрут (проще говоря - они будут учитывать
# места, в которых они были убиты в предыдущем раунде). Высокие значения
# параметра будут значить, что боты будут лучше выбирать свой путь следования
# к какому-либо месту на карте (ну типа будут выбирать более безопасные пути).
# Учтите только, что из-за высоких значений параметра нагрузка на проц возрастет.
# По умолчанию: 2000
pb_dangerfactor 2000

# Разрешить ботам чатиться.
# По умолчанию 1.
pb_chat 1

# Установите этот параметр в 1, чтобы в таблице результатов в колонке ping 
# отображалась строка "BOT". Если укажите 2, то будет отображен случайный
# пинг. Если 0, то ничего не будет отображено.
# По умолчанию: 2
pb_latencybot 2

# Включите, чтобы боты использовали радиокоманды.
# По умолчанию: 1
pb_radio 1

# pb_aim_type 1-4 (по умолчанию 4)
# 1 = inhuman turns
# 2 = constant angle velocity
# 3 = botaim1
# 4 = botaim2
pb_aim_type 4

# VERTICAL (up/down) spring stiffness of the aiming system. This value affects
# the quickness of the crosshair movement, as well as the frequency of
# the resulting oscillations. (default: 13.0)
pb_aim_spring_stiffness_x 13.0

# HORIZONTAL (left/right) spring stiffness of the aiming system. This value
# affects the quickness of the crosshair movement, as well as the frequency of
# the resulting oscillations. (default: 13.0)
pb_aim_spring_stiffness_y       13.0

# VERTICAL (up/down) damping coefficient of the aiming system. This value also
# affects the quickness of the crosshair movement, and the amplitude of
# the resulting oscillations. (default: 0.22)
pb_aim_damper_coefficient_x 0.22

# HORIZONTAL (left/right) damping coefficient of the aiming system. This value
# also affects the quickness of the crosshair movement, and the amplitude of
# the resulting oscillations. (default: 0.22)
pb_aim_damper_coefficient_y 0.22

# VERTICAL (up/down) error margin of the aiming system. This value affects how
# far (in game length units) the bot will allow its crosshair to derivate from
# the ideal direction when not targeting any player in particular.
# (default: 2.0)
pb_aim_deviation_x 2.0

# HORIZONTAL (left/right) error margin of the aiming system. This value affects
# how far (in game length units) the bot will allow its crosshair to derivate
# from the ideal direction when not targeting any player in particular.
# (default: 1.0)
pb_aim_deviation_y 1.0

# Perpendicular influence of the vertical axis on a HORIZONTAL movement. This
# value affects how much (in fraction of 1) the bot will be disturbed when
# moving its crosshair on an axis by the inherent movement on the other axis.
# (default: 0.25)
pb_aim_influence_x_on_y 0.25

# Perpendicular influence of the horizontal axis on a VERTICAL movement. This
# value affects how much (in fraction of 1) the bot will be disturbed when
# moving its crosshair on an axis by the inherent movement on the other axis.
# (default: 0.17)
pb_aim_influence_y_on_x 0.17

# Maximal value in seconds after which the aiming system will re-evaluate its
# ideal direction. This affects how often a bot will attempt to correct an
# imprecise crosshair placement by moving the crosshair inside the error
# margin bounds defined by the botaim_deviation CVARs. (default: 1.2)
pb_aim_offset_delay 1.2

# Fraction of the full speed the aiming system will adopt as speed when aiming
# at nothing in particular. This affects how slow the bot will move its
# crosshair when targeting nobody, relatively to its full speed capacity.
# (default: 0.5)
pb_aim_notarget_slowdown_ratio 0.5

# Fraction of the estimated target's velocity the aiming system will rely on
# when aiming at a moving target. This affects how well the bot will be able
# to track moving targets on the fly, and whether it will have a tendancy
# to aim ahead of it or behind it. (default: 2.2)
pb_aim_target_anticipation_ratio 2.2

# Здесь можно задать, какое оружие будет запрещено для покупки ботам.
# В списке указаны номера битов, которые отвечают за нужное ограничение.
# Пистолеты
# 0 - KNIFE
# 1 - USP
# 2 - GLOCK18
# 3 - DEAGLE
# 4 - P228
# 5 - ELITE
# 6 - FIVESEVEN
# Дробовики
# 7 - M3
# 8 - XM1014
# SMG
# 9 - MP5NAVY
# 10 - TMP
# 11 - P90
# 12 - MAC10
# 13 - UMP45
# Винтовки
# 14 - AK47
# 15 - SG552
# 16 - M4A1
# 17 - GALIL
# 18 - FAMAS
# 19 - AUG
# 20 - SCOUT
# 21 - AWP
# 22 - G3SG1
# 23 - SG550
# Пулемет
# 24 - M249
# Щит
# 25 - SHIELD
pb_restrweapons "00000000000000000000000000"

# 0 - vest
# 1 - vest and helmet
# 2 - flashbang
# 3 - he grenade
# 4 - smoke grenade
# 5 - defuser
# 6 - night vision googles
# 7 - primary ammo
# 8 - secondary ammo
pb_restrequipammo "000000000"

# Следующие строки автоматически добавляют ботов на сервер,
# при создании новой игры.
pb add 100
pb add 100
pb add 100
pb add 100
pb add 100
pb add 100
pb add 100

# Как альтернативный вариант - можно раскомментировать этот параметр, 
# чтобы автоматом заполнить все доступные места на сервере.
# pb fillserver 100

# Следующий параметр задает клавишу, при нажатии которой будет
# отображено меню управления ботами
bind "=" "pb menu"

Добавим новый плагин в автозагрузку. Для этого редактируем файл cstrike/addons/metamod/plugins.ini:

linux addons/podbot/podbot_mm_i386.so

На этом установка и настройка плагинов закончена, осталось только рихтануть конфиг сервера под себя и можно пробовать запускать сервер. Все параметры при запуске сервера будут браться из файла server.cfg. У меня этот файл выглядит так:

// Используйте этот файл, чтобы настроить ваш сервер.
// Этот файл читается при запуске сервера.

log on                   // вести лог сервера
sv_logsdir "logs"        // Директория относительно директории "cstrike", в которой будут сохраняться лог файлы
sv_logbans 1             // записывать в лог баны
sv_logecho 1             // показывать информацию из логов сервера в консоль(сервера)
sv_logfile 1             // записывать логи сервера в файлы
sv_log_onefile 0         // ... в один файл
mp_logmessages 1         // писать в лог чат игроков для последующих разборок
mp_logdetail 3           // записывать в лог повреждения от: 0 - выключено; 1 - противников; 2 - своих; 3 - и от противников и от своих.
writeid                  // записываем SteamID игроков
writeip                  // записываем IP игроков

// Имя сервера
hostname "Counter-Strike 1.6 Server"
maxplayers 32
mapcyclefile "mapcycle.txt"     // Файл со списком карт для автоматической смены карты по окончанию mp_timelimit или кол-ва побед/раундов.
motdfile "motd.txt"             // имя файла, отображающее текст в окне перед тем, как выбрать команду
hpk_maxsize 16                  // Максимальный размер файла custom.hpk (максимальный размер суммы всех игровых логотипов на сервере, в мегабайтах)

// команды управления поведением игрока на карте
mp_allowNPCs 1        // разрешить NPC на сервере
mp_allowspectators 1  // разрешить игрокам после смерти наблюдать за чужими игроками
mp_autocrosshair 0    // разрешить автоприцеливание
mp_autokick 0         // разрешить автокик за убийство игроков своей команды?
mp_autoteambalance 1  // разрешить автоматическую балансировку команд
mp_buytime 0.5        // время покупки в минутах
mp_c4timer 35         // время таймера бомбы
mp_chattime 10        // время, в течении которого игроки смогут разговаривать между собой после окончания текущей карты
mp_decals 200         // Колличество разрешённых декалей (спреи, пятна крови, пулевые отверстия)
mp_fadetoblack 0      // после смерти экран становится чёрным, не давая игроку смотреть за другими игроками в режиме спектатора
mp_falldamage 1       // урон от падения
mp_flashlight 1       // разрешить фонарик
mp_forcecamera 1      // разрешить переключения камер в режиме спектатора
mp_forcechasecam 1    // после смерти игрок может следить только за своей командой
mp_fraglimit 0        // максимальное колличество фрагов, при достижении которого определённым игроком карта сменится на следующую
mp_freezetime 2       // начальный отсчёт времени в начале каждого раунда(для покупки), в секундах
mp_footsteps 1        // слышимость звуков шагов
mp_friendlyfire 0     // возможность атаковать своих
mp_hostagepenalty 0   // кикает террориста при убийстве заданного лимита заложников
mp_limitteams 1       // максимальное количество превышения игроков одной команды над другой (от 1 и до бесконечности )
mp_mapvoteratio 0.51  // для смены карты нужно 51% голосов
mp_maxrounds 0        // максимальное количество раундов, при достижении которого игра на карте будет считаться законченной
mp_playerid 1         // контролирует информацию которую игрок видет на панели статуса: 0 все имена; 1 только имена игроков своей команды; 2 без имён
mp_spawnprotectiontime 10 // кикает игроков которые убивают членов своей команды в течении # секунд после перезапуска раунда
mp_roundtime 3        // длина раунда в минутах
mp_startmoney 800     // колличество начальных денег у игроков
mp_timelimit 20       // ограничение по времени на карту, в минутах
mp_tkpunish 0         // в следующем раунде убить того, кто убил игрока своей команды
mp_winlimit 32         // количество выигрышей одной команды при достижении которого игра на карте считается законченной

// ================================================================
// Server config
// ================================================================
sv_aim 0              // отключить автоприцеливание
sv_airaccelerate 10   // определяет ускорение игрока, когда он находится в воздухе(например падает)
sv_allowdownload 1    // разрешить загрузку с сервера(например карт)
sv_allowupload 1      // разрешить закачку файлов (например decals, спрей-логи, карты) на сервер
sv_cheats 0           // разрешить игровые читы на сервере (пример: noclip)
sv_consistency 1      // предписывает ли сервер последовательность файла для критических файлов
sv_contact "admin@info-x.org" // e-mail администратора сервера
sv_enableoldqueries 0 // разрешить поддержку старого стиля (Half-life 1) серверных запросов
sv_footsteps 1        // использовать звук шагов при передвижении игрока
sv_friction 4         // коэффициент трения в игре
sv_gravity 800        // гравитация в игре
sv_language 0         // Устанавливает язык
sv_maxspectators 8    // Максимальное количество наблюдателей
sv_maxspeed 320       // максимальная скорость игрока
sv_minupdaterate 10   // минимальное колличество обновлений(колличество пакетов) которое разрешено на сервере
sv_pausable 0         // разрешить ставить паузу во время игры
//sv_password 0         // Пароль для входа на сервер
sv_rcon_banpenalty 15 // колличество минут на которое банится игрок пытавшийся подобрать rcon-пароль к серверу
sv_rcon_maxfailures 5 // максимальное колличество попыток при наборе rcon-пароля, после истечения которых игрок будет забанен
sv_rcon_minfailures 5 // колличество попыток при наборе rcon-пароля во время заданное sv_rcon_minfailuretime, после истечения которых игрок будет забанен
sv_rcon_minfailuretime 30 // колличество секунд для определения неверной rcon-аутенфикации
sv_specaccelerate 5   // ускорение при передвижения в режиме spectator
sv_specnoclip 1       // игрок в режиме spectator может пролетать через стены и объекты
sv_specspeed 3        // скорость передвижения в режиме spectator
sv_spectalk 1         // участие спектаторов в общем чате
sv_stats 1            // собирать статистику использования процессора
sv_stepsize 18        // длинна шага в юнитах
sv_stopspeed 75       // минимальная скорость остановки на поверхности
sv_timeout 30         // если сервер не получает отклика от клиента в течении # секунд, клиент отключается от сервера

// Голосовые настройки
sv_voicecodec "voice_speex" // Кодек для общения через микрофон
sv_voiceenable 1            // Разрешить использование микрофона (1/0=Вкл/Выкл).
sv_voicequality 5           // качество голоса, от 1 до 5, чем больше, тем лучше, по умолчанию 3
sv_alltalk 0          // разрешить всем слышать переговоры друг друга по микрофону, вне зависимости от команды (даже мертвые)


// =======================================================================
// сервер для локальной сети
sv_lan 1
insecure
nomaster

// load ban files
exec listip.cfg
exec banned.cfg

// первая карта
map de_aztec

Ну вот настал тот момент, когда можно пробовать запустить сервер. Для удобства остановки/запуска сервера я настрогал следующий скрипт:

#!/bin/sh

HL_DIR="/home/steam/cs16"
HL_RUN="hlds_run"
HL_BIN="hlds_i686"
HL_PID="$HL_DIR/hlds.pid"
HL_LOG="$HL_DIR/hlds_console.log"

#PATH="$PATH:$HL_DIR"; export PATH
cd "$HL_DIR"

case "$1" in
   start)
     if [ -f "$HL_PID" ]; then
       echo "Counter-Strike already running"
       exit 1
     fi
     #$HL_DIR/$HL_RUN -game cstrike -pidfile "$HL_PID" -norestart > "$HL_LOG" 2>&1 &
     $HL_DIR/$HL_RUN -binary "$HL_DIR/$HL_BIN" -game cstrike -pidfile "$HL_PID" -norestart > "$HL_LOG" 2>&1 &
     sleep 3
     if [ -f "$HL_PID" ]; then
       echo "Server started..."
     fi
     ;;

   stop)
     if [ ! -f "$HL_PID" ]; then
       echo "Counter-Strike not running"
       exit 1
     fi
     kill `cat "$HL_PID"`
     rm -f "$HL_PID"
     ;;

   restart)
     if [ -f "$HL_PID" ]; then
       kill `cat "$HL_PID"`
       rm -f "$HL_PID"
       echo "Server stopped..."
     else
       echo "Server not running..."
     fi
     sleep 3
     $HL_DIR/$HL_RUN -binary "$HL_DIR/$HL_BIN" -game cstrike -pidfile "$HL_PID" -norestart > "$HL_LOG" 2>&1 &
     sleep 3
     if [ -f "$HL_PID" ]; then
       echo "Server started..."
     else
       echo "Server error..."

     fi
     ;;


   *)
     echo "hlds {start|stop|restart}"
     ;;
esac

exit 0

Запускаем сервер и проверяем запустился ли он:

%./hlds.sh start
Server started...
% sockstat -4 -l | grep hlds
steam    hlds_i686  39502 4  udp4   *:27015               *:*
steam    hlds_i686  39502 10 udp4   192.168.7.250:26900   *:*
steam    hlds_i686  39497 4  udp4   *:27015               *:*
steam    hlds_i686  39497 10 udp4   192.168.7.250:26900   *:*

Ну вот контра работает, теперь можно и поиграть... )

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика