Lua - это настоящий язык программирования, который можно использовать в Dual Universe для придания динамики и интерактивности. Будь то управление кораблем, сделанным из вокселей, или добавление движения и функциональности конструкции (например, управление дверями), Lua присутствует везде.
Если вы не читали первые два дев-блога из этой серии, вот что вы пропустили:
Часть 1: Последние изменения и дополнения, изменения, связанные со стыковкой, и устаревание кватернионов.
Часть 2: Изменения в API радара и дополнения в API транспондера.
В третьей части мы завершаем цикл Lua devblogs, рассматривая наиболее востребованные функции, обновление библиотеки базы данных, внутриигровой атлас и систему обработки событий.
ДРУГИЕ ДОПОЛНЕНИЯ
По многочисленным просьбам мы добавили в Lua несколько незначительных функций, которые, по нашему мнению, будут хорошо сочетаться с другими изменениями.
<string> core.getConstructName() : Возвращает имя конструкции.
<int> core.getCurrentPlanetId() : Возвращает ID текущего близкого звездного тела.
<string> system.getPlayerName(<int> pid) : Возвращает имя данного игрока, если он находится в зоне видимости или транслируется транспондером.
<list> unit.getMasterPlayerOrgIds() : Возвращает список идентификаторов организаций, членом которых является игрок, выполняющий скрипт.
<string> system.getOrganizationName(<int> oid) : Возвращает название данной организации, если оно известно, например, транслируется ретранслятором.
<string> system.getOrganizationTag(<int> oid) : Возвращает тег данной организации, если он известен, например, транслируемый ретранслятором.
ОБНОВЛЕНИЕ БИБЛИОТЕКИ LUA ДЛЯ БАЗЫ ДАННЫХ
С учетом всех этих изменений и улучшений, казалось бы, самое время обновить библиотеку локальной базы данных и добавить некоторые другие, основанные на отзывах игроков.
Теперь вы найдете следующие функции:
<table> database.getPlayer(<int> pid) : Возвращает всю информацию о данном игроке, идентифицированном по его ID.
<table> database.getMasterPlayer(<table> unit) : Возвращает всю информацию об игроке, запускающем скрипт.
<table> database.getOrganization(<int> oid) : Возвращает всю информацию о данной организации, идентифицированной по ее ID.
<table> database.getConstruct(<int> cid) : Возвращает всю информацию о данной конструкции, идентифицированной по ее ID; для обнаружения конструкции требуется радар.
<table> database.getElement(<table> core,<int> uid) : Возвращает всю информацию о данном элементе, идентифицированном по его ID; требуется связанный блок ядра.
ДОПОЛНЕНИЕ К АТЛАСУ LUA
Разработчики Lua указали на необходимость создания внутриигрового атласа. С добавлением функции getCurrentPlanetId мы можем сделать его доступным уже сейчас.
Мы рады, что нам удалось придерживаться похожей структуры, с которой игроки уже знакомы, но с сертифицированными значениями и рефакторингом, особенно для аспектов локализации.
Текстовые поля для названия, описания, минералов и т.д. являются не строками, а таблицами. Это было сделано с целью предоставления простой информации на трех языках, которые мы сейчас поддерживаем: английском, французском и немецком.
С этой библиотекой атласа у вас будет следующая информация:
<int> id : идентификатор звездного тела.
<list> name : Название звездного тела.
<list> type: Тип звездного тела (планета или луна).
<list> biosphere : Биосфера звездного тела.
<list> обитаемость: Уровень обитаемости звездного тела.
<list> classification: Термическая классификация обитаемости планеты.
<list> description: Описание звездного тела.
<string> iconPath: Путь к изображению иконки звездного тела (т.е. для использования на экранах).
<bool> hasAtmosphere: Истина, если звездное тело имеет атмосферу.
<bool> isSanctuary: Истинно, если звездное тело является луной-убежищем.
<bool> isInSafeZone: True, если звездное тело находится в безопасной зоне.
<int> systemId: Идентификатор звездной системы, в которой находится звездное тело.
<int> positionInSystem: Ориентировочное положение звездного тела в звездной системе.
<список> спутников: Список идентификаторов спутников данного звездного тела.
<vec3> center: Положение центра звездного тела в мировых координатах.
<float> gravity: Гравитационное ускорение на номинальном радиусе звездного тела в м/с².
<float> radius: Номинальный радиус звездного тела.
<float> atmosphereThickness: Толщина атмосферы в метрах.
<float> atmosphereRadius: Радиус сферы атмосферы, измеренный от центра звездного тела.
<float> surfaceArea: Номинальная площадь поверхности звездного тела.
<float> surfaceAverageAltitude: Средняя высота на поверхности звездного тела.
<float> surfaceMaxAltitude: Максимальная высота на поверхности звездного тела.
<float> surfaceMinAltitude: Минимальная высота на поверхности звездного тела.
<float> GM: стандартный гравитационный параметр звездного тела.
<список> руд: Список руд, доступных на звездном теле.
<int> territories: Количество территорий на поверхности звездного тела.
Пример использования:
local atlas = require('atlas') --Вы можете получить доступ к любому звездному телу по его id: atlas[system_id][stellar_body_id] local alioth = atlas[0][1]
ДОБАВЛЕНИЕ БИБЛИОТЕКИ LUA ДЛЯ ОБРАБОТКИ СОБЫТИЙЧтобы облегчить игрокам организацию и реализацию системы обработки событий, как для использования на экранах Lua, так и для различных настольных систем, мы добавили новую локальную библиотеку событий Lua. Это позволяет создавать события, связывать с ними действия, а также управлять этими событиями и их выбросами.
Вот краткая документация по этой библиотеке.
Событие
Описание: Событие содержит действия, которые должны быть вызваны его выбросом.
Свойства:<table> actions: Таблицы действий, прикрепленных к событию.
event:emit(...): Испускает событие и вызывает присоединенные действия с заданными аргументами.
<bool, int> event:findAction(<string> id): Найти конкретное действие, связанное с данным событием, с заданным идентификатором. Функция может принимать действие в качестве аргумента, чтобы узнать, привязано ли действие к данному событию.
Аргументы:
<строка> id: ID действия.
Возвращает:
<bool> success: Истина, если найдено действие, привязанное к этому событию.
<bool> index: Индекс действия, найденного в таблице действий события.
<string> event:addAction(<any> call,<bool> enabled,<int> limit): Добавить действие к событию с заданными аргументами.
Аргументы:
<объект> call: Функция или поток, вызываемый при срабатывании события.
<bool> enabled: Булево значение, указывающее, включено действие или нет.
<int> limit: Количество раз, которое событие может вызвать это действие.
Возвращает:
<string> id: Идентификатор действия.
<nil> event:removeAction(<string> id): Удалить действие, связанное с событием с заданными аргументами. Функция может принимать в качестве аргумента объект действия.
Действие
Описание: Действие определяется вызываемым объектом, функцией или потоком.
Свойства:<string> id: Это идентификатор, который может быть использован позже для ссылки на это действие.
<any> call: Вызывается при срабатывании события.
<bool> enabled: Это булево свойство указывает, включено ли действие или нет.
<int> limit: Это свойство представляет количество раз, когда события могут вызывать это действие.
<int> nbCall: Это свойство отслеживает, сколько раз события вызывали это действие.
<float> interval: Это свойство позволяет ограничить временной интервал между двумя вызовами.
<float> lastCall: Это свойство позволяет отслеживать время последнего вызова этого действия.
Пример использования библиотеки Atlas.
Пример использования библиотеки
Event.
<BOOL> ARTICLE.ENDDEVBLOG().
Мы надеемся, что вам понравилась серия статей Lua devblog. Наша работа здесь закончена, но ваша - нет. Нашей основной мотивацией для блогов было собрать ваши отзывы, прежде чем, возможно, рассматривать дальнейшие изменения Lua и новые возможности, как для API, так и для добавления дополнительных библиотек.
Комментарии: (0)
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.