Ставим сервер 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   *:*

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

Гость (не проверено)

บทความนี้เกี่ยวกับพวงหรีดดอกไม้ เป็นประโยชน์สุดๆ


กำลังค้นหาข้อมูลเรื่องนี้อยู่พอดี ถือว่าเจอบทความดีๆ เลย


จะบอกต่อให้เพื่อนๆ


ที่ต้องการเลือกดอกไม้ไปงานศพอ่านด้วย





Also visit my site - บริการจัดงานฌาปนกิจ

Гость (не проверено)

บทความนี้เกี่ยวกับดอกไม้งานศพ ยอดเยี่ยมมาก


การรู้ว่าดอกไม้แต่ละชนิดมีความหมายอย่างไร ช่วยให้เลือกได้ตรงความรู้สึกมากขึ้น





ใครที่กำลังเตรียมตัวจัดงานศพให้คนสำคัญควรอ่านจริงๆ





Feel free to surf tto my page Matilda

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