Pages

понедельник, 30 ноября 2009 г.

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 тоже намусорил на всякий случай=), были какие-то проблемы:


Другие полезные ссылки:
Форум 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.


Понравился пост? Подпишись на обновления блога по Tuxologia RSSRSS, Tuxologia по EmailEmail или twitter!

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

Unknown комментирует...
Этот комментарий был удален администратором блога.
Unknown комментирует...
Этот комментарий был удален администратором блога.
Al комментирует...
Этот комментарий был удален автором.

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.

Интеллект — это способность избегать выполнения работы, но так, чтобы она при этом была сделана.