TES3MP / OpenMW

TES3MP - многопользовательская реализация игрового движка OpenMW для The Elder Scrolls III: Morrowind.

Для сетевой игры посредством Yggdrasil создан патч библиотеки CrabNet, реализующий поддержку IPv6 вместо IPv4 а также форк для автоматической сборки движка в Docker (контейнер для запуска игры не требуется).

Патч IPv6 является рабочим но прототипом. По причине отсутствия двойного стека, развитие ветки в текущем виде и PR в TES3MP не планируется. Тем не менее, желающие реализовать такую функциональность в официальном движке - могут использовать готовые наработки (учитывая также, что версия TES3MP 0.8.1 требует фундаментального апгрейда до актуальной версии OpenMW 0.51.0, реализующей уже новый API).

Установка

Сборка аналогична оригиналу, за исключением модифицированных источников CrabNet и обязательной активации CRABNET_SUPPORT_IPV6:

git clone https://github.com/YGGverse/TES3MP-forge.git
cd TES3MP-forge
docker build --tag yggverse/tes3mp-forge --build-arg BUILD_THREADS=4 .
docker run --rm -it -v /tmp/TES3MP:/build yggverse/tes3mp-forge

Сгенерированный релиз /tmp/TES3MP/*.tar.gz распаковать по назначению.

Локальные библиотеки

В зависимости от дистрибутива и его предустановок, при запуске игры могут быть ошибки отсутствующих библиотек. Например, сборка оригинального tes3mp-forge на Fedora 44 требует:

libavformat.so.58 libavutil.so.56 libswresample.so.3 libvpx.so.5
libwebp.so.6 libcrystalhd.so.3 libaom.so.0 libcodec2.so.0.8.1
libshine.so.3 libx264.so.155 libx265.so.165 libpcre.so.3 libsndio.so.7.0
libavcodec.so.58 libswscale.so.5 libbluray.so.2 libssh-gcrypt.so.4

Извлечь нужные библиотеки можно непосредственно со сборочного контейнера Docker - сначала я делал это скриптом bash (с корня распакованного билда) копируя требуемые файлы в ./lib но вскоре реализовал патч TES3MP-deploy, поэтому скрипт ниже пригодится только если вы собираетесь с оригинальной версии GrimKriegor/TES3MP-forge вместо актуальной YGGverse/TES3MP-forge/ipv6:

docker run --rm --entrypoint bash yggverse/tes3mp-forge -c '
    files=(
        libavformat.so.58 libavutil.so.56 libswresample.so.3 libvpx.so.5
        libwebp.so.6 libcrystalhd.so.3 libaom.so.0 libcodec2.so.0.8.1
        libshine.so.3 libx264.so.155 libx265.so.165 libpcre.so.3 libsndio.so.7.0
        libavcodec.so.58 libswscale.so.5 libbluray.so.2 libssh-gcrypt.so.4
    )
    paths=()
    for f in "${files[@]}"; do
        if [ -f "/usr/lib/$f" ]; then paths+=("/usr/lib/$f")
        elif [ -f "/usr/lib/x86_64-linux-gnu/$f" ]; then paths+=("/usr/lib/x86_64-linux-gnu/$f")
        elif [ -f "/lib/x86_64-linux-gnu/$f" ]; then paths+=("/lib/x86_64-linux-gnu/$f")
        fi
    done
    tar -chf - "${paths[@]}" 2>/dev/null
' | tar -xf - -C ./lib --strip-components=3 --no-same-permissions

Игровые наборы

На стороне сервера не требуются.

На стороне клиента - устанавливаются посредством менеджера:

./openmw-wizard

Для многопользовательской игры TES3MP важно учитывать CRC32 файла Morrowind.esm, которую сервер будет считать валидной:

  • 0x7B6AF5B9 - Morrowind: Game of the Year Edition (GOTY) / GOG
  • 0x34282D67 - AkelLa (1С)

Администратор сервера может изменить это значение в файле:

server/data/requiredDataFiles.json
// This file lets you enforce a certain plugin list and order for all clients
// attempting to join this server
//
// By default, only the English and Russian editions of Morrowind are allowed,
// because the German and French editions have hardcoded translations, whereas
// the Russian edition has localization files that make it compatible with the
// English edition

[
    {"Morrowind.esm": ["0x7B6AF5B9", "0x34282D67"]},
    {"Tribunal.esm": ["0xF481F334", "0x211329EF"]},
    {"Bloodmoon.esm": ["0x43DD2132", "0x9EB62F26"]}
]

Сервер

tes3mp-server-default.cfg
[General]
# На примере сборки IPv6 - указывается конкретный адрес, бинд на :: не работает
localAddress = 202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148
port = 25565
maximumPlayers = 64
hostname = TES3MP server
# 0 - Verbose (spam), 1 - Info, 2 - Warnings, 3 - Errors, 4 - Only fatal errors
logLevel = 1
password =

[Plugins]
home = ./server
plugins = serverCore.lua

[MasterServer]
enabled = false
address = master.tes3mp.com
port = 25561
rate = 10000
etc/systemd/system/tes3mp.service
[Unit]
After=network.target
Wants=network.target

[Service]
Type=simple

User=tes3mp
Group=tes3mp

WorkingDirectory=/home/tes3mp/TES3MP
Environment="LD_LIBRARY_PATH=./lib"
ExecStart=/home/tes3mp/TES3MP/tes3mp-server.x86_64

# mkdir /var/log/tes3mp && chown tes3mp:tes3mp -R /var/log/tes3mp
StandardOutput=file:///var/log/tes3mp/debug.log
StandardError=file:///var/log/tes3mp/error.log
	
[Install]
WantedBy=multi-user.target

Клиент

Сборка IPv6 не реализует обработку аргументов –connect, мастер сервера и браузер, вместо этого нужно указать конкретный сервер через конфиг:

tes3mp-client-default.cfg
[General]
destinationAddress = 202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148
port = 25565
password =
# 0 - Verbose (spam), 1 - Info, 2 - Warnings, 3 - Errors, 4 - Only fatal errors
logLevel = 0

[Master]
address = master.tes3mp.com
port = 25561

[Chat]
# Use https://wiki.libsdl.org/SDL_Keycode to find the correct key codes when rebinding
#
# For chatting
keySay = Y
# For enabling or disabling the chat window
keyChatMode = F2
x = 0
y = 0
w = 390
h = 250
# How long the message will be displayed in hidden mode
delay = 5.0

Запуск:

./tes3mp

Подсказки для новичков

  • настроить аудио, графику и моды можно посредством ./openmw-launcher
  • при первом входе указать новый логин/пароль; при последующих - существующий
  • игровой прогресс - сохраняется автоматически на стороне сервера
  • для активации игрового чата - нажать «Y»
  • активация боевого режима - «F» (в этом режиме вход в некоторые локации не доступен)
  • вызов игрового меню - правой кнопкой мыши
  • пауза в многопользовательской игре отсутствует

Список серверов Yggdrasil

Только авторизованные участники могут оставлять комментарии.
yggdrasil/games/tes3mp.txt · Последнее изменение: 2026/10/28 19:43 — p.s.
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki