Author Topic: Прошу помочь найти ошибку, цикл не завершается. (привязка к окну, оконный режим)  (Read 6795 times)

0 Members and 3 Guests are viewing this topic.

digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
В настройках количество повторений единица.
Не смотря на то что цвет точно пропадает из точки поиска, цикл не завершает работу.


Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)


WHILE(PXL(803,861) ! 8388479)
   LCLICK(RND(1234,1504),RND(89,103))
   WAIT(RND(1,3))
   DBLCLICK(RND(1589,1613),RND(88,112))
   WAIT(RND(25,33))
   GETSCREEN
   COLORMODE(7,782,844,822,880)
END_CYC
« Last Edit: March 25, 2015, 10:16:20 AM by digiTALker »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Ошибок нет, и ты можешь легко проверить пропадает он или нет, путем записи в лог
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)

WHILE(PXL(803,861) ! 8388479)
   LCLICK(RND(1234,1504),RND(89,103))
   WAIT(RND(1,3))
   DBLCLICK(RND(1589,1613),RND(88,112))
   WAIT(RND(25,33))
   GETSCREEN
   COLORMODE(7,782,844,822,880)
   LOGWRITE ("Цвет в 803,861: ", PXL(803,861))
END_CYC

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Человек же четко написал "Не смотря на то, что цвет точно пропадает из точки поиска, цикл не завершает работу.".
А какое условие работы цикла!?
Code: (clickermann) [Select]
WHILE(PXL(803,861) ! 8388479)Ну так раз этот цвет пропал, его нет, то цикл и будет работать. Ставь вместо "!" знак  "=", и цикл будет работать пока цвет "точно" не пропадет.
И да , на всякий случай проверяй,  что у тебя там на самом деле за цвет.
Code: (clickermann) [Select]
LOGWRITE ("Цвет в 803,861: ", PXL(803,861))



хотя, если ты утверждаеш, что цвет точно проподает, то походу при старте этот цвет присутствует в точке. следовательно судя по твоему коду, цикл вообще ниразу невыполнится. вобщем неурядица какаято. полюбому какието косяки у тебя с цветом. проверяй, уменьшай колормод.
« Last Edit: March 24, 2015, 11:36:22 AM by dramster »

digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Спасибо всем большое! Жаль что нет фичи ткнуть спасибо и поднять карму на этом форуме. Странно.. А ведь эта мелочь мотивирует и доставляет пусть маленькую но всё же радость людям )

digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
! 8388479 - это означает, что когда цвет пропадает из точки поиска цикл только начинает, а не завершает работу.
8388607 - вот такой цвет попробуйте тоже учитывать, зелёный при COLORMODE(7) не всегда сводится к 8388479 или можно попробовать COLORMODE уменьшить по возможности, чтоб был один более точный цвет.
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)
WHILE((PXL(803,861) ! 8388479) | (PXL(803,861) ! 8388607))
   LCLICK(RND(1234,1504),RND(89,103))
   WAIT(RND(1,3))
   DBLCLICK(RND(1589,1613),RND(88,112))
   WAIT(RND(25,33))
   GETSCREEN
   COLORMODE(7,782,844,822,880)
END_CYC

А вот родился еще вопрос. Как тогда цикл начинает работать, если я его запускаю при существующей точке?
И колормод 7 это уже семь цветов, на восьмом всё становится уже черно-белое. При просмотре через лупу я имею в нужном участке одноцветный зелёный достаточного размера. А если добавить варианты зелёного, то мне тогда придётся заморачиваться с поиском нужного, а это по идее утяжелит скрипт.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А вот родился еще вопрос. Как тогда цикл начинает работать, если я его запускаю при существующей точке?
И колормод 7 это уже семь цветов, на восьмом всё становится уже черно-белое. При просмотре через лупу я имею в нужном участке одноцветный зелёный достаточного размера. А если добавить варианты зелёного, то мне тогда придётся заморачиваться с поиском нужного, а это по идее утяжелит скрипт.

Нет никаких вариантов зелёного. В COLORMODE(7) есть только цвет 8388607, он и должен быть в условии. И по словесному описанию, там действительно должно быть "равно"
Code: (clickermann) [Select]
WHILE(PXL(803,861) = 8388607)
Вот такое условие
Code: (clickermann) [Select]
WHILE((PXL(803,861) ! 8388479) | (PXL(803,861) ! 8388607))
безсмысленно. Оно выполняется всегда. Для того чтобы не выполнилось пиксел должен быть равен и 8388479 и 8388607 одновременно!  :o

Бонус-проверка
Code: (clickermann) [Select]
SUB(условие, $a)
   IF(($a ! 8388479) | ($a ! 8388607))
      LOGWRITE ("Да")
   ELSE
      LOGWRITE ("Нет")
   END_IF
END_SUB

условие(0)
условие(8388479)
условие(8388607)
условие(999)
HALT


digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Quote from: Vint
Нет никаких вариантов зелёного. В COLORMODE(7) есть только цвет 8388607, он и должен быть в условии. И по словесному описанию, там действительно должно быть "равно"
Code: (clickermann) [Select]
WHILE(PXL(803,861) = 8388607)
Цвет 8388479 я получил используя "лупу" в интерфейсе программы. Другой способ получения цвета мне не известен.


Quote
Ну так раз этот цвет пропал, его нет, то цикл и будет работать. Ставь вместо "!" знак  "=", и цикл будет работать пока цвет "точно" не пропадет.
И да , на всякий случай проверяй,  что у тебя там на самом деле за цвет.
При постановке знака "=" экран игры "залипает" ничего не происходит и не реагирует на нажатия мышки. как только останавливаю скрипт - сразу отпускает. Пробовал оба варианта цвета 8388607 и свой 8388479. Как это не удивительно, на данный момент мой первоначальный скрип пока рабочий, все остальные предложения не дали результата, а у меня осталась проблема с выходом из цикла. Еще подскажите где взять инфу о использовании знаков "!" и "=" может там еще что-то есть? В справке на этот счет тишина.

Quote
Бонус-проверка
Code: (clickermann) [Select]
SUB(условие, $a)
   IF(($a ! 8388479) | ($a ! 8388607))
      LOGWRITE ("Да")
   ELSE
      LOGWRITE ("Нет")
   END_IF
END_SUB

условие(0)
условие(8388479)
условие(8388607)
условие(999)
HALT

Не понимаю что делает эта проверка, и каков её механизм.

Quote
полюбому какието косяки у тебя с цветом. проверяй, уменьшай колормод.
куда еще то уменьшать, итак уже 7ка, дальше только двухцветка
или ты имеешь ввиду под уменьшением не упрощение цвета, а уменьшение значения переменной?


А вообще на самом деле цикл начинает работу независимо от наличия точки, и он же не заканчивает работу независимо от её наличия так же ))
Словно программа просто входит в цикл, а на детали условия ей начхать.
Наверно я что-то на так вам преподношу, отсюда получается сломанный телефон. Прям хоть видео записывай ))

Интересная вещь, если сделать привязку к окну то показывает одни координаты, если без привязки то похоже относительно экрана. В скрипте какие должны быть?
Но это не снимает вопроса почему скрипт запускается, ибо в округе подобного цвета нет всёравно.
« Last Edit: March 24, 2015, 05:37:43 PM by digiTALker »

digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
ДРУГОЙ СПОСОБ ПОЛУЧЕНИЯ ЦВЕТА - сделать скрин в COLORMODE(7) и внимательно посмотреть, что видит кликер, так сказать в масштабе, а не по одному пикселю лупой ловить, для полноты восприятия можно сделать скрины и с другой коррекцией

"!" и "="  знаки неравно и равно, если начнём писать гайды по их интерпритации, то зависнем где-то между арифметикой 1 класс и смыслом жизни.

 и должно залипать если цикл неработает, ведь тогда без пауз
GETSCREEN
COLORMODE(7,782,844,822,880)
постоянно крутится.
 Если цвет пикселя принимает "якобы нужное" значение, а цикл неостанавливается, то налицо факт вредительства; или цвет модифицируется или изначально опредёлён неверно.

С залипанием мой косяк, почему то с прошлого раза не сохранилась настройка повторения  скрипта. Вот он и гонял его до залипания.

Code: (clickermann) [Select]
LOGWRITE ("öâåò â 803,861: ", PXL(803,861))
LOGSHOW(1)
мне выдал
Code: [Select]
18:15:36 цвет в 803,861: 8355711
18:23:38 цвет в 803,861: 8355711
18:29:38 цвет в 803,861: 8355711
18:33:48 цвет в 803,861: 8355711
18:35:58 цвет в 803,861: 8355711
18:41:29 цвет в 803,861: 8355711
18:41:40 цвет в 803,861: 8355711
18:42:29 цвет в 803,861: 8355711
18:42:43 цвет в 803,861: 8355711
18:42:50 цвет в 803,861: 8355711
18:46:59 цвет в 803,861: 8355711
18:48:10 цвет в 803,861: 8355711
18:49:49 цвет в 803,861: 8355711
18:50:57 цвет в 803,861: 8355711
« Last Edit: March 24, 2015, 05:52:13 PM by digiTALker »

digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Час от часу не легче, сохранил скриншот в файл, открыл Гимпом и посмотрел координаты нужной мне точки, они действительно оказались немного другими. Я вставил эти новые координаты и скрипт стал запускаться уже со снаком "=" но выполнял один цикл и вырубался. Я запросил через лог полученный цвет в новой моей точке, но цвет не изменился. Хотя это ничего не изменило. Странно то что в других то точках тойже системы координат все тыкает исправно!
« Last Edit: March 24, 2015, 06:38:32 PM by digiTALker »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Еще подскажите где взять инфу о использовании знаков "!" и "=" может там еще что-то есть? В справке на этот счет тишина.

Основные конструкции. Условие IF.

Не понимаю что делает эта проверка, и каков её механизм.

Тогда пока забудь.

Интересная вещь, если сделать привязку к окну то показывает одни координаты, если без привязки то похоже относительно экрана. В скрипте какие должны быть?

Это открытие Америки получается. Справка - Особенности - Привязка к окну.

С залипанием мой косяк, почему то с прошлого раза не сохранилась настройка повторения  скрипта. Вот он и гонял его до залипания.

Нигде не говорится, что должно сохраняться. Этот момент обсуждался не раз. Сохранение добавит ещё больше проблем, т.к. будут запускать уже другой скрипт, забыв сбросить настройку.
И да, пользуются такой функцией только записывальщики. Неужели трудно сделать как положено, с циклом.

Вариантов море.

Раз
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)

WHILE(PXL(803,861) ! 8388479)
   LCLICK(RND(1234,1504),RND(89,103))
   WAIT(RND(1,3))
   DBLCLICK(RND(1589,1613),RND(88,112))
   WAIT(RND(25,33))
   GETSCREEN
   COLORMODE(7,782,844,822,880)
END_CYC
HALT

Два
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)
IF(PXL(803,861) ! 8388479)
   LCLICK(RND(1234,1504),RND(89,103))
   WAIT(RND(1,3))
   DBLCLICK(RND(1589,1613),RND(88,112))
   WAIT(RND(25,33))
ELSE
   HALT
END_IF

Три
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)

IF(PXL(803,861) = 8388479)
   HALT
END_IF

LCLICK(RND(1234,1504),RND(89,103))
WAIT(RND(1,3))
DBLCLICK(RND(1589,1613),RND(88,112))
WAIT(RND(25,33))

И всё. Не нужно ничего выставлять каждый раз.

Code: (clickermann) [Select]
LOGWRITE ("öâåò â 803,861: ", PXL(803,861))
LOGSHOW(1)
мне выдал
Code: [Select]
18:15:36 цвет в 803,861: 8355711
18:23:38 цвет в 803,861: 8355711
18:29:38 цвет в 803,861: 8355711
...

А почему так?
Разве не должно быть так?
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(7,782,844,822,880)
LOGWRITE (" 803,861: ", PXL(803,861))
LOGSHOW(1)
« Last Edit: March 24, 2015, 06:44:33 PM by Vint »


digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Думаю что теперь будет нагляднее. Все предыдущие мои проблемы сводятся к одному - разнице в координатах.
В прикрепленных изибражениях видно что координаты с использованием лупы и без - разные.
Причем когда я использовал лупу, мне приходилось держать её заметно ниже нужной точки чтобы в квадратике отобразилось то что надо. Что важнее при использовании лупы? То что отображается в квадрате превью или то место где находится курсор фактически?

У меня превью лупы работает только если включен режим прозрачности.

На скринах не видно моего курсора, кстати он свой у игры, и пошукав по форуму, я понял что это важно упомянуть.

Область в которую успешно тыкает кликерман изображена прямоугольниками и для её определения я не пользовался лупой.

Я пробовал вставить координаты для определения наличия зеленой точки и без использования лупы (пришлось искать на ощупь, так как курсор тоже пришлось двигать ниже.

Где можно узнать сопоставление кодов цветов, и почему мне кликерман говорит что цвет 8388479 и это видно на скрине, но как заметил Vint такого цвета в этом диапазоне нет в принципе.
Спасибо за три варианта моего скрипта, но у меня все равно упирается получается в определение корректного цвета.

Вот что еще я обраружил, если использовать лупу, то изображение в квадрате превью мерцает, то есть то нет. Я подумал что это просто нюанс её работы, но теперь думаю что оно и правду там мерцает, потому как скрипт с использованием знака "=" в условии иногда запускается, а потом проделав несколько циклов, отрубается раньше времени. Т.е. ему то удовлетворяют условия чтобы выполняться, то вдруг нет. Думаю что иногда getscreen попадает в одно из таких "мерцаний" и естественно что там не обнаруживается моего цвета. Могла ли быть это защита от разработчиков игры?! Зная их, еще как!

Если мои домыслы верны, то как тогда получать достоверную картину, делать выборку из скриншотов и анализировать нет ли в одном из них?
« Last Edit: March 25, 2015, 06:08:21 AM by digiTALker »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Ты в оконном режиме все это делаешь? Выключи его и проблемы исчезнут.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Где можно узнать сопоставление кодов цветов, и почему мне кликерман говорит что цвет 8388479 и это видно на скрине, но как заметил Vint такого цвета в этом диапазоне нет в принципе.

С цветом, это я накосячил, в списке не просмотрел до конца. Цвет правильный.

По поводу остального, всё было бы проще, если бы первым сообщением в первом посту было "...привязался я к окну...".
http://crapware.aidf.org/forum/index.php?topic=1508.0
пункт № 1

Нужно подходить индивидуально. Целиться, опытом проб и ошибок.

У меня, например, давно, во времена 4,7-4.8 никакого смещения курсора от лупы в режиме привязки небыло. Всё было чётко. Позже появилось смещение в мозиле, после очередного её обновления, и только в ней. Смещалось вниз на высоту строки заголовка, кажется 30 пикс.
Привязкой давно не пользуюсь и система с компом поменялась за это время. Сейчас смещение ВЕЗДЕ на 50 пикс. + мигание некоторых окон. Даже в проводнике и блокноте смещение, хоть и не мигает. В Notepad++ при этом панель с иконками в режиме морзянки.

Короче, совсем всё плохо стало. Думал из-за более новой версии кликермэна, но нет, все вплоть до 4.7 (4.8, 4.9, 4.11) выдают то же смещение. Значит проблема в винде или её взаимодействии с кликером.

Привязка маздай.
« Last Edit: March 25, 2015, 08:01:28 AM by Vint »


digiTALker

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Ты в оконном режиме все это делаешь? Выключи его и проблемы исчезнут.
Если работать в фулл скрине, то тогда совсем грусно становится. Я лучше буду пытаться адаптировать скрипт под мерцание, например снимать три скрина подряд, и если хоть в одном есть нужная точка то условие будет выполнено например.

А чтобы работать без привязки, это надо второй монитор использовать, а это только когда вернусь домой (