Запуск сервера (хэта) в Аллоды 2

FAQ:

Если в хэте кракозябры: меняем дефолтный язык для нон-юникод программ в разделе «Регион» (а не язык!).

флаг ServerRotateMaps:
true — сервер (инстанс) будет непрерывно работать, как в ванильной версии
false — сервер выключится (и будет автоматом перезапущен хэтом) после проигрывания всех карт в очереди

Cygwin — не собирается…. MinGW — собирается.

Не создаются персонажи в БД: отключить STRICT_TRANS_TABLES


Как запустить свой сервер в Аллоды 2 на основе сборки, на которой работает «Хэт Тангара«:

  1. Аллоды 2 по интернету состоят из трех компонентов:
    • клиент — собственно сама игра; то, что устанавливает пользователь
    • сервер — инстанс, на котором крутится карта (одна карта — один инстанс сервера)
    • хэт — это программа, которая соединяет несколько серверов в единое целое
  2. Эти компоненты представлены в виде исходников, которые надо скомпилировать. Каждый компилируется в своей среде разработки:
  3. Чтобы собрать клиент/сервер — загружайте файл проекта .sln в VCExpress 2005/2010; для хэта — скачайте MinGW (именно старый, с osdn.net, mingw-get version 0.6.3-pre-20170905-1, вот зеркало её), настройте (вот мой гайд на англ), закиньте файл проекта .cbp в КодБлокс и он его подхватит.
  4. ВНИМАНИЕ! Для сервера тоже важна корректная версия MinGW. Если у вас стоит в PATH Cygwin — поменяйте на MinGW; иначе сервера будут не находить папку «»chr»»
  5. Ищо раз: Cygwin — не собирается…. MinGW — собирается.
  6. Насчет сборки сервера в VCExpress 2010:
    а) не жмите «стрелку» для Run (дебаг), а просто сбилдите (иначе будет ошибка). Вы билдите не экзешник (ибо сурсов нет), а библиотеку srvmgr.dll в которую встроены «патчи», которые уже зашиваются в сервер (подробнее тут).
    б) по дефолту VСE запускается в кастрированном режиме, где в меню нет раздела Build. Чтобы появился, поставьте галку «expert settings» в менюшке сверху
    в) по дефолту VСE работает 30 дней на триалке. Продляющий ключ можно найти в гугле 😉
    г) чтобы новичку вкурить что там как в дизасме — поглядите этот кусочек кода 
  7. Чтобы их скомпилировать, вам нужно будет проинсталлировать дополнительные библиотеки и указать на них ссылки в настройках компиляторов. Проще всего делать так — запускаем компиляцию, смотрим текст ошибки, гуглим его и понимаем, какую библиотеку нужно добавить. Для сервера особо ничего не нужно, просто качаете VСE 2010 и сразу собираете… а вот для клиента я устанавливал следующие библиотеки (их надо добавить в пути проекта):
  8. После того, как вы разберетесь в ошибками и все скомпилируете, на выходе у вас будет:
    • клиент; ключевые файлы allods2.exe и a2mgr.dll; *.res файлы для клиента уже не нужны; вместо них в корне клиента должна лежать папка data.
    • сервер; ключевые файлы a2serv.exe и srvmgr.dll; при этом в папке сервера должны присутствовать *.res файлы, как в ванильных аллодах.
    • хэт; к файлам хэта надо добавить батники (опишу ниже).

Также на сервер надо установить питон 2.7 и перл (древнюю версию года эдак 2013). Ну и БД MySQL (там хранятся аккаунты и персонажи), куда надо загрузить дамп базы (переименовать, убрав .txt; в ней один аккаунт a2fan; пароль поставьте в БД через SHA1)

Теперь каждый компонент отдельно:

ХЭТ

Для начала на сервере (или локалке, если делаете хэт на своем компе) создайте папку под хэт. Рекомендую C:\Allods2
Туда надо положить следующие файлы (кодом указано содержимое батников):
libgcc_s_dw2-1.dll
libmysql.dll
libstdc++-6.dll
list.txt
playernum.txt
playerstat.xml
redhat.exe
sleep.exe
redhat.cfg
redhat_servers.cfg
allods.cmd

start /BELOWNORMAL hat2.cmd
sleep 15
start /BELOWNORMAL server.cmd 1
sleep 5
start /BELOWNORMAL server.cmd 2
sleep 5
start /BELOWNORMAL server.cmd 3
sleep 5
start /BELOWNORMAL server.cmd 4
sleep 5

hat2.cmd

:a
start /BELOWNORMAL /w C:\Allods2\redhat.exe
sleep 5
goto a

server.cmd

cd C:\
cd Allods2\
cd Server%1
del /q time.info
:a
del /q time.info
del /q chr\*.sck
del /q chr\info.map
del /q ctl\*
start /BELOWNORMAL /w a2serv%1.exe -cfg"C:\Allods2\Server%1\server.cfg" --cfg2="srvmgr.cfg"
sleep 15
goto a

Касательно батника allods.cmd — там так много start /BELOWNORMAL server.cmd 1-4 потому, что у меня 4 сервера сейчас запущено (по каждому на уровень сложности); если у вас один сервер — соответственно оставляем одну запись (1).

Насчет файлов конфигов хэта — примеры представлены в сборке с гитхаба. Единственная важная штука — указание серверов, если их много делается через порты таким образом.

Также в папке с хэтом находится папки:
Chr
ctl
logs
Server1
Server2
Server3
Server4

СЕРВЕР

Нас интересует папка Server1; это собственно сервер (один из серверов, их может быть много, соответственно будут папки Server2, Server3 и проч). Внутри:

Папка chr
Папка ctl
Папка maps
a2serv1.exe
famehall.dat
graphics.res
main.res
movies.res
patch.res
scenario.dll
scenario.res
sfx.res
sleep.exe
smackw32.dll
srvmgr.dll
world.res
server.cfg

Тут важен файл конфига сервера server.cfg (когда скачаете — уберите .txt); этого конфига не гитхабе нет.

В названии экзешника должен быть порядковый номер сервера (как у папки, к примеру: для Server2 будет a2serv2.exe)

sleep.exe — утилита, которую можно взять на просторов интернетов; и положить в каждую папку, где она вызывается батником.

Вот в целом и все. Чтобы запустить сервер — стартуем батник allods.cmd . Если что-то не работает — смотрим логи и гуглим как решить проблему.

Файлы для редактирования *.res файлов (самый важный тут world.res, там параметры заклинаний, вещей, монстров) можно взять на сайте exc!ton‘a. Также у него была инструкция по тому, как можно работать с файлами Аллодов 2 и внедрять любые фичи.

КЛИЕНТ

Перед тем как скомпилировать клиент, задаем в файле network_hat_enter.cpp адрес своего сервера (хэта), в моем случае это #define URL «hat.igroglaz.com». Собираем и вперед. Также при сборке клиента вы можете собрать инсталлятор, для этого надо установить NSIS.

ЗАВЕРШЕНИЕ

Теперь нужно создать аккаунт:
для этого в таблицу БД «logins» добавляем name и password. Регистрацию можно удобно сделать через php-скрипт, который можно найти здесь: https://github.com/igroglaz/rom2utils

Можно играть!


Благодарности

В завершение, хочу выразить благодарность Anotomix, за то, что в свое время помог разобраться в работе хэта и ZZYZX, за помощь в устранении технических проблем.

4 комментария на «Запуск сервера (хэта) в Аллоды 2»

  1. Serg.Bloim говорит:

    Твой скрипт перезапускает сервер и хэт если они упали. У меня на вин10 сервер перезапускается норм, а вот хэт вечно висит с ‘Terminate batch job(Y/N)’. Если добавить «cmd /c» в начало команды, то хэт перезапускается нормально.
    hat2.cmd

    :a
    cmd /c start /BELOWNORMAL /w C:\Allods2\redhat.exe
    sleep 5
    goto a

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.