Разработка торгового мода для Avorion: от интерфейса и Lua до скрытых проблем

Разработка торгового мода для Avorion: от интерфейса и Lua до скрытых проблем

Прокомментировать Просмотры: 37

❯ Что это за игра?

Этот проект ближе всего к серии игр X: разработчики черпали вдохновение в её системе интерфейсов и механике взаимодействия между кораблями и станциями. Однако здесь есть существенное преимущество — возможность проектировать корабли из блоков, варьируя их размеры и создавая уникальные конструкции. По сути, это своеобразный «Майнкрафт» в космосе, где добыча ресурсов из астероидов также является неотъемлемой частью геймплея.

Разработка торгового мода для Avorion: от интерфейса и Lua до скрытых проблем
Находка в воркшопе Стима

Игра тесно интегрирована со Steam, что позволяет сообществу активно делиться своими наработками: модами, чертежами кораблей и станций. Любое судно требует определенных затрат ресурсов. Наличие мультиплеера позволяет бороздить просторы галактики, заниматься торговлей и противостоять пиратам вместе с друзьями, а процедурная генерация гарантирует уникальность каждого мира.

Это далеко не вся карта. Лишь мелкий участок, который я успел исследовать
Это далеко не вся карта. Лишь мелкий участок, который я успел исследовать

Игровая карта поистине огромна — 1000×1000 секторов. Перемещение между секторами занимает около 10 секунд и напрямую зависит от технических характеристик вашего корабля.

Да, это то, на что хватило фантазии лично у меня
Да, это то, на что хватило фантазии лично у меня

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

Я давно искал космосим, напоминающий Freelancer образца 2003 года. Ключевыми требованиями для меня были наличие вида от третьего лица и развитая экономическая модель.

Идея для мода возникла из простой потребности: в игре представлено более 100 товаров, и я постоянно забывал, по какой цене приобрел тот или иной груз. Моя цель — создать интерфейс для автоматического учета торговых сделок, где цена за единицу товара фиксировалась бы автоматически.

❯ Технические особенности

Ядро игры реализовано на C++, однако скриптовая часть написана на Lua. Поддержка модификаций предусмотрена разработчиками. Документация по API местами оставляет желать лучшего — порой примеры ограничиваются перечислением функций без какой-либо демонстрации их работы.

Полноценных руководств по созданию модов практически нет, поэтому пришлось разбираться, изучая чужой код. Структура размещения скриптов также поначалу казалась не совсем очевидной.

❯ Создание модификации

Первым делом нужно понять, как игра подгружает моды. Avorion позволяет расширять существующие игровые скрипты. Исследуя папку data/scripts, я пришел к выводу, что файл data/scripts/entity/init.lua является оптимальной точкой входа для инициализации пользовательских дополнений.

D:\SteamLibrary\steamapps\common\Avorion\data\scripts>tree /F
Folder PATH listing for volume Data
Volume serial number is D03D-733D
D:.
│   scripts.db
│   sectorspecifics.lua
│   startsector.lua
│
├───alliance
│       init.lua
│
├───client
│       crafticons.lua
│       silhouettes.lua
...

Чтобы игра «увидела» мод, необходимо создать определенную структуру в директории AppData:

C:\Users\User\AppData\Roaming\Avorion\mods\MyMod>tree /F
Folder PATH listing for volume Windows
Volume serial number is 483C-589B
C:.
│   modinfo.lua
│   thumbnail.png
│
└───data
    └───scripts
        └───entity
                init.lua
                tradinghistory.lua

Краткий обзор файлов:

  • modinfo.lua — манифест с метаданными;
  • init.lua — расширение стандартной точки входа;
  • tradinghistory.lua — основная логика мода;
  • thumbnail.png — иконка для Steam Workshop.

В modinfo.lua задаются основные параметры: имя, версия и зависимости. Важным моментом является поле saveGameAltering — если установка мода может изменить структуру сохранений, это необходимо указать, чтобы предупредить игрока.

Подключение скрипта к Entity() в init.lua выполняется с проверкой на наличие уже загруженного экземпляра, чтобы избежать дублирования:

local entity = Entity()
if valid(entity) then
    if not entity:hasScript("data/scripts/entity/tradinghistory.lua") then
        entity:addScript("data/scripts/entity/tradinghistory.lua")
    end
end

Следует помнить о клиент-серверной архитектуре игры: скрипты должны корректно исполняться на обеих сторонах, поэтому мы используем условия if onServer() или if onClient().

При реализации интерфейса важно использовать комментарий -- namespace, чтобы движок правильно подгрузил наш код в свое пространство имен.

❯ Результат

На текущем этапе мод успешно интегрирован в интерфейс игры: иконка пазла в верхнем правом углу открывает окно с историей совершенных сделок. Весь функционал (запись цен, расчеты и очистка истории) работает исправно.

Да, господа, торгуем золотом
Да, господа, торгуем золотом

Полный исходный код скрипта tradinghistory.lua доступен под спойлером ниже, а саму модификацию можно найти в Steam Workshop.

tradinghistory.lua
... (Код мода из оригинального сообщения) ...

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

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов