-Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в antimol

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 10.02.2008
Записей:
Комментариев:
Написано: 488


Игровой сервер под Linux (Ubuntu)

Четверг, 17 Декабря 2009 г. 20:03 + в цитатник

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

И так, задача:
Вы решили в собственной/городской сети поднять трем-сервак и подсадить юзверов на эту бесплатную игрушку. Плюсы её вполне очевидны: динамичность геймплея и кроссплатформенность, к тому же халява...
Для запуска сервера я использовал ненужный атлон с 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) со структурой:

Именно в /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/tremulous 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


Рубрики:  как?

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку