dreamland-mud / dreamland_code

DreamLand MUD: server code
GNU General Public License v3.0
43 stars 15 forks source link
dreamland-mud mud mud-engine mud-server plugin-system websockets xml

DreamLand MUD, руководство разработчика

Pусский | English


Stand With Ukraine DreamLand MUD version License Build Status Discord chat

Как собирать и запускать:

Содержание

Запуск локальной версии

Эта инструкция по сборке была проверена на Ubuntu 18.04. Дримленд гарантированно собирается под gcc 9.3 (или другой версией с поддержкой C++17).

Если вам удалось собрать под чем-то еще, пожалуйста, обновите это руководство.

Подготовка окружения

Установите компилятор и сопутствующие программы, а также библиотеки, от которых зависит код дримленд:

sudo apt-get update
sudo apt-get install -y git g++ gcc make automake libtool bison flex gdb telnet db-util libfl-dev bzip2
sudo apt-get install -y libcrypto++-dev libjsoncpp-dev libdb5.3 libdb5.3-dev libdb5.3++ libdb5.3++-dev zlib1g zlib1g-dev libssl-dev
sudo apt-get install -y locales && locale-gen uk_UA && update-locale

На Ubuntu 18.04, возможно, понадобится установить более свежую версию компилятора и сделать ее версией по умолчанию:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 g++-9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9
sudo update-alternatives --config gcc

Сборка из исходников

Склонируйте к себе либо главный репозиторий, либо свою собственную копию (fork) - о создании fork читайте ниже. Предположим, что исходники будут лежать в /home/dreamland/dreamland_code, тогда:

mkdir /home/dreamland && cd /home/dreamland
git clone https://github.com/dreamland-mud/dreamland_code.git

В каталоге с исходниками проинициализируйте конфигурационный скрипт и сборочные файлы, запустив

cd dreamland_code
make -f Makefile.git

В дальнейшем эту команду запускать не нужно, разве что если изменится configure.ac. Приступаем к конфигурации и сборке. Для удобства все объектники будут в отдельном каталоге, чтобы не засорять исходники лишними файлами. Инсталяция дримленд также будет в отдельном каталоге runtime, где на этапе конфигурации будет создано дерево каталогов и скопированы нужные файлы. В этом руководстве предполагается, что объектники лежат в /home/dreamland/objs, а инсталляция - в /home/dreamland/runtime. Измените пути в примерах согласно своей конфигурации.

mkdir /home/dreamland/objs && cd /home/dreamland/objs
/home/dreamland/dreamland_code/configure --prefix=/home/dreamland/runtime

Для сборки и установки запустите команду:

make && make install

Если у вас несколько процессоров, будет выгодно распараллелить сборку, указав количество параллельных потоков, например:

make -j 4 && make install

Установка dreamland_world

Склонируйте репозиторий dreamland_world, который содержит все конфигурационные файлы и некоторые зоны, а также репу dreamland_fenia_public с полезными скриптами на фене.

cd /home/dreamland/runtime
git clone https://github.com/dreamland-mud/dreamland_world.git share/DL
git clone https://github.com/dreamland-mud/dreamland_fenia_public.git share/DL/fenia/public

Вот и всё, мир готов к запуску.

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

cd  /home/dreamland/runtime
./bin/dreamland etc/dreamland.xml &

Просмотр логов

Логи попадают в подкаталог var/log в каталоге runtime. Формат файла логов задается в etc/dreamland.xml, по умолчанию имя файла - это дата и время запуска.

<logPattern>var/log/%Y%m%d-%H%M%S.log</logPattern>

Удалив эту строку из dreamland.xml, можно добиться вывода логов в stdout.

Вход в мир

Изначально в мире есть только один персонаж, наделенный всеми полномочиями: Kadm, пароль KadmKadm. Остальных персонажей можно создать по мере необходимости. Мир доступен локально на нескольких портах:

Например: telnet localhost 9000 или #connect localhost 9000 в муд-клиенте. Вместо localhost может понадобиться указать IP-адрес виртуальной машины, на которой установлен и запущен муд-сервер.


Работа с репозиторием

Fork репозитория

Создайте свою собственную копию (fork) репозитория, нажав на кнопку Fork вверху страницы: fork example

Ваша копия будет иметь путь https://github.com/yourname/dreamland_code: fork example

Cклонируйте исходники к себе на машину, используя URL из Clone or download: clone example например

git clone https://github.com/yourname/dreamland_code

Внесение изменений

Теперь вы можете вносить какие угодно изменения в свой fork, никак не влияя на основной репозиторий. Когда какая-то функциональность будет готова к вливанию обратно в основной репозиторий, нужно будет создать запрос (pull request), об этом ниже.

Кратко опишем команды, которые понадобятся для внесения изменений в свой fork. Все это стандартные команды git, о которых можно прочитать во многих руководствах.

  1. Проверить, какие файлы изменились или добавились в локальной версии:
    git status

    Просмотреть изменения подробно:

    git diff
  2. Добавить все измененные файлы в будущий commit:
    git add .

    Добавить файлы выборочно:

    git add path/to/file
  3. Создать commit и описать изменение. Описания рекомендуется делать понятные для тех, кто будет читать их через полгода.
    git commit -m "Guys, I did a thing!"

    Если нужно запустить встроенный редактор для создания описания (commit log):

    git commit
  4. Выпихнуть изменения на github:
    git push

Pull requests

Настало время поделиться со всеми тем, над чем вы корпели так долго. На странице вашего репозитория будет описано, на сколько коммитов вы опережаете родительский репозиторий, и появится кнопка для создания запроса New pull request: pull example

Нажав на нее, можно будет просмотреть отличия между двумя ветками. Если между вашей и родительской версией нету конфликтов, вы увидите "Able to merge". Можно создавать pull request, нажав на кнопку Create: pull example

Синхронизация с родительским репозиторием

Периодически приходится затаскивать изменения из главного репозитория в свой, чтобы всегда работать с последней версией. Один из способов это сделать такой:

В самом начале, как только склонировали репозиторий, добавьте себе еще один remote под названием upstream, который указывает на главный репозиторий:

git remote add upstream https://github.com/dreamland-mud/dreamland_code.git 

Теперь каждый раз, когда хочется обновиться из главного репозитория, можно легко стянуть изменения из главного и наложить их на свою ветку master:

git fetch upstream
git checkout master
git merge upstream/master
git push

Разработка

Несколько замечаний, которые могут облегчить жизнь при разработке.

Пересборка 'ядра'

Если вы внесли изменения в каталог src:

Пересборка плагинов

Пересоберите все измененные плагины:

cd /home/dreamland/objs/plug-ins/yourplugin
make -j 4 && make install

Перегрузите все измененные плагины изнутри мира, набрав:

plug reload changed