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

 
Ответить в эту темуОткрыть новую тему
> ERangeError Range chek error, Ошибка! Проверьте правильность скрипта! ERangeError Range chek
kol9n
сообщение 30.7.2019, 13:48
Сообщение #1


*

Registred
Сообщений: 2
Регистрация: 17.3.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.868
Возраст: 24



Добрый день, уважаемые форумчане.
Есть скрипт (прикрепил файл Прикрепленный файл  Запуск.txt ( 20,56 килобайт ) Кол-во скачиваний: 172
). Скрипт работал отлично. Недавно дописал небольшой участок кода, после чего стала появляться непонятная ошибка "Ошибка! Проверьте правильность скрипта! ERangeError Range chek error"


Эта ошибка появляется в тот момент, когда выполнение скрипта доходит до команды "goto"
(IMG:https://i.ibb.co/KWhjCfp/2019-07-30-11-56-36.png)

(IMG:https://i.ibb.co/Qd0yvyq/2019-07-30-11-57-00.png)

Причем здесь есть странная особенность.
Если строку "goto dejstvie255" добавить в самом начале скрипта - то переход к метке :dejstvie255 происходит нормально.
(IMG:https://i.ibb.co/pLrPkQr/2019-07-30-11-58-02.png)

Но вот если та же сама строка выполняется в другом участке кода (как на предыдущем скрине - строка 804), то вылазит эта ошибка.

Так же записал небольшое видео где наглядно продемонстрировал данную проблему https://yadi.sk/i/TN4tMUS86KnLMA

Пожалуйста, помогите выявить причину и устранить проблему
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 30.7.2019, 20:39
Сообщение #2


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Проблема в goto.
Код

gosub ChekMoove
:ChekMoove
        goto dejstvie255
return

Крайне нехорошая конструкция. Каждый gosub обязан заканчиваться return. Ибо они накапливаются. В данном примере return никогда не выполнится.

Кроме того присутствует такая конструкция
Код

for #i12 1 15 1
end_if

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kol9n
сообщение 30.7.2019, 21:36
Сообщение #3


*

Registred
Сообщений: 2
Регистрация: 17.3.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.868
Возраст: 24





Ураа!. Спасибо огромное! Ваш внимательный взор обратил внимание на тот проблемный элемент, который я никогда бы не заметил самостоятельно! Проблема была в

Цитата
for #i12 1 15 1
end_if


Исправил на "end_for" и всё заработало! Очень странно конечно уловить между всем этим связь, но это заработало.

По поводу gosub / goto понял. из за того-что "return" не выполняется и накапливается - нагрузка ? на оперативку? Я так понял, что это нежелательно, но всё же не критично (уже два месяца запускаю этот скрипт на всю ночь - никаких явных ошибок с "gosub" не было. Но всё же, если это не совсем хорошая конструкция, на Ваш взгляд - можно как-то изменить скрипт таким образом, что бы он выполнял ту же самую задачу, но только делал это правильно, грамотно?

К тому же, если убрать "gosub" , но запустить
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 31.7.2019, 4:02
Сообщение #4


*****

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



Цитата(kol9n @ 30.7.2019, 13:48) *
(IMG:https://i.ibb.co/Qd0yvyq/2019-07-30-11-57-00.png)

...можно как-то изменить скрипт таким образом, что бы он выполнял ту же самую задачу, но только делал это правильно, грамотно?

Код
:CheckMove
    set #w 1800
    gosub wait
    set #CheckMove findimage ...
    hint #checkMove
    if #checkmove > 0
        kleft_down $swipe abs
        wait 1s
        set clickoffsety 300
        move_smooth $swipe abs
        wait 3s
        kleft_up $swipe abs
        set clickoffsety 0
        goto CheckMove
    end_if
        set $Delete DeleteImage (%Poisk [1 1])
return

Как Вам и говорил WKnight, return должен срботать в любом случае.

В Вашем скрипте выход из :CheckMove через goto dejstvie255 - это гарантированный вход через пару строк обратно в :CheckMove. Зачем тогда выходить из :CheckMove?
Может это не наилучший вариант фикса, но, на скорую руку, это уберет в данном куске кода ситуацию со входом в sub, без надлежащего выхода из него. Возможно где-то еще есть похожие проблемы.


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

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

 

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