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

2 страниц V < 1 2  
Ответить в эту темуОткрыть новую тему
> Очередность в Lua, /--/
Levo222
сообщение 22.9.2019, 14:45
Сообщение #21


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 22.9.2019, 18:19) *

Код
//-----Условия
set $a 100, 200 0 and 300, 400 435346
set $b 500, 600 0 and 700, 800 43475
set $c ???
//-----Условные действия
while ($a) = 1 // приоритет 1
    send A // действия приоритет 1
end_while
while ($b) = 1 and ($a) !=1 // приоритет 2
    send B // действия приоритета 2
end_while
while ($c) = 1 and ($a) != 1 and ($b) != 1 // приоритет 3
    send C // действия приоритета 3
end_while

Про таймер - непонятна задача. Типа если send A выполняется уже минуту подряд, то нужно вернуться куда-то в начало, или как?

Ладно, если применительно к Lua, например пишем функцию
Код

local TimerB =  function () --ограничение на вызов действия по таймеру B - 6 сек
local Timeb = 6
local endTimerb = os.clock() + Timeb
if os.clock() <= endTimerb then --таймер B истёк
local Timeb = 0
end
local TimerS = function () --ограничение на вызов действия по таймеру S - 5 сек
local Times = 5
local endTimer = os.clock() + Times
if os.clock() <= endTimer then --таймер S истёк
local Times = 0
end

while #a = 1 // приоритет 1
if TimerB() = 0 --время вышло
then
send A // действия приоритет 1
else --TimerB ~=0 -- время не вышло
send A2 -- действия приоритет 1.1 -- потому что действие Send A часто возможно но не целесообразно чаще чем раз в 6 секунд, поэтому вводим таймер.
else
end
end
while #b = 1 and #a !=1 // приоритет 2
    if TimerS = 0 --время вышло
then
send B // действия приоритет 2
else --TimerS ~=0 -- время не вышло
send B2 -- действия приоритет 2.1
else
    send B // действия приоритета 2
end
end
while #c = 1 and #a != 1 and #b != 1 // приоритет 3
и так далее
    send C // действия приоритета 3
end_while


таймер для действий которые возможно осуществить но не целесообразно чаще чем раз в N секунд
если чаще - лучше перейти к более приоритетным задачам

К примеру: У нас есть солдат
У него есть возможность построить окоп и стрелять, построение окопа увеличивает обороноспособность солдата, но отнимает его силы
К примеру он построил окоп и начал стрелять, но враг разрушил окоп, солдат опять построил окоп, но враг опять разрушил окоп
Поскольку окоп по трудовым затратам стоит намного больше простой стрельбы нужно ограничить его применение таймером, чтобы солдат всё же вел какие-то боевые действия потому что в конечном счете наша задача застрелить врага, а не сидеть в окопе! / с окопом, или без него / а не только строить окоп, для этого нужен таймер.
Наиболее часто выполняемое действие лица за единицу времени определяет его статус. Если он будет строить окопы - он будет строитель а не солдат, а такого в планах не было.

----------------------------------------
P.S: Я так и не понял какое значение будет иметь например строчка
return в функции
Код
local TimerB =  function () --ограничение на вызов действия по таймеру B - 6 сек
local Timeb = 6
local endTimerb = os.clock() + Timeb
if os.clock() <= endTimerb then --таймер B истёк
local Timeb = 0
end

если я её добавлю, кажется что недостаточно функциональный скрипт без этих команд
что и куда она будет возвращать?

P.S: Я забыл что в языке Lua есть возможность использовать математические функции умножение и вычитание так бы функция таймера выглядела примерно:
Код
local Time1 = 0
local GetTime = os.clock() + Time1
if GetTime()-Time1>3 then
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 22.9.2019, 18:20
Сообщение #22


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



еще бы кто-то показал на простом примере как значения из одной программы передать в интерпретатор/файл, который прочитает интерпретатор а прочитав интерпретатором, обновить, или обмен данными через оперативную память, а то что-то все эти findcolorы и image уже мягко говоря напрягают)
например нашел в функциях общего Lua такой пример:
Код
-- table is in the stack at index 't'

lua_pushnil(L);  // first key
while (lua_next(L, t) != 0)
{
  printf("%s - %s\\n", luaL_typename(L, -2), luaL_typename(L, -1));

  lua_pop(L, 1);
}

по типу ключ-значение, как я понимаю при копировании в оперативную память нужно присваивать какую-то шифровку данным, чтобы они не путались между собой? Как в данном случае между 2-мя программами будет выглядеть"отправка-запись-чтение-интерпретация-действие"? Скажем между 2-мя пилотами?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.9.2019, 0:31
Сообщение #23


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(Levo222 @ 22.9.2019, 14:45) *
К примеру: У нас есть солдат
У него есть возможность построить окоп и стрелять, построение окопа увеличивает обороноспособность солдата, но отнимает его силы
К примеру он построил окоп и начал стрелять, но враг разрушил окоп, солдат опять построил окоп, но враг опять разрушил окоп
Поскольку окоп по трудовым затратам стоит намного больше простой стрельбы нужно ограничить его применение таймером, чтобы солдат всё же вел какие-то боевые действия потому что в конечном счете наша задача застрелить врага, а не сидеть в окопе! / с окопом, или без него / а не только строить окоп, для этого нужен таймер.


Код
//-----Условия
set $a 100, 200 0 and 300, 400 435346
set $b 500, 600 0 and 700, 800 43475
//-----Условные действия
while ($a) = 1  // окопа нет
    send A      // строим окоп
end_while       // окоп готов
set timer1
while (($b) = 1 and ($a) !=1) or (($b) = 1 and timer1 < 6000) // есть враг, окоп построен. Если окоп разрушен, то пойдем его строить не ранее, чем через 6 сек. после его предыдущей постройки.
    send B      // стреляем
end_while       // враг убит, или пора чинить окоп


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 23.9.2019, 0:58
Сообщение #24


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 23.9.2019, 4:31) *

[code] and timer1 < 6000

НУ, это всё хорошо!) На Lua эта функция как будет выглядеть?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.9.2019, 1:05
Сообщение #25


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(Levo222 @ 23.9.2019, 0:58) *

НУ, это всё хорошо!) На Lua эта функция как будет выглядеть?

Понятия не имею=)))
Ну либо на пилоте запиши скрипт, либо может ребята думаю переведут этот код на луа, если нужно)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 23.9.2019, 1:41
Сообщение #26


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 23.9.2019, 5:05) *

Понятия не имею=)))
может ребята думаю переведут этот код на луа, если нужно)

Самая большая проблема в переводе то и заключается. Идеи то и у меня есть)
Просто там куча запятых, ошибившись хоть в 1 из них можно получить кучу мусора.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.9.2019, 1:58
Сообщение #27


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(Levo222 @ 23.9.2019, 1:41) *

Самая большая проблема в переводе то и заключается. Идеи то и у меня есть)
Просто там куча запятых, ошибившись хоть в 1 из них можно получить кучу мусора.

Ну так пиши на пилоте и не мучайся)) (IMG:https://forum.uokit.com/style_emoticons/default/laugh.gif)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 23.9.2019, 3:16
Сообщение #28


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 23.9.2019, 5:58) *

Ну так пиши на пилоте и не мучайся)) (IMG:https://forum.uokit.com/style_emoticons/default/laugh.gif)

Вкусивший скорость и возможности Lua никогда больше не вернётся к старому... Эмм. Пилоту?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.9.2019, 4:01
Сообщение #29


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Флаг в руки)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 23.9.2019, 15:00
Сообщение #30


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Барабан на шею!(
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 23.9.2019, 15:52
Сообщение #31


****

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



Fors1k

В общем это будет наверное овтоп, но всё же хочется понять

Код

set $a 100, 200 0 and 300, 400 435346

Что чего определяет
set $a (100, 200) это наверно координаты х,у. 0 нолик цвет? and (300, 400) вторая координата х,у.? 435346 это наверное ещё одни цвет...
Я всё правильно понимаю?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 23.9.2019, 16:03
Сообщение #32


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



/delete/
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.9.2019, 18:21
Сообщение #33


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(bumer @ 23.9.2019, 15:52) *

Fors1k

В общем это будет наверное овтоп, но всё же хочется понять

Код

set $a 100, 200 0 and 300, 400 435346

Что чего определяет
set $a (100, 200) это наверно координаты х,у. 0 нолик цвет? and (300, 400) вторая координата х,у.? 435346 это наверное ещё одни цвет...
Я всё правильно понимаю?

Ага, все верно


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 26.9.2019, 14:19
Сообщение #34


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 23.9.2019, 22:21) *

Ага, все верно

НУ вобщем то таймер написал, но он выглядит громоздко. И код как-будто давится им
Код
lastTimeProcessed = os.clock()
local function IsTimeToProcess(currentTime)
span = currentTime - lastTimeProcessed
if  span >= 6 then
    lastTimeProcessed = currentTime
    return true
    end
    return false
    end


Нельзя ли сделать попроще?

потому что в блоке приходится проверять и IsTimeToProcess(os.clock()) и true, что несколько не соответствует упрощению кода.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.9.2019, 21:08
Сообщение #35


***********

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



Цитата
Вашу конструкцию я вообще не понял..
что означает "var1" ?
elseif как я понял это условное сокращение команды if ... then ... else чтобы не писать её в несколько строк... которое сразу задаёт блоку статус переходного, в случае отрицательности проверки его условия.
- кое- что нашел для elseif
Цитата
И вообще по-идее в таких ситуациях нужно пользоваться оператором ветвления (switch\case\select и т.д). Но во многих языках он обладает неприятными ограничениями, которые заставляют пользоваться вышеупомянутой конструкцией.

Имеет ли Lua тут какие-то ограничения упомянутые?

Имеется ли какая-то разница между return и просто выполнением условием в цикле когда нужен возврат к его началу в таком скрипте как ниже?

Вы поняли ее правильно. В луа нет switch в чистом виде и его действительно заменяет вот это упрощение elseif чтобы не городить кучу вложенностей. Читается намного проще и практически приведен вид к стандартному switch.

Можно спустя весь этот код и разбирательства поставить задачу заного? Так сказать после переосмысления. Что в итоге хочется сделать?


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


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(DarkMaster @ 29.9.2019, 1:08) *

Что в итоге хочется сделать?

Хочется цикличность блоков задать в виде
Цитата(Fors1k @ 28.8.2019, 2:05) *

Код

local a = (...)
local b = (...)
local c = (...)
local f = (...)

...
while #a = 1 do// приоритет 1
if f == 1 then
    send A // выполняем необходимые действия
elseif f1 == 1 then
send B
end
end
end

while (#b = 1 and #a !=1) do // приоритет 2
if f == 1 then
    send A1 // выполняем необходимые действия
elseif f2 == 1 then
send B1
end
end
end

while (#c = 1 and #a != 1 and #b != 1) do // приоритет 3
if f == 1 then
    send A2 // выполняем необходимые действия
elseif f3 == nil
send B2
end
end
end


Но я слаб в функциях
Много очень переменных - вобще сложилось впечатление что производители Lua кода, да и может других языков, каждый раз лепят какого-то "франкенштейна" из нерабочих частей что-то слепили, оно вроде шевелится, но непонятно за счет чего работает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 28.9.2019, 23:24
Сообщение #37


********

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



Цитата
вобще сложилось впечатление что производители Lua кода, да и может других языков, каждый раз лепят какого-то "франкенштейна" из нерабочих частей что-то слепили, оно вроде шевелится, но непонятно за счет чего работает.


Так и есть. Черная магия в чистом виде.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.9.2019, 0:18
Сообщение #38


***********

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



Код

local function action1()
    while ... do
        ...
    end
end

local function action2()
    while ... do
        ...
    end
end

local function action3()
    while ... do
        ...
    end
end

while 1 do
    if ... then
        action1()
    elseif ... then
        action2()
    elseif ... then
        action3()
    end
end

Если именно приоритет, то вот оно вот самое.


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


***********

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



Цитата
Много очень переменных - вобще сложилось впечатление что производители Lua кода, да и может других языков, каждый раз лепят какого-то "франкенштейна" из нерабочих частей что-то слепили, оно вроде шевелится, но непонятно за счет чего работает.

Из того с чем работал, считаю луа самым логичным и выверенным языком. Тут кончено нужно понимать, что он и достаточно мал сам по себе и вылизать такой объем несопопставимо проще, но тем не менее. При этом еще и в рамках этой простоты получить такую гибкость...


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

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

 

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