Луа как сделать активацию по команде

Добавил пользователь Алексей Ф.
Обновлено: 18.09.2024

Вся серия не будет подчиняться какой-то системе. Уроки будут последовательно вводить ряд конструкций языка, чтобы уже к третьему или четвёртому уроку вы уже могли писать свои программы. Моя цель - подтолкнуть вас к самостоятельному изучению языка, помочь ощутить его, а не разъяснить от А до Я - если хотите освоить язык полностью, читайте справочное руководство (которое, хоть и скверно, переведено на русский язык: http://www.lua.ru/doc/). Чем раньше вы перейдёте от уроков "для чайников" в Сети к изучению справочника, тем лучше.

Если что-то непонятно - обязательно задайте вопрос в комментариях, и я и другие участники постараемся вам помочь.

Lua - популярный, несложный для освоения встраиваемый интерпретируемый динамически типизированный язык программирования общего назначения. Нет, вам необязательно понимать и половины слов, сказанных в предыдущем предложении - главное знайте, что он популярный и несложный. Кстати, простотой, а также маленьким размером дистрибутива (около 150 килобайт), он и заслужил свою популярность. Скрипты на Lua поддерживаются большим количеством приложений, в том числе играми. World of Warcraft и S.T.A.L.K.E.R. используют язык Lua. Мой любимый игровой движок, LÖVE, позволит вам с помощью Lua с лёгкостью создавать разнообразные игры. Как видите, Lua открывает вам немалые горизонты!

Прежде чем мы начнём, вам следует обустроить среду для программирования: то есть, найти программу, которая принимала бы написанный вами код на Lua и исполняла его: интерпретатор. Тут есть три варианта:

Пользователям операционных систем на базе Linux в этом смысле проще: им достаточно воспользоваться пакетным менеджером и установить Lua из репозиториев. В Debian и Ubuntu это делается командой apt-get install lua, а в Fedora, Red Hat и производных дистрибутивах - yum install lua. Однако не доверяйте мне слепо и обратитесь к справочнику вашей операционной системы, чтобы узнать, как именно это делается у вас.

2. Использовать онлайн-интерпретатор.

3. Использовать IDE.

В ходу сейчас две несколько различающиеся версии Lua: 5.1 и 5.2. Я буду ориентироваться на самую последнюю версию - версию 5.2, но обязательно укажу на важные различия между ей и 5.1, так как последняя тоже достаточно распространена. Кстати, Lua 5.1 исполняет код в полтора раза быстрее, чем Lua 5.2, чтобы вы знали.

-- Cortex Command Lua Scripting Tutorial --
___________________________________________

Автор - Ken "CaveCricket48" Do
Переводчик - Программист/ximximik

Владельцем всех прав на перевод является ximximik, поэтому любое копирование, распространение и изменение перевода без согласия владельца (ximximik) запрещено.

Вступление
Этот учебник научит вас, как использовать Lua в Cortex Command. Он написан для людей, которые не встречилались раньше с программированием совсем, и поэтому в нем не будут использованы сложные слова, которые есть в других учебниках. Лучше будет, если вы уже будете знать как работать с ini-кодом, прежде чем приступите к изучению программирования.

1.0 - Начало
-> 1.1 Создание Lua файла
-> 1.2 Прикрепление скрипта к объекту

2.0 - Основы Lua
-> 2.1 Комментарии
-> 2.2 Типы данных
-> 2.3 Переменные
-> 2.4 Операторы
-> 2.5 Таблицы
-> 2.6 Оператор "For"

3.0 - Cortex Command Lua stuff
-> 3.1 Этапы скрипта
-> 3.2 Функции
-> 3.3 Указатели

4.0 - Функции и свойства в Вики

5.0 - Пример скрипта
-> 5.1 Мина

----- 1.0 - Начало -----
________________________

В Cortex Command, Lua позволяет объектам делать то, что они обычно не были бы в состоянии сделать или создать особенные эффекты.

- 1.1 Создание Lua файла-

Принцип работы скриптов Lua в Cortex Command состоит в том, что скрипты присоединены к объектам, созданным с помощью ini. Чтобы сделать файл Lua в простом блокноте в Windows, просто создайте новый текстовый файл, перейдити в меню "Файл", "Сохранить Как. ", измените "Тип файла:" на "Все файлы" , и измените ".txt" в имени файла на ".lua". Если нет никакого расширения, просто добавьте ".lua" в конце имени файла. Потом нажмите "Сохранить". Вы создали файл Lua.

Совет от переводчика: Используйте Notepad++ вместо стандартного блокнота, так как в нем показывается весь синтаксис Lua, и вообще в нем легче работать.

- 1.2 Прикрепление скрипта к объекту -

Чтобы прикрепить Lua скрипт к объекту, созданному в ini файле, просто поместите "ScriptPath = " в блоке кода объекта с соответствующим табулированием.

----- 2.0 - Основы программирования Lua -----
________________________

--- 2.1 Комментарии ---

Комментарии в скрипте Lua - строки текста, которые не читаются игрой/программой, и в основном используются, чтобы аннотировать скрипт. Чтобы аннотировать, сделайте 2 дефиса, и что-нибудь после них на той же самой строке - комментарий.

--- 2.2 Типы данных ---

Типы данных - типы данных, которые используются для переменных и свойств. В CC есть 5 основных типов данных: числа, текст, boolean (логическая переменная), вектор, и ноль (nil). Первые 2 - понятно из названия то это. boolean - логическая переменная, т.е. её значения это истина (true) или ложь (false). Вектор в CC - координаты (X, Y). Числовые данные используются, печатая только числа. Текст используется при наличии пары кавычек ("") с текстом между ними. Вектор используется, следуя за словом "Vector " 2 числами разделенными запятой в двух круглых скобках. Ноль - обозначается как "nil" (чтобы не быть перепутанным с числом ноль).

--Логическая переменная
true
false

--Векторы
Vector(1,1)
Vector(5,2)
Vector(-7,6)

--- 2.3 Переменные ---

Переменные - это то в Lua, чему Вы можете дать значение. Они используются для того, чтобы хранить информацию, чтобы Вы могли снова вызвать это позже. Переменная состоит из своего имени, одного знака " bbCodeBlock">

Чтобы изменить переменную, просто напечатайте ту же самую переменную снова с новым значением:

Вы можете также заставить переменную иметь то же самое значение что и другая переменная, устанавливая ее значение как имя другой переменной:

В результате X будет равен 5.

Есть 2 типа переменных в CC: глобальная переменная и локальная. Глобальные переменные могут быть изменены скриптом любого объекта, вновь меняющие значение, и только одна переменная с таким именем может существовать. Глобальные переменные похожи на те выше в примерах.

Локальные переменные - переменные, у которых могут быть множественные копии, каждая из них привязана к объекту со скриптом, который создал их. Чтобы создать локальную переменную, напечатайте "local" перед именем переменной, разделив их пробелом. Установка значения локальной переменной равного значению другой локальной переменной работает подобным способом как и у глобальных переменных.

Это действие сделало переменную "varB" равной 5. Заметьте, что слово "local" не использовалось, когда мы выбирали переменную "varA".

Другое полезное свойство переменных - то, что Вы можете использовать переменные, чтобы установить определенное свойство в объект, и хранить объект в переменной. Храня объект в переменной, с ним легче взаимодействовать и легче вызывать указателем. Чтобы использовать переменные, для изменения свойства объекта, Вы нуждаетесь в переменной, которая является определенным указателем на объект (мы разберем это позже), сопровождающаяся точкой, названием свойства, знаком " bbCodeBlock">

"thing" это указатель на объект, "GetsHitByMOs" это свойство объекта в ini, и "false" это значение.

Обычно используют указатель, который уже определен как "self". Указатель всегда обращается к объекту, к которому присоединен скрипт.

--- 2.4 Операторы ---

Принцип работы Lua (и программирования вообще), это проверка операторов, чтобы увидеть, являются ли их значение истинным (true) и делающим что-либо если это так (или если не так). Давайте посмотрим на код ниже.

Этот код проверяет, если переменная "X" равна "1", то совершает "содержимое" (" " не фактическое действие, только указатель места заполнения для других команд, до которых мы доберемся позже), если оператор будет истиной. Обратите внимание на "end" внизу блока кода, который говорит, что " ", часть этого оператора, закончено. Если Вы не напечатаете "end" после оператора (конец оператора после тоже), то Вы получите ошибку. Также заметьте, что есть 2 знака "=" в "строке "if". "==" нужно для того, чтобы проверить равенство, и " bbCodeBlock">

Внутри операторов "if", могут находится операторы "else". Эти операторы проверяют, выполняется ли условие оператора "if", и если оно не истинно (не выполняется), то
тогда совершаются действия в их содержимом.

Условие "Elseif" похоже на второй "if" оператор и работает также:

В операторе могут быть много условий "elseif", но только одно "else".

Списки (также называемые как таблицы и массивы) похожи на переменные, у которых могут быть множество значений. Чтобы создать список, напечатайте название списка сопровождаемое знаком " bbCodeBlock">

Добавление значения к списку подобно присвоению/изменению значения переменной. Вы должны напечатать имя списка, сопровождаемое парой квадратных скобок с заданным номером в списке, знаком " bbCodeBlock">

Числовой символ с именем списка перед этим, говорит число элементов в списке.

Тот же самый список как в вышеупомянутых примерах, имеет значение переменной "numbercheck" равное 2.

Чтобы очистить все значения списка, напечатайте имя списка, знак " bbCodeBlock">

-- Очистка всего списка
thelist = <>

-- Очистка одного значения
thelist[1] = nil

Списки могут быть глобальными и локальными, как переменные.

--- 2.6 Оператор For ---

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

Пример использования оператора "for".

Давайте рассмотрим каждую часть подробно:

for
- Стартовое ключевое слово

i = 1
- "i" - временная переменная, которая используется оператором "for", для сохранения, сколько раз он совершил действия (включая 1). "i" может быть изменен на любое имя как переменная. "1" это начальное значение для отсчета.

5
- Кол-во повторений " ".

Чтобы прервать оператор "for", включите "break" в оператор "if", который проверяет значение оператора "for" для соблюдения условия.

----- 3.0 - Cortex Command Lua stuff -----
________________________

--- 3.1 Этапы скрипта ---

Этапы скрипта - это части скрипта, которые выполняются только, когда объект был создан, когда он существует, или когда уничтожен. Этапы скрипта тоже требуют "end" как и операторы условий.

-- в промежутке между "function Create(self)" и "end" будет работать, только когда объект будет создан. (происходит только один раз)
function Create(self)

end

-- в промежутке между "function Update(self) и "end" будет работать, только когда этот объект существует.
function Update(self)

end

-- в промежутке между "function Destroy(self) и "end" будет работать, только когда этот объект уничтожается. (происходит только один раз)
function Destroy(self)

end

Функции - часть Lua, которые уже встроены в игру и взаимодействуют с содержимым в Cortex Command. Формат функции - название группы функции, двоеточие, имя функции, и её параметры (нужные данные для этого, чтобы это работало) разделяются запятыми в круглой скобке. Большинство названий групп функции Cortex Command могут быть заменены указателем чем-нибудь на то, с чем они смогут взаимодействовать. Пример функции ниже:

Информация о функции из Википедии Cortex Command Lua:

AddImpulseForce
Adds impulse force (or instant momentum) to this MovableObject for the next time Update() is called.

- An Vector with the impulse force vector that will directly be added to this MovableObject's momentum next Update(). In kg * m/s.
- A Vector with the offset, in METERS, of where the impulse is being applied relative to the center of this MovableObject.

"anactor" - указатель на актора, "AddImpulseForce" - название функции, и содержимое круглой скобки - данные, необходимые для работы функции. В блоке информации о функции, "Return value", - это то, что выводит функция, когда она выполняется.
Большинство функций в Cortex Command может быть найдено в wiki, так что убедитесь проверив это.

--- 3.3 Указатели ---

Хорошо, мы наконец добрались до указателей!
В Cortex Command указатели - переменные, которые "хранят" объект в себе. Или Вы можете представить это, как гигантскую стрелку, указывающую на объект. независимо от того, что свойства Вы устанавливаете на указатель или используете функцию на нем, это произведет эффект на тот объект, на который он "казывает.

Есть несколько способов создать указатели. Обычно используют специальный оператор "for", который проверяет все объекты определенного типа и является оператором, который проверяет, является ли объект тем, который вам нужен. Кусок кода скрипта ниже присоединен к объекту, который ищет актора, с именем "Dummy" и затем устанавливает на него указатель, названный "local pointer".

for actor in MovableMan.Actors do
if actor.PresetName == "Dummy" then
local pointer = actor
break
end
end

Что делает вышеупомянутый кусок - проверяет всех акторов в игре, пока он не находит агента с "PresetName" как "Dummy". Тогда это устанавливает указатель на этого актора как "local pointer" и останавливает оператор "for" с "break". Термин "актор" является указателем на актора, и передан "local pointer" для более простой справочной информации.

Здесь 2 других строки "for", которые получают указатели на устройствах и частицах.

----- 4.0 - Функции и свойства в Cortex Command Wiki -----
________________________

----- 5.0 - Пример скрипта -----
________________________

--- 5.1 Mine ---
Этот скрипт для простой мины, которая взрывается, когда акторы находятся в пределах определенного расстояния объекта со скриптом.

-- Пока объект существует
function Update(self)

-- Проверка всех акторов
for actor in MovableMan.Actors do

-- Использует функцию и свойство вектора, чтобы сохранить расстояние между актором и объект со скриптом в переменной.
local distcheck = SceneMan:shortestDistance(self.Pos,actor.Pos,true).Magnitude

-- Оператор, проверяющий, если проверяемое расстояние (переменная "local distcheck") меньше чем 10. Если так, совершите действие.
if distcheck
Я мертв :)


Qlua-основы


isConnected() - возвращает 1, если QUIK подключен к серверу и 0, если не подключен

getScriptPath() - возвращает путь, по которому находится скрипт, без последнего обратного слэша ("\"), например, "C:\Program Files (x86)\Info\MyLua"

getInfoParam() - возвращает значение параметра из окна:"Связь" -> "Информационное окно. "

sleep() - пауза в скрипте, принимает время паузы в миллисекундах, например sleep(3000); - остановит выполнение скрипта на 3 секунды

getWorkingFolder() - возвращает путь, по которому находится файл info.exe без последнего "\", например, getWorkingFolder(); - вернет "C:\Program Files (x86)\Info"

Visual Studio должна быть запущена с правами Администратора!

Перейдите по меню: "ОТЛАДКА" -> "Присоединиться к процессу. "

Выберите из списка процессов "info.exe" и нажмите кнопку "Присоединиться", после этого, Вы можете видеть отладочную информацию в окне "Вывод"

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Сервисные функции QLua(Lua): 22 комментария

Здравствуйте, подскажите, пожалуйста, в каком виде сравнивать значение времени
getInfoParam ("LOCALTIME")
Например с 9 утра?

Здравствуйте! Чтобы микросекунды иметь, нужно dll написать простенькую на C++, в Lua нет микросекунд, на сколько я знаю, видел только их эмуляцию. Сравнить в секундах можно так, например (время компьютера, не сервера):

Дмитрий, не подскажете почему
PrintDbgStr("qlua "..getInfoParam("LASTPINGTIME"))
PrintDbgStr("qlua "..getInfoParam("LASTPINGDURATION"))
возвращают пустые значение?
а getInfoParam('SERVERTIME') корректно отрабатывает.

Цель отслеживать пинг.. При больших задержках 1-2 сек переходить в безопасный режим.

Перейдите в меню: "Создать окно" - "Все типы окон" - "Информационное окно", поставьте там галочку "Расширенный набор" и нажмите "Добавить все" и "Да", откроется информационное окно, посмотрите в нем, возможно эти параметры просто не транслируются. Как вообще пинг отслеживать даже не знаю, никогда не приходилось, можете попробовать настроить на компьютере время точно до секунд, и в OnAllTrade сравнивать время пришедшей сделки со временем компьютера, конечно, с учетом часового пояса, тогда будете видеть когда совершилась сделка и сколько потребовалось времени, чтобы информация о ней дошла до Вашего терминала.

Дмитрий, спасибо, что отвечаете.
А вот функция isConnected() - она как быстро увидит разрыв? Критерий качества канала какой у неё?

Всегда пожалуйста! Как только соединение будет разорвано, сразу увидит. Можете сделать простенький скрипт с этой функцией и поразрывать соединение, посмотреть как она реагирует.

Здравствуйте!
Вопрос - как при помощи Qlua можно принудительно активировать стоп-заявку из таблицы стоп-заявок? Чтобы по ней выставилась заявка. В терминале такая опция есть.

Здравствуйте! Отправьте вот такую транзакцию, только код класса и номер стоп-заявки нужный укажите:

Большое спасибо за оперативность помощи. Попробовал Вашу подсказку - получаю ошибку транзакции с текстом "Не указан режим транзакции" . Среди параметров транзакции такого параметра не нашел. Что имеется в виду?

Все получилось! Я пытался активировать связанную заявку. Обычные стоп-заявки активируются. Большое спасибо!

Ну все, отлично тогда 🙂

Всегда пожалуйста! Даже не могу Вам точно подсказать, какой-то параметр не верно указан, попробуйте, как я писал, через карман транзакций получить нужную строку в своем терминале.

Здравствуйте!
Вопрос возник - как лучше программно определить момент начала торгов? Если робот запущен, например, за 10 минут до начала торгов, многих данных у него еще нет (или есть, но вчерашние), то на что ориентироваться, чтобы дать роботу команду начинать расчеты? isConnected() я так понимаю будет уже true и за 10 минут. Есть еще подозрение, что можно по первой обезличенной сделке?
Может быть, где-то есть уже такой реализованный код, что-то не нахожу, буду благодарна за подсказку!

Неа, статус торгуется у него уже до начала торгов 1. При этом данные он берет вчерашние, например. ту же цену открытия. Меняется она уже с началом торгов.
Сделаю с привязкой к первой сделке 🙂

Инструкции по установке LUA-скрипта для программы Logitech G HUB.

Установка LUA-скрипта на мышки Logitech G-серии одинакова для всех моделей этой серии. Исключение только устаревшие модели, которые работают только на ПО LGS.

logitech ghub выбор главная страница

Image logitech g hub главная

logitech ghub активный профиль

Image logitech g hub активный профиль

Примечание
Символ блокировки указывает, установлен ли профиль как постоянный. Это означает, что он будет активен для всех приложений. Вы задаете профиль как постоянный в настройках Logitech G HUB

Установка LUA-скрипта


Скрипт можно добавить в профиль из окна "Игры и приложения". Скрипты не зависят от конкретного профиля и могут быть применены абсолютно к любому профилю.

logitech ghub добавиь скрипт игры и приложения

Image logitech g hub игры


1. Выберите профиль, в который вы хотите добавить скрипт.
2. Щелкните значок Создание сценария.

РЕКОМЕНДАЦИЯ
Для безопасного использования не устанавливайте Logitech скрипт в игровом профиле , только на рабочем столе!
Смотрите в разделе меню Безопасность использования , как это делается.

Назначить скрипт

logitech ghub создать новый lua скрипт

Image logitech g hub скрипт


1. АКТИВНЫЙ СЦЕНАРИЙ LUA для создание скрипта выбирайте +СОЗДАНИЕ НОВОГО LUA-скрипта - позволит вам создать новый сценарий. В будующем тут выбирайте установленный скрипт из выпадающего меню для запуска с вашим профилем или если вам не нужен скрипт, выберите "НЕТ ".

2. СОЗДАЙТЕ НОВЫЙ LUA-скрипт . Щелкните это поле, чтобы создать новый сценарий.
3. Нажмите на перекрестие или стрелку в обновленной версии GHUB, чтобы вернуться на вкладку Игры и приложения.

Скрипт менеджер

logitech ghub скрипт описание и название имя редактирование скрипт lua

Image logitech g hub создать скрипт

1. Имя скрипта Введите здесь имя вашего скрипта.
2. Введите Описание Скрипта. Используйте это текстовое поле, чтобы добавить описание для вашего сценария.
3. РЕДАКТИРОВАТЬ СЦЕНАРИЙ , нажмите эту кнопку, чтобы перейти в редактор сценариев.

Редактор сценариев

При нажатии кнопки РЕДАКТИРОВАТЬ СЦЕНАРИЙ откроется редактор скриптов Logitech. Состоит из 2 частей: основной области сценариев и выходных данных.

logitech ghub редактор сценариев lua

Image logitech g hub редактор сценариев

Добавление LUA-скрипта

logitech ghub добавить вставить установть скрипт гф

Image logitech g hub добавить скрипт lua

1. Вы можете добавить скрипт с помощью меню СЦЕНАРИЙ-ИМПОРТ или напрямую добавить код сочетанием клавиш CTRL+C скопировать из файла и CTRL+V вставить в редактор.
2. Для того, чтобы скрипт работал, не забудьте сохранить его через меню СЦЕНАРИЙ-СОХРАНИТЬ или нажмите сочетание клавиш в редакторе CTRL+S.

logitech ghub сохранить сценарий lua

Image logitech g hub сохранить скрипт

Поздравляем скрипт установлен! Теперь вы можете с легкостью использовать LUA-скрипты для вашей мыши Logitech G!

ОЧЕНЬ ВАЖНО
Вы не можете использовать игровые скрипты в РЕЖИМЕ ВСТРОЕННОЙ ПАМЯТИ, скрипты работают только через программное управление.

logitech ghub сохранить сценарий lua

Image logitech g hub сохранить скрипт

Расширение
Для расширения функциональности мыши используйте функцию Logitech G-SHIFT. Поскольку большинство кнопок используются для активации оружия, используйте функцию G-SHIFT, чтобы добавить различные стандартные функции.

logitech ghub g-shift режим кнопка

Image logitech g hub g-shift расширение

Установите определенную кнопку для функции G-SHIFT переключитесь в режим настроек G-SHIFT и установите новые значения кнопок. А когда вы удерживаете нажатой запрограммированную кнопку G-SHIFT, функциональность мыши Logitech может быть значительно расширена.

Читайте также: