Скачайте сервер на странице загрузки (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. Без него сервер в локальном режиме: см. ниже. |
name | MafiaM server | Название сервера в лаунчере и на mafiam.com/servers. |
port | 27015 | UDP-порт, к которому подключаются игроки. Откройте его в брандмауэре (см. ниже). |
edition | de | Версия игры: de (Definitive Edition) или classic. Игроки с другой версией зайти не смогут. |
maxPlayers | 128 | Слоты игроков, до 1024. Лаунчер показывает, сколько занято: 12 / 128. |
maxPerAddress | 16 | Сколько игроков может зайти с одного IP-адреса: увеличьте для игры по локальной сети или тестовых ботов, уменьшите, чтобы один человек не занимал много слотов. |
tags | нет | До 8 тегов через запятую: RP,Cars,Mafia. Видны под названием сервера в лаунчере и в общем списке, чтобы игроки находили сервер нужного типа. |
discord | нет | Приглашение в ваш Discord. У всех, кто играет на сервере, в статусе Discord появится кнопка, чтобы зайти туда. |
streamRadius | 200 | На сколько метров игроки видят друг друга и машины (от 50 до 1000). Меньше — легче серверу и сети, больше — видно дальше. |
maxStreamedPlayers | 300 | Сколько ближайших игроков каждый видит одновременно (от 10 до 1024). Больше — ниже FPS и больше трафика у игроков: 300 в поле зрения — около 45 FPS на среднем ПК. |
season | summer | summer (1950-е) или winter (1940-е). Игроки загружают его при входе. |
traffic | on | Машины и прохожие на улицах: on / off. |
police | off | Полиция и розыск: on / off. |
time | нет | Время суток для всех, ЧЧ:ММ. Не задано — у каждой игры своё, как в шаблоне погоды. Из скриптов — world.setTime. |
timeScale | 1 | Как быстро идёт день: игровых минут за реальную минуту. 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 у моста в Мидтауне: в него входят через дверь, лампы светят, а в окнах настоящий город.




Пакет — это три файла:
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.