Tremulous-server в локальной сети своими руками

 Tremulous-server в локальной сети своими руками

 

И так, задача:
Вы решили в собственной/городской сети поднять трем-сервак и подсадить юзверов на эту бесплатную игрушку. Плюсы её вполне очевидны: динамичность геймплея и кроссплатформенность, к тому же халява...
Для запуска сервера я использовал ненужный атлон с 256мб оперативной памяти и Ubuntu 7.10 Server (единственный диск, который был под рукой) с прописанными репозиториями для Hardy. Предполагается, что администратор, как минимум, знаком с игрой -). Ssh, nano и mc в помощь. Картинок красивых не будет, так что заранее sry, как говорят профи трема.


Реализация:
Понадобится запустить выделенный dedicated-сервер на уровне демона/службы на дефолтовом 3072х-ом udp-порту. Если у сервера есть выход в глобальную сеть, есть смысл позволить heartbit до мастер-сервера (откроется 30710 udp-порт). В этом случае игроки со всего мира будут видеть ваш сервер в общем списке в разделе игры Internet. В соответствии с этим открываем/пробрасываем udp-порты на маршрутизаторе/фаерволле, если таковые конечно есть. Видел совет, что нужно открыть такой же tcp-порт, вопрос спорный - fixme.

Также нужно определиться, из-под какого пользователя будет работать будущий сервер. В соответствии с этим ставим трем, расставляем права и используем домашнюю папку своего пользователя. Я ничего не боюсь, и у меня он - root (на самом деле дело немного в другом: я работаю с некоторыми root'овыми приложениями и мне лень переключать пользователей или использовать два окна гномовского эмулятора терминала).

Игровые команды.
Здесь у меня откровенный пробел. Не лишним будет заглянуть в официальную wiki. А так же хорошие примеры содержаться в конфиге admin.dat (об этом немного позже). Большой список команд администраторов и пользователей в конце статьи (см. Дополнение).

Практика:

Для начала скачаем и установим официальный tremulous-клиент, в т.ч. и серверную часть. Исходники не нужны. Не следует ставить трем из репозиториев. Потому как apt-get install раскидает игру по всей системе -). При установке обратим внимание, что путь можно изменить. По дефолту это - /usr/local/games/tremulous .
Сейчас немного теории.
Будем, исходить из того, что трем установлен, как написано чуть выше, в папку /usr/local/games/tremulous , которая содержит или должна содержать следующие необходимые файлы/конфиги/папки:

  • файл tremded.x86 - собственно сам сервер
  • папку base - внутри неё располагаются карты, имеющие расширение *.pk3 (сюда, выкачав с интернета, можно положить и другие карты; клиент, при активированной в игре опции autodownload (в консоли "~ё" клиента команда\cl_allowDownload 1; автоматически скачает недостающие карты) и два важных конфигурационных файла: server.cfg и maprotation.cfg. В первом файле описана вся конфигурация сервака, во втором задана последовательность карт, которые крутятся на сервере (смысл заложен в самом названии).


Пример файла server.cfg:

// Tremulous decicated server config
// by the Tremulous Infobase
//
// http://www.tremulous.info
//
// version 1.1
// server name & loading screen

set sv_hostname "myserver" // название сервера в списке серверов
set g_motd Tremulous Lan Servak // сообщение на экране при коннекте к игре

// server password

set g_needpass 0 // нужен (1) или не нужен (0) пароль для коннекта
set g_password "" // server password

// reserved slots
set sv_privatepassword "1234" // приватный вход, если сервер заполнен
set sv_privateclients 30 // кол-во приватных входов, учитывая //sv_maxclients, используется также ботами

// remote control
set rconpassword "123456" // пароль супер-админа


//set net_ip 192.169.122.242:30777 //можно указать особые порт и ip, но не факт, что опция работает




// Admin stuff


set g_admin ./admin.dat


set g_adminTempBan 300




// main configuration


set sv_maxclients 54 // максимальное кол-во игроков на сервере


set sv_pure 0 // фильтрация замоденных клиентов


set sv_allowdownload 1 // позволять загружать карты с сервера


set sv_minrate 5000 // Minumum rate for connected clients


set sv_maxrate 25000 // Maximum rate for connected clients


set sv_minsnaps 10 // Minumum snapshots for connected clients


set sv_minping 0 // Minumum latency for connected clients


set sv_maxping 250 // Maximum latency for connected clients


set g_allowvote 1 // enable client map/kick voting by "/callvote" cmd


set g_antilag 1 // serverside antilag feature


set g_unlagged 0 // если поставить 1, стрелять по печенькам будет значительно легче, параметр 50 увеличит успех


set g_initialmaprotation rotation1 // following the first map, start this rotation


set g_mincommandperiod 1000


set pmove_fixed 0


set g_adminsayfilter 0 //Admin commands will no longer be printed




// gameplay specific configuration


set timelimit 90 // after 90 minutes, the game will end as a draw


set g_suddendeathtime 75 // after 75 minutes, all build points are removed


set g_teamforcebalance 0 // forces each team to have a similar number of players


set g_friendlyfire 1 // teammates may damage each other


set g_friendlybuildablefire 1


set g_humanBuildPoints 120 // Number of buildpoints for human team, default 100


set g_humanMaxStage 2 // Maximum human stage (s1=0, s2=1, s3=2)


set g_humanStage2Threshold 20 // threshold for humans to reach stage 2, default 20


set g_humanStage3Threshold 40 // threshold for humans to reach stage 3, default 40


set g_alienBuildPoints 120 // Number of buildpoints for alien team, default 100


set g_alienMaxStage 2 // Maximum alien stage (s1=0, s2=1, s3=2)


set g_alienStage2Threshold 20 // threshold for aliens to reach stage 2, default 20


set g_alienStage3Threshold 40 // threshold for aliens to reach stage 3, default 40


set g_gravity 800 // gravity setting, default 800


set g_dretchPunt 0


set g_mapconfigs "mapconfigs"


set g_friendlyfire 1 // teammates may damage each other


set g_friendlybuildablefire 1 //позволить своим ломать постройки


set g_humanBuildPoints 120 // Number of buildpoints for human team, default 100


set g_humanMaxStage 2 // Maximum human stage (s1=0, s2=1, s3=2)


set g_humanStage2Threshold 20 // threshold for humans to reach stage 2, default 20


set g_humanStage3Threshold 40 // threshold for humans to reach stage 3, default 40


set g_alienBuildPoints 120 // Number of buildpoints for alien team, default 100


set g_alienMaxStage 2 // Maximum alien stage (s1=0, s2=1, s3=2)


set g_alienStage2Threshold 20 // threshold for aliens to reach stage 2, default 20


set g_alienStage3Threshold 40 // threshold for aliens to reach stage 3, default 40


set g_gravity 800 // gravity setting, default 800


set g_dretchPunt 0


set g_mapconfigs "mapconfigs"


set g_speed 320 //Speed of players


//start this map first


map atcs


Это расширенный некоторыми опциями конфиг, за дополнительными параметрами гуглим на тему server.cfg . Много чего можно выцепить отсюда.
Если копируете этот конфиг, мои каменты лучше убрать. Исправлять/добавлять параметры можно и не останавливая сервер, потом в игровой консоли через rcon пароль exec server.cfg.

Пример maprotation.cfg:

rotation1
{
atcs
// ambush
atcs
atcs
atcs
// karith
// arachnid2
nexus6
// transit
uncreation
atcs
atcs
atcs
atcs
tremor
// niveus
}

Очень упрощённый конфиг, двумя "//" закоментированы ненужные карты.
Хорошую информацию по настройке ротации карт с расширенным конфигом можно почерпнуть здесь.

Папка /usr/local/games/tremulous/base/vm/ содержащяя game.qvm не понадобится.

tremded.x86
Файл tremded.x86 необходимо заменить на улучшенную версию. Взять её можно отсюда. После скачивания не забываем сделать файл исполняемым: chmod +x ./tremded.x86 .
Команда ручного запуска сервера будет выглядить наподобие этой:
/usr/local/game/tremulous/tremded.x86 +set dedicated 2 +map atcs +exec server.cfg .

Или если потребуется убрать сообщения о соединении и назначить порт:
/usr/local/game/tremulous/tremded.x86 +set dedicated 2 +set net_port 30720 +exec server.cfg 1>>/dev/null 2>>/dev/null & .
Пояснение: +set dedicated 2 включает синхронизацию с мастер-сервером в интернете, +set dedicated 1 выключает.

Только не стоит пока торопиться и запускать сервак.

game.qvm
Это ключевой файл в организации сервака, который нужно себе установить. Классическим вариантом считается Lakitu.
И Ambush, позволяющий играть с alien-ботами. Ещё одна интересна разработка. Список в конце статьи (см. Дополнение).

В обоих случаях используем домашнюю папку (у меня, как говорил уже, root) со структурой:

Именно в /root/tremulous/base/vm кладём файл game.qvm .
** Кстати, чтобы каждый раз его не заменять, почти всегда разработчиками прилагается патч.

mapconfigs
Другая важная папка - /root/tremulous/base/mapconfigs (создаём ручками) содержит отдельный конфиг для каждой карты, в котором можно прописать отдельные параметры в обход настроек server.cfg: например, только на карте atcs у aliens можно сделать "кредиты для строительства" (build points) в два раза больше, чем у людей, т.е. перенести некоторые настройки из server.cfg сюда.
Вот пример для карты atcs /root/tremulous/base/mapconfigs/atcs.cfg с автоматически подгружаемыми ботами:

set g_ambush 1


//set g_ambush_granger_s1 2
set g_ambush_dretch_s2 8
set g_ambush_basilisk_s3 4
set g_ambush_basilisk2_s4 4
set g_ambush_marauder_s5 4
set g_ambush_marauder2_s6 4
set g_ambush_dragon_s7 10
set g_ambush_dragon2_s8 10
set g_ambush_tyrants_to_win 20


set g_ambush_dodge 70
set g_ambush_dodge_random 10
set g_ambush_rebuild_time 60
set g_ambush_sec_to_start 40
set g_ambush_stage_suicide 0
set g_ambush_no_egg_ffoff 1
set g_ambush_kill_spawns 1
set g_ambush_att_buildables 0
set g_ambush_range 20000


set g_antiSpawnBlock 200


//Aliens
!bot add Bot1 aliens
wait 100
//!bot add Bot2 aliens
wait 100
//!bot add Bot3 aliens
wait 100
//!bot add Bot4 aliens
wait 100
//!bot add Bot5 aliens
wait 100
//!bot add Bot6 aliens
wait 100


//Humans
//!bot add Gooogle humans

Двумя "//" закоментированы неиспользуемые. Расшифровку ambush-ботов можно проследить по вышеприведённой ссылке.
Чтобы конфиги карт работали (название конфига должно полностью совпадать с названием карты), в server.cfg обязательна строка: set g_mapconfigs "mapconfigs".

games.log
Файлы /root/tremulous/base/games.log (и/или /root/tremulous/base2/games.log) является ключевым лог-файлом сервера (у меня их два, насколько я понял, почему то полностью дублируют друг друга, лень думать. FIX ME). Из него можно проследить guid-игрока, кто, что и когда сдеконил (нарочно сломал оборонительные постройки) и т.д.

admin.dat
Ещё один архиважный конфиг, обязан присутствовать на любом хорошем сервере. Положить конфиг, если не ожибаюсь, нужно в ~/.tremulous/base.
Суть его в следующем:
Администратор, находясь в игре, всегда может через консоль (кнопка ) отдавать административные команды, воспользовавшись /rcon pass. Например, /rcon пароль !listplayers. Это неудобно и непрактично, потому что писать длинные команды надоедает, можно забыть поставить /, и тогда пароль администратора будет виден всем игрокам в общем чате, и самое главное - пользоваться /rcon может только супер-админ. А ведь на сервере лучше сделать операторов, модеров и т.д., руководство с ограниченными уровнями доступа. Для этого в файле admin.dat расписаны ранги админов с флагами, каждому из которых соответствует определённая команда и guid игрока.

Пример флагов и команд. Внятная информация об уровнях доступа и командах. И пример файла admin.dat . Естественно, что имена и guidы админов нужно заменить на свои.

Подобная система автоматически позволяет администратору или оператору выполнять команды без ввода /rcon в соответствии с правами конфига. Guid можно узнать из логов или командой /rcon пароль !listplayers .
Кстати, надо будет почитать вот об этом, пока руки не дошли -) .

Настройки на стороне клиента, guid.
Что касается самого guid, с ним тоже не до конца ясно. Похоже он сгенерирован посредством исполняемого файла в файле qkey. Если такого нет, можно попробовать скачать и заменить файл tremulous.x86 . Для windows - прошу сюда.
На mczone.ru есть "улучшенная версия", вроде это тоже оно -).

Автозапуск

Чтобы сервер трема всегда запускался после включения или перезагрузки машины, создаём скрипт в /etc/init.d:
# nano /etc/init.d/tremulous

Содержимое скрипта:

#! /bin/sh
set -e


BASEPATH="/usr/local/games/tremulous/"
BINARY="tremded.x86"
DAEMON="$BASEPATH/$BINARY"
OPTIONS="2>>./mysuper.log +set dedicated 1 +set net_port 30720 +set fs_game base2 +exec server.cfg"
RUNAS="root:root"
PIDFILE="$BASEPATH/$BINARY.pid"


test -x $DAEMON || exit 0


#export HOME=$BASEPATH
export HOME=/root/.tremulous


case "$1" in
start)
echo -n "Starting Tremulous Server"
cd $BASEPATH
start-stop-daemon --start --quiet -c $RUNAS --pidfile $PIDFILE \
-N -2 -m -b -d $BASEPATH --exec $DAEMON -- $OPTIONS
echo "."
;;
stop)
echo -n "Stopping Tremulous Server"
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
--exec $DAEMON
echo "."
;;
restart|force-reload)
echo -n "Cycling Tremulous Server - "
$0 stop
sleep 3
$0 start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac


exit 0

Делаем исполняемым и регистрируем в системе:
# chmod +x /etc/init.d/tremulous
# update-rc.d /etc/init.d/tremulous defaults 95
Стартуем:
# /etc/init.d/tremulous start
Опции: start|stop|restart|force-reload

Запуск вручную на сервере. 
Через ssh, например.
Создаём скрипт, делаем также исполняемым, с содержимым:

#!/bin/sh
/usr/local/games/tremulous/tremded.x86 +set dedicated 2 +set net_port 30725 +exec server.cfg +set ttycon 0>>/dev/null 2>>/dev/null &


Скрипт запускается один раз, без привязки к консоли, чтобы остановить сервер, придется через ps aux узнать номер процесса и убить командой kill: kill 32456.

Как достучаться до мастер сервера?
В настройках своего фаерволла ClarkConnect, в Incoming я разрешил порты:

Пояснение:
порт 30710 - порт master.tremulous.net
порт 30725 - порт, который я назначил серверу

В настройках маршрутизатора Dlink сделал проброс портов (Port Forwarding):

Пояснение:
192.168.0.5 - внутренний локальный (до маршрутизатора) ip сервера.

В Port Trigger тоже намусорил на всякий случай=), были какие-то проблемы:

 

Комментарии