Разработка дополнений DFHack

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску

WIP. Статья будет дописываться со временем

Главные особенности, основы программирования скриптов и плагинов для DFHack

Описание объектов дополнений

Всего 2 класса дополнений: плагины и скрипты Lua/Ruby. Для выполнения определённых действий "От и до" достаточно использовать скрипты. Плагины используются для расширения игры, или тогда, когда невозможно добиться результата скриптами.

Lua/Ruby скрипты

Что могут делать Lua скрипты по умолчанию?

  • Манипулировать памятью игры
  • Читать и писать файлы в файловой системе
  • Читать некоторую системную информацию
  • Создавать TCP сервер и быть TCP клиентом, отправлять и получать данные по сети (очень ограниченно и в блокирующем режиме)
  • Регистрировать ряд событий через Eventful
  • Запускать новые процессы в блокирующем режиме (os.execute), получать их вывод в переменные (io.popen)

Что не могут делать Lua скрипты?

  • Работать в фоне (кроме событий Eventful, ограничено)
  • Посылать и принимать данные по UDP
  • Дополнять функционал самого ядра DFHack, ограничиваясь встроенным функционалом Lua и утилитами DFHack под Lua

Плагины

Особенности плагинов

  • Могут быть включены и отключены, не требуют ручного вызова каждый раз
  • Пишутся на языке C++
  • Могут использовать методы, функции, рутины на каждом игровом тике
  • Могут внедрять функционал, который невозможно никак запрограммировать посредством Ruby или Lua
  • Могут быть внедрены в интерфейс
    • Расширенное управление графикой и интерфейсом (например, индикатор настроения в правом нижнем углу, манипулятор профессий u→l, autochop и прочие расширения интерфейса)

Недостатки плагинов

  • Требуют полной сборки DFHack из исходников
  • Официальной документации почти нет
  • Если Lua/Ruby скрипты могут быть быстро исправлены при выявлении ошибок или дополнены, то плагины требуют пересборки

Основы разработки плагинов

Некоторые понятия

Вектор — одномерный массив из одних и тех же данных. Например, вектор юнитов, вектор цивилизаций. В Lua векторы это почти как таблица table, но, вдобавок, для них разработчиками DFHack разработаны специальные методы.

Скрипт — файл Lua или Ruby, выполняющий строгий алгоритм. Запускается и завершается

Что пока что не может быть реализовано?

  • Создание новых наборов изображений: тех, которые изображаются на артефактах, фигурках, статуях, огранках и другом.
    • Крайне сложная система их генерации, много переменных не выявлено
  • Создание армий и управляемых вторжений
    • Наличие неизвестных переменных в памяти, назначение которых неизвестно разработчикам DFHack
  • Остальное то, что неизвестно разработчикам DFHack. Многие переменные просто-напросто не раскрыты, а их назначение неизвестно. Чаще всего это числовые переменные и векторы с числами