Здравствуйте, гость ( Вход | Регистрация )

6 страниц V « < 3 4 5 6 >  
Ответить в эту темуОткрыть новую тему
> Вопрос по луа
cirus
сообщение 9.3.2018, 23:06
Сообщение #81


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26746
Пользователь №: 16.971
Возраст: 29



Цитата
function bb (var)
wait(var + math.random(var))
return
end
-- вызываем:
bb(1000)

return в данном случае не нужен, т. к. функция ничего не возвращает. В место перенаправления и так вернётся.
Пример с return:
Код
--lua
function bb (var1, var2)
    return var1 * 3, var2 / 4   -- возвращаем 2 значения
end

a, b = bb(10, 20)
log (a, b)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.3.2018, 23:46
Сообщение #82


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



Цитата
return в данном случае не нужен, т. к. функция ничего не возвращает. В место перенаправления и так вернётся.

Феншуй и не более того.

Скорее gosub некоторое подобие функции со своими фишками в виде общей области видимости. Если вы объявляете переменную внутри функции с приставкой local:
local var = 12
тогда этот var не будет виден вне этой функции. Это очень удобно. Например, мы имеем некоторый счетчик, который использует переменную i, мы можем внутри вызываемой функции использовать свою local i и не переживать, что перезапишем вышестояющую переменную (у нас будет своя локальная i с другим значением).


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 9.3.2018, 23:53
Сообщение #83


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



из функции можно выскочить как-то типа break?
Или функция должна обязательно вернутся к месту вызова?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.3.2018, 0:10
Сообщение #84


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26746
Пользователь №: 16.971
Возраст: 29



Цитата
Или функция должна обязательно вернутся к месту вызова?

Вернётся в любом случае. Либо когда будет end - конец функции, либо через return из любого места в функции.
В луа 5.1 goto нет. В 5.3 есть.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 10.3.2018, 1:24
Сообщение #85


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21065
Пользователь №: 16.156



Я не помню, была ли проблема определения выполнения текущей строки, он же ход скрипта ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 10.3.2018, 2:21
Сообщение #86


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



Цитата
Я не помню, была ли проблема определения выполнения текущей строки, он же ход скрипта ?

ее крайне обще касался я с кнайтом на этапе крикручивания луа. В том плане чтобы прикрутить логгирование и т.д. Было особо не до того, как следствие нет ни отслеживания ни логгирования. Тут еще очень большой вопрос в том, чтобы иметь возможность полноценно вырубать всю эту радость и получать 100% скорости.

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 11.3.2018, 14:07
Сообщение #87


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



все функции можно загружать через require. Это как?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.3.2018, 14:22
Сообщение #88


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



Это способ хранить все не в одном файле.
https://forum.uokit.com/index.php?showtopic=30000
Тут, например, мой скрипт подключается через require.
Хочу обратить ваше внимание, что из-за кривого crystal lua который используется в качестве прокладки между луа и делфи, вызов подобных функци производится фактически, как:
arr:func
вместо
arr.func
Т.е. вы пишете arr.func, а на самом деле из-за бага будет вызван arr:func. И это самая страшная проблема в пилоте на данный момент. Ибо это фактически убивает подключение сторонних либ, либо их нужно переписывать.

Сообщение отредактировал DarkMaster - 11.3.2018, 14:25


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 11.3.2018, 14:52
Сообщение #89


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



я тут намедни вычитал, что на луа можно проигрывать звуки без остановки скрипта. Как такое делать?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.3.2018, 15:14
Сообщение #90


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26746
Пользователь №: 16.971
Возраст: 29



Цитата
все функции можно загружать через require. Это как?

Открываем блокнот, вставляем:
Код
function f(a, b)
    return a+b
end

Сохраняем блокнот с любым именем, например: func. Меняем расширение с txt на lua. Т. е. файл будет называться func.lua. Закидываем его рядом с пилотом.
Код
--lua
require("func")  -- загружаем функцию из файла

result=f(2, 3)   -- вызываем её
log (result)


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 11.3.2018, 18:19
Сообщение #91


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



мне показалось или невозможно функцию загрузить через require? если в функции присутствуют такие параметры как Kbd.IsKeyPress из подгруженной длл-ки.
Пример из скрипта выше:

пример

Код
--lua
require("Kbd")

--===== все функции можно загружать через require  ====
function F1()
    while Key_Press() == 0 do   -- пока не нажата кнопка, если F1 выйдет из функции
        log (1) wait (30)       -- этот код выполняется при нажатии F1
    end
end

function F2()
    while Key_Press() == 0 do   -- пока не нажата другая кнопка, если F2 выйдет из функции
        log (2)  wait (30)      -- этот код выполняется при нажатии F2
    end
end

function F3()
    while Key_Press() == 0 do   -- пока не нажата другая кнопка, если F3 выйдет из функции
        log (3)  wait (30)      -- этот код выполняется при нажатии F3
    end
end

function Key_Press()     -- функция для отслеживания нажатий, чтобы выйти из текущей функции
    for i = 1, #arr do
        if  Kbd.IsKeyPress(arr[i]) then
            return 1
        end
        wait (1)
    end
    return 0
end
--===========

arr={112, 113, 114}  -- какие клавиши отслеживать, 112(F1), 113(F2) и т. д.
t={F1, F2, F3}    -- таблица с функциями
while 1 do
    for i = 1, #arr do
        if  Kbd.IsKeyPress(arr[i]) then   -- если нажата клавиша
            time = os.clock () + 0.5      -- если кнопка зажата на 0.5 секунды, то функция тоже выполнится
            while Kbd.IsKeyPress(arr[i]) and os.clock() < time do wait (10) end  -- ждём когда кнопка будет отпущена или зажата на 0.5 секунды
                t[i]()                 -- вызываем нужную функцию t[1] - при нажатии F1, t[2] - при нажатии F2
            while Kbd.IsKeyPress(arr[i]) do wait (10) end  -- ждём когда кнопка будет отпущена
        end
        wait (1)
    end
end



если эту функцию грузить через require, то она не работает
Код
function Key_Press()     -- функция для отслеживания нажатий, чтобы выйти из текущей функции
    for i = 1, #arr do
        if  Kbd.IsKeyPress(arr[i]) then
            return 1
        end
        wait (1)
    end
    return 0
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.3.2018, 21:04
Сообщение #92


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



Цитата
если эту функцию грузить через require, то она не работает

Цитата
Хочу обратить ваше внимание, что из-за кривого crystal lua который используется в качестве прокладки между луа и делфи, вызов подобных функци производится фактически, как:
arr:func
вместо
arr.func

Цитата
https://forum.uokit.com/index.php?showtopic=30000
Тут, например, мой скрипт подключается через require.



--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.3.2018, 4:16
Сообщение #93


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



https://forum.uokit.com/index.php?s=&sh...st&p=424403


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 12.3.2018, 13:53
Сообщение #94


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26746
Пользователь №: 16.971
Возраст: 29



Цитата
В связи с чем полноценно заработал require.

И как теперь это должно выглядеть?
Код
--lua
require("Kbd")  -- загрузка функции
while 1 do      -- бесконечный цикл
    if Kbd.IsKeyPress(Kbd.Q) then   -- если нажата клавиша Q
        log("Нажата Q")
        wait (300)
    end
    wait (20)
end

В данном виде не работает. Как по-другому надо вызывать или плагин переписывать?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.3.2018, 14:39
Сообщение #95


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21065
Пользователь №: 16.156



Да и когда и в чем он криво работал ?


Цитата
В связи с чем полноценно заработал require.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.3.2018, 17:45
Сообщение #96


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



Некоторый плагин:
Код
function uoext.test_param (var1, var2, var3)
    return var1, var2, var3
end

вызываем:
Код
    local var1, var2, var3 = 1,"2","!@ywfVRS"
    var10, var20, var30 = uoext.test_param(var1, var2, var3)
    if var1 == var10 and var2 == var20 and var3 == var30 then
        log("Передача и возврат параметров: ОК.")
    else
        log("Передача и возврат параметров: ERROR.")
        log("Параметр1: " .. (var10 or "nil") .. " ожидалось: " .. (var1 or "nil"))
        log("Параметр2: " .. (var20 or "nil") .. " ожидалось: " .. (var2 or "nil"))
        log("Параметр3: " .. (var30 or "nil") .. " ожидалось: " .. (var3 or "nil"))
        error = error + 1
    end


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.3.2018, 19:19
Сообщение #97


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21065
Пользователь №: 16.156



Плагин это просто луа скрипт ? Если длл, то

Цитата
Передача и возврат параметров: ОК.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.3.2018, 19:50
Сообщение #98


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



Плагин всмысле через require. Сама функция должна быть в другом файле.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.3.2018, 19:59
Сообщение #99


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21065
Пользователь №: 16.156



Так плагин(dll) или include ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.3.2018, 20:22
Сообщение #100


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 11.279



require... Вообще "плагин" оно условно. Ибо просто другой файл.

файл luaPlugins\extended.lua
Код
--lua
function uoext.test_param (var1, var2, var3)
    return var1, var2, var3
end

вызываем из пилота:
Код
--lua
    log"clear"
    log"mode noscript"
    log"Начало теста."

    -- Для отладки в консоли луа.
    if not log then log = print print("log объявлен, как print") end
    -- Подгружаем либу.
    require("luaPlugins\\extended")

    local error = 0
    local var1, var2, var3 = 1,"2","!@ywfVRS"
    var10, var20, var30 = uoext.test_param(var1, var2, var3)
    if var1 == var10 and var2 == var20 and var3 == var30 then
        log("Передача и возврат параметров: ОК.")
    else
        log("Передача и возврат параметров: ERROR.")
        log("Параметр1: " .. (var10 or "nil") .. " ожидалось: " .. (var1 or "nil"))
        log("Параметр2: " .. (var20 or "nil") .. " ожидалось: " .. (var2 or "nil"))
        log("Параметр3: " .. (var30 or "nil") .. " ожидалось: " .. (var3 or "nil"))
        error = error + 1
    end

log("Обнаружено ошибок: " .. error .. ".")
log"Тест окончен."


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

6 страниц V « < 3 4 5 6 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.4.2024, 15:56
Designed by Nickostyle