0 в игре
Скачать
Перестрелка в тёмном подъезде в Mafia II

Документация

Запуск сервера

Скачайте сервер на странице загрузки (m2o-server.zip) и распакуйте куда угодно:

m2o-server/
  m2o_panel.exe       панель администратора (запускает сервер)
  m2o_server.exe
  m2o_server.ini      настройки
  resources/          ресурсы
    basic-rp/         ролевой режим: аккаунты, персонажи, команды чата
    freeroam/         свободная игра без аккаунтов
    vehicles-demo/    пример машин сервера
  data/               данные ресурсов (появится сама)
  docs/scripting.md   API скриптов
  README.txt

Настройте m2o_server.ini (ниже), запустите m2o_panel.exe (он запустит сервер и откроет панель администратора; m2o_server.exe работает и сам), откройте порт и подключитесь из лаунчера: на этом же ПК добавьте 127.0.0.1:27015 в избранное.

m2o_server.ini

Все настройки сервера со значениями по умолчанию. Строка, начинающаяся с ;, — комментарий (выключена).

[server]
name=Мой сервер             ; название в списке серверов
key=m2o_...                 ; с mafiam.com/account (без него — локальный режим)
port=27015                  ; UDP-порт, к которому подключаются игроки
edition=de                  ; de — Definitive Edition
maxPlayers=128              ; слоты игроков (до 1024)
maxPerAddress=16            ; подключений с одного IP-адреса
tags=RP,Cars,Mafia          ; теги в списке серверов через запятую (до 8)
;discord=https://discord.gg/ваше-приглашение
streamRadius=200            ; на сколько метров игроки видят друг друга и машины
maxStreamedPlayers=300      ; сколько ближайших игроков каждый видит одновременно

[world]
season=summer               ; summer (50-е) или winter (40-е)
traffic=on                  ; машины и прохожие на улицах
police=off                  ; полиция и розыск
;time=21:30                 ; время суток для всех (не задано — как в игре)
timeScale=1                 ; игровых минут за реальную минуту (30 — сутки за 48 мин, 0 — стоит)

[settings]
;devAutoLogin=1             ; свои значения для скриптов

[resources]
start=basic-rp              ; ресурсы для запуска через запятую

[groups]
;moderator = players, kick  ; группа = права через запятую, * — все
;admin = *

[admins]
;Vito = admin               ; ник = группа, выдаётся при входе

[database]
;mysql=mysql://user:[email protected]:3306/database   ; пусто: SQLite у каждого ресурса

[http]
;allow=discord.com, api.example.com   ; куда скриптам можно слать http.request

[master]
enabled=on                  ; в общем списке серверов на mafiam.com
;host=my.domain.com         ; адрес, по которому заходят игроки

Что делает каждая настройка

НастройкаПо умолчаниюЧто делает
keyнетКлюч сервера с mafiam.com/account. Без него сервер в локальном режиме: см. ниже.
nameMafiaM serverНазвание сервера в лаунчере и на mafiam.com/servers.
port27015UDP-порт, к которому подключаются игроки. Откройте его в брандмауэре (см. ниже).
editiondeВерсия игры: de (Definitive Edition) или classic. Игроки с другой версией зайти не смогут.
maxPlayers128Слоты игроков, до 1024. Лаунчер показывает, сколько занято: 12 / 128.
maxPerAddress16Сколько игроков может зайти с одного IP-адреса: увеличьте для игры по локальной сети или тестовых ботов, уменьшите, чтобы один человек не занимал много слотов.
tagsнетДо 8 тегов через запятую: RP,Cars,Mafia. Видны под названием сервера в лаунчере и в общем списке, чтобы игроки находили сервер нужного типа.
discordнетПриглашение в ваш Discord. У всех, кто играет на сервере, в статусе Discord появится кнопка, чтобы зайти туда.
streamRadius200На сколько метров игроки видят друг друга и машины (от 50 до 1000). Меньше — легче серверу и сети, больше — видно дальше.
maxStreamedPlayers300Сколько ближайших игроков каждый видит одновременно (от 10 до 1024). Больше — ниже FPS и больше трафика у игроков: 300 в поле зрения — около 45 FPS на среднем ПК.
seasonsummersummer (1950-е) или winter (1940-е). Игроки загружают его при входе.
trafficonМашины и прохожие на улицах: on / off.
policeoffПолиция и розыск: on / off.
timeнетВремя суток для всех, ЧЧ:ММ. Не задано — у каждой игры своё, как в шаблоне погоды. Из скриптов — world.setTime.
timeScale1Как быстро идёт день: игровых минут за реальную минуту. 1 — как в жизни, 30 — сутки за 48 минут, 0 — часы стоят.
[settings]Любые свои значения; скрипты читают их через settings.get("имя"). В basic-rp devAutoLogin=1 пускает в аккаунты без пароля — только для тестов.
startПапки ресурсов из resources/ для запуска, через запятую. С сервером идут два режима: basic-rp (ролевой, с аккаунтами и персонажами) и freeroam (без аккаунтов).
[groups]admin = *Группы и их права через запятую; * — все права. См. «Админы и права» ниже.
[admins]Ник = группа, выдаётся игроку при входе.
mysql в [database]пустоdb.* в скриптах работает сразу: у каждого ресурса свой файл SQLite (data/<ресурс>.db). Адрес MySQL / MariaDB — одна база на все ресурсы и ваш сайт. Спецсимволы в пароле как %XX: @ — это %40.
allow в [http]ничегоАдреса, куда скриптам можно слать http.request, через запятую: *.example.com — поддомены, * — любые.
enabled в [master]onПоказывать ли сервер в общем списке (ниже).
host в [master]пустоАдрес, по которому заходят игроки, если он не совпадает с внешним IPv4 этого ПК: домен или туннель playit.gg.

Ключ сервера и локальный режим

Серверу, открытому в интернет, нужен ключ. Получите его на mafiam.com/account (войдите или зарегистрируйтесь, Добавить сервер) и впишите в m2o_server.ini или вставьте в панели администратора (Настройки):

[server]
key=m2o_0123456789abcdef0123456789abcdef01234567

При запуске сервер обменивает ключ на «пропуск» от mafiam.com и обновляет его каждый час. Игра игрока проверяет пропуск перед входом: он должен быть выдан на тот адрес, к которому игрок подключается, и разрешать столько слотов, сколько у сервера. Сколько именно — решает тариф (если maxPlayers больше, он урезается, консоль об этом напишет).

Без ключа сервер работает в локальном режиме: зайти могут только игроки с этого же компьютера, из той же локальной сети или через VPN для друзей (Radmin, Hamachi, ZeroTier), не больше 8, и в общем списке его нет. Этого хватает, чтобы делать и проверять режим. С ключом, которого сайт не знает, сервер сразу останавливается (проверьте ключ или создайте новый в кабинете). Держите ключ в секрете: это имя вашего сервера на mafiam.com. Утёк — создайте новый, старый перестанет работать.

Игроков сервер знает по лицензии (player:getLicense()): их игра подтверждает её своим ключом, поэтому от бана или чужого сохранения не уйти, просто сменив ник. ban банит ник, IP и лицензию. Предупреждения, кики и баны уходят на mafiam.com под лицензией игрока: серверы на тарифе с историей видят в панели администратора, что игрок натворил на других серверах (Игроки → игрок → На других серверах).

Командная строка

Перекрывает m2o_server.ini: --port 27016, --name "Мой сервер", --edition de|classic, --season summer|winter, --traffic on|off, --police on|off, --master on|off.

DLC-пакеты: свои модели, машины и текстуры

Сервер может заменить игрокам файлы игры и добавить новые: перекрашенную машину, нового персонажа, другую иконку метки, изменённую таблицу игры. Положите их в dlcpacks/ рядом с m2o_server.exe, по папке на пакет, с теми же путями, что у игры:

dlcpacks/
  mycity/
    sds/cars/smith_v8.sds          заменяет игровой pc/sds/cars/smith_v8.sds
    sds/traffic/my_gangster.sds    новая модель: player:setSkin("traffic/my_gangster")
    game_edit/tables/...           заменяет файл из EDIT/tables игры

Когда игрок нажимает «Играть», лаунчер сначала скачивает пакеты сервера (с полосой прогресса), сохраняет их и в следующий раз докачивает только изменённое. Игра загружает их как свои DLC: файл с игровым путём заменяет игровой, новый добавляется. В папке игры у игрока ничего не меняется, а на другом сервере игра такая же, как была.

  • Имена пакетов: буквы, цифры, _ и -.
  • Пакеты читаются при запуске сервера: после изменений перезапустите его. Игроки получат изменения при следующем запуске игры.
  • Файлы .sds делаются инструментами сообщества для Mafia II (например, Mafia Toolkit).
  • Новые машины (sds/cars/<имя>.sds, зимняя — <имя>_z.sds) и новые костюмы (sds/wardrobe/<имя>_coat.sds) регистрируются в игре сами, так же как в её собственных DLC. Свой файл content, как у DLC игры в pc/dlcs/cnt_*, можно положить для всего остального; без него каждая папка пакета накладывается на такую же папку игры.
  • Каждый игрок скачивает все пакеты, так что держите их небольшими и выкладывайте только то, на что у вас есть права.

Пример: автосалон в здании Diamond Motors

Зал автоэнциклопедии из игры, перенесённый в здание Diamond Motors у моста в Мидтауне: в него входят через дверь, лампы светят, а в окнах настоящий город.

Diamond Motors с улицы
С улицы
Окна салона на город
Внутри: город за окнами
Вход
Вход
Зал сквозь окно
Зал сквозь окно

Пакет — это три файла:

dlcpacks/showroom/
  replace/pc/sds/shops/show.sds          зал, перенесённый и повёрнутый (MafiaM Studio --relocate)
  replace/EDIT/tables/StreamMapa.bin     show.sds грузится в свободной игре
  sds/patches/sds/city/italy.sds.patch   здание в городе открыто: матовые стёкла скрыты, стена поперёк двери убрана
  • replace/ повторяет папки игры: файл оттуда читается вместо игрового. Заменённый .sds не должен быть больше игрового файла, иначе его графика не загрузится.
  • .sds.patch меняет только часть ресурсов архива игры (так её патчат и собственные DLC): несколько МБ вместо целого района.
  • В пакете лежат файлы самой игры, поэтому мы его не раздаём: make_pack.py собирает его из вашей копии игры. Положите его рядом с mafiam_studio.exe (MafiaM Studio) и запустите python make_pack.py dlcpacks/showroom "D:/Games/Mafia II Definitive Edition".
  • Свои помещения переносятся так же: mafiam_studio --relocate <in.sds> <out.sds> <откуда x y z> <куда x y z> <градусы> поворачивает кадры архива, световые секторы, коллизии, физические предметы и объекты вокруг вертикали и ставит их на новое место; hide=имя,имя убирает из него объекты или людей.

Консоль

В окно сервера можно вводить команды (help — список):

players                         кто на сервере (id, ping, IP, группа)
resources                       какие ресурсы запущены, какие нет
start shop | stop shop          запустить / остановить ресурс
restart shop                    перезапустить (ensure shop — то же самое)
kick 3 причина                  выгнать (по id или нику)
ban 3 60 причина                бан на 60 минут (без минут — навсегда; ник и IP)
unban Vito                      снять бан (ник или IP)
say Рестарт через 5 минут       сообщение всем в чат
setgroup 3 admin                дать группу (без группы — забрать)
lua shop return #players.all()  выполнить Lua в ресурсе
quit                            остановить сервер

Перезапуск ресурса не трогает остальные: всё, что ресурс создал (машины, NPC, блипы, метки, таймеры, команды, соединение с базой), убирается, у игроков его клиентская часть перезагружается. Правите скрипт — restart имя, рестарт сервера не нужен. Перед остановкой всем ресурсам (и ему самому) приходит событие resourceStop — последний шанс сохранить данные.

Админы и права

[groups]
moderator = players, kick       ; права через запятую
admin = *                       ; * — все права

[admins]
Vito = admin                    ; ник = группа, выдаётся при входе

Эти же команды есть в чате у игроков с нужным правом: /kick 3, /restart shop, /players... Права команд консоли: players, resources, kick, ban, say, groups, lua. Команды вашего режима могут требовать любое своё право.

Под любым ником может зайти кто угодно. [admins] годится для тестов; на открытом сервере выдавайте группу из режима после входа игрока в аккаунт: player:setGroup("admin").

Доступ из интернета

Игроки подключаются по UDP на порт сервера (27015). Откройте его в брандмауэре Windows и пробросьте на роутере. Для игры с друзьями без проброса подойдут Radmin VPN или ZeroTier.

Лаунчер показывает название, сезон, число игроков и пинг сервера.

Публичный список серверов

Раз в минуту сервер сообщает о себе mafiam.com. Список проверяет его тем же UDP-запросом, что и лаунчер, поэтому сервер попадает туда, только если его порт открыт из интернета. Дальше игроки видят его во вкладке Интернет лаунчера. Когда сервер в списке, в консоли появится [master] on the public server list as ....

[master]
enabled=on           ; off: не показывать в общем списке (локальная сеть, тесты)
;host=my.domain.com  ; если игроки заходят по другому адресу (playit.gg, домен)

Из командной строки: --master off. API списка описан на mafiam.com/docs.