В общем, похоже вырисовывается в какой-то мере стабильно работающий код.
Пока вся документация на английском:
https://github.com/Krutoy242/lostuser
В общем, я сохранил правила укорачивания и добавил больше функций между таблицами и функциями.
Приведу пример дрона, который носит предметы между точками.
Компоненты: Инвентарь, Контроллер инвентаря
Имя дрона:
P=i/Nf300ⓡDm^Pp,s/1~'Dg!>1',_(Pl)
Описание каждой части имени:
Nf300: Выполняет navigation.findWaypoints(300). Это никакое заранее указанное сокращение. Большая буква - это сокращение, которое получают все компоненты. navigation -> N, inventory_controller -> I и так далее.
i/Nf300: Здесь используется единственная предустановленная переменная i. i = порядковый индекс текущего цикла программы, начиная с нуля. i / table - специальная функция "Получить индекс по модулю" или t[i % #t + 1]. Все эти функции, которые есть математические операторы над таблицами, есть в документации. По смыслу мы просто пробегаем каждый цикл по следующему вейпоинту.
P=i/Nf300: Просто записываем в глобальную переменную P наш вейпоинт. Локальные переменные не могут сокращаться, поэтому мы используем глобальную. А еще, если буква будет большая, мы сможем сократить точку далее.
ⓡ: просто один символ который будет заменен на return . Приму советы как избежать таких замен, что бы сохранить чистый Lua код 🙂
Dm^Pp: вызывает drone.move(table.unpack(P.position)). Тут должно быть просто. Dm => D.m => drone.m => drone.move. В документации по ссылке выше перечислены все операторы, и там написано что если функцию (drone.move) возвести в степень таблицы (p.position) то мы получим вызов функции с раскрытием таблицы в параметры.
s/1~'Dg!>1' => while drone.getOffset() > 1 do sleep(1) end. Здесь символ ! заменяется на ()
_(Pl): Загрузить P.label как Lua код. Эта функция будет загружена и выполнена. Точки называются _'Dsk0'~4
и _'Dsel(k)Dd(0)'~4 соответственно. Первая сосет 4 раза, вторая выбирает каждый из 4х слотов и поочереди их выбрасывает.