- Свой локальный сервер WoW с блэкджеком и ботами, часть 1
- Свой локальный сервер WoW с блэкджеком и ботами, часть 2
- Свой локальный сервер WoW с блэкджеком и ботами, часть 3
Часть 1 - О сервере, его установка и подключение
Чем интересен свой локальный сервер
Уже нет времени собираться в запланированное время и фармить данжи/рейды, можно играть в своём темпе с заданными под себя настройками. Кроме того современные версии ММО перегружены магазинами, fomo-механиками, попытками охватить «современную» аудиторию, социальная часть начала сводиться к РМТ. До пиратских серверов бывают проблемы с доступом и они могут в любой момент закрыться.
Есть готовые сборки, которые можно запустить в один клик. Но установка ручками даёт понимание как сервер устроен и позволяет более гибко менять под себя настройки.
Ботов можно приглашать в свою группу, делать данжи и рейды, создавать с ними гильдии, сражаться на БГ и аренах. Так же можно поставить опциональные модули имитирующие живой аукцион на сервере, возможность смены внешности предметов и модифицирующий прогрессию мод.
О чем руководство
Гайд по запуску и настройке своего сервера WoW Wrath of the Lich King (3.3.5a) AzerothCore с имитирующими игроков ботами и клиента игры под Linux.
Рассматривается поднятие локального сервера для личного использования на основе доступного открытого ПО, а не публичного пиратского. Дело не только в авторских правах, но и многие описанные в руководстве вещи просто не продуманы с точки зрения. Например, получив доступ к серверу можно через клиент WoW вызвать произвольный код на клиентах.
Запуск сервера на примере виртуалки с Debian 13. Надо:
-
50 Гб места на диске. Минимум можно уложиться в 30, но без запаса. На диске будет база данных, в которую идет активная запись. HDD, сильно нагруженный параллельно чем-то другим, не подойдет, в идеале лучше ssd. Если есть желание еще и собственный сайт базу знаний aowow развернуть, тогда надо еще +20-40 Гб места (подробнее в разделе про aowow).
-
6 Гб памяти, а лучше 10. В 4 уложиться можно впритык, на некоторых этапах может затыкаться и буксовать в свопе. Со свопом вместе надо ~8 Гб.
-
4 Ядра. В зависимости от конфигурации можно гонять несколько сотен ботов. Для тысячи ботов я использую 8 ядер процессора 5950X3D.
Сам изначально заинтересовался благодаря этому гайду: https://abs.freemyip.com:84/api/public/dl/ShUDo8u5?inline=true (Видео: https://www.youtube.com/watch?v=UG900F19GPk`)
Некоторые части остались оттуда.
В руководстве используется английская версия игры, возможно, с русской версией есть нюансы, не пробовал. Тут нет описания установки debian и основ удалённой работы с ним, нужны базовые навыки работы с linux. Т.е. тут так же не будет пояснений на каждый созданный исполняемый файл о том, что ему надо выдать права на исполнение.
Используемые проекты
Сервер
-
Сам сервер Azerothcore, ветка Playerbot:
https://github.com/mod-playerbots/azerothcore-wotlk.git --branch=Playerbot -
Модуль Playerbots:
https://github.com/mod-playerbots/mod-playerbots.git --branch=master -
(Опционально) Модуль имитации живого аукциона:
https://github.com/NathanHandley/mod-ah-bot-plus -
(Опционально) Индивидуальная прогрессия:
https://github.com/ZhengPeiRu21/mod-individual-progression -
(Опционально) Трансмог:
https://github.com/azerothcore/mod-transmog -
(Опционально) Равномерное распределение ботов по уровням:
https://github.com/DustinHendrickson/mod-player-bot-level-brackets -
(Опционально) Ollama для общения с ботами:
https://github.com/DustinHendrickson/mod-ollama-chat -
(Опционально, не рекомендую, не всегда хорошая идея) Автоматическая продажа серых предметов при подборе:
https://github.com/noisiver/mod-junk-to-gold
(Опционально) Сервисы вокруг сервера
-
Свой персональный WoWHead:
https://github.com/azerothcore/aowow -
Карта расположения персонажей:
https://github.com/DustinHendrickson/DustinsAzerothMap.git
Клиент
Распространение ссылок на клиенты может нарушать авторские права, поэтому их пришлось вырезать. Должен подойти любой для 3.3.5a, найти его не должно составить сложности.
Популярный оригинальный chromiecraft. Содержит только английский язык.
Многие игроки в 3.3.5a предпочитают использовать доступный в сети world of warcraft 3.3.5a hd.
(Опционально) Аддоны
-
Для управления ботами:
https://github.com/Macx-Lio/MultiBot -
Альтернативный вариант под ботов:
https://github.com/noisiver/unbot-addon/tree/english -
Просто архив популярных аддонов для 3.3.5a:
https://github.com/NoM0Re/WoW-3.3.5a-Addons/tree/main/src
Озвучка нейросеткой от сообщества
-
Аддон для озвучки диалогов:
https://github.com/mrthinger/wow-voiceover/releases/download/v1.4.3/AI_VoiceOver-WoW_3.3.5-v1.4.3.zip -
Пак звуков для WotLK:
https://abs.freemyip.com:84/share/7PI-N5L1 -
Пак звуков для оригинальной игры + TBC (TBC хромает местами по качеству):
https://github.com/Aelaksmith/Aivoiceover3.3.5 -
Пак звуков чисто для оригинальной игры. Если не нужны диалоги TBC:
https://github.com/mrthinger/wow-voiceover/releases/download/v1.3.1/AI_VoiceOverData_Vanilla-v1.0.0.zip
Установка Сервера
Описывать установку Debian 13 не буду. Нужна стандартная заготовка под сервер и лишь бы было достаточно места. В качестве примера сервер будет установлен в /opt/azerothcore-wotlk, запускаться будет из под пользователя azerothcore. Для простоты команды запускаются от рута.
Установка:
# Зависимости
apt install git curl unzip sudo
# Пользователь для запуска сервиса
useradd -s /usr/sbin/nologin azerothcore
# Директория под логи
mkdir /var/log/acore && chown azerothcore:azerothcore /var/log/acore
# Загрузка сервера в /opt
cd /opt && git clone https://github.com/mod-playerbots/azerothcore-wotlk.git --branch=Playerbot
# Модуль Playerbots
cd /opt/azerothcore-wotlk/modules/ && git clone https://github.com/mod-playerbots/mod-playerbots.git --branch=master
# Установка зависимостей для сборки (или изучить их и поставить вручную)
cd /opt/azerothcore-wotlk
./acore.sh install-deps
# Сборка сервера
./acore.sh compiler all
Каждый раз, когда обновляется сервер и/или модули надо запускать его сборку. Другие модули ставятся аналогично в /opt/azerothcore-wotlk/modules/, но могут требовать дополнительных действий помимо этого.
Для работы с ботами используется ответвление от основы azerothcore, она отстаёт где-то на пару недель. Это может создать проблему с доп. модулями, когда в основе изменилась структура и модули обновились под неё. Если натыкаешься на такую проблему, то надо сделать git checkout в модуле для коммита с изменениями.
Сервер готов, но ему нужна база mysql. Сервер mysql должен был поставиться с acore.sh install-deps из http://repo.mysql.com/apt/debian/. Для экономии места можно отключить бинлоги (если нет понимания для чего они нужны и как их лучше настроить), дописав в /etc/mysql/mysql.conf.d/mysqld.cnf в [mysqld] строчку disable_log_bin и перезапустив сервер.
Теперь надо завести пользователя в mysql для сервера. Если это сервер в локальной сети, то пароль можно не менять, что сэкономит время на правке конфигов. В mysql -u root:
DROP USER IF EXISTS 'acore'@'localhost';
CREATE USER 'acore'@'localhost' IDENTIFIED BY 'acore' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
GRANT ALL PRIVILEGES ON `acore_playerbots` . * TO 'acore'@'localhost' WITH GRANT OPTION;
CREATE DATABASE IF NOT EXISTS `acore_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS `acore_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS `acore_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS `acore_playerbots` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `acore_world` . * TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_characters` . * TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_auth` . * TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_playerbots` . * TO 'acore'@'localhost' WITH GRANT OPTION;
exit;
Копируем настройки по умолчанию:
cd /opt/azerothcore-wotlk
cp env/dist/etc/authserver.conf.dist env/dist/etc/authserver.conf
cp env/dist/etc/worldserver.conf.dist env/dist/etc/worldserver.conf
cp env/dist/etc/modules/playerbots.conf.dist env/dist/etc/modules/playerbots.conf
Если пользователь, пароль или названия баз не по умолчанию, то список файлов, где его надо поменять (хост;порт;пользователь;пароль;база):
/opt/azerothcore-wotlk/env/dist/etc/modules/playerbots.conf:1975:PlayerbotsDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_playerbots"
/opt/azerothcore-wotlk/env/dist/etc/authserver.conf:232:LoginDatabaseInfo = "127.0.0.1;3306;acore;м;acore_auth"
/opt/azerothcore-wotlk/env/dist/etc/worldserver.conf:121:LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth"
/opt/azerothcore-wotlk/env/dist/etc/worldserver.conf:122:WorldDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_world"
/opt/azerothcore-wotlk/env/dist/etc/worldserver.conf:123:CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters"
Загрузка необходимых данных для работы сервера:
cd /opt/azerothcore-wotlk && ./acore.sh client-data
Файл может качаться долго по ссылке из ./apps/installer/includes/functions.sh в /opt/azerothcore-wotlk/env/dist/bin/data.zip. Если есть локальная копия, то можно либо проверить версию и распаковать вручную в /opt/azerothcore-wotlk/env/dist/bin/.
В /opt/azerothcore-wotlk/env/dist/etc/worldserver.conf надо выставить директорию с логами LogsDir = "/var/log/acore".
Запускаем вручную для создания базы данных и пользователя (сервер с интерактивным вводом):
cd /opt/azerothcore-wotlk/env/dist/bin
sudo -u azerothcore ./worldserver
После первого запуска worldserver начнёт наполнять базу, процесс может растянуться на полчаса. Затем запустится сервер и станет доступна интерактивная консоль. Если ничего не происходит, можно нажать ENTER и увидеть приглашение ввода. После этого создаём пользователя с правами GM (нужен будет потом для управления по telnet):
account create admin password
account set gmlevel admin 3 -1
После этого закрываем по Ctrl+C
Чтобы не прибегать к интерактивному вводу и чтобы нормально обернуть всё в systemd-сервисы, проще всего включить telnet и отключить интерактивную консоль. В /opt/azerothcore-wotlk/env/dist/etc/worldserver.conf. Для этого надо найти параметры и выставить значения (именно 127.0.0.1, а не localhost):
Ra.Enable = 1
Ra.IP = "127.0.0.1"
Console.Enable = 0
Там же сразу стоит выставить по числу ядер в системе. Без этого с кучей ботов будет долбиться всё в одно ядро:
MapUpdate.Threads = 4
В базе надо выставить настройки для своего реалма, имя сервера и ip mysql -u root:
use acore_auth
UPDATE realmlist SET name = 'My Realm Name' WHERE id = 1;
UPDATE realmlist SET address = '192.168.1.91' WHERE id = 1;
IP Адрес тут - адрес сервера. Для локального использования можно оставить локальный, для глобального либо белый ип за которым стоит сервер, либо домен. Имя сервера по желанию.
По умолчанию ID сервера 1.
По умолчанию сервер будет слушать эти порты:
3724 TCP authserver
8085 TCP worldserver
Создаём systemd сервисы для запуска сервера:
/etc/systemd/system/azerothcore-auth.service:
[Unit]
Description=AzerothCore Auth Server
After=network.target mysql.service
Wants=mysql.service
[Service]
Type=simple
User=azerothcore
Group=azerothcore
WorkingDirectory=/opt/azerothcore-wotlk/env/dist/bin
ExecStart=/opt/azerothcore-wotlk/env/dist/bin/authserver
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=azerothcore-auth
# Security hardening
ProtectSystem=full
NoNewPrivileges=yes
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
/etc/systemd/system/azerothcore-world.service:
[Unit]
Description=AzerothCore World Server
After=network.target mysql.service azerothcore-auth.service
Wants=mysql.service
Requires=azerothcore-auth.service
[Service]
Type=simple
User=azerothcore
Group=azerothcore
WorkingDirectory=/opt/azerothcore-wotlk/env/dist/bin
ExecStart=/opt/azerothcore-wotlk/env/dist/bin/worldserver
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=azerothcore-world
# Security hardening
ProtectSystem=full
NoNewPrivileges=yes
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
Включение сервисов:
systemctl enable --now azerothcore-world.service
systemctl enable --now azerothcore-auth.service
Посмотреть логи после запуска можно:
journalctl -u azerothcore-world.service -f
journalctl -u azerothcore-auth.service -f
Подробнее логи worldserver есть в /var/log/acore/
Если всё прошло успешно, базовый сервер Azerothcore с Playerbots готов к работе. К управлению сервером можно подключиться по telnet с машины самого сервера:telnet 127.0.0.1 3443.
Там создать учетную запись для обычного пользователя-игрока:
account create user password
Выйти: logout.
По умолчанию сервер будет PvE GameType = 0 в worldserver.conf, можно заменить на 1 для PvP в открытом мире.
После этого лучше проверить работу подключившись как игрок с клиента, а уже потом добавлять различные модули.
Запуск клиента (на игровой машине)
Использовать можно клиент для 3.3.5a по вкусу. Клиент chromiecraft без всяких улучшений и сюрпризов. Популярная hd версия имеет кучу плюсов и запускается аналогично, но есть спорные решения и не исключены проблемы со стабильностью/совместимостью. Пробовал оба, предпочитаю hd.
Клиент под Windows, но работает под Wine. Надо запустить ChromieCraft/Wow.exe удобным для дистрибутива способом. Я скачал wine staging tkg с https://github.com/Kron4ek/Wine-Builds/releases и распаковал его в /home/USER/WineBins/wine-11.2-staging-tkg-amd64. Запуск с выделенным под игру префиксом такой:
WINEPREFIX=/home/USER/Игры/ChromieCraftWine /home/USER/WineBins/wine-11.2-staging-tkg-amd64/bin/wine /home/USER/Игры/ChromieCraft/Wow.exe
По умолчанию игра запускается в directx, что может вызвать проблемы в полноэкранном режиме.
Вариант 1 - переключить режим добавив в ChromieCraft/WTF/Config.wtf (в hd версии файлы в нижнем регистре):
SET gxApi "OpenGL"
Вариант 2 - выставить оконный режим без рамок в этом же файле:
SET windowResizeLock "1"
SET gxWindow "1"
SET gxMaximize "1"
У меня игра лучше работает в directx (с выключенным аппаратным курсором, он даёт статтер), поэтому я играю в оконном без рамки с ним. При игре с dx стоит поставить dxvk, например, через protontricks.
В ChromieCraft/Data/enUS/realmlist.wtf надо прописать свой сервер (для русского клиента ruRU, в hd версии файлы в нижнем регистре):
set realmlist 192.168.1.91
Если всё прошло как задумано, то можно зайти под своей учеткой и играть как обычно с ботами.
Вторая часть про установку и настройку модулей: Свой локальный сервер WoW с блэкджеком и ботами, часть 2









