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

> Очередность в Lua, /--/
Levo222
сообщение 25.7.2019, 5:35
Сообщение #1


*****

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



Как распределяется очередность выполнения в Lua при многоступенчатой задаче условий?

Например есть 3 условия и соответственно 3 действия
Код
 while 1 do
    wait (1)
        if  A
        send A
    else
        if  B
            wait (1)
            send B
        else
            if  C
                wait (1)
                send C
            else
                end
                end
                end
                end


При данном варианте написания скрипт, скажем так: "увлекается" выполнением второстепенных задач (расположенных ниже) и не переходит к другой строчке пока там что-либо не выполнено. Есть ли способ перемещать скрипт с выполнения определенного пункта(даже если там подходят условия) на более приоритетную задачу? Т.е. задать время чтоли на его выполнение, таймеры например?

Если тут нет времени на выполнение как в стандартном варианте Delphi например, то как возвращается вариант с недовыполненным условием, или как задать приоритет одного условия над другим кроме "функции" в каждой строчке?
Там каждая строка выполнялась до определённой строки, означающей выполнение другого действия. А здесь как?
Если функции, писать проверку функции в каждый if? или только в начало цикла?
Допустим выполняется последовательно исключая какие-то функции при проверке:
При многократном выполнении условия в точке B что может заставить скрипт тут же перенестись в точку C или A? даже если условия в Б всё еще подходят?

Много раз сталкивался с тем, что скрипт выполняет действия в точке B многократно при том, что в точке A они уже также подходят. Он каким-то образом зацикливается на одном ife? пока в нём не исчезнут условия?

0
вобщем если следовать логике построения деревьев то нужно брать основной функцией приоритет 1 а затем от неё раскидывать подфункции с проверкой первой функции, а по ним подфункции с проверкой подфункций 1-й функции(или сразу 1 функции?) а по ним условия с проверкой подфункций подфункций первой функции? Какие еще есть варианты?


Т.е. собственно вопрос: Каким образом так быстро перемещается код(и производится там проверка) из одной строчки в другую при проверке функций? даже если там очень большой объем информации. Всё заранее записывается в дамп памяти и присваиваются локальные значения?

___________________________
P.S: что с BB кодами? Невозможно кнопками ни 1 текст взять на панели. открывается окно даже на "сделать жирным"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Fors1k
сообщение 26.7.2019, 1:46
Сообщение #2


*****

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



Цитата(Levo222 @ 25.7.2019, 5:35) *

Есть ли способ перемещать скрипт с выполнения определенного пункта(даже если там подходят условия) на более приоритетную задачу?

Код
if #a = 1 // шаг 1
    log #a = true , Сейчас Шаг №1
else
    if #b = 1 and #a !=1 // шаг 2
        log #b = true , Сейчас Шаг №2
    else
        if #c = 1 and #a != 1 and #b != 1 // шаг 3
            log #c = true , Сейчас Шаг №3
        end_if
    end_if
end_if
end_script

Если я правильно понял задачу...
Допустим A=0, идем к B, B=0, идем к C, C=1, должны в логе увидеть "#C = true Сейчас Шаг №3", но если в этот момент и A тоже равно 1, то мы уйдем наверх, на более приоритетную задачу(A), даже если для C подходит условие.


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


*****

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



Цитата(Fors1k @ 26.7.2019, 5:46) *

Если я правильно понял задачу...
Допустим A=0, идем к B, B=0, идем к C, C=1, должны в логе увидеть "#C = true Сейчас Шаг №3", но если в этот момент и A тоже равно 1, то мы уйдем наверх, на более приоритетную задачу(A), даже если для C подходит условие.

Ну да)

Цитата(Fors1k @ 26.7.2019, 19:27) *

Опиши условия а б с, и что должно в них выполняться. Попробуем собрать.

Имеется дерево приоритетов:
1 -выжить
2 -атаковать
3 -собрать ресурсы
При любой угрозе выживанию должно переходить к 1 блоку и там проверять и выполнять какие-то условия. Но часто бывает что скрипт увлекается нижестоящими действиями забывая о первостепенной задаче. В то же время существуют моменты, когда атака сама по себе важнее выживания, потому что не все условия в блоке можно проверить и задать, нужно ветвление блоков, которые бы переходили к нижестоящим по приоритету(но в то же время проверяло вышестоящие). короче хочу всё и понемногу))))))) Вобщем и целом я не знаю как задать параметры управления скриптом, чтобы в случае чего у меня блоки переходили к нижестоящим игнорируя более приоритетные, а в обычном состоянии выполняли всё строго по приоритету. Т.е. их нужно еще "ветвить" и задавать какие-то условия переключения от блока к блоку.
т.е. при отсутствии более приоритетного нужно чтобы переходило по списку ниже, опять же я не знаю как работает приведенный скрипт:
Код
while 1 do
    if A then
        send A
    end
    if B then
        send B
    end
    if C then
        send C
    end

Он возвращает проверку в начало цикла после каждого If или нет?

Цитата(DarkMaster @ 26.7.2019, 21:23) *

А не подойдет ли стандартная конструкция типа:
Код

while 1 do
    if var1 = 1 then
        code
    elseif var2 = 2 then
        code
    elseif var3 = 3 then
        code
    elseif var4 = 4 then
        code
    end
end

Т.е. это по сути switch конструкция. Таймеры так же возможны:
Код
local timeout = os.clock() + 5
while timeout > os.clock() do
    code
end


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

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

Имеется ли какая-то разница между return и просто выполнением условием в цикле когда нужен возврат к его началу в таком скрипте как ниже?
Код
while 1 do
    if A then
        send A /return?
else
    if B then
        send B/return?
else
    if C then
        send C/return?
else
end
end    
end
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 27.8.2019, 22:05
Сообщение #4


*****

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



Цитата(Levo222 @ 27.8.2019, 19:18) *
Имеется дерево приоритетов:
1 -выжить
2 -атаковать
3 -собрать ресурсы
При любой угрозе выживанию должно переходить к 1 блоку и там проверять и выполнять какие-то условия.

Код
while #a = 1 // Есть угроза жизни
    send A // выполняем необходимые действия, что бы выжить
end_while
while #b = 1 and #a !=1 // Угрозы жизни нет, есть на кого напасть
    send B // атакуем
end_while
while #c = 1 and #a != 1 and #b != 1 // Угрозы жизни нет, атаковать некого
    send C // собираем ресурсы
end_while


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Levo222   Очередность в Lua   25.7.2019, 5:35
Cockney   Ничего не понятно, но думаю вопрос про так называе...   25.7.2019, 14:59
Levo222   В одной итерации A может быть ложно Ну скажем т...   25.7.2019, 15:49
Cockney   Довольно сложно мне ориентироваться по приведенном...   25.7.2019, 17:38
Levo222   [code] myCond() Не совсем понятно что это за фу...   25.7.2019, 21:47
Cockney   По сути да, только в иной форме. myCond() - это фу...   25.7.2019, 22:08
Levo222   myCond() - это функция, в которой происходит поис...   26.7.2019, 0:03
Cockney   Думаю, стоит начать все же с основ. Конкретный ...   26.7.2019, 0:34
Levo222   while #a = 1 // Есть угроза жизни send A // выпо...   28.8.2019, 2:07
Fors1k   оказывается, циклы нужны.. Например есть 3 услови...   26.7.2019, 2:15
Levo222   оказывается, циклы нужны.. В Вашем примере услов...   26.7.2019, 13:15
Fors1k   Возможно. Че-то я как-то подзапутался Опиши усло...   26.7.2019, 15:27
DarkMaster   А не подойдет ли стандартная конструкция типа: wh...   26.7.2019, 17:23
Levo222   А не подойдет ли стандартная конструкция типа: w...   28.7.2019, 1:46
Levo222   for i = 1, #button2 do -- проверяем не нажата ли к...   5.9.2019, 0:18
Levo222   Как присвоить одной и тойже глобальной переменной ...   22.9.2019, 12:00
Fors1k   Как присвоить одной и тойже глобальной переменной...   22.9.2019, 14:19
Levo222   [code]//-----Условия set $a 100, 200 0 and 3...   22.9.2019, 14:45
Fors1k   К примеру: У нас есть солдат У него есть возможнос...   23.9.2019, 0:31
Levo222   [code] and timer1 < 6000 НУ, это всё хорошо...   23.9.2019, 0:58
Fors1k   НУ, это всё хорошо!) На Lua эта функция как б...   23.9.2019, 1:05
Levo222   Понятия не имею=))) может ребята думаю переведут...   23.9.2019, 1:41
Fors1k   Самая большая проблема в переводе то и заключаетс...   23.9.2019, 1:58
Levo222   Ну так пиши на пилоте и не мучайся)) https://foru...   23.9.2019, 3:16
Levo222   /delete/   23.9.2019, 16:03
Levo222   еще бы кто-то показал на простом примере как значе...   22.9.2019, 18:20
Fors1k   Флаг в руки)   23.9.2019, 4:01
Levo222   Барабан на шею!(   23.9.2019, 15:00
bumer   Fors1k В общем это будет наверное овтоп, но всё ...   23.9.2019, 15:52
Fors1k   Fors1k В общем это будет наверное овтоп, но всё...   23.9.2019, 18:21
Levo222   Ага, все верно НУ вобщем то таймер написал, но о...   26.9.2019, 14:19
DarkMaster   Вы поняли ее правильно. В луа нет switch в чистом...   28.9.2019, 21:08
Levo222   Что в итоге хочется сделать? Хочется цикличност...   28.9.2019, 22:06
Cockney   Так и есть. Черная магия в чистом виде.   28.9.2019, 23:24
DarkMaster   local function action1() while ... do ...   29.9.2019, 0:18
DarkMaster   Из того с чем работал, считаю луа самым логичным ...   29.9.2019, 18:04


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

 

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