|
|
  |
Упростить скрипт |
|
|
DarkMaster |
7.8.2013, 11:50
|
          
Модератор UOPilot
Сообщений: 9.736
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29637
Пользователь №: 11.279

|
Вспомнил я тут про свой локальный ад под НГ. https://forum.uokit.com/index.php?showtopic=25243&hl=stoТа же проблема. Сейчас через удаленку разбирался и нашел очень и очень интересные закономерности. Если сделать вывод ошибок в лог + dev/null, то все проскакивает и бежит дальше. Ошибка сыпится, но скрипт не останавливается. Дальше интереснее. Если врубить log commands, то ошибка вообще не возникает. Т.е. врубаешь отладку - исчезает ошибка. Кнайт, я уже предчувствую как тебе будет весело. Причем хочу напомнить, что у меня эта проблема была аж в 2.17, проблема старая. И там таких прелестей не было, чтобы скрипт продолжил работать при сбоях... Цитата Переиграл ты немножечко в линейку)) это не присущее только л2 сокращение.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
8.8.2013, 18:37
|
          
Модератор UOPilot
Сообщений: 9.736
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29637
Пользователь №: 11.279

|
какие-то чудеса у тебя творятся. Сделай, как я говорю - ифом, а после ифа сделай гет колор с выводом в лог. Хоть посмотрю на это чудо. Вдруг еще какой-то баг. Цитата ИНОГДА файл куда надо записать данные, не перезаписывается, а просто добавляется новые данные. странно... я вообще мечтал о таком функционале, но его вроде так и не сделали. Перед записью проверь размер массива. Возможно он в себе содержит лишние данные. В первом цикле ошибка - три ифа открываются, но только два закрываются. Цитата if #colorN1 = #color if #x1 #y1 #color можно заменить на: if #x1 #y1 #color and #colorN1 = #color не очень понятно откуда берется #sz и каким образом она изменяется в ходе работы скрипта. Так же не очень понятно что в себе содержит массив. Теоретически, если сетка статичная, то можно чуть-чуть сэкономить время на вычислении: Цитата set #x1 %a[#i 1] set #y1 %a[#i 2] + 41 забив координаты один раз в массив. Но толку от этого будет не очень много. Если счет не идет на миллисекунды, то смысла заморачиваться нет. Достаточно интересный прирост производительности может дать проверка внутри одного цикла и правой стороны и верха. Да и как-то логично это в один цикл запихать. Если нужны совпадения только с обоих сторон, то можно вообще одним ифом ограничиться с несколькими условиями через and.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
veiron |
8.8.2013, 19:08
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 8.8.2013, 18:37)  странно... я вообще мечтал о таком функционале, но его вроде так и не сделали. Перед записью проверь размер массива. Возможно он в себе содержит лишние данные.
В начале скрипта стоит: Код set size (%a) init_arr %zhe1 2) save_array %zhe c:\logs\niz.txt // Перезаписать файл с пустым массивом, . Запускаю скрипт, все перезаписывается, но иногда не перезаписывается заново, а с прошлого массива остается 1 строчка с координатами. Хотя как я понимаю строка set size (%a) должна очищать массив. Цитата(DarkMaster @ 8.8.2013, 18:37)  не очень понятно откуда берется #sz и каким образом она изменяется в ходе работы скрипта. Так же не очень понятно что в себе содержит массив.
Код set $a1 findcolor (238, 115 489, 374 1 1 (576495) %a 2 -1) Вот отсюда берется. Массив содержит найденные координаты цвета. Цитата(DarkMaster @ 8.8.2013, 18:37)  Если нужны совпадения только с обоих сторон, то можно вообще одним ифом ограничиться с несколькими условиями через and.
Нужно с 4 сторон. Вообще искать надо с 4 сторон, но если начинаю искать с 4 у меня, если цвет находится в двух соседних клетках, засчитывает 2 раза(слева направо и справа налево). Уже пол года бьюсь над созданием этого скрипта, который будет искать камня одного цвета на поле и соединять их в 3 в ряд и ни чего не выходит. Даже топик когда то про это создавал.
|
|
|
|
veiron |
8.8.2013, 20:27
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Нашел почему появляется лишняя строчка, только не понял как с этим бороться. Код :start set #q1 0 save_array %zhe c:\logs\zheltie_poisk_2\niz.txt for #i 1 #sz if #x #y #color and #colorN = #color set #q1 #q1 + 1 set %zhe[#q1 1] %a[#i 1] %a[#i 2] save_array %zhe c:\logs\zheltie_poisk_2\zheltie_pravo.txt end_if end_for pause_script goto start Если запускать пилот и в конце цикла после паузы делать стоп, сколько бы я так не делал, что будет прописано в файле, все удалится, после каждого запуска. А вот если я буду просто снимать с паузы, не делая старт/стоп, будет происходить что. первый цикл: нашли 1 координаты и записали в 1 строку, пошли выполнять второй цикл и нашли 2 координаты, теперь уже в файле записано 2 строки, а вот на 3 цикл нашли всего 1 координату, ее то и пропишет пилот 1 строкой, а вот 2 строка с прошлого раза, как была так и останется. Может подскажете как это вылечить ? И почему если делать старт/стоп, 3 строка скрипта, полностью очищает файл. Даже просто если написать три строчки то они будут очищать файл: Код :b save_array %zhe c:\logs\zheltie_poisk_2\niz.txt wait 1s pause_script goto start Тогда, что может блокировать в скрипте осуществить полное очищение?
|
|
|
|
veiron |
8.8.2013, 21:07
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 8.8.2013, 20:33)  хз. надо ковырять почему оно так себя ведет. уже утром.
Может вы разберетесь. Код set #kt 0 :a save_array %zhe1 c:\logs\zheltie_poisk_2\niz.txt // пример 7 - посчитаем количество точек заданного цвета из перечисленных в скрипте // set linedelay 1 // раскомментировать эту строку, если нужно чтобы скрипт работал быстро init_arr %a(1 2) 39 24, 16 14, 25 30, 23 48, 45 89, 34 33, 12 32 // перечисляем после скобок пары координат всех проверяемых точек set #color 32768 // искомый цвет точки set #sz size (%a) // определили число пар точек в массиве %a set #n 0 // тут будем считать число точек нужного цвета for #i 1 #sz // в цикле проверяем цвет всех точек if %a[#i 1] %a[#i 2] #color // проверяем цвет в #i-й точке set #n #n + 1 // если цвет совпал с заданным, то увеличиваем счетчик найденных точек end_if set #kt #kt + 1 set %zhe1[#kt 1] %a[#i 1] %a[#i 2] save_array %zhe1 c:\logs\zheltie_poisk_2\niz.txt end_for msg Найдено #n точек с цветом #color pause_script goto a Вот скрипт с Вики, я только добавил запись в файл. Пишу в файл что нибудь, делаю старт пилота, после завершения цикла, делаю стоп пилот. И в файле моя запись удалится, а запишется только то, что будет в массиве. Теперь из массива удаляю половину координат и делаю старт и после завершения цикла стоп. В файле будут только оставшиеся в массиве координаты. Теперь делаю старт, цикл завершился пилот стал на паузу, я удаляю половину координат из массива, и снимаю с паузы, а вот теперь в файле будет записаны все старые координаты, только начиная с первой строки поменяются на те которые вы оставите. Почему перестает работать перезапись файла.
|
|
|
|
WKnight |
9.8.2013, 11:52
|
       
Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006 Группа: Пользователи Наличность: 0
Пользователь №: 4.688

|
Цитата Хотел перетянут мышкой пилот вниз и весь скрипт заменился на эти иероглифы. Как теперь скрипт вернуть обратно в нормальный вид Что-то перетащил в пилот, он это загрузил. Вообще отмена последних изменений в скрипте, также как и везде Ctrl+Z. Но вероятно теперь уже поздно. Если ничего подозрительного не делал, то найти файл скрипта и скопировать куданить, или в пилоте открыть. Цитата Нужно с 4 сторон. Вообще искать надо с 4 сторон, но если начинаю искать с 4 у Я так понимаю что точки ищутся на фиксированном растоянии от исходной. А если сделать финдимидж с узенькой картинкой, в которой на прозрачном фоне помечены нужные точки?
|
|
|
|
veiron |
9.8.2013, 12:34
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(WKnight @ 9.8.2013, 11:52)  Что-то перетащил в пилот, он это загрузил. Вообще отмена последних изменений в скрипте, также как и везде Ctrl+Z. Но вероятно теперь уже поздно.
Вы меня не поняли! Я ни чего не перетаскивал в пилот. Просто ткнул мышкой в верхнею область пилота, чтобы сместить его ниже на экране. А он как то очень быстро заменил мой скрипт на эти иероглифы. У меня даже на компе нет таких файлов с иероглифами, а за все время пользования пилотом так происходит уже второй раз. Цитата Я так понимаю что точки ищутся на фиксированном расстоянии от исходной. А если сделать финдимидж с узенькой картинкой, в которой на прозрачном фоне помечены нужные точки? Да на фиксированном. Что я только не пробовал за пол года. Найти я нахожу и финимеджем и фколором, у меня получается найти и собрать три шара в одну линию, что бы произошел ход. Сделал скрипт на одних ифах, так пока мой скрипт проверял, у меня уже ход закончился, я до конца и найти все цвета не успел.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|