OpenTTD сервер

Openttd logo

Вступление

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 (библиотека liblzo2 нужна для сжатия save файлов)
./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).
 
[station]
adjacent_stations = true Позволяет объединять смежные станции
 
[gui]
autosave = quarterly // Автоматическое сохранение игры в предопределенный интервал
                     //  времени. (off = отключить | monthly = каждый месяц |
                     // quarterly = каждый квартал | half year = каждые пол года |
                     // yearly =  каждый год)
max_num_autosaves = 10 // Кол-во файлов автосохранений.

Более подробно о настройках вы можете почитать тут wiki.openttd.org
Нектороые настройки можно менять во время игры из консоли с помощью команды 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 если он у вас установлен ( я предпочитаю этот способ т.к можно зайти и порулить сервером из консоли, да и вообще можно посмотреть что на нем творится )
Если у вас 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>	- Принудительно сменить Ник игроку.

Примеры:

rcon ваш пароль "move 1 2"
rcon ваш пароль "pause"

Более подробнее о консольных командах можно почитаться тут wiki.openttd.org/Console

NewGRF

Для того, чтобы сделать игру более разнообразной - вам поможет NewGRF.

NewGRF, это так называемые дополнительные наборы графики, которые расширяют возможности Openttd добавляя в него новую технику, индустрию, всевозможные здания и т.д.

Всю новую графику нужно скопировать в папку data. Не рекомендую все сваливать в корень папки data, а лучше создать в ней папку newgrf и туда скопировать новую графику.

Теперь нужно подключить графику в конфигурационном файле. Редактируем его.

[newgrf]
newgrf/jpstationsw.grf =
newgrf/indstatrw.grf =
newgrf/2ccshipsw.grf =
newgrf/4LVw.grf =

Так же у NewGRF бывают доп. параметры, которые указываются после знака =

newgrf/basecosts.grf = 21 16 57 15 1 12 2 10 15 9 16 9 17 10 18 9 19 9 48 7 27 12

Про параметры читайте в описании к NewGRF файлам.

Ссылки где можно найти доп. графику:
http://bananas.openttd.org/en/newgrf/
http://grfcrawler.tt-forums.net/index.php
http://wiki.openttd.org/NewGRF_List
На форуме tt-forums.net

Web статистика

Для статистики нам понадобятся
- Веб-Сервер ( Например Apache)
- PHP5
- PHP Class OpenTTDLib

OpenTTDLib - это набор PHP5 классов позволяющие получать статистику в реальном времени с openttd серверов, которые затем могут отображаться на вашем веб сайте или хранится в БД.

Требования к PHP:
OpneTTDLib использует функции BCMath, пэтому убедитесь что php собран с поддержкой BCMath, если нет - то установите его.

cd /usr/ports/math/php5-bcmath; make install clean

Установка:

cd /usr/local/www/

Качаем библиотеку. Увы, сайт автора не работает (http://codecubes.org), выкладываю сюда.

wget _http://ignix.ru/system/files/openttdlib-0.3.2.tar.gz

Распаковываем
tar xvf  OpenTTDLib-0.3.2.tar.gz

Переименовываем директорию
mv OpenTTDLib-0.3.2 openttd

и удаляем архив, если не нужен
rm OpenTTDLib-0.3.2.tar.gz

В директории можно найти документацию в подпапке doc, а так же примеры в файлах example.php и example2.php ( example2.php использует шаблон HTML_Template_Sigma, который можно найти в портах ).

Библиотека проста в использовании и очень хорошо документирована, чем я и воспользовался, написав свой вариант статистики.

Скачиваем архив в папку с OpenTTDLib, и разворачиваем

wget _http://ignix.ru/system/files/ottd.tar.gz
tar xvf ottd.tar.gz

Нам нужно отредактировать файл index.php, а точнее всего 2 строчки

$server['host']     = 'IP или имя сервера';
$server['port']     = 'порт';

Кеширование.

Поддержка кэширования OpenTTDLib позволяет использовать объект SimpleXML, имеющийся на PHP 5.1.3. Если вы отключите функциональность кэширования, тем не менее, вы сможете использовать более раннюю версию PHP5.

По умолчанию кеш сбрасывается в файл cache.xml, который должен быть расположен в корне OpenTTDlib, и веб-сервер должен иметь права на запись в этот файл.

chown www:www cache.xml
chmod 775 cache.xml

Расположение, а так же название кеш файла, можно изменить с помощью опции OpenTTDLib::OPTION_CACHE_FILE

$openttd->setOption( OpenTTDLib::OPTION_CACHE_FILE,	'cache.xml' );

Если у веб-сервера нет доступа для записи кэш-файла, пожалуйста, установите OpenTTDLib::OPTION_CACHE_UPDATE в false, чтобы остановить OpenTTDLib от попыток добавить новые или обновленные данные в файл.

$openttd->setOption( OpenTTDLib::OPTION_CACHE_UPDATE,	true );

Если вы хотите отключить кеширование, то установите OpenTTDLib:: OPTION_CACHE_NEWGRF в false.

$openttd->setOption( OpenTTDLib::OPTION_CACHE_NEWGRF,	true );

Более подробнее о кэширование можно почитать в документации, в частности , раздел о OpenTTDLib :: OPTION_CACHE_NEWGRF.

Настроим наш веб-сервер на примере Apache.

Сконфигурируем Apache. Добавим Alias в файл конфигурации веб сервера:

vim /usr/local/etc/apache22/httpd.conf
 
   Alias /openttd" /usr/local/www/openttd/"
    <Directory "/usr/local/www/openttd">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

Перезапустим apache.

apachectl graceful

Пример статистики.

Приятной игры

ВложениеРазмер
openttdlib-0.3.2.tar.gz88.32 КБ
ottd.tar.gz12.27 КБ
ottd-stat.png34.72 КБ
Дополнительные материалы
Ваша оценка: Нет Средняя: 5 (9 голосов)

FFFFFFFFFFFFFF

не работает скрипт у меня пишит это

localhost / # /usr/local/etc/rc.d/openttd.sh start
/usr/local/etc/rc.d/openttd.sh: line 1: js#: команда не найдена
/usr/local/etc/rc.d/openttd.sh: line 11: /etc/rc.subr: Нет такого файла или каталога
/usr/local/etc/rc.d/openttd.sh: line 14: set_rcvar: команда не найдена
/usr/local/etc/rc.d/openttd.sh: line 16: load_rc_config: команда не найдена
/usr/local/etc/rc.d/openttd.sh: line 34: unexpected EOF while looking for matching `"'
/usr/local/etc/rc.d/openttd.sh: line 35: ошибка синтаксиса: неожиданный конец файла

Чесно, ничего не понял. Я так

Чесно, ничего не понял. Я так понял если я нуб, то тут и читать не нужно, всё равно не поймёшь.

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

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <em> <b> <u> <i> <strong> <font> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike> <caption>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>, <apache>, <bash>, <c>, <cpp>, <mysql>, <perl>, <php>, <python>, <text>. The supported tag styles are: <foo>, [foo].
  • Glossary terms will be automatically marked with links to their descriptions. If there are certain phrases or sections of text that should be excluded from glossary marking and linking, use the special markup, [no-glossary] ... [/no-glossary]. Additionally, these HTML elements will not be scanned: a, abbr, acronym, code, pre.

Подробнее о форматировании

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
6 + 1 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.

Последние статьи

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer