Pусский | English
Есть несколько способов познакомиться с кодом проекта и начать под него разработку:
- Собрать у себя локально, например, на виртуальной машине с 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 вверху страницы:
Ваша копия будет иметь путь https://github.com/yourname/dreamland_code:
Cклонируйте исходники к себе на машину, используя URL из Clone or download: например
git clone https://github.com/yourname/dreamland_code
Теперь вы можете вносить какие угодно изменения в свой fork, никак не влияя на основной репозиторий. Когда какая-то функциональность будет готова к вливанию обратно в основной репозиторий, нужно будет создать запрос (pull request), об этом ниже.
Кратко опишем команды, которые понадобятся для внесения изменений в свой fork. Все это стандартные команды git, о которых можно прочитать во многих руководствах.
- Проверить, какие файлы изменились или добавились в локальной версии:
git status
Просмотреть изменения подробно:
git diff
- Добавить все измененные файлы в будущий commit:
git add .
Добавить файлы выборочно:
git add path/to/file
- Создать commit и описать изменение. Описания рекомендуется делать понятные для тех, кто будет читать их через полгода.
git commit -m "Guys, I did a thing!"
Если нужно запустить встроенный редактор для создания описания (commit log):
git commit
- Выпихнуть изменения на github:
git push
Настало время поделиться со всеми тем, над чем вы корпели так долго. На странице вашего репозитория будет описано, на сколько коммитов вы опережаете родительский репозиторий, и появится кнопка для создания запроса New pull request:
Нажав на нее, можно будет просмотреть отличия между двумя ветками. Если между вашей и родительской версией нету конфликтов, вы увидите "Able to merge". Можно создавать pull request, нажав на кнопку Create:
Периодически приходится затаскивать изменения из главного репозитория в свой, чтобы всегда работать с последней версией. Один из способов это сделать такой:
В самом начале, как только склонировали репозиторий, добавьте себе еще один 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