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 - Atas

Pages: 1 2 3 [4] 5 6 ... 10
46
Прочее / Re: Предложение Johnny
« on: November 10, 2014, 01:04:30 PM »
За скорость отвечает твой алгоритм )) Если ты на каждый анализ делаешь скрин экрана, то конечно на это уходит время. А если сделать один скрин на весь скрипт (утрированно говоря), но так выстроить алгоритм, чтобы по этому одному скрину практически все проанализировалось, то будет все норм )) Мне, например, очень сложно дается язык программы, но алгоритмы я строю не плохие (я так думаю). Возможно у тебя все наоборот ))
Я конечно не берусь утверждать, что мои скрипты идеальные, это было бы ложью, но кое какие моменты я усвоил, благодаря этому форуму и всем вам. Спасибо. :)
Тут я тоже упоминал про один GETSCREEN, так что, надеюсь, с этим всё в порядке.) Там кстати старая версия скрипта, теперь он намного больше и функциональней, но скорость не пострадала. А самая тяжелая операция в сценарии это конструкция вида - IF(PXL(x,y) = z). И никаких цветокоррекций, игнорирований фона и %совпадений (просто не требуются.) Теперь еще и многопоточность прикручиваю, это просто улёт. :) Теперь у меня охотник и его питомец управляются из разных потоков, это как пример. На каждый ответственный участок сценария буду делать свой поток и еще поток управляющий другими потоками. Короче, неограниченный полет фантазии.
:D Спасибо Johnny за этот праздник! :)

47
Учебные статьи / Re: Потоки
« on: November 01, 2014, 04:28:49 PM »
Многопоточность это здорово, но как мне перевести строку из INIREAD в число? ;)

Цитата из справки Clickermann v4.11 (build 000)

INT

Синтаксис
INT (num) - числовая функция; возвращает целую часть числа без округления

Параметры 
num - число

Пример 

$var = int(25.73)
print($var)   // 25

Примечания 
Так же может переводить некоторые строки в числа . Например, строку, содержащую шестнадцатиричное представление числа.
Если вам нужно округлить число до заданной точности, см. функцию ROUND


48
Еще пару слов об оптимизации кода...
Дело в том, что выполняя этот скрипт, Clickermann делает много лишней работы.
Строки с 1 по 47 достаточно было бы прочитать один раз, а строки начиная с 50-й уже крутить в цикле.
Так что, надо думать как это реализовать, но без использования GOTO, иначе папки тапками закидают. :)

49
[spoiler=FOR (цикл с параметром) - Цитата из справки Clickermann v4.11 (build 000)]

Синтаксис

FOR ($var, expression, [step]) ... END_CYC - организует цикл с параметром

Параметры
$var - переменная, которая будет наращиваться на значение step после каждой итерации цикла (параметр цикла)
expression - логическое выражение, при истинности которого выполняется тело цикла (см. IF)
step - значение шага, на которое каждую итерацию увеличивается переменная; необязательный параметр

Описание
Существует возможность инициализировать переменную в заголовке цикла через знак "=". Например

for ($i = 5, $i < 10)
...
Если переменная до выполнения цикла уже была инициализирована (в том числе в этом же цикле на прошлом прогоне скрипта), то цикл начнется с использованием текущего значения переменной. Если это "новая" переменная, она будет инициализирована нулем.
Перед каждым выполнением итерации (тела цикла) проверяется условие expression и если оно истинно, то тело цикла выполняется, в противном случае цикл завершается. После каждой итерации параметр цикла автоматически увеличивается на step. Если значение опущено (необязательный параметр), что считается что step = 1.

Пример

// простой пример с минимумом данных
for($var, $var < 5)
 logwrite("var: ", $var)
end_cyc

// с инициализацией параметра
for($var=5, $var < 10)
 logwrite("var: ", $var)
end_cyc

// с инициализацией параметра и заданным шагом
for($var=10, $var < 100, 10)
 logwrite("var: ", $var)
end_cyc

// пример с вложенным циклом
FOR($x, $x < 3)
 FOR($y, $y < 3)
  print($x, ":", $y)
 END_CYC
END_CYC

// пример с комплексным условием
$y=0

FOR($x, ($y < 10)&($x < 10) )
 print("x:",$x," y:",$y)
 inc($y, 5)
END_CYC
[/spoiler]
Вот эти два условия должны выполняться, чтобы всё работало.
Code: (clickermann) [Select]
FOR($a,$a<$cnt_runs) //Копаем $cnt_runs раз
   //
END_CYC

FOR($b,$b<$cnt_cycles) //Считаем циклы для полной загрузки грузовика
   //
END_CYC

// Переменные $a и $b, после использования их в циклах,
// изменяются до такой степени, что условие выполнения цикла становится
// невозможным и цикл завершается.
// Для того, чтобы запустить цикл еще раз,
// необходимо ичменить значения этих переменных, например удалить их из памяти.

UNDEFINE($a)
UNDEFINE($b)

50
В четвертой строке - $$var исправить нужно.
Во входящей строке 4 пробела, соответственно STRREPLACE выполняем 4 раза. Видимо так задумано.
Code: (clickermann) [Select]
$var = " 28.10.20   14 "
print("$var=", $var)

$var = STRREPLACE($var, " ", "z")  // хотел удалить все пробелы, для наглядности поставил "z"
print("$var=", $var)

$var = STRREPLACE($var, " ", "z")  // хотел удалить все пробелы, для наглядности поставил "z"
print("$var=", $var)

$var = STRREPLACE($var, " ", "z")  // хотел удалить все пробелы, для наглядности поставил "z"
print("$var=", $var)

$var = STRREPLACE($var, " ", "z")  // хотел удалить все пробелы, для наглядности поставил "z"
print("$var=", $var)

HALT
Результат:
11:31:13 $var= 28.10.20   14
11:31:13 $var=z28.10.20   14
11:31:13 $var=z28.10.20z  14
11:31:13 $var=z28.10.20zz 14
11:31:13 $var=z28.10.20zzz14

[spoiler=STRFILTER работает иначе... (цитата из справки Clickermann v4.11 (build 000))]

Синтаксис

STRFILTER ("str", "set", mode) - строковая функция; возвращает отфильтрованную строку

Параметры
str - входная строка
set - набор символов маски
mode - режим фильтрации

Если режим будет задан как 0, то из входной строки будут вырезаны все символы, указанные в маске
Если режим будет задан как 1, то из входной строки будут вырезаны все символы, кроме указанных в маске

Пример

print( strfilter("hello2000", "20", 0 ) ) // результат "hello"

print( strfilter("hello2000", "20", 1 ) ) // результат "2000"

[/spoiler]

51
Ясно, что до интеллекта поисковиков и распознавалок текста тут далековато.

Вот обидно как то стало. Кому, по вашему, "до интеллекта поисковиков и распознавалок текста" дальше? Языку ассе́мблера или C++, а может быть Delphi? А на чём вообще написаны эти поисковики и распознавалки, знаете?
Не скрипке далековато до Бетховена, а тому кто на ней играет.  Нам дали инструмент, а уж какой интеллект мы сможем из себя выдавить, зависит от нас самих.
Сорри, что не по теме.

52
Тут мне видится два этапа в распознавании изображения.
1) Предварительный (быстрый - с минимумом пикселей). Находим картинку 1 в координатах (0,0, $_xmax,$_ymax) и вычисляем точные координаты для окончательного поиска .
2) Окончательный. Находим картинку 2.
[spoiler=Картинки для поиска выделены на скриншоте.][/spoiler]
Картинку 2, наверно, можно выбрать более оптимальную. В конкретно этом примере, колормод и % совпадения не применяются.
Выигрыш в скорости предполагается получить за счет первого этапа распознавания (поиска маленького, уникального изображения, на большой площади) и за счет того, что вторая (большая) картинка, будет распознаваться в точно указанных координатах (т.е. всего один раз за цикл распознавания).

P.S. Провёл сравнительные испытания скрипта Андрея и своего скрипта. В результате мой сценарий проиграл по времени поиска картинки примерно в 2 раза(!). :'( Это только на этом конкретном задании. Если же на экране было бы больше двоеточий (которые я использовал как уникальные картинки), то потери скорости были бы нереальные просто.
Делаю для себя вывод, что ускорить IF_PICTURE_IN используя комбинации из IF_PICTURE_IN не получится!  :(
Урок усвоен, спасибо, было интересно. :)


P.S.P.S В поисках истины я провёл еще несколько тестов с IF_PICTURE_IN. И оказалось, что что ускорить IF_PICTURE_IN используя комбинации из IF_PICTURE_IN всё таки можно. :) Ошибка моего первого теста была в том, что я взял для первого (предварительного) поиска слишком большую картинку (16 пикселей). Если же уменьшить её до 3 уникальных пикселей, то скорость поиска будет равной скорости скрипта Андрея, даже если уменьшить его картинку 01.bmp в 2 раза. Другими словами, поиск изображения в два прохода, при определенных условиях, очень даже оправдан, если удастся найти, для первого прохода, тот самый заветный уникальный пиксель, который поможет сузить зону поиска для второго окончательного поиска. :)

53
Что касается удаления картинок, то можно их удалить как обычные текстовые файлы (как вариант).
Онлайн справка Clickermann v4.10 => Работа со строками и текстовыми файлами => TFCLEAR

Например, чтобы удалить скриншот с именем "shot0000.bmp", который был создан скриптом в папке "screens" (которая находится в папке проекта), можно сделать в скрипте такую запись.
Code: (clickermann) [Select]
TFCLEAR("screens\shot0000.bmp", 1)
Наверняка можно вместо имени файла использовать переменную, пробуйте.

54
Предложения / Re: [Alpha/Beta Testing]
« on: October 03, 2014, 09:04:38 PM »
Открыл файл Справки > Основные конструкции > THREAD (потоки), читаю...
Code: (clickermann) [Select]
Поток представляет собой независимую цепочку действий, выполняющихся одновременно с основным телом скрипта (он же родительский поток) и другими потоками. ... ВСЁ! БАШНЮ СОРВАЛО!!! АААААААААА!!!! Урааа!!!
Это ПРАЗДНИК, со слезами на глазах! Вот СПАСИБО! :) Вот ЭТО ПОДАРОК! Да с ЭТИМ мы БОГИ!!!!

Спасибо Johnny! :)

P.S. Завтра тестить буду, сегодня голова несможет вместить такое. Так об этом мечтал, что теперь даже боюсь спугнуть эту радость!
Всё, я курить и в WoW, всех уделаю релизной v4.10 (build 003) напоследок! :) А уж завтра!... 8)

55
...
Между тем важные мелочи - вроде координат курсора и цвета пикселя под ним - очень хотелось бы считывать.
...

Есть же системные переменные. Значения системных переменных изменить нельзя, их можно только использовать.
Например, эти две системные переменные, всегда (автоматически), при использовании их в скрипте, будут содержать координаты текущего расположения курсора мыши.

$_xmouse - Переменная при каждом обращении принимает значение координаты мыши по оси Х
$_ymouse - Тоже, но для оси У

PXL(x,y) - числовая функция; возвращает код цвета для заданного пикселя

Пример:
Code: (clickermann) [Select]
$color = PXL($_xmouse, $_ymouse) // Присваиваем переменной $color цветовое значение пикселя, находящегося под курсором мыши
LOGWRITE ("Цвет пикселя под курсором мыши: ", $color) // Вывод результата в лог

56
Прочее / Re: Клан читеров
« on: September 22, 2014, 01:33:37 PM »
World of Warcraft® очень популярная онлайн игра, с миллионами игроков и множеством официальных мультиязычных игровых серверов по всему миру. Очень удобна для фарма игровой валюты с помощью бота. Там конечно придется расчищать себе "место под солнцем", придется отжать аукцион у себе подобных, но заработать там можно. Всё упирается в продажу голда игрокам, а продавать через интернет магазины не хочется. Они покупают у поставщиков голд за низкую цену, продают дорого. И самое главное, они покупают голд у поставщиков только в том случае, если сами получают заказ, т.е. впрок голдом не запасаются. Когда у них будет заказ неизвестно и купят они золото у того поставщика, которого проще выцепить, все остальные будут в пролете. Другими словами они не купят у поставщика всё золото, которое он может заработать, хотя заработать, можно реально много. Так что всё упирается в сбыт голда.
Кстати там всё можно делать одному и "клан читеров" там не нужен, хотя хороший напарник нужен в любом деле.

57
COLORMODE(7) тебе в помощь.
Отслеживается появление серого, проверяется исчезновением красного. Задержки и перепроверки по мере надобности.



58
Вот мой вариант и класический, как в программе (почти)

Здорово, спасибо.  :)
Такой файл можно даже включать в сборку Clickermann'а, может кому-то пригодиться (если например человек привык работать в Notepad++ и ему нужен какой то особый функционал или привычный интерфейс). А можно и разработчикам Notepad++ отправить, чтобы включили его в свой дистрибутив. И не только в Notepad++. Популярности Clickermann'а такое только на пользу будет. А там еще и Microsoft захочет купить права на размещение синтаксиса в своем Visio...  :) А почему нет? Я без подколов пишу. Многое начинается с незаметных мелочей и раскручивается в грандиозные проекты приносящие прибыль. Англоязычные страницы на сайте тоже бы были на пользу проекту.
Чето меня понесло :) , ударился в фантазии. Просто настроение хорошее. Но я всё это серьезно, проект продвигать надо.
 

59
Проверять нужно не как часто он появляется, а как часто он пропадает ))) Вот - может так тебе будет понятней  :):

Мне то понятно, теперь это надо объяснить Кликерману. Он оперирует точными данными, такие понятия как "появится" и "исчезнет" ему не знакомы. Для
него цвет "зелёный" и 3444824, две большие разницы.
Этот пиксель всегда там находится, он никуда не исчезает и не появляется, он только может менять свой цвет, даже при полном xp. На скриншоте этого
не увидеть.
И если подпрограмма "klich" срабатывает "с горем пополам..." значит надо проверить, как меняется цвет пикселя при полном и почти полном xp.
Проверить в  тот момент, когда клич делать не надо. Я просто подозреваю, что он спамится по кд, при первой возможности.

И я понял, почему клич срабатывал с горем пополам. Из-за того, что где-то он вызывался после того, как перс наносил удар какой-то (а после этого удара было выставлено недостаточное время ожидания для выполнения самого удара) и запрос в подпрограмму с кличем посылался, но он не срабатывал, так как перс в это время еще не закончил удар  :)

Возможно. Тогда нужна проверка, что клич выполнен и если не выполнен, то повторить.

60
...
Только почему-то klich() на 62-ой строчке срабатывает с горем пополам... Если кто-то укажет на ошибку, буду счастлив  :)

Подпрограмма "SUB(klich)" у тебя выполняет этот самый клич, только в том случае, если пиксель с кодом цвета 3444824 отсутствует. Это плохой ориентир. Он отсутствует, например, когда игра вообще выключена. Желательно использовать явные сигналы для выполнения действий, а не их отсутствие.  ;)

Дело в том, что если ХП перса не упадет до определенной точки, я, либо почти зря, либо просто - зря потрачу klich, а у него откат = 45 секунд... Долго ждать зря потраченный скил...  :)

Ок. Логика однако понятна, но не в ней дело, а в том как это преподносится Кликерману. Твой скрипт делает клич всегда, кроме тех случаев, когда пиксель в координатах 245,64 окрашен в цвет 3444824.
Не логично правда, если предположить, что такой цвет, в данных координатах появляется крайне редко? Вот и проверим, как часто появляется нужный нам пиксель.

Вот часть твоей подпрограммы "klich", только вместо клича BEEP. Надо запустить этот скрипт в игре и послушать (каждый писк = нажатие на кнопку "клич").
Проверять, естественно, надо в момент, когда уровень xp недостаточно низкий для клича.
Code: (clickermann) [Select]
WAITMS(300)

GETSCREEN
IF_PIXEL_IN(245,64, 245,64, 3444824) // ХП под клич
   WAITMS(50)
Else
   BEEP(1000,100)
   //   LOGWRITE ("klich")
   //   KEYPRESS(189) // Клич
   //   WAITMS(1200)
END_IF

Pages: 1 2 3 [4] 5 6 ... 10