|
|
|
Sendex.Как прописать правильно? Жмет два раза, Помогите проверить скрипт.Спасибо |
|
|
bambuk12 |
11.3.2023, 2:33
|
Registred
Сообщений: 7
Регистрация: 10.3.2023 Группа: Пользователи Наличность: 0
Пользователь №: 20.499
Возраст: 27
|
Цитата(nykep @ 11.3.2023, 4:50) у меня этот скрипт вроде работает. Просто sendex без клавиш отжимает зажатые клавиши если вы использовали sendex_down. Попробуйте так Код repeat 11 wait 1s sendex_down @ wait 100 sendex 2 wait 1s sendex q wait 1s sendex wait 100 sendex {down} end_repeat end_script Хочу обратить ваше внимание на то, что нажатие прописанное в скрипте срабатывает не в 100% случаев. Если срабатывание критично лучше использовать какие то условия или циклы чтоб удостовериться что он нажал нужную кнопку. В случае с alt shift ctrl лучше продублировать их зажатие несколько раз. я уже третий день мучаюсь, пока остановилась на этом: wait 2000 repeat 11 sendex_down @{2} wait 2000 sendex_up @{2} wait 1000 sendex_down @{q} wait 2000 sendex_up @{q} wait 2000 send down wait 1000 end_repeat end_script Но это не работает, оно нажимает по несколько раз альт+2 и альт+q , а точнее три раза. а потом или переходит дальше, но чаще всего остается в этом же окне. Кнопка вниз то работает, то нет. Не могу понять в чем дело. Кнопку вниз писала по-всякому: send217 down//потом всё глючить стало send down send {down} send {Down} sendex {down} Не помогает. Спасибо, что уделили мне время, я думала, форум мёртвый. Сейчас ваш вариант попробую) Цитата(nykep @ 11.3.2023, 4:50) у меня этот скрипт вроде работает. Просто sendex без клавиш отжимает зажатые клавиши если вы использовали sendex_down. Попробуйте так Код repeat 11 wait 1s sendex_down @ wait 100 sendex 2 wait 1s sendex q wait 1s sendex wait 100 sendex {down} end_repeat end_script Хочу обратить ваше внимание на то, что нажатие прописанное в скрипте срабатывает не в 100% случаев. Если срабатывание критично лучше использовать какие то условия или циклы чтоб удостовериться что он нажал нужную кнопку. В случае с alt shift ctrl лучше продублировать их зажатие несколько раз. Попробовала. Правда, я немного усовершенствовала, т.к.мне нужно было сначала нажать альт+2, потом отпустить, пауза и нажать альт+q , и ещё дальше стрелку вниз. Получилось вот так: repeat 11 wait 1s sendex_down @ wait 100 sendex 2 wait 1s sendex_up sendex_down @ wait 1s sendex q wait 100 sendex_up sendex {down} end_repeat end_script Но оно начинает лагать, создает баг, при котором как будто альт и 2 я нажимаю очень много раз (моргает вот так кнопка плэй), потом также альт и q мигает дофига раз. Цитата(nykep @ 11.3.2023, 4:50) у меня этот скрипт вроде работает. Просто sendex без клавиш отжимает зажатые клавиши если вы использовали sendex_down. Попробуйте так Код repeat 11 wait 1s sendex_down @ wait 100 sendex 2 wait 1s sendex q wait 1s sendex wait 100 sendex {down} end_repeat end_script Хочу обратить ваше внимание на то, что нажатие прописанное в скрипте срабатывает не в 100% случаев. Если срабатывание критично лучше использовать какие то условия или циклы чтоб удостовериться что он нажал нужную кнопку. В случае с alt shift ctrl лучше продублировать их зажатие несколько раз. Оно по моему последнему скрипту делает так: пауза альт+2 пауза альт+q пауза альт+2 пауза альт+q альт+2 пауза альт+q стрелка вниз и так уже 5 часов, не могу понять почему так...
|
|
|
|
DarkMaster |
11.3.2023, 7:30
|
Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27738
Пользователь №: 11.279
|
Цитата wait 2000 repeat 11 sendex_down @{2} wait 2000 sendex_up @{2} wait 1000 sendex_down @{q} wait 2000 sendex_up @{q} wait 2000 send down wait 1000 end_repeat end_script
Но это не работает, оно нажимает по несколько раз альт+2 и альт+q , а точнее три раза. а потом или переходит дальше, но чаще всего остается в этом же окне. Ваши дублинажатий напрямую следуют из кода. Вы нажимаете, например, 2 и держите 2 секунды и только потом отжимаете. Соответственно и получается несколько нажатий. Попробуйте на клавиатуре руками нажать и подержать клавишу несколько секунд - тут точно тоже самое. Цитата repeat 11 wait 1s sendex_down @ wait 100 sendex 2 wait 1s sendex_up
sendex_down @ wait 1s sendex q wait 100 sendex_up
sendex {down} end_repeat end_script
Но оно начинает лагать, создает баг, при котором как будто альт и 2 я нажимаю очень много раз (моргает вот так кнопка плэй), потом также альт и q мигает дофига раз. Аналогичная проблема. Переходите сразу на lua. Не мучайте себя. Там чуть иной синтаксис, новичку может показаться сложнее, но на практике за счет логичности и предсказуемости результата, писать на нем намного проще. Несколько сложно с вашим описанием схемы работы скрипта: Сценарий для скрипта: 1.подождать 1с 2. зажать альт и два (одновременно) 3.подождать 1с 4. зажать и отпустить аль и кью -- на этом этапе мы получаем не отжатый альт, при этом пытаемся зажать его еще раз -- еще и дожав q. Т.е. у нас получается зажатой комбинация клаваиш alt+2+q -- а при отпускании альта и q у нас остается зажатой двойка и вообще нигде по коду -- двойка далее не отжимается. 5.подождать 1с 6. нажать кнопку со стрелкой вниз 7. зациклить все действия. Далее исключительно мои додумки того, что вы хотели на самом деле, но ошиблись в написании. Код --lua for i = 1, 11 do wait(1000) sendex("@{2}") wait(1000) sendex("@{q}") wait(1000) sendex("{down}") end
Если смысл иной, то уточните, что именно имели ввиду в плане действий. Так же учтите разницу между "нажать" и "зажать". Обычно когда пишут "нажать", то подразумевают, что клавиша будет сразу же отжата, а "зажать" - клавишу нужно нажать и держать отпустив через некоторое время, зачастую через несколько строк кода.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
bambuk12 |
11.3.2023, 23:56
|
Registred
Сообщений: 7
Регистрация: 10.3.2023 Группа: Пользователи Наличность: 0
Пользователь №: 20.499
Возраст: 27
|
Цитата(DarkMaster @ 11.3.2023, 10:30) Ваши дублинажатий напрямую следуют из кода. Вы нажимаете, например, 2 и держите 2 секунды и только потом отжимаете. Соответственно и получается несколько нажатий. Попробуйте на клавиатуре руками нажать и подержать клавишу несколько секунд - тут точно тоже самое. Аналогичная проблема. Переходите сразу на lua. Не мучайте себя. Там чуть иной синтаксис, новичку может показаться сложнее, но на практике за счет логичности и предсказуемости результата, писать на нем намного проще. Несколько сложно с вашим описанием схемы работы скрипта: Сценарий для скрипта: 1.подождать 1с 2. зажать альт и два (одновременно) 3.подождать 1с 4. зажать и отпустить аль и кью -- на этом этапе мы получаем не отжатый альт, при этом пытаемся зажать его еще раз -- еще и дожав q. Т.е. у нас получается зажатой комбинация клаваиш alt+2+q -- а при отпускании альта и q у нас остается зажатой двойка и вообще нигде по коду -- двойка далее не отжимается. 5.подождать 1с 6. нажать кнопку со стрелкой вниз 7. зациклить все действия. Далее исключительно мои додумки того, что вы хотели на самом деле, но ошиблись в написании. Код --lua for i = 1, 11 do wait(1000) sendex("@{2}") wait(1000) sendex("@{q}") wait(1000) sendex("{down}") end
Если смысл иной, то уточните, что именно имели ввиду в плане действий. Так же учтите разницу между "нажать" и "зажать". Обычно когда пишут "нажать", то подразумевают, что клавиша будет сразу же отжата, а "зажать" - клавишу нужно нажать и держать отпустив через некоторое время, зачастую через несколько строк кода. Огромное вам спасибо! Заработало) До этого, когда только программу скачала у меня всё работало, а потом вот двойное нажатие было, даже тройное: надо было: альт+2 альт+Q стрелка вниз а было: альт+2 альт+Q альт+2 альт+Q альт+2 альт+Q стрелка вниз Я там и с зажатием и отжатием пробовала (а сначала без него был код) вот, а потом уже не знала, что попробовать. И в скобках квадратных писала и без. И со скобками Луа (как у вас сейчас было). Но у меня тогда не было: for i = 1, 11 do так что я это от безысходности. А без Луа не получится, да? Если допустим мой код отредактировать? Я вообще думала Пилот работает сразу на Луа, а надо было прописать оказывается это через двойное тире. Цитата(DarkMaster @ 11.3.2023, 10:30) Ваши дублинажатий напрямую следуют из кода. Вы нажимаете, например, 2 и держите 2 секунды и только потом отжимаете. Соответственно и получается несколько нажатий. Попробуйте на клавиатуре руками нажать и подержать клавишу несколько секунд - тут точно тоже самое. Аналогичная проблема. Переходите сразу на lua. Не мучайте себя. Там чуть иной синтаксис, новичку может показаться сложнее, но на практике за счет логичности и предсказуемости результата, писать на нем намного проще. Несколько сложно с вашим описанием схемы работы скрипта: Сценарий для скрипта: 1.подождать 1с 2. зажать альт и два (одновременно) 3.подождать 1с 4. зажать и отпустить аль и кью -- на этом этапе мы получаем не отжатый альт, при этом пытаемся зажать его еще раз -- еще и дожав q. Т.е. у нас получается зажатой комбинация клаваиш alt+2+q -- а при отпускании альта и q у нас остается зажатой двойка и вообще нигде по коду -- двойка далее не отжимается. 5.подождать 1с 6. нажать кнопку со стрелкой вниз 7. зациклить все действия. Далее исключительно мои додумки того, что вы хотели на самом деле, но ошиблись в написании. Код --lua for i = 1, 11 do wait(1000) sendex("@{2}") wait(1000) sendex("@{q}") wait(1000) sendex("{down}") end
Если смысл иной, то уточните, что именно имели ввиду в плане действий. Так же учтите разницу между "нажать" и "зажать". Обычно когда пишут "нажать", то подразумевают, что клавиша будет сразу же отжата, а "зажать" - клавишу нужно нажать и держать отпустив через некоторое время, зачастую через несколько строк кода. А вот тут можете указать на ошибку? repeat 11 wait 1000 sendex @{2} wait 1000 sendex sendex @{q} wait 1s sendex send down wait 1s End_Repeat end_script П.С. я просто действительно новичок и это мой первый код. Я в прошлом году заканчивала курсы по html и css, но это конечно, же совсем другое. (я по сайтам больше), а тут кликер. Цитата(DarkMaster @ 11.3.2023, 10:30) Ваши дублинажатий напрямую следуют из кода. Вы нажимаете, например, 2 и держите 2 секунды и только потом отжимаете. Соответственно и получается несколько нажатий. Попробуйте на клавиатуре руками нажать и подержать клавишу несколько секунд - тут точно тоже самое. Аналогичная проблема. Переходите сразу на lua. Не мучайте себя. Там чуть иной синтаксис, новичку может показаться сложнее, но на практике за счет логичности и предсказуемости результата, писать на нем намного проще. Несколько сложно с вашим описанием схемы работы скрипта: Сценарий для скрипта: 1.подождать 1с 2. зажать альт и два (одновременно) 3.подождать 1с 4. зажать и отпустить аль и кью -- на этом этапе мы получаем не отжатый альт, при этом пытаемся зажать его еще раз -- еще и дожав q. Т.е. у нас получается зажатой комбинация клаваиш alt+2+q -- а при отпускании альта и q у нас остается зажатой двойка и вообще нигде по коду -- двойка далее не отжимается. 5.подождать 1с 6. нажать кнопку со стрелкой вниз 7. зациклить все действия. Далее исключительно мои додумки того, что вы хотели на самом деле, но ошиблись в написании. Код --lua for i = 1, 11 do wait(1000) sendex("@{2}") wait(1000) sendex("@{q}") wait(1000) sendex("{down}") end
Если смысл иной, то уточните, что именно имели ввиду в плане действий. Так же учтите разницу между "нажать" и "зажать". Обычно когда пишут "нажать", то подразумевают, что клавиша будет сразу же отжата, а "зажать" - клавишу нужно нажать и держать отпустив через некоторое время, зачастую через несколько строк кода. А ещё хотела, чтоб вы мне объяснили пожалуйста, что такое: for i = 1, 11 do это типа рипит=повтор, да?
|
|
|
|
DarkMaster |
12.3.2023, 0:39
|
Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27738
Пользователь №: 11.279
|
Без луа можно, работать будет, смысла ноль. Это будет иметь смысл исключительно в том случае, если у вас есть какой-то большой скрипт на старом синтаксисе и вам все лишь нужно дополнить его этим кусочком. Если есть еще какой-то небольшой участок кода, то разумнее привести его к луа, нежели приводить луа к старом синтаксису. Цитата А вот тут можете указать на ошибку? repeat 11 wait 1000 sendex @{2} wait 1000 sendex sendex @{q} wait 1s sendex send down wait 1s End_Repeat end_script А что собственно с ним не так? Ну бросается в глаза два sendex без фактического указания клавиши. А так же нажатие через send (не sendex) клавиши down, при этом down указан без фигурных скобок. Для многосимвольных названий клавиш требуется указывать фигурные скобки иначе он может нажать четыре клавиши d, o, w, n. Цитата А ещё хотела, чтоб вы мне объяснили пожалуйста, что такое: for i = 1, 11 do
это типа рипит=повтор, да? Формально да, по факту это цикл с увелечением переменной i на 1 до тех пор пока она не станет больше 11. Отличия от репита: 1) вы можете задать начально значение i таким, как вам необходимо. Например, 12.5. 2) аналогично вы можете задать конечное значение: в данном примере оно равно 11, но может быть любым числом, например 144.0978. 3) i - является локальной переменной и ее видно внутри цикла. Имя может быть иным, но начинаться должно с букв a-zA-Z либо символа подчеркивания _, допускается использование цифр (кроме первого символа). 4) внутри цикла вы можете использовать заданную переменную для каких либо целей. Очень часто она используется для перебора элементов массива. 5) Можно указать шаг отличный от 1. По умолчанию шаг равен 1 и указание его не обязательно. Синтаксис выглядит следующим образом: Код for name = стартовое_значение, конечное_значение, шаг do -- ваш код end
Код --lua for my_counter = 1, 9 do log(my_counter) end
Код --lua for my_counter = 3, 8, 2 do log(my_counter) end
Сообщение отредактировал DarkMaster - 12.3.2023, 0:50
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
bambuk12 |
12.3.2023, 3:03
|
Registred
Сообщений: 7
Регистрация: 10.3.2023 Группа: Пользователи Наличность: 0
Пользователь №: 20.499
Возраст: 27
|
Цитата(DarkMaster @ 12.3.2023, 3:39) Без луа можно, работать будет, смысла ноль. Это будет иметь смысл исключительно в том случае, если у вас есть какой-то большой скрипт на старом синтаксисе и вам все лишь нужно дополнить его этим кусочком. Если есть еще какой-то небольшой участок кода, то разумнее привести его к луа, нежели приводить луа к старом синтаксису. А что собственно с ним не так? Ну бросается в глаза два sendex без фактического указания клавиши. А так же нажатие через send (не sendex) клавиши down, при этом down указан без фигурных скобок. Для многосимвольных названий клавиш требуется указывать фигурные скобки иначе он может нажать четыре клавиши d, o, w, n. Формально да, по факту это цикл с увелечением переменной i на 1 до тех пор пока она не станет больше 11. Отличия от репита: 1) вы можете задать начально значение i таким, как вам необходимо. Например, 12.5. 2) аналогично вы можете задать конечное значение: в данном примере оно равно 11, но может быть любым числом, например 144.0978. 3) i - является локальной переменной и ее видно внутри цикла. Имя может быть иным, но начинаться должно с букв a-zA-Z либо символа подчеркивания _, допускается использование цифр (кроме первого символа). 4) внутри цикла вы можете использовать заданную переменную для каких либо целей. Очень часто она используется для перебора элементов массива. 5) Можно указать шаг отличный от 1. По умолчанию шаг равен 1 и указание его не обязательно. Синтаксис выглядит следующим образом: Код for name = стартовое_значение, конечное_значение, шаг do -- ваш код end
Код --lua for my_counter = 1, 9 do log(my_counter) end
Код --lua for my_counter = 3, 8, 2 do log(my_counter) end
Спасибо! Два раза sendex я писала, чтобы снять нажатие с клавиш. Я и убирала его (было только один раз написано) и возвращала. И паузу ставила между ними. Ноль реакции. Точнее, два раза тыкалось. Насчет sendex, я как поняла, раз начал везде его писать, тогда и заканчивать им? т.е. если вначале sendex стоял, а потом мне надо какую-то клавишу тыкнуть, то его ещё раз пишем (а send не пишем), верно? send down писала и со скобками и без них, иногда работало, иногда нет. Сейчас попробовала скорректировать скрипт после ваших замечаний. Всё сработало. Но не всё так просто, как кажется. Я переустанавливала программу. Т.е.до этого видимо настройки поправила и вот так криво работало. по три раза тыкалось. Теперь скрипт выглядит так: repeat 12 wait 2000 sendex @{2} wait 3000 sendex @{q} wait 2000 sendex {Down} End_Repeat end_script 1. Ещё хотела бы сразу спросить у вас, может подскажете как прописать рандом и возвращение к первому шагу? Я вот так вижу (на мой неопытный взгляд). Если что, поправьте. :0 //так вроде шаг обозначается repeat 12 wait 1500 + random(500) sendex @{2} wait 2500 + random(500) sendex @{q} wait 1300 + random(500) sendex {Down} End_Repeat sendex {Enter} //добавила ещё ентер. он нужен мне. goto 0 //возврат к шагу end_script //концовка скрипта мне не нужна, так что его можно убрать, думаю. 2.В вашем скрипте тоже интересно как будет выглядеть предыдущий шаг. Думаю примерно так (но скорее всего, я точно где-то ошиблась): --lua :1 for i = 1, 12 do wait(1000) random (500) sendex("@{2}") wait(1000) random (500) sendex("@{q}") wait(1000) random (500) sendex("{down}") end sendex ("{Enter}") goto 1 3. А также, хотела бы узнать, можно ли запустить кликер и свернуть окно, где этот кликер работает? Спасибо вам большое за помощь и советы, а также объяснения!
|
|
|
|
DarkMaster |
12.3.2023, 4:03
|
Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27738
Пользователь №: 11.279
|
Цитата Два раза sendex я писала, чтобы снять нажатие с клавиш. Я и убирала его (было только один раз написано) и возвращала. И паузу ставила между ними. Ноль реакции. Точнее, два раза тыкалось.
Насчет sendex, я как поняла, раз начал везде его писать, тогда и заканчивать им? sendex имеет возможность зажать альт/шифт/контрол и не отжимать его. Это используется, если вам нужно сделать какие-то относительно сложные действия. Например, вам нужно с зажатым шифтом провести мышкой по лабиринту. Если вы делаете простое нажатие с этими клавишами типа: sendex @{y} все сразу же отожмется, дополнительных вызовов не требуется. Цитата :0 //так вроде шаг обозначается repeat 12 wait 1500 + random(500) sendex @{2} wait 2500 + random(500) sendex @{q} wait 1300 + random(500) sendex {Down} End_Repeat sendex {Enter} //добавила ещё ентер. он нужен мне. goto 0 //возврат к шагу end_script //концовка скрипта мне не нужна, так что его можно убрать, думаю. Суть верна но от goto лучше уходить. Это ведет к сложности восприятия кода человеком, путанице и в целом неправильному мышлению при построении скрипта. Конкретно в вашем случае это выглядит адекватно, но это примерно, как увидеть, что маленький ребеной стреляет из пистолета, в этот раз даже в сторону мишени и даже попал. Цитата --lua :1 for i = 1, 12 do wait(1000) random (500) sendex("@{2}") wait(1000) random (500) sendex("@{q}") wait(1000) random (500) sendex("{down}") end sendex ("{Enter}") goto 1 В продолжение темы goto. Я думал написать пример с goto, но конфуз случился в том, что я не вспомнил синтаксис в lua для goto. При этом на lua я пишу достаточно много. Не стоит его использовать. Код --lua while 1 do -- бесконечный цикл for i = 1, 12 do wait(1000 + random (500)) sendex("@{2}") wait(1000 + random (500)) sendex("@{q}") wait(1000 + random (5000)) sendex("{down}") end sendex ("{Enter}") end
По поводу while 1 do. Более логичная для человека конструкция была бы что-то вроде while 1 == 1 do. Тем не менее для lua истина это все что не равно nil и не равно false. Все выражения типа ==, <=, >=, ~=(не равно) на самом деле возвращают true или false. Для понимания операции со знаками на самом деле что-то вроде: while (123 == 123) do преобразуется в while true do т.е. будет вычислено значение внутри скобок, потом подставлено/ Цитата 3. А также, хотела бы узнать, можно ли запустить кликер и свернуть окно, где этот кликер работает? Окно с пилотом можно спокойно свернуть. Целевое окно можно свернуть с некоторыми ограничениями по операторам. sendex отправляет только в активное окно. send и send217 могут работать с перекрытыми окнами. При этом нужно понимать, что в зависимости от приложения может быть разное поведение. Какое-то приложение будет спокойно съедать нажатия в любом состоянии, какое-то допустимо только перекрыть, но не сворачивать, а какому-то вообще активность окна должна быть. Только тестить, т.к. это зависит от приложения, а не от пилота.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
bambuk12 |
13.3.2023, 20:40
|
Registred
Сообщений: 7
Регистрация: 10.3.2023 Группа: Пользователи Наличность: 0
Пользователь №: 20.499
Возраст: 27
|
Спасибо, что объяснили. Не знала, что sendex сам отожмётся. А если я хочу свернуть активное окно, где работает пилот, то мне нужно будет теперь sendex заменить на send ? Под активным окном я понимаю не окно программы Пилот, а окно той программы ради которой он и работает(в моём случае, это веладка в гугл хром), к примеру для игры. Т.е.окно игры я теперь не смогу свернуть? И вот этот скрипт верный? Особенно интересует рандом: правильно ли я его прописала? :0 //так вроде шаг обозначается repeat 12 wait 1500 + random(500) sendex @{2} wait 2500 + random(500) sendex @{q} wait 1300 + random(500) sendex {Down} End_Repeat sendex {Enter} //добавила ещё ентер. он нужен мне. goto 0 //возврат к шагу end_script //концовка скрипта мне не нужна, так что его можно убрать, думаю. Скажу сразу: больше никаких модификаций не требуется и не будет никакого большого кода, мне надо только этот кусочек, чтоб работал и всё. Это не часть кода. Это конечный вариант. А вот еще хотела спросить: в вашем скрипте, выходит возврата к первому шагу нет? Код --lua while 1 do -- бесконечный цикл for i = 1, 12 do wait(1000 + random (500)) sendex("@{2}") wait(1000 + random (500)) sendex("@{q}") wait(1000 + random (5000)) sendex("{down}") end sendex ("{Enter}") end
|
|
|
|
DarkMaster |
1.4.2023, 15:56
|
Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27738
Пользователь №: 11.279
|
1) возможно включена друга раскладка клавиатуры. sendex зависим от той раскладки которую вы используете в приложении. См ените ее на англ или русский. Так же были подобные приколы в зависимости от раскладки в пилоте. 2) Proc, gosub, while, for, repeat, break. Тут нужно понимать, что сама логика программы будет строиться чуть иначе. Потому что код с goto нечитаемый. Как только вы напишите хотя бы 200-300 строк вы уже не будете понимать, что там происходит в этой лапше и почему оно идет не туда куда надо и что со всем этим делать. В lua основная замена - function. Полноценная реализация функций то, что в какой-то мере было реализовано в gosub и proc. При это очень удобно бывает прерывать функцию через return при необходимости сделать какую-то более широкую логику. Ну и while, for, repeat, break никто не отменял. goto в luajit есть. Даже работает. Использовать не нужно ровно по тем же причинам. Вообще в свое время я полностью отказался от goto и не жалею. Это поставило на место очень многие вещи и струтурировало код. Я могу сейчас написать очень много пространных речей, но проблема в том, чтобы понять все это нужен будет опыт написания. Причем не какие-то сухие знания либо уровень интеллекта, а тупо опыт. Вам будет достаточно наступить на пару граблей. Просто послушайте совета от всего сердца и с самыми добрыми намерениями - не используйте его никогда. // А теперь вредные советы и задачи повышенной сложности со зведочкой. Вообще в современном мире есть одно оправдание использования goto - это прерывание нескольких вложенных циклов. Что-то типа: Код while for if ... goto break_while end тут какой-то код_1. Задача не выполнить его при if end тут какой-то код_2. Задача не выполнить его при if end ::break_while
Наличие код_1 или код_2 в данном случае обязательно. Но даже тут можно обойтиесь без goto. Если все это выкинуть в отдельную функцию, то прервать можно использовав return вместо goto. Сообщение отредактировал DarkMaster - 1.4.2023, 16:25
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Zenogiasu |
2.4.2023, 4:06
|
Neophyte
Сообщений: 42
Регистрация: 3.12.2022 Группа: Пользователи Наличность: 1
Пользователь №: 20.434
Возраст: 27
|
Цитата(DarkMaster @ 1.4.2023, 15:56) 1) возможно включена друга раскладка клавиатуры. sendex зависим от той раскладки которую вы используете в приложении. См ените ее на англ или русский. Так же были подобные приколы в зависимости от раскладки в пилоте. 2) Proc, gosub, while, for, repeat, break. Тут нужно понимать, что сама логика программы будет строиться чуть иначе. Потому что код с goto нечитаемый. Как только вы напишите хотя бы 200-300 строк вы уже не будете понимать, что там происходит в этой лапше и почему оно идет не туда куда надо и что со всем этим делать. В lua основная замена - function. Полноценная реализация функций то, что в какой-то мере было реализовано в gosub и proc. При это очень удобно бывает прерывать функцию через return при необходимости сделать какую-то более широкую логику. Ну и while, for, repeat, break никто не отменял. goto в luajit есть. Даже работает. Использовать не нужно ровно по тем же причинам. Вообще в свое время я полностью отказался от goto и не жалею. Это поставило на место очень многие вещи и струтурировало код. Я могу сейчас написать очень много пространных речей, но проблема в том, чтобы понять все это нужен будет опыт написания. Причем не какие-то сухие знания либо уровень интеллекта, а тупо опыт. Вам будет достаточно наступить на пару граблей. Просто послушайте совета от всего сердца и с самыми добрыми намерениями - не используйте его никогда.
Спасибо, оязательно прислушаюсь, вероятно вы правы. Мистика, но сегодня я впервые в коде 1200 строк запустался с гото. Столько всего там нужно сделать при самых самых разных обстоятельствах. Пытаясь это реализовать, готов становится все больше и больше по типу если #f = 1 -- goto kek, #r = 1 goto kek2... а внутри готов тоже самое потом тестишь и все это листаешь часами фиксишь...
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|