Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Cleoss

Pages: 1 2 [3] 4 5 ... 18
31
Попробуйте каждый этап логгировать детальнее, чтоб знать, где именно не срабатывает. Добавьте в каждый иф и в каждый элс по принту:
Code: (clickermann) [Select]
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "WindowNN.bmp")
         print("Ищем то-то.бмп. Нашёл Window5")
         LCLICK(1304, 714) // Координата WindowNN
         WAIT(1)
   ELSE
         print("Ищем то-то. HE нашёл Window5")
         WAIT(1)
END_IF
Когда принты отчётные станут не нужны, просто закомментируйте их, не удаляя в дальний ящик.

Как уже сказал Кирилл, по возможности уменьшаем зоны поиска (когда на целом экране уже нашлась успешно) и размеры искомой картинки. Зона поиска у меня обычно в приделах 100*300 пикселей, но никак не весь экран (по всему иногда ищу только на начальном этапе отладки скрипта, но чаще всего сразу задаю нужную область). То есть у вас вместо 0,0,$_xmax,$_ymax должно быть нечто вроде 300,100,$_xmax-400,$_ymax-800 ну или то же самое (но не через $_xmax,$_ymax) по-другому 300,100,650,150. Теперь по поводу уменьшения размера картинок -- у меня искомые картинки практически всегда размером меньше 15*15 пикселей, а очень часто и примерно 5*5 (то есть они очень маленькие и поэтому ищутся оч быстро за 50-100 мс). А если вы вывесили огромное полотно и пытаетесь искать его неизвестно где по всему экрану да ещё быстро -- не удивляйтесь, что на поиск у вас будут уходить не возможные 200 мс, а все 10 сек (при этом проц греется и маслает, хотя вам это сильно не грозит -- у вас немалые задержки по секунде).

Если не находит картинку, почитайте эту старую тему (с кодом моей скринилки) и возможно примените скрипт внизу оттуда.
ЗЫ. Но раз окна там меняются и нужно отслеживать их смену, то безусловно здесь "лишние гетскрины" нужны, не знают, почему это у нас странно так советуют убрать их)) Без гетскринов кликер слеп, но городить лишние тоже не надо. Возможно, потому кликер ничего и не делает, что не может найти одну картинку или все сразу. Сначала нужно по очереди разобраться с каждой (успешно найти её), и только в случае успеха с тремя переходить к полному циклу. Ищите все картинке сперва по одиночке и следите за логом с принтами, что они пишут (нашлось/нет, если нет -- на каком этапе). Или вместо клика сделайте просто move в те же координаты, чтоб увидеть точно, куда мышь попадает. Может, она у вас находит сперва совсем не то, а вы и не замечаете. Сделайте скрины не своей скринилкой, а через кликер (линк со своей скринилкой я уже дал выше). Возможно, вы делаете скрины из пнг, а там может иметься компрессия и.. потери, соответственно, пиксельное несоответствие))  Кароч, добавляйте принты и лог нам в студию!

32
Открываем справку, там раздел "Анализ экрана", там функция  SCANPXL делает то, что вам нужно. Перед ней ставим гетскрин, чтоб кликер сделал снимок и не был слепым и не искал по тёмноиу экрану. На выходе сканпикселя получаем массив (читаем справку), и если действительно на экране будет только один пиксель нужного цвета, то считываем первые ячейки из этого массива, они-то и будут найденными координатами (в общем, это всё есть в справке, читайте внимательно). Считав координаты, перемещаем в них курсор или делаем клик, после этого нулим массив андефайном. Вперёд!

33
Общие вопросы / Re: Прошу помочь
« on: January 02, 2018, 06:00:23 AM »
Ну это ж мне не совсем ведомо, где именно нужно паузу ставить. Вы ставите её там, где хотите. Могу даже вам посоветовать на стадии тестирования сделать побольше задержки между всеми операциями, чтоб знать точно, где срабатывает, а где -- нет. Можно даже для всех задержек сделать одну переменную и оставить её в заголовке, оттуда регулируя скорость всего скрипта.

Code: (clickermann) [Select]
$zaderzhka=5000 // Можно поставить и 10 тысяч мс, тогда пауза между операциями будет по 10 сек
.. тут идут операции ...
waitms($zaderzhka) // делаем задержку, чтоб замедлить скрипт, не спешить, а разобраться
.. опять операции ..
waitms($zaderzhka) // ещё задержка, а во время неё можно проверять правильность работы скрипта и делать комментарии по отклонениям
.. и т. д.

А когда со всем разберётесь, то паузы можно маленькие поставить, напр. 200-300 мс. (около трети секунды)

Должен "отключаться  мазила" это как? Браузер должен открываться или сворачиваться или просто вкладку закрыть? Слишком пространное описание. Ещё я так понял вы говорите у вас гдет не срабатывает. Но вот зачем у вас там стоит два энд_ифа? Я же вам уже писал про принцип парности иф+энд, но вы пропустили это мимо ушей. Может, из-за лишнего и не срабатывает. А вообще для хорошего составления скриптов в Кликермане нужно б изучить его файл справки, там не так много команда (с сотню, но понадобятся вам далеко не все, а только 10--20) и займёт это пару часов, но без этого никак. Нужно хорошо знать список команд (какие именно есть) и для начала  хотя б примерно для чего каждая, чтоб вы не плавали в них, тогда у нас может быть более предметный разговор. Почитайте справки не спеша, вдумчиво, перечитайте при надобности, а что не сможете совсем понят, либо спросите тут, либо почитайте форум на эту тему (тут оч много написано на разные темы и алгоритмы за былые годы).

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

34
Общие вопросы / Re: Прошу помочь
« on: January 01, 2018, 08:51:54 PM »
Так вы к нам из другого лагеря?) Спс за поздравлялки, взаимно))

Не совсем понял, что вам нужно (отрицательный цикл?), но по-моему вы ищете оператор элс:

Code: (javascript) [Select]
if_pixel_in(координаты, искомый_цвет)
   тут пишем команды, которые будут делаться, если цвет найдётся
else
   здесь будет код, который будет выполняться, если цвет НЕ найден
end_if

И ещё: IF.. и END_IF это парные команды, если есть одна -- должна быть и другая, соответственно закрывающая (энд). Если открывающих в коде три, то и закрывающих должны быть столько же. Ещё используйте в редакторе кнопку автотабуляции, магическую палочку (5-ая справа) для проверки правильности вложенности своего кода (если код сильно перекашивается по диагонали, то не хватает парных команд).

35
Зона поиска у цвета большая? Если по всему экрану будешь искать, то может больше секунды занять + в зависимости от софта и железа время разное.

36
Хеллоу, Hello, еси не шутите) Попробуй почитай тему, мож поможет (бывает, что скрины, сделанные в других прогах попиксельно не совпадают с тем что видит кликер, хотя это не заметно наглаз, в той теме мой скрипт скринилки). А ваще тут и Винт (он привязкой не пользуется!) и все остальные уже сто раз писали всё известное о привязке и много тем про это (посёрфь тут внимательное). Недавно я даже неожиданно открыл для себя расчудесную и старую тему с заменой привязки от Драмстера, пока ещё правда не тестировал, на всё не хватает времени увы.

37
Предложения / Re: [Alpha/Beta Testing]
« on: January 01, 2018, 03:02:56 PM »
функции Кликермана после релиза 4.13.3b
Clickermann осваиваю недавно, использую 4.12.001  (2 008 780 байт). Хотелось бы сразу разбираться и вникать в свойства и методы наиболее поздней, пусть даже нестабильной, версии. Если такая возможность для новичков существует, то откуда её (последнюю версию) загрузить?

В самом низу 26-ой страницы данной темы товарищ Челледжер ака автор программы скидывал линк на версию Clickermann 4.13.007, here u have.

38
Погонял от безысходности скрипт и в старом кликере и наконец понял, что гоню именно я, а не кликер. По ходу, я пытался загнать значение в массив одним оператором равенства. Ладно, оставлю это здеся. Но всё же иф нерабоч в некоторых кондишенах. Меняем $uniqz[0]=$curr на arrpush и с выдохом возвращаемся в свежую версию кликера.

ПС. Поменял, толку 0. Как и в 4.13.13, странно.

Разве нельзя присваивать так:  $curr=arrpop($curvarz)?

39
Предложения / [Alpha/Beta Testing]
« on: January 01, 2018, 02:28:24 AM »
Ошибка при сравнении строк с числами v4.13.007

Почему только строк? На сравнении двух чисел тож спотыкается. Ну ведь результат, возвращаемый ф-цией ArrSize, это число, верно? Подозреваю, собака порылась в новых матоператорах, а не в ифе. Оказывается, пытался запихнуть в ячейку с помощью $uniqz[0]=$curr, и понял свою тупость только после тестирования в 4,13,3. Кстати, почему не сделать рабочей эту тему схему присвоения $array[$idx]=$defvar?! .....Хотя стоп, поменял $uniqz[0]=$curr на соответствующий arrpush($uniqz[0],$curr), но дело не сдвинулось, иф не выполняется как положено. Даже в 4,13,3 не работает, наверно мой загон закрался... Почему arrpush($uniqz,$curr) можно присваивать, а arrpush($uniqz[0],$curr) нельзя?  :'(

Ещё заметил, что "блокируемый" ввод в редактор при исполнении скрипта вовсе не блокируется с клавиатуры, точнее, блокируется, но.. В общем я сделал очередной скрипт с while+iskeydown и бесстрашно жал хоткеи прям с фокусом на редакторе, а потом через какое-то время заметил, что некоторые части строк в скрипте хаотично перемешались. Не наю, может причина не в блокировке, но покрайняку нажатия в редактора шли и возможно некоторые он не обработал или сделал это не верно. В общем, пришлось потерять несколько минут на устранение мешанины (это ещё скриптик небольшой был и был предыдущий сейв, слегка отличающийся от кода в эдиторе). Было такое кстать несколько раз, три раза в 2-х скрипта, кажися.

ПСы. Ой чуть не забув, аррСорт тож не робит у мя.

40
Версия кликера 4,13,007 -- скрипт никак не хочет единожды выполнять условие на строке 85 и многожды штампует в свой чат строку "First!", пытаясь сравнить число с числом.

Code: (clickermann) [Select]
// 31-Dec-2017 nd: arrDedup
#name "CMS-files' Varz"
logclear
logshow(1,1,1)
//#logfile "_MyVarz.txt"

$pathx="E:\port\PortableApps\~~clickermann_last\Clickermann4.13b3\projects\"
//if(strcut2($pathx,strlen($pathx-1),strlen($pathx))="\")
//   print("1")
//else
//   $pathx=strconcat($pathx,"\")
//end_if
//print($pathx)
//getfilelist($cmsz,"*.cms")
getfilelist($cmsz,strconcat($pathx,"*.cms"))

//for($i=0,$i<arrsize($cmsz))
//   print($cmsz[$i])
//end_cyc
print("Totally: ",arrsize($cmsz)," scripts")

//for($j=0,$j<arrsize($cmsz))
for($j=0,$j<arrsize($cmsz))
   print("Processing file # ",$j," of ",1+arrsize($cmsz),", ",$cmsz[$j])
   waitms(700)
   TFReadArr(strconcat($pathx,$cmsz[$j]),$linez)
   define($vars,0)
   for($k=0,$k<arrsize($linez))
      $dollar=strpos($linez[$k],"$")
      if($dollar=0)
      else
         //inc($vars)
         $symz=strconcat(",=<> -+*/()!:\.",char(34)) // $[]
         for($l=0,$l<strlen($symz))
            $sym=strcut($symz,$l+1,1)
            //print($sym)
            $cutlim=strpos(strcut2($linez[$k],$dollar+1,strlen($linez[$k])),$sym)
            if($cutlim>0)
               //else
               arrpush($min,$cutlim)
               //print("    ",$cutlim)
            end_if
           
         end_cyc
         //arrsort($min)
         $minml=$min[0] ///////////////// Array sorting
         for($m=0,$m<arrsize($min))
            if($minml>$min[$m])
               $minml=$min[$m]
            end_if
         end_cyc
         //$linez[$k]=strcut2($linez[$k],$dollar,$min[0])
         //print("Min= ",$min[0])
         //print("      Min= ",$minml)
         //print($dollar," ",$min[0])
         //$myvar=strcut($linez[$k],$dollar,$min[0]-1)
         $myvar=strcut($linez[$k],$dollar+1,$minml-1)
         undefine($min)
         //print("  ",strcut($linez[$k],$dollar,strlen($linez[$k])))
         if(strlen($myvar)>1)
            //print("  ",$myvar) ///////////////////////////////// Varz output
            inc($vars)
            arrpush($curvarz,$myvar)
         end_if
         
      end_if
     
     
   end_cyc
   undefine($linez)
   
   /////// Array deduplication
   
   print("CurrVarz= ",arrsize($curvarz))
   for($n=0,$n<arrsize($curvarz))
     
      $curr=arrpop($curvarz)
      //$currunix=0
     
      //////////////////////////////////////////////////////////////// err
      //      if(arrsize($uniqz)=0)
      //         $uniqz[0]=$curr
      //         print("First!")
      //      end_if
      if(arrsize($uniqz)>0)
         print("Not else!")
      else
         $uniqz[0]=$curr
         print("First!")
      end_if
      for($o=0,$o<arrsize($uniqz))
         if($curr = $uniqz[$o])
            //print("1")
         else
            arrpush($uniqz,$curr)
            //inc($currunix)
         end_if
      end_cyc
      //print($currunix)
      print("UniqVarz= ",arrsize($uniqz))
      undefine($uniqz)
     
     
      //$curvarz[$n]
     
   end_cyc
   //print("Unix= ",arrsize($uniqz))
   
   
end_cyc
print($vars," varz from ",arrsize($cmsz)," scripts")

halt

41
Ну вот и наступил 2 о 1 8   = Д

42
С чего ты взял что функция работает с массивами?
Не думаю, что getvar может работать с массивами. Скорее всего индексы он разбирать не умеет.

Печалька, а так бы с виртуальными массивами мона было б натворить чудес!  ::)

43
Немного допилил часики Монтана, но курантов из них пока не вышло)  Вчера она успешно пиликала и показывала день недели и дату, а сегодня пшик и на всех языках показывает одну и ту же абразакодабренную строку (兀dಘe兀d兀d?z).

ЧТо случилось с мои скриптегом?  :'(
[spoiler=Montana.cms]
Даже форум отказывается принимать эту заколдованную строчку   :D  : https://prnt.sc/huiled


Code: (clickermann) [Select]
// 29.12.2017 nd: DelPoMod,concatArrayFunc,matrixTranspond,varPrn-EdCtx,ifPixIn,
#name "Montana" //radio+switch@hlp,
logshow(1)
logclear
$dt=strconcat($_date_d,".",$_date_m,".",$_date_y)
$dte=strconcat($_date_d,".",$_date_m,".",$_date_y)
$dte=$_date_str
//$dte=inputbox("Plz input a date below! (dd.mm.yyyy) ",$dt,60)
$lang=2
$lang=radiobox("Now plz input ur prefered language for date output result: ","1 English","2 Russian","3 French","4 German","5 Spanish","6 Turkish")
//if($dte=0)
//   $dte=strconcat($_date_d,".",$_date_m,".",$_date_y)
//end_if
$divdr=strcut(strfilter($dte,"0123456789",0),1,1)
//$divdr2=strcut(strfilter($_date_str,"0123456789",0),2,1)
strseparate($dte,$divdr,$fecha)
//$mes="jan,feb,mar,avr,may,nio,lio,aug,sep,oct,nov,dec"
$mods="1111111111111111111111111111123467124567234571235671345645672345712356713456123467124561234671245672345712356713712456723457123567134561234623467124567234571235671345615672345712356713456123467124712456723457123567134561234634571235671345612346712456726713456123467124567234571235123567134561234671245672345745612346712456723457123567136713456123467124567234571235"
//strcut(strfilter(strconcat("$",$meses[$mth]),",",0),$wk,1)
//strseparate($mes, ",", $meses)
//strseparate($jan, ",", $m1)
if(strlen($fecha[2])=2)
   $yr=$fecha[2]+2000
else
   if(strlen($fecha[2])=4)
      if(($fecha[2]>1900)&($fecha[2]<2097))
         $yr=$fecha[2]
      else
         print("Year is out of bounds! (1901-2096) ")
         halt
      end_if
   else
      print("Year must have 2 or 4 digits!")
      halt
   end_if
end_if
$monthy=$fecha[1]
$dy=$fecha[0]
$shift=($yr-1900)-(28*(int(($yr-1900)/28)))
$intercalated=0
$leaptx=""
if($shift/4=int($shift/4))
   $intercalated=1
   $leaptx="(Високосный год)"
end_if
$dycode=$dy+(strcut($mods,28*($monthy-0)+($yr-1900)-(28*(int(($yr-1900)/28))),1))
$wkdy=$dycode-int($dycode/7)*7
//print(" day=",$wkdy)
switch($lang)
case(1) // en
   $leaptx="Leap-year"
   $dys="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
   $mzs="January,February,March,April,May,June,July,August,September,October,November,December"
case(2) // ru
   $leaptx="Високосный год"
   $dys="Понедельник,Вторник,Среда,Четверг,Пятница,Суббота,Воскресенье"
   $mzs="января,февраля,марта,апреля,мая,июня,июля,августа,сентября,октября,ноября,декабря"
case(3) // fr
   $leaptx="Annee bissextile"
   $dys="Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche"
   $mzs="janvier,fevrier,mars,avril,mai,juin,juillet,aout,septembre,octobre,novembre,decembre"
case(4) // de
   $leaptx="Schaltjahr"
   $dys="Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag"
   $mzs="Januar,Februar,Marz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"
case(5) // es
   $leaptx="Ano bisiesto"
   $dys="Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo"
   $mzs="enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre"
case(6) // tr
   $leaptx="Sicrama"
   $dys="Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi,Pazar"
   $mzs="Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik"
default
   $leaptx="Leap-year"
   $dys="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
   $mzs="January,February,March,April,May,June,July,August,September,October,November,December"
end_switch
strseparate($dys,",",$dyrange)
strseparate($mzs,",",$mzrange)
if($intercalated=0)
   $leaptx=""
else
   $leaptx=strconcat("(",$leaptx,")")
end_if
switch($lang)
case(1) // en
   print(" ",$dyrange[$wkdy-1],", ",$mzrange[$monthy-1]," ",$dy,", ",$yr," ",$leaptx)
case(2) // ru
   print(" ",$dyrange[$wkdy-1],", ",$dy," ",$mzrange[$monthy-1]," ",$yr," года ",$leaptx)
case(3) // fr
   print(" ",$dyrange[$wkdy-1]," ",$dy," ",$mzrange[$monthy-1]," ",$yr," ",$leaptx)
case(4) // de
   print(" ",$dyrange[$wkdy-1],", ",$dy,". ",$mzrange[$monthy-1]," ",$yr," ",$leaptx)
case(5) // es
   print(" ",$dyrange[$wkdy-1],", ",$dy," de ",$mzrange[$monthy-1]," de ",$yr," ",$leaptx)
case(6) // tr
   print(" ",$dy," ",$mzrange[$monthy-1]," ",$yr," ",$dyrange[$wkdy-1]," ",$leaptx)
default
   print(" ",$dyrange[$wkdy-1],", ",$mzrange[$monthy-1]," ",$dy,", ",$yr," ",$leaptx)
end_switch

halt

Sunday, December 31, 2017
Sonntag, 31. Dezember 2017
31 Aral?k 2017 Pazar
Domingo, 31 de diciembre de 2017
Dimanche 31 decembre 2017

[/spoiler]

Надеюсь, мож, у вас буит работать и не глючить.

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

45
Если хочещь получить часть строки после =, то сначала найди позицию символа = с помощью strpos, потом сделай strcut начиная с позиции, найденной первой функцией strpos.

А ваще если не жалко, потрать полчаса на то чтоб внимательно почитать (и при необходимости перечитать, освежить в памяти) раздел справки с функциями для обработки строк/файлов, а ещё лучше -- пару часов на неторопливое, вдумчивое чтение всей справки по кликеру. Функции должны от зубов отскакивать, а если не знаешь какие они есть и что делает каждая, то что ты можешь с ними сделать?

Pages: 1 2 [3] 4 5 ... 18