/dreamland_code

DreamLand MUD: server code

Primary LanguageC++GNU General Public License v3.0GPL-3.0

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

Pусский | English


DreamLand MUD version License Build Status Discord chat

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

  • Собрать у себя локально, например, на виртуальной машине с Ubuntu, пользуясь инструкцией ниже.
  • Собрать готовый к использованию Docker контейнер, как описано в Readme к проекту dreamland_docker.
  • Воспользоваться Goorm Online IDE согласно инструкции, что даст возможность изучать и изменять код, запускать свой сервер и играть на нем, не покидая окна браузера.

Содержание

Эта инструкция по сборке была проверена на Ubuntu 16.04 и Ubuntu 14.04. Дримленд собирается под версиями компилятора gcc начиная с 4.8 и заканчивая 8.2.0.

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

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

sudo apt-get update
sudo apt-get install -y git g++ gcc make automake libtool bison flex gdb telnet vim 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

Склонируйте к себе либо главный репозиторий, либо свою собственную копию (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, который содержит все конфигурационные файлы и некоторые зоны. Создайте на него ссылку из каталога runtime.

cd /home/dreamland
git clone https://github.com/dreamland-mud/dreamland_world.git
ln -s /home/dreamland/dreamland_world /home/dreamland/runtime/share/DL

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

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. Остальных персонажей можно создать по мере необходимости. Мир доступен локально на нескольких портах:

  • 9001 - "задняя дверь" для быстрого доступа, минуя архивариуса. При входе через этот порт укажите в одной строке кодировку, логин и пароль, например: 0 Kadm KadmKadm.
  • 9000 - обычный вход, тут же можно создать нового персонажа.
  • 1234 - порт web-socket. Можете скачать клиент mudjs, установить его согласно инструкции и играть из браузера.

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


Создайте свою собственную копию (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
  1. Добавить все измененные файлы в будущий commit:
git add .

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

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

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

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

Настало время поделиться со всеми тем, над чем вы корпели так долго. На странице вашего репозитория будет описано, на сколько коммитов вы опережаете родительский репозиторий, и появится кнопка для создания запроса 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:

  • если поменялась только реализация (файлы с расширением .cpp), достаточно пересобрать только каталог src:
cd /home/dreamland/objs/src
make -j 4 && make install
  • если ваше изменение также повлияет и на плагины (например, поменялся заголовочный файл) - то нужно пересобрать вообще всё.
cd /home/dreamland/objs
make -j 4 && make install

Затем надо перезапустить dreamland (см. выше про запуск).

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

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

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

plug reload changed