|
|
|
Ошибка при использовании "else" в цикле "repeat" |
|
|
facset |
24.12.2013, 16:24
|
Neophyte
Сообщений: 10
Регистрация: 21.12.2013 Группа: Пользователи Наличность: 0
Пользователь №: 16.508
Возраст: 23
|
Цитата(DarkMaster @ 24.12.2013, 6:36) а это что за оператор новый? (IMG: style_emoticons/default/smile.gif) ну ёё в одной букве ошибся уже понукают), ну а так думаю все поймут что "else" ---- все поправил
|
|
|
|
facset |
25.12.2013, 21:47
|
Neophyte
Сообщений: 10
Регистрация: 21.12.2013 Группа: Пользователи Наличность: 0
Пользователь №: 16.508
Возраст: 23
|
походу все-таки есть глюк, выкладываю весь код: так работает
Код //start_script 1 wait 1s call c
:start repeat 5 :q left 374, 229 wait 3s set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto q end_if left 272, 469 wait 3s set #a 0 set #a findcolor (415, 413 482, 452 1 1 1420910 %a 2) if #a = 0 left 705, 229 wait 3s call c goto q end_if left 614, 621 wait 3s set $a 480, 364 7497289 set $b 480, 364 if ($a) and ($b 7497289) left 480, 364 wait 3s left 462, 515 wait 3s end_if left 335, 642 wait 7s left 439, 493 wait 3s call c wait 280s :e left 542, 229 wait 3s set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto e end_if wait 3s left 526, 487 wait 3s set $a 484, 462 6313276 set $b 484, 462 if ($a) and ($b 6313276) left 484, 462 wait 3s else left 412, 487 wait 3s left 526, 487 wait 3s set $a 484, 462 6313276 set $b 484, 462 call b // так работает end_if call c if #b.2 = 1 :taverna left 473, 228 wait 3s set #a 0 set #a findcolor (181, 217 202, 235 1 1 312557 %a 2) if #a = 0 left 705, 229 wait 3s call c goto taverna end_if left 260, 325 wait 3s left 534, 573 wait 3s resume_script 2 call c end_if if #b.1 = 1 :r left 787, 254 wait 3s set $a 754, 246 16578789 set $b 754, 246 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto r end_if left 638, 579 wait 3s resume_script 1 left 451, 476 wait 3s set $a 574, 325 16578789 set $b 574, 325 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if call c end_if end_repeat :t left 639, 229 wait 3s set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto t end_if left 558, 564 wait 3s call c goto start end_script
proc b left 526, 487 wait 3s set $a 484, 462 6313276 set $b 484, 462 if ($a) and ($b 6313276) left 484, 462 wait 3s else left 412, 487 wait 3s end_if end_proc
proc c :a left 829, 307 wait 3s set $a 754, 246 16578789 set $b 754, 246 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if set #a 0 set #a findcolor (646, 420 670, 449 1 1 9878482 %a 2) if #a = 0 left 705, 229 wait 3s goto a end_if end_proc так не работает
Код //start_script 1 wait 1s call c
:start repeat 5 :q left 374, 229 wait 3s set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto q end_if left 272, 469 wait 3s set #a 0 set #a findcolor (415, 413 482, 452 1 1 1420910 %a 2) if #a = 0 left 705, 229 wait 3s call c goto q end_if left 614, 621 wait 3s set $a 480, 364 7497289 set $b 480, 364 if ($a) and ($b 7497289) left 480, 364 wait 3s left 462, 515 wait 3s end_if left 335, 642 wait 7s left 439, 493 wait 3s call c wait 280s :e left 542, 229 wait 3s set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto e end_if wait 3s left 526, 487 wait 3s set $a 484, 462 6313276 set $b 484, 462 if ($a) and ($b 6313276) left 484, 462 wait 3s else left 412, 487 wait 3s left 526, 487 wait 3s set $a 484, 462 6313276 set $b 484, 462 left 526, 487 wait 3s set $a 484, 462 6313276 // процедура "call b" set $b 484, 462 if ($a) and ($b 6313276) left 484, 462 wait 3s else left 412, 487 wait 3s end_if // которая в этом виде не работает end_if call c if #b.2 = 1 :taverna left 473, 228 wait 3s set #a 0 set #a findcolor (181, 217 202, 235 1 1 312557 %a 2) if #a = 0 left 705, 229 wait 3s call c goto taverna end_if left 260, 325 wait 3s left 534, 573 wait 3s resume_script 2 call c end_if if #b.1 = 1 :r left 787, 254 wait 3s set $a 754, 246 16578789 set $b 754, 246 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto r end_if left 638, 579 wait 3s resume_script 1 left 451, 476 wait 3s set $a 574, 325 16578789 set $b 574, 325 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if call c end_if end_repeat // здесь выдает сообщение: Ошибка интерпретации скрипта (end_repeat). :t left 639, 229 wait 3s set #a 0 set #a findcolor (175, 215 207, 243 1 1 171082 %a 2) if #a = 0 left 705, 229 wait 3s call c goto t end_if left 558, 564 wait 3s call c goto start end_script
proc c :a left 829, 307 wait 3s set $a 754, 246 16578789 set $b 754, 246 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if set #a 0 set #a findcolor (646, 420 670, 449 1 1 9878482 %a 2) if #a = 0 left 705, 229 wait 3s goto a end_if end_proc вот в чем тут может быть проблема я уже хз, прогонял в отдельной вкладке глючную часть кода => заработала, а вот в целом коде нифига, повторяюсь что проблема решается процедурой, ошибиться при тесте не мог т.к. прописал кусок кода с помощью копирования из рабочего. хотя вопрос этот наверное уже для новой темы в игре частенько вылазит всякий мусор поэтому часто использую проверки + откат на нескольких строк кода как результат большая длина кода (по крайней мере для меня всего лишь 5 день шаманю)
|
|
|
|
facset |
27.12.2013, 19:30
|
Neophyte
Сообщений: 10
Регистрация: 21.12.2013 Группа: Пользователи Наличность: 0
Пользователь №: 16.508
Возраст: 23
|
Прошу перенести DarkMaster наши с ним обсуждения из темы Новая Версия Uopilot v.2.34) в эту. продолжая редактировать свой скрипт повторно столкнулся с этой же проблемой но уже при использовании " if 754, 246 16578789" поясняю: в своем скрипте заменил выражения (кстати брал я их отсюда: Wiki для UOPilot раздел if) Код set $a 754, 246 16578789 set $b 754, 246 if ($a) and ($b 16578789) left 754, 246 wait 3s end_if на Код if 754, 246 16578789 left 754, 246 wait 3s end_if
при этом из скрипта убрал все " call a", также заменил " call b"на код " if 484, 462 6313276" но убрал 2е " else" получилось Код if 484, 462 6313276 left 484, 462 wait 3s else left 412, 487 wait 3s left 526, 487 wait 3s if 484, 462 6313276 left 484, 462 wait 3s //отсюда убрали "else" end_if end_if скрипт работает правильно, но если вернуть Код else left 412, 487 wait 3s end_if вылезает баг Ошибка интерпретации скрипта (end_repeat), а вот если сделать отдельный скрипт Код repeat 5 left 526, 487 wait 3s if 484, 462 6313276 left 484, 462 wait 3s else left 412, 487 wait 3s left 526, 487 wait 3s if 484, 462 6313276 left 484, 462 wait 3s else left 412, 487 wait 3s end_if end_if end_repeat end_script то работает. ВЫВОД: если в цикле " repeat" при нескольких " if" использовать два оператора " else" (один используется на втором уровне, как это делал я) то вылезает ошибка на строчке " end_repeat" = Ошибка интерпретации скрипта (end_repeat), повторяюсь в хз какой раз: проблема решается если if 484, 462 6313276
Код if 484, 462 6313276 left 484, 462 wait 3s else left 412, 487 wait 3s end_if второго уровня убрать в процедуру, или можно прописать ту часть где используются оба оператора " else" в отдельную вкладку Uopilot'а и вызывать их использование в нужном месте с предварительной передачей хендла окна. хоть это и частичное решение проблемы но могут возникнуть неприятности например: если необходимо при повторном отрицательном результате перейти на какую то другую строку скрипта, из процедуры это пока невозможно (или я ошибаюсь?) думаю данную тему можно будет закрыть. P.S. прошу прощение за косноязычность в выражениях, на форумах и в чатах до этого тоже не особо участвовал.
|
|
|
|
DarkMaster |
27.12.2013, 20:25
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
вы можете дать код который можно запустить и увидеть ошибку? Какие должны быть значения ифов? else? true?? Я брал этот кусок кода, чуть выше даже его привел после редактирования. Ошибка не воспроизводится. Нужен код, который можно запустить на _другом_ компьютере, чтобы эта ошибка вылезла. У меня вылезла. Код repeat 5 left 526, 487 wait 3s if 1 = 2 left 484, 462 wait 3s else left 412, 487 wait 3s left 526, 487 wait 3s if 1 = 2 left 484, 462 wait 3s else left 412, 487 wait 3s end_if end_if end_repeat end_script stop_script Ошибка не вылазит. If'ы менял на правда/ложь. Вэйты убирали? Ошибка без них появляется? Цитата P.S. прошу прощение за косноязычность в выражениях, на форумах и в чатах до этого тоже не особо участвовал. Мне не выражения надо. Мне код надо =) Код без координат и цветов, код который можно протестировать, который выкинет ошибку. Цитата хоть это и частичное решение проблемы но могут возникнуть неприятности например: если необходимо при повторном отрицательном результате перейти на какую то другую строку скрипта, из процедуры это пока невозможно (или я ошибаюсь?) Они были не стабильны. Я использовал вместо них gosub. И использую до сих пор. Насколько я помню в процедуру можно передать переменные, таким образом можно передать номер вкладки скрипта и обращаться из процедуры напрямую к переменным скрипта. Ну а дальше дело техники.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|