Urban Terror - потрясающая и очень динамичная “стрелялка”! Его преимущества не только в скорости и динамике игры, но и в том, что он доступен бесплатно, занимает относительно мало места и весьма нетребователен к ресурсам. Через некоторое время, поиграв вдоволь, появляется желание повесить сервер с ботами и у себя в локальной сети. Итак, у нас для этого есть сервер под управлением FreeBSD и немного времени на установку. На Linux все устанавливается аналогично, но со своим набором команд.

Установка выделенного сервера

Идем в соответствующий каталог:

cd /usr/ports/games/iourbanterror/

Задаём команду:

1
2
3
4
5
6
7
8
make WITHOUT_CLIENT=1 \
 WITHOUT_GAMELIBS=1 \
 WITH_DEDICATED=1 \
 WITHOUT_CURL=1 \
 WITHOUT_OPENAL=1 \
 WITHOUT_MUMBLE=1 \
 WITHOUT_VORBIS=1 \
 WITH_TEAMARENA=1 install clean

Тут меня ждала небольшая проблемка. Дело в том, что будет скачиваться дата-архив игры, который весит 1024МБ. С моим достаточно слабым каналом это могло быть долгим процессом часа на два. Но что ещё хуже – чем дольше качалось, тем больше «умирало». Скорость постепенно снижалась буквально к четверти разрешенной. Однако, у нас в консоли высветилась ссылка на архив и почему бы этим не воспользоваться. Переходим в каталог со скачанными файлами

cd /usr/ports/distfiles/

Устанавливаем wget:

pkg_add -r wget

Закачиваем им ссылку (такая высветилась в моём случае):

wget -c ftp://ftp.snt.utwente.nl/pub/games/urbanterror/full_install/linux_or_mac/UrbanTerror411.zip

Таким образом закачка прошла, используя практически весь мой канал. Конечно, ещё будет закачиваться и linuxq3apoint-1.32b-3.x86.run на 29 MB, но это уже не так и много.

Создание пользователя для сервиса и конфигурационных файлов

А так же установим screen, который поможет запускать нам сервис в бэкграунде и при необходимости возвращаться к нему

pkg_add –r screen

Далее нам нужно создать пользователя, от имени которого мы и будем запускать этот сервис

pw user add urban -m

И переходим в эту учётную запись

su - urban

Создадим нужный каталог для конфигов и перейдём в него:

mkdir -p .ioUrbanTerror/q3ut4

cd .ioUrbanTerror/q3ut4

Он нам нужен для того, чтобы разместить в нём 3 конфигурационных файла: server.cfg , mapcycle.txt и bots.cfg


*server.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 sets "Admin" "Wikiadmin from wikiadmin.net"
 sets "Email" "wikiadmin@wikiadmin.net"
 set rconpassword "Yjhvfkmysqgfc"
 set g_gametype "3"
 set sv_hostname "Urban server on wikiadmin.net"
 set g_respawndelay "1"
 set bot_enable "1"
 set g_teamautojoin "1"
 set g_maxteamkills "5"
 set g_respawnprotection "3"
 // (restart/map/nextmap/cyclemap)
 set g_allowVote "536870926"
 set g_log ""
 set g_logroll "0"
 set fraglimit "50"
 set timelimit "15"
 // Startup map
 map ut4_turnpike
 // Add bots
 exec bots.cfg

Не забудьте поменять настройки на свои! И обратите особое внимание на set g_gametype. Вот его значения, выбирайте по вкусу:

1
2
3
4
5
6
7
 0=FreeForAll
 3=TeamDeathMatch
 4=Team Survivor
 5=Follow the Leader
 6=Capture and Hold
 7=Capture The Flag
 8=Bombmode
  • mapcycle.txt
1
2
3
4
5
6
7
8
9
 ut4_turnpike
 ut4_abbey
 ut4_prague
 ut4_mandolin
 ut4_algiers
 ut4_austria
 ut4_sanc
 ut4_riyadh
 ut4_thingley

Здесь у нас указаны только те карты, где боты бегают. Если есть какие-либо ещё – подскажите.

  • bots.cfg
1
2
3
4
5
6
7
8
9
 kick allbots
 addbot boa 2 blue 25 "Psih"
 addbot chicken 2 blue 25 "Shuza"
 addbot cockroach 2 blue 25 "Idiot"
 addbot goose 2 blue 25 "Debil"
 addbot boa 2 blue 25 "Botan"
 addbot chicken 2 blue 25 "Gomer"
 addbot cockroach 2 blue 25 "Bred"
 addbot goose 2 blue 25 "Bolnoy"

Уровень сложности бота - это цифра, идущая в 3 столбце. Самые простые 1 и самые сложные - 5. Тут для примера установлен 2 уровень, но поверьте - слишком просто.

Создание скрипта запуска с перезапуском в случае обрушения процесса

Теперь в домашней директории пользователя urban создайте скрипт ut.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 #!/bin/bash
  myExit() {
  kill $$
  exit $?
 }
  
 trap myExit SIGINT
  
 while true
 do
  /usr/local/bin/ioUrTded \
      +set fs_game q3ut4 \
      +set dedicated 1 \
      +set net_ip 10.0.0.20 \
      +set net_port 27960 \
      +set com_hunkmegs 256 \
      +exec server.cfg
  
  echo "server crashed on `date`" > /usr/home/urban/last_crash.txt
 done

Не забывайте поменять IP на свой! Далее дайте скрипту права на запуск

chmod 700 start.sh

Запуск сервиса и проверка

И теперь от имени root зайдите в screen, перейдите в пользователя urban (su – urban) и запускайте сервис

./ut.sh

Если пробежала куча строк и не было выхода - значит всё ок. Выходите из screen (Ctrl+A и D) и проверьте, слушает ли ваш сервер нужный нам порт:

1
 [sockstat](/sockstat) -4 | [grep](/grep) 27960

вывод:

1
urban    ioUrTded   68694 7  [UDP](/udp)4   10.0.0.20:27960       *:*