Разработка дополнений DFHack
Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
WIP. Статья будет дописываться со временем
Главные особенности, основы программирования скриптов и плагинов для DFHack
Описание объектов дополнений
Всего 2 класса дополнений: плагины и скрипты Lua/Ruby. Для выполнения определённых действий "От и до" достаточно использовать скрипты. Плагины используются для расширения игры, или тогда, когда невозможно добиться результата скриптами.
Lua/Ruby скрипты
Что могут делать Lua скрипты по умолчанию?
- Манипулировать памятью игры
- Читать и писать файлы в файловой системе
- Читать некоторую системную информацию
- Создавать TCP сервер и быть TCP клиентом, отправлять и получать данные по сети (очень ограниченно и в блокирующем режиме)
Что не могут делать Lua скрипты?
- Работать в фоне (кроме событий Eventful, ограничено)
- Посылать и принимать данные по UDP
- Дополнять функционал самого DFHack, оставаясь ограниченными функционалом Lua
Плагины
Особенности плагинов
- Могут быть включены и отключены, не требуют ручного вызова каждый раз
- Пишутся на языке C++
- Могут использовать методы, функции, рутины на каждом игровом тике
- Могут внедрять функционал, который невозможно никак запрограммировать посредством Ruby или Lua
- Могут быть внедрены в интерфейс
- Расширенное управление графикой и интерфейсом (например, индикатор настроения в правом нижнем углу, манипулятор профессий
u→l
,autochop
и прочие расширения интерфейса)
- Расширенное управление графикой и интерфейсом (например, индикатор настроения в правом нижнем углу, манипулятор профессий
Недостатки плагинов
- Требуют полной сборки DFHack из исходников
- Официальной документации почти нет
- Если Lua/Ruby скрипты могут быть быстро исправлены при выявлении ошибок или дополнены, то плагины требуют пересборки
Основы разработки плагинов
Некоторые понятия
Вектор — одномерный массив из одних и тех же данных. Например, вектор юнитов, вектор цивилизаций. В Lua векторы это почти как таблица table
, но, вдобавок, для них разработчиками DFHack разработаны специальные методы.
Скрипт — файл Lua или Ruby, выполняющий строгий алгоритм. Запускается и завершается
Что пока что не может быть реализовано?
- Создание новых наборов изображений: тех, которые изображаются на артефактах, фигурках, статуях, огранках и другом.
- Крайне сложная система их генерации, много переменных не выявлено
- Создание армий и управляемых вторжений
- Наличие неизвестных переменных в памяти, назначение которых неизвестно разработчикам DFHack
- Остальное то, что неизвестно разработчикам DFHack. Многие переменные просто-напросто не раскрыты, а их назначение неизвестно. Чаще всего это числовые переменные и векторы с числами