
Openttd сервер
- Вступление
- Установка и настройка сервера
- Запуск сервера
- Использование скриптов
- Управление сервером
- Литература
OpenTTD - клон популярной игры Transport Tycoon Deluxe (сокращенно - TTD), изданной компанией Microprose в 1995 году. В отличие от оригинальной игры, Open Transport Tycoon Deluxe обладает открытым исходным кодом и распространяется бесплатно. За время развития проекта OpenTTD в игру были добавлены многочисленные новые возможности и эта работа продолжается.
В этой статье расскажу о поднятии сервера на стандартной сборке Openttd (Без патчей)
Установка и настройка сервера
Устанавливать будем из исходников т.к порт увы обновляется не часто.
На данный момент доступна версия 1.0.4. Качаем исходники с сайта проекта http://www.openttd.org/en/download-stable, в списке выбираем openttd-x.x.x-source.
Распаковываем.
- Код: Выделить всё
tar -xvf openttd-1.0.4-source.tar.bz2
cd openttd-1.0.4
Собираем и устанавливаем. При сборке может ругнуться на отсутствующую библиотеку liblzo2. Выхода два: либо поставить ее, либо забить, добавив ключик --without-liblzo2
- Код: Выделить всё
./configure --enable-dedicated --without-liblzo2
gmake
gmake install
После установки копируем исполняемый файл
- Код: Выделить всё
cp /usr/local/games/openttd /usr/local/share/games/openttd/
На этом установка завершена, приступаем к настройке.
Для начала нужно скопровать графику, без нее сервер не запустится.
- Код: Выделить всё
cd /usr/local/share/games/openttd/data
wget http://binaries.openttd.org/extra/opengfx/0.3.1/opengfx-0.3.1-all.zip
tar -xvf opengfx-0.3.1-all.zip
cp opengfx-0.3.1/*.grf ./
cp opengfx-0.3.1/*.obg ./
rm -R opengfx-0.3.1
Теперь запустим сервер чтоб создался конфиг файл. По умолчанию конфиг файл хранится в домашней папке пользователя от которого запускаете сервер, но удобнее хранить все в одном месте. Поэтому мы укажем где у нас будет конфиг файл с помощью ключа -c
- Код: Выделить всё
cd /usr/local/share/games/openttd
./openttd -D -c openttd.cfg
В консоли посыпется лог старта сервера
- Код: Выделить всё
[2010-09-30 11:26:53] dbg: [net] [core] starting network...
[2010-09-30 11:26:53] dbg: [net] [udp] initializing listeners
[2010-09-30 11:26:53] dbg: [net] [core] network online, multiplayer available
выходим
- Код: Выделить всё
quit
Должен появться файл конфигурации openttd.cfg который нам нужно отредактировать. Для начала настроим все что связано с сетевой частью.
открываем openttd.cfg и ищем раздел [network]
- Код: Выделить всё
[network]
server_port = 3979 // Порт который будет слушать openttd (Openttd использует TCP и UDP)
server_advertise = true // Будет ли наш сервер анонсировать себя на мастер сервер (http://www.openttd.org/en/servers)
lan_internet = 0 // Тоже что и server_advertise
rcon_password = пароль // Пароль для доступа к консоли из игры предоставляется командой rcon
server_name = Название сервера
autoclean_companies = true // Включение или отключение функции автоочистка. Если включено, компании без игровой активности за определенное игровое (autoclean_protected и autoclean_unprotected) время будут уничтожены.
autoclean_unprotected = 12 // Компании не защищенные паролем будут удалены через 12 месяцев
autoclean_protected = 0 // У компаний защищенных паролем и не активных будет удален пароль
autoclean_novehicles = 12 // Не активные компании с отуствующим транспортом будут удалены через 12 месяцев
max_companies = 10 // Максимальное кол-во компаний
max_clients = 8 // Максимальное кол-во клиентов
max_spectators = 4 // Максимальное кол-во наблюдателей
restart_game_year = 2050 // Дата рестарта сервера
min_active_clients = 0 // Игра остановился, когда количество активных игроков меньше заданного числа
С сетевой частью все. Немного раскажу про другие настроки которые возможно вы захотите изменить.
- Код: Выделить всё
[difficulty]
number_towns = 1 // Устанавливает количество городов для новой карты (0 = very low | 1 = low | 2 = normal | 3 = high | 4 = custom)
number_industries = 1 // Устанавливает количество индустрии для новой карты (0 = none | 1 = very low | 2 = low | 3 = normal {default} | 4 = high)
max_loan = 300000 // Устанавливает максимальный начальный кредит на новую игру. Всегда в британских фунтах. Изменение валюты в разделе [locate] или в окне настроек игры изменит максимальную сумму кредита по обменному курсу выбранной валюты. Максимальная сумма кредита будет увеличиваться с течением времени, если инфляция включена
vehicle_breakdowns = 0 // Частота поломок транспорта (0 = none, 1 = reduced, 2 = normal)
disasters = 0 // Катастрофы ( 0 = выклб 1 = вкл)
[game_creation]
starting_year = 1950 // Начальный год
map_x = 9 // Размер карты (8 - 256, 9 - 512, 10 - 1024, 11 - 2048)
map_y = 9 // Размер карты (8 - 256, 9 - 512, 10 - 1024, 11 - 2048)
[vehicle]
max_trains = 500 // Макс. кол-во поездов
max_roadveh = 200 // Макс. кол-во машинок
max_aircraft = 50 // Макс. кол-во самалетов
max_ships = 30 // Макс. кол-во караблей
wagon_speed_limits = true // Устанавливает ограничение скорости для вагонов. Эта функция влияет только на вагоны из доп. графики (NewGRF).
[gui]
autosave = quarterly // Автоматическое сохранение игры в предопределенный интервал времени. (off = отключить | monthly = каждый месяц | quarterly = каждый квартал | half year = каждые пол года | yearly = каждый год)
Более подробно о настройках вы можете почитать тут http://wiki.openttd.org/Openttd.cfg
Нектороые настройки можно менять во время игры из консоли с помощью команды set
- Код: Выделить всё
set max_trains 750
Запуск сервера
С настройками все, теперь немного про способы запуска сервера. Можно запустить в бэкграунде (ключ -f) или с помощью менеджера виртуальных сессий (screen).
Для начала создадим пользователя от которого будет запускаться сервер ( Лучше не запускать от рута )
- Код: Выделить всё
pw useradd openttd -s /sbin/nologin
Выставим права на директорию с игрой
chown -R openttd:openttd /usr/local/share/games/openttd
Запускаем в бэкграунде
- Код: Выделить всё
su -m openttd -c "/usr/local/share/games/openttd/openttd -D -f -c /usr/local/share/games/openttd/openttd.cfg"
Запускаем в screen ( Я предпочитаю этот способ т.к можно зайти и порулить сервером из консоли, да и вообще можно посмотреть что на нем творится )
Собираем менеджер виртуальных сессий (все опции по умолчанию)
- Код: Выделить всё
cd /usr/ports/sysutils/screen
make install clean
Запускаем
- Код: Выделить всё
screen -A -m -d -S openttd su -m openttd -c "/usr/local/share/games/openttd/openttd -D -f -c /usr/local/share/games/openttd/openttd.cfg"
Для авто запуска и управления сервером, написал небольшой скрипт
- Код: Выделить всё
js# cat /usr/local/etc/rc.d/openttd.sh
#!/bin/sh
#
#
# PROVIDE: openttd
# REQUIRE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name="openttd"
rcvar=`set_rcvar`
load_rc_config $name
: ${openttd_enable="NO"}
: ${openttd_user="openttd"}
: ${openttd_port=""}
: ${openttd_args=""}
: ${openttd_cfg="/usr/local/share/games/openttd/openttd.cfg"}
command="/usr/local/share/games/openttd/openttd"
screen="/usr/local/bin/screen"
openttd_args="-f -c ${openttd_cfg}"
[ -n "${openttd_port}" ] && openttd_args="${openttd_port} ${openttd_args}"
start_cmd="echo Starting ${name}.; su -m ${openttd_user} -c \"${command} -D ${openttd_args}\""
run_rc_command "$1"
Сервер запускается в бэкграунде, если вы хоитите чтоб сервер запускался в скрине то изменитье строку
- Код: Выделить всё
start_cmd="echo Starting ${name}.; su -m ${openttd_user} -c \"${command} -D ${openttd_args}\""
на
- Код: Выделить всё
start_cmd="echo Starting ${name}.; su -m ${openttd_user} -c \"${screen} -A -m -d -S openttd ${command} -D ${openttd_args}\""
Выставляем права на запуск для стартового скрипта
- Код: Выделить всё
chmod +x /usr/local/etc/rc.d/openttd.sh
Добавляем в /etc/rc.conf
- Код: Выделить всё
openttd_enable="YES"
Запускаем
- Код: Выделить всё
/usr/local/etc/rc.d/openttd.sh start
Starting openttd.
Loading dedicated server...
- Forked to background with pid 19216
Проверяем, запустился ли сервер
- Код: Выделить всё
sockstat | grep openttd
openttd openttd 29057 5 tcp4 192.168.1.54:3979 *:*
openttd openttd 29057 41 udp4 192.168.1.54:3979 *:*
!!Не забудте открыть в фаерволе соотвествующие порты для TCP и UDP протокола
Все ок. Сервер запущен, пробуем подключиться.
Использование скриптов
OpenTTD имеет возможность выполнить один из ряда скриптов при запуске.
Скрипты должны включать обычный текстовый файл, который был переименован в то, чему он соответствуют (см. ниже). Скрипты находятся в папке scripts
Сетевые скрипты
on_client.scr - Этот сценарий выполняется всякий раз, когда Вы присоединяетесь к серверу
on_server_connect.scr- Этот сценарий будет выполняться на сервере, когда клиент подключается ( В этом скрипте можно написать приветствие или другу полезную информацию, например правила итд.)
Эти скрипты служат для настройки ip/порта и другой настройки сервера
pre_server.scr - Выполняется до запуска TCP стека игры ( Т.е можно изменить параметры порта итд)
pre_dedicated.scr - Выполняется до запуска TCP стека игры ( Т.е можно изменить параметры порта итд). Только для Dedicated режима сервера
Эти скрипты должны быть использованы для установки имени сервера, паролей итд.
on_server.scr выполняется после запуска сервера
on_dedicated.scr выполняется после запуска сервера . Только для Dedicated режима сервера.
Пример скрипта - on_server_connect.scr
- Код: Выделить всё
say “== Добро пожаловать на сервер ==”
say “”
say "== ПРАВИЛА =="
say "* Не блокировать"
say “* Одна компания для одного игрока”
say "* Играть под своим Ником (Не под ником Player)"
say "* Не забывайте ставить пароль на свою компанию"
Более подробнее об использовании скриптов, смотрите в примерах в папке scripts
Управление сервером
Управлением сервером можно из самой игры с помощью команды rcon из консоли игры (Консоль открывается по нажатию кнопки ~).. Пароль для доступа к управлению сервера устанавливается в конфигурационном файле сервера (rcon_password = ваш пароль)
Теперь про команды которые могут понадобиться для управления сервером.
- Код: Выделить всё
kick <ip | client-id> - Кикнуть клиента по IP <ip> или по его id <client-id>
ban <ip | client-id> - Бан клиента по IP <ip> или по его id <client-id>
unban <ip> - Разбанить клиента <ip>
banlist - Список забаненных клиентов
reset_company <company-id> - Удалить компанию по его id <company-id>
pause - Паузу в игре
unpause - Снятие паузы
clients - Список клиентов ( Его id, имя, company_id и IP адрес)
companies - Список компаний и их атрибуты ( Название компании, кол-во техники итд.)
status - Получить информацию о состоянии всех подключенных клиентов.
move <client-id> <company-id> Переместить клиента в любую компанию.
client_name <client-id> <name> - Принудительно сменить Ник игроку.
Более подробнее о консольных командах можно почитаться тут http://wiki.openttd.org/Console
Список литературы
http://www.openttd.org/
http://wiki.openttd.org/Main_Page