И так, задача:
Вы решили в собственной/городской сети поднять трем-сервак и подсадить юзверов на эту бесплатную игрушку. Плюсы её вполне очевидны: динамичность геймплея и кроссплатформенность, к тому же халява...
Для запуска сервера я использовал ненужный атлон с 256мб оперативной памяти и Ubuntu 7.10 Server (единственный диск, который был под рукой) с прописанными репозиториями для Hardy. Предполагается, что администратор, как минимум, знаком с игрой -). Ssh, nano и mc в помощь. Картинок будет одна, так что заранее sry, как говорят профи трема.
Реализация:
Понадобится запустить выделенный dedicated-сервер на уровне демона/службы на дефолтовом 30720-ом udp-порту. Если у сервера есть выход в глобальную сеть, есть смысл позволить heartbit до мастер-сервера (возможно откроется 30710 udp-порт). В этом случае игроки со всего мира будут видеть ваш сервер в общем списке в разделе игры Internet. В соответствии с этим открываем/пробрасываем udp-порты на маршрутизаторе/фаерволле, если таковые конечно есть. Видел совет, что нужно открыть такой же tcp-порт. На практике и в мониторинге соединений подобной необходимости не заметил.
Также нужно определиться, из-под какого пользователя будет работать будущий сервер. В соответствии с этим ставим трем, расставляем права и используем домашнюю папку своего пользователя. Я ничего не боюсь, и у меня он - 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 //можно указать особые порт и админ, не факт, что опция работает
// 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"
//start this map first
map atcs
Это расширенный некоторыми опциями конфиг, за дополнительными параметрами гуглим на тему 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) со структурой:
![](http://3.bp.blogspot.com/_WC5D7_gFZGw/SxPSQZPwYWI/AAAAAAAAB6U/c4-WqXdN4aA/s320/Screenshot.png)
Именно в /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Ещё один архиважный конфиг, обязан присутствовать на любом хорошем сервере.
Суть его в следующем:
Администратор, находясь в игре, всегда может через консоль (кнопка
~ё) отдавать административные команды, воспользовавшись
/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/tremulou
s defaults 95Стартуем:
# /etc/init.d/tremulous startОпции: start|stop|restart|force-reload
Другие полезные ссылки:
Как сделать tremulous-server в windows
Happywind
TremX
TremulousMods
Tremulous на Википедии (eng)
Russian Tremulous Community
Tremulous на Freshmeat
Полезные статьи от j4fun
http://tuxologia.blogspot.com/2009/11/tremulous-server.html