OpenTTD

Игровые серверы и игры для UNIX систем.

OpenTTD

Непрочитанное сообщение AzureZ » 27 сен 2010, 21:57

Изображение

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
Последний раз редактировалось AzureZ 14 окт 2010, 16:36, всего редактировалось 2 раз(а).
AzureZ
Ученик
Ученик
 
Сообщения: 108
Зарегистрирован: 27 сен 2010, 09:49
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 27 сен 2010, 22:27

Ага люблю очень!
Давай пиши статью мне было бы очень интересно. Я и не знал, что можно даже с веб мордой сервер делать =)
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение AzureZ » 27 сен 2010, 22:37

Raven2000 писал(а):Ага люблю очень!
Давай пиши статью мне было бы очень интересно. Я и не знал, что можно даже с веб мордой сервер делать =)


ага. Да там можно траспорт с irc завязать. )
AzureZ
Ученик
Ученик
 
Сообщения: 108
Зарегистрирован: 27 сен 2010, 09:49
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 27 сен 2010, 22:54

оОО
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 27 сен 2010, 22:56

Можно сделать сразу 2 статьи ты про сервер, а я обновлю старую статью про клиент =)
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение alexco » 13 окт 2010, 17:59

Отлично, я с вами...тоже любитель транспорта!
Как говорил Робинзон Крузо: "Ракушка не похожа на голую женщину только первые 5 лет

nod32 mirror script -> http://forum.lissyara.su/viewtopic.php?f=3&t=12164
http://nod32ms.ru
Аватара пользователя
alexco
Эникей
Эникей
 
Сообщения: 40
Зарегистрирован: 01 окт 2010, 03:55
Откуда: Россия, Москва
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 13 окт 2010, 18:39

Ага только AzureZ что то затих.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение AzureZ » 14 окт 2010, 10:14

Да я первую часть написал) а вот про вебморду все никак.
AzureZ
Ученик
Ученик
 
Сообщения: 108
Зарегистрирован: 27 сен 2010, 09:49
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 14 окт 2010, 10:30

Давай хоть так а веб морду мона и позже запостить
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение AzureZ » 14 окт 2010, 13:09

Добавил. Походу еще буду дописывать по настройкам.
AzureZ
Ученик
Ученик
 
Сообщения: 108
Зарегистрирован: 27 сен 2010, 09:49
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 14 окт 2010, 21:21

Хорошая статья мне понравилась, давай регистрируйся тут http://www.ignix.ru/ я тебя добавлю в авторы и создай там страницу подшивки и вставь туда статью. я помогу ее откорректировать и в путь =)
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение AzureZ » 14 окт 2010, 21:27

Я там зарегин
AzureZ
Ученик
Ученик
 
Сообщения: 108
Зарегистрирован: 27 сен 2010, 09:49
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 14 окт 2010, 21:32

Ты уже и автор )
Давай пости статью когда заполнишь то кинь в ЛС сообщение с сылкой.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.

Re: OpenTTD

Непрочитанное сообщение Raven2000 » 15 окт 2010, 11:36

Написана статья OpenTTD сервер
Все обсуждение по статье тут viewtopic.php?f=21&t=56&start=0
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Аватара пользователя
Raven2000
-=_UNIX_=-
-=_UNIX_=-
 
Сообщения: 680
Зарегистрирован: 14 сен 2010, 13:08
Откуда: Там, где нас нет.
Благодарил (а): 1 раз.
Поблагодарили: 37 раз.


Вернуться в Игры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron