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

 
Ответить в эту темуОткрыть новую тему
> Ошибка при использовании "else" в цикле "repeat"
facset
сообщение 23.12.2013, 22:38
Сообщение #1


**

Neophyte
Сообщений: 10
Регистрация: 21.12.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.508
Возраст: 23



баг на втором уровне выражения else

Код
1)   repeat #a
2)   действие
3)   if
4)     действие
5)   else
6)     действие
7)     if
8)       действие
9)     else
10)      действие
11)    end_if
12)  end_if
13)  end_repeat  - Ошибка интерпретации скрипта (end_repeat).


если с 7 по 11 строку засунуть в процедуру то все работает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.12.2013, 5:36
Сообщение #2


***********

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



Цитата
elce

а это что за оператор новый? (IMG:style_emoticons/default/smile.gif)


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


**

Neophyte
Сообщений: 10
Регистрация: 21.12.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.508
Возраст: 23



Цитата(DarkMaster @ 24.12.2013, 6:36) *

а это что за оператор новый? (IMG:style_emoticons/default/smile.gif)

ну ёё в одной букве ошибся уже понукают), ну а так думаю все поймут что "else"

---- все поправил
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.12.2013, 16:48
Сообщение #4


***********

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



я к тому, что ошибка решилась?

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


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


**

Neophyte
Сообщений: 10
Регистрация: 21.12.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.508
Возраст: 23



DarkMaster
Ты меня неправильно понял если внутри цикла "repeat" 2 раза используется оператор "else" то на строке "end_repeat" выскакивает "Ошибка интерпретации скрипта (end_repeat)"
проблема решается если с "if" по "end_if" содержащие 2 "else" запихнуть в процедуру

код написал в предыдущем посте где ты еще прикололся над "elce"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.12.2013, 20:45
Сообщение #6


***********

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



Код
    repeat 2
        if  1 = 2
            
        else
            if  2 = 3
            
            else
                log 2 != 3
            end_if  
        end_if
    end_repeat

Проблема не воспроизводится. Дайте код на котором она есть. Не примерную структуру, а код. Я не просто так это просил. Ошибка с "elce" так же могла повлиять на результат.


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


**

Neophyte
Сообщений: 10
Регистрация: 21.12.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.508
Возраст: 23



эээм прогнал ту часть скрипта тоже никаких глюков, похоже действительно ошибся тогда в написании оператора, видимо слишком долго просидел над скриптами, тогда и допустил ошибку.приношу извинения за беспокойство.
в первый раз в жизни пишу скрипт вот и допускаю ошибки.
если необходимо, чтобы не засорять форум то удалите эти посты.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.12.2013, 21:09
Сообщение #8


***********

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



дык форум для того и нужен (IMG:style_emoticons/default/smile.gif)


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


**

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 день шаманю)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.12.2013, 7:30
Сообщение #10


***********

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



Цитата
if ($a) and ...

недопустимое выражение. Вроде слеплять можно только координаты.

Обрезайте скрипт, чтобы оставить только неработающий кусок. Ну как вы представляете воспроизведение ошибки из данного скрипта? Вы мне предлагаете все if'ы моделировать?

Причина так же может быть в старт/стопах скриптов.

// Создайте, пожалуйста, отдельную тему, чтобы тут не захламлять. Все посты перекину.

Сообщение отредактировал DarkMaster - 26.12.2013, 7:35


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


**

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. прошу прощение за косноязычность в выражениях, на форумах и в чатах до этого тоже не особо участвовал.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.12.2013, 20:25
Сообщение #12


***********

Модератор 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
facset
сообщение 27.12.2013, 20:34
Сообщение #13


**

Neophyte
Сообщений: 10
Регистрация: 21.12.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.508
Возраст: 23



что и думать уже не знаю
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.12.2013, 21:19
Сообщение #14


***********

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



у вас не моем коде ошибка вылазит?


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

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

 

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