Вы решили в собственной/городской сети поднять трем-сервак и подсадить юзверов на эту бесплатную игрушку. Плюсы её вполне очевидны: динамичность геймплея и кроссплатформенность, к тому же халява...
Для запуска сервера я использовал ненужный атлон с 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Двумя "//" закоментированы неиспользуемые. Расшифровку ambush-ботов можно проследить по вышеприведённой ссылке.
//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
Чтобы конфиги карт работали (название конфига должно полностью совпадать с названием карты), в 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/tremulou
s 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 тоже намусорил на всякий случай=), были какие-то проблемы:
Другие полезные ссылки:
Форум Tremulous.net
Как сделать tremulous-server в windows
Happywind
TremX
TremulousMods
Tremulous на Википедии (eng)
Russian Tremulous Community
Tremulous на Freshmeat
Полезные статьи от j4fun
***
Дополнение.Пристутствует здесь, что бы было в одном месте. Источник - http://happywind.ru/dokuwiki/doku.php/tremulous:stati:console.
Список флагов доступа для админов и их связь с командами:
* 1 - игрок не может быть кикнут(kick) или замьючен (mute) голосованием.* 2 - игрок не подлежит цезуре (лимит на число фраз и т.п.) В разработке.
* 3 - игрок не теряет креды/ево при переходе в другую команду
* 4 - игрок видет командные чаты будучи спекатором (spectator)
* 5 - может менять команду в независимости от баланса
* 6 - может не иметь определенной причины что бы кого нибудь кикнуть/забанить
* 7 - может запускать голосование в любое время
* 8 - игрок не имеет лимит на выдаваемый кому либо бан ?? (does not need to specify a duration for a ban)
* 9 - имеет возможность выполнять комнады из общего чата
* 0 - правила неактивности не действуют на данного игрока
* ! - админские команды не имеют силу на данного игрока
* @ - не отображается как админ при !listplayers
* $ - видит всю информацию при !listplayers
* # - перманентно (постоянно) обладает правами привелигированного строителя (designated builder)
* ? - видит и может использовать adminchat
* B - !showbans - показывает список активных (у тех что не истек срок) банов на данном сервере
* C - !time - показыват текущее время на сервере
* D - !listadmins - показывает список админов на данном сервере их левел
* G - !readconfig - перегружает конфигурационный файл с админскими правами и пересутанавливает флаги доступа
* H - !info - отображает информационный файл
* K - !lock - блокирует доступ в команды (team) (игроки не могут напрямую входить (join))
* K - !unlock - разблокирует доступ в команды (team)
* L - !devmap - загружает карты с возможностью читов (cheats)
* L - !layoutsave - сохраняет текущее расположение построек (layouts) в список (дает возможность начинать игру с разного первоначального расположения построек)
* L - !listlayouts - отображает список доступных начальных расположений построек
* M - !map - загружает выбранную карту
* N - !rename - переименовывает выбранного игрока
* P - !spec999 - перемещает игроков с пингом 999 (нет связи с сервером) в команду спекаторов (spectator team)
* R - !register - регистрирует ваше имя на сервере или обновляет регистрационную запись вашим текущим именем
* S - !pause - приостанавливает или возобновляет игру
* U - !buildlog - показывает текущий список построек в игре (кто строил, кто разрушил)
* V - !passvote - устанавливает для текущего голосования состояние все согласны
* a - !admintest - отображает ваш текущий левел
* b - !ban - банит пользователя по IP и GUID с указанием причины и времени бана
* b - !adjustban - изменяет время и причину бана, время определяется с потфиксом w (недели), d (дни), h (часы), m (минуты) или секунды, если постфикс не указан. Пример - 20w, 67d.
* b - !unban - разбанить игрока по номеру в списке банов (!showbans)
* c - !cancelvote - устанавливает для текущего голосования состояние все не согласны
* d - !allowbuild - востанавливает возможность игрока строить
* d - !denybuild - забирает у игрока возможность строить
* e - !namelog - отображает список имен игроков на сервере с более подробной информацией
* g - !designate - дает игроку привелигированные права строить (его здания не могут быть разрушены строителем из его команды)
* g - !undesignate - отбирает у игрока привелигированные права строить
* h - !help - отображает список доступных команд или выводит подробную информацию о команде
* h - !specme - помещает вас в команду спекаторов (spectators)
* i - !listplayers - отображает список игроков на сервере в данный момент с указаниемлевела и GUID`а
* k - !kick - выкидывает пользователя с сервера с указанием причины (обычно еще и автобаном на малое время - 5 минут)
* l - !L1 - устанавливает 1 левел выбранному игроку
* m - !unmute - размьючивает (unmute) игрока
* m - !mute - мьютит (mute) игрока - отбирает возможность общаться в чате, выдвигать голосование, менять имя
* n - !nextmap - загружает следующую карту в ротации карт (maprotation.cfg)
* p - !putteam - помещает игрока в нужную команду (h или a)
* r - !restart - рестарт текущей карты (опционально можно задать начальное расположение построек или поменять/сохранить составы команд)
* s - !setlevel - установить игроку админский левел
* v - !revert - совершает действие обратное в логе построек, то есть если постройка создана - уничтожает, уничтожена - восстанавливает. Может применятся на несколько построек
* y - !allready - устанавливает готовность всех игроков к переходу к следующей карте в ротации
* w - !warn - отображает выбранному игроку предупреждение в центре экрана
Подробнее узнать об опциях команды можно по !help имя-команды.
Список флагов установленных по умолчанию в конфигурационном файле
L0: Unknown Player:
iahC
L1: Server Regular:
iahC
L2: Team Manager:
iahCpPwd
L3: Junior Admin:
iahCpPkmwd?$
L4: Senior Admin
iahCpPkmBbewd?$
L5: Server Operator
* (everything)
Команды пользователей.
/m - приватное сообщение игроку/me - выводит сообщение в общий чат в irc-стиле /me - «*Юзер всех приветствует»
/me_team - выводит сообщение в командный (team) чат в irc-стиле /me
/share - передает конкретному игроку заданное количество кредов/эво
/donate - распределяет заданное количество кредов/эво между всеми игроками команды
/say_area - сообщение отображается только у игроков находящихся вблизи от вас
/say_admins /a - сообщение отображается только админам
/protect - дает привелигированные права строительства
/resign (designated builder stuff) - снимает привелигированные права строительства
/mystats - показывает статистику в текущей игре
Наиболее популярные сборки game.qvm.
4 коммента :
It is extremely interesting for me to read the article. Thanks for it. I like such themes and anything that is connected to this matter. I would like to read a bit more on that blog soon.
Alex
Phone jammers
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.