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
./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
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
[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 // Кол-во файлов автосохранений.
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 *:*
Все ок. Сервер запущен, пробуем подключиться.
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, это так называемые дополнительные наборы графики, которые расширяют возможности 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
Ссылки где можно найти доп. графику:
http://bananas.openttd.org/en/newgrf/
http://grfcrawler.tt-forums.net/index.php
http://wiki.openttd.org/NewGRF_List
На форуме tt-forums.net
Для статистики нам понадобятся
- Веб-Сервер ( Например 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
Библиотека проста в использовании и очень хорошо документирована, чем я и воспользовался, написав свой вариант статистики.
Скачиваем архив в папку с 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.gz | 88.32 КБ |
ottd.tar.gz | 12.27 КБ |
ottd-stat.png | 34.72 КБ |
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer
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: ошибка синтаксиса: неожиданный конец файла
Чесно, ничего не понял. Я так
Чесно, ничего не понял. Я так понял если я нуб, то тут и читать не нужно, всё равно не поймёшь.