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

Игра тесно интегрирована со 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
... (Код мода из оригинального сообщения) ...
В заключение скажу, что игра полностью оправдала мои ожидания. Единственный минус — некоторая ограниченность рынков сбыта, что иногда заставляет подолгу искать покупателя для определенных товаров. В остальном — это глубокий и увлекательный проект для всех любителей жанра.
Как купить Assassin’s Creed Black Flag Resynced на ПК, PS и Xbox в 2026 году
Как создавали Heroes of Might and Magic V: история спасения культовой серии
Как я взломал Soundcore: кастомная прошивка и установка DOOM. Часть 1
«Жизнь и страдания господина Бранте» бесплатно раздают в Steam до 23 июля
Doom запускается на всем, включая Neo Geo
От судьбы не уйдешь
Nintendo Switch 2: островок стабильности на фоне шторма в игровой индустрии
В Perfect World вышло обновление с регионом Цзинсюань