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 - 4.У.В.@.К

Pages: [1] 2 3 ... 8
1
В Справке: Язык сценариев => Работа с числами => SETVAR и GETVAR
В Clickermann'e: Редактор => Команды => Строки => SETVAR и GETVAR
Code: (clickermann) [Select]
$var1="текст1..."
$var2="текст2..."
$var3="текст3..."

LOGWRITE (GETVAR(STRCONCAT("$var", RND(1,3))))

HALT

2
Общие вопросы / Re: Помогите разобраться
« on: January 21, 2023, 11:06:04 PM »
Искать поплавок на воде визуально - дохлый номер. Не знаю может у тебя получится. У меня не получилось.
Я делал как написано здесь - http://crapware.aidf.org/forum/index.php?topic=3101.msg20696#msg20696 - по всплеску.
Вот пара советов из личного опыта. Если кому надо конечно.
Главное настроить графику самой игры. Там есть детализация воды и прочее. Всю графику естественно на минимум. Тогда определяет поплавок в момент поклевки 100%. Перед ловлей правда приходится немного покрутиться на месте, вода всегда разная. Но зато можно ловить даже у водопадов где вода рябит сильно. Помогает еще приближение и удаление изображения колесом мыши. Это уже как тонкая настройка. Все действия без задержек, по всплеску. Рандомная задержка только перед забросом удочки. Определение начала и конца каста ловли по наличию на экране полосы каста.
На звук ловить не пробовал. Баны тоже не ловил. :) Сейчас забросил всё это.

3
Использование / Re: помогите переделать
« on: December 07, 2022, 09:00:32 PM »
Здраствуйте,
 все действия происходит через песочницу в java игре типо RuneScape , но client приватный. Не получилось сдлеать с IF_PICTURE_IN , почему-то не находит заданную картинку,так сделал через IF_PIXEL_IN. Можно ли как нибудь упростить мой скрипт ? Всего 5 комнат, пространство всё времё меняется, появляются разные NPC и после их убийство нужно нажать на портал.

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(1033,537 ,1535,868, 9013325)
   MOVE($_return1, $_return2)
   WAITMS(RND(40,100))
   LCLICK($_return1, $_return2)
   WAIT(4)
ELSE
   GETSCREEN
   IF_PIXEL_IN(1033,537 ,1535,868, 11257799,11192007)
      MOVE($_return1, $_return2)
      WAITMS(RND(40,100))
      LCLICK($_return1, $_return2)
      WAIT(5)
   ELSE
      IF_PIXEL_IN(1033,537 ,1535,868, 8167863,2900945)
         MOVE($_return1, $_return2)
         WAITMS(RND(40,100))
         LCLICK($_return1, $_return2)
         WAIT(4)
      ELSE
         GETSCREEN
         IF_PIXEL_IN(1033,537 ,1535,868, 5924722)
            MOVE($_return1, $_return2)
            WAITMS(RND(40,100))
            LCLICK($_return1, $_return2)
            WAIT(4)
         ELSE
            IF_PIXEL_IN(1033,537 ,1535,868, 3585907,3386994)
               MOVE($_return1, $_return2)
               WAITMS(RND(40,100))
               LCLICK($_return1, $_return2)
               WAIT(5)
            ELSE
               GOTO(35)
               GETSCREEN
               IF_PIXEL_IN(1033,537 ,1535,868, 5403726)
                  MOVE($_return1, $_return2)
                  WAITMS(RND(40,100))
                  LCLICK($_return1, $_return2)
                  WAIT(5)
               ELSE
                  IF_PIXEL_IN(1033,537 ,1535,868, 4789304,2409075)
                     MOVE($_return1, $_return2)
                     WAITMS(RND(40,100))
                     LCLICK($_return1, $_return2)
                     WAIT(4)
                  ELSE
                     GOTO(49)
                     GETSCREEN
                     IF_PIXEL_IN(1033,537 ,1535,868, 3885627)
                        MOVE($_return1, $_return2)
                        WAITMS(RND(40,100))
                        LCLICK($_return1, $_return2)
                        WAIT(5)
                     ELSE
                        IF_PIXEL_IN(1033,537 ,1535,868, 10788971)
                           MOVE($_return1, $_return2)
                           WAITMS(RND(40,100))
                           LCLICK($_return1, $_return2)
                           WAIT(RND(4,5))
                        ELSE
                           GOTO(63)
                           GETSCREEN
                           IF_PIXEL_IN(1033,537 ,1535,868, 4404544)
                              MOVE($_return1, $_return2)
                              WAITMS(RND(40,100))
                              LCLICK($_return1, $_return2)
                              WAIT(5)
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF










Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(1033,537 ,1535,868, 3585907, 3386994, 3885627, 4404544, 4789304, 2409075, 5403726, 5924722, 8167863, 2900945, 9013325, 10788971, 11257799, 11192007)
   MOVE($_return1, $_return2)
   WAITMS(RND(40,100))
   LCLICK($_return1, $_return2)
   WAIT(RND(4,5))
END_IF
WAITMS(50)

4
Общие вопросы / Re: относительно ARRSORT
« on: September 27, 2022, 07:14:14 PM »
Привет!
Нули нужно дописать к сортируемым цифрам слева, до нужной разрядности, тогда всё нормально сортируется. Обсуждалось уже подобное. Так будет работать быстрее. Костыль конечно, но более изящный, чем самописный цикл. :)

Code: (clickermann) [Select]
LOGCLEAR

// генерация массива
for($a=0, $a<25)
   $var[$a] = STRCONCAT("00", rnd(0,100))
   $var[$a] = STRCUT2($var[$a], STRLEN($var[$a])-2, STRLEN($var[$a]))
   print($var[$a])
end_cyc

// сортировка
arrsort($var)
print("sort:")

// вывод результата
for($a=0, $a<25)
   print($var[$a]*1) // или print(INT($var[$a]))
end_cyc

halt

5
Привет!
I
Code: (clickermann) [Select]
IF(ISKEYDOWN(97) = 1) // клавиша NumPad 1
   $s = $s ^ 1 // переключатель (0 или 1)
   SETTHREAD (name, $s) // 0 - поставит поток на паузу; 1 - возобновит работу потока с места его остановки
   WHILE(ISKEYDOWN(97) = 1)
      WAITMS(50)
   END_CYC
END_IF

THREAD(name, 0) // 0 - на паузе, 1 - работает, 2 - остановлен (состояние потока при запуске скрипта)
   LOGWRITE ("Маша")
   WAIT(1)
   LOGWRITE ("мыла")
   WAIT(1)
   LOGWRITE ("раму",CHAR(13),CHAR(10))
   WAIT(1)
END_THREAD

WAITMS(50)

Если цикл WHILE переместить в начало блока IF (перед SETTHREAD), то переключение состояния потока будет происходить после отпускания клавиши NumPad 1, а не при её нажатии.

II
Code: (clickermann) [Select]
MOVER(10,10)
LCLICK($_xmouse,$_ymouse)

Смотри Справку по команде MOVER, там есть нюансы.

6
писать нужно (ISKEYDOWN(1)=1)

Вот тесты на скорость выполнения условий IF, записанные по-разному. Вариант написания пусть каждый выбирает для себя сам...

Code: (clickermann) [Select]
WAITMS(500)

$count = 1000 // количество повторений тестов

// 1 вариант //--------------------------------
$t = $_ms
FOR($n = 0, $n < $count)
   IF(1 = 1) // Зачем сравнивать истину с истиной? Вот ЭТО и есть извращение. :)
      //
   END_IF
END_CYC
$a = $_ms - $t
LOGWRITE ("1 вариант: ", $a, "ms")

// 2 вариант //--------------------------------
$t = $_ms
FOR($n = 0, $n < $count)
   IF(1) // принимаем истину без сравнений
      //
   END_IF
END_CYC
$b = $_ms - $t
LOGWRITE ("2 вариант: ", $b, "ms")

// Итог //--------------------------------
$ms = $a - $b
$percent = ROUND($ms*100/$a, -2)
LOGWRITE ("Разница в скорости: ", $ms, "ms", " (", $percent, "%", ")")
LOGWRITE (------------)
HALT

Для вариантов с IF(ISKEYDOWN(1)=1) и IF(ISKEYDOWN(1)) разница в скорости не так ощутима, но она там тоже есть.

2. Зажата левая кнопка мыши - ничего не происходит (может быть зажата от 50 мс до минуты)
Этот пункт задания тоже не реализован, по чётко заданному автором темы промежутку времени от 50 мс до минуты, видимо по тому что сам автор не указал, что должно происходить при нарушении описанного им условия. :-\

Действительно, этот пункт "задания", задан не чётко. И я тут не выкатываю готовое решение. Немного подсказал, показал свой вариант, и всё. Претензии не принимаю.  ;D

И вообще, насчет заданий - сказано же:  ;D
Биржевую цену на нужный, Вам скрипт укажите и дополнительные требования  к работе  8)

У кого есть желание, может написать скрипт лучше моего и не столь извращенный.  :)

7
Code: (clickermann) [Select]
WHILE(ISKEYDOWN(1))
   DEFINE($var,1)
   WAITMS(30)
END_CYC

IF($var)
   UNDEFINE($var)
   KEYDOWN(#ALT)
   WAITMS(5)
   KEYPRESS(#TAB)
   KEYUP(#ALT)
   WAITMS(100)
   KEYPRESS(#T)
END_IF

WAITMS(30)

8
Да, примерно так и будет, только не плохо было бы еще добавить механизм активации части скрипта, которая отвечает за нажатия ПКМ. То есть:
1. запускаем скрипт, но он ничего не делает, а только ждет нажатия определенной клавиши;
2. когда эта клавиша будет нажата, то скрипт перейдет в режим нажатия/отпускания ПКМ;
3. при повторном нажатии этой клавиши, происходит отжатие ПКМ и переход в режим ожидания.

9
Code: (clickermann) [Select]
// RCLICK(-1,-1) // Clickermann v4.12 и более ранние версии

RCLICK($_xmouse,$_ymouse) // Clickermann v4.13 и более поздние версии

WAITMS(RND(1500, 2000)) // рандомная задержка от 1,5 до 2 сек

10
Общие вопросы / Re: Вопрос по "include"
« on: March 04, 2021, 10:50:39 AM »
Архив с примером как это работает - https://yadi.sk/d/vSYDhKFlMaZKlg

11
Общие вопросы / Re: Костылим wndfindarr
« on: March 04, 2021, 10:14:51 AM »
а  шо тут не  так ? чтото с  кодом  ?

Код как код, только слишком объемный, медленный, и алгоритм хромает.
Массив надо выкинуть, вместе с сортировкой и циклом "фильтрации и вывода". Лишних операций, logwrite и переменных, в коде тоже быть не должно. Это в идеале конечно, в "боевом" варианте скрипта. Для "коленочного" варианта и так сойдет.

Перебор массива со сравнением его элементов - очень тяжелая вещь. Строковые функции работают намного быстрее. Например в STRPOS имеется свой собственный цикл для перебора и сравнения, который работает на более низком уровне и по определению более быстрый, чем конструкции FOR + IF.

Вариант со строкой почти в 2 раза быстрее:
Code: (clickermann) [Select]
$str = ""
FOR($i1 = 0, $i1 < 135) // начинаем с цикла ширины (по ходу скрипта будет проверка hwnd идти сначала сверху вниз, дойдя до нижней границы экрана идет сдвиг вправо и начинаем с верхней границы
   FOR($i2 = 0, $i2 < 120) // цикл высоты, итая постоянно обнуляется чтобы не ограничивать наполнение массива только первым рядом hwnd
      $pix = HGET($i2*15, $i1*7) // получаем hwnd в заданной точке
      IF(STRPOS($str, $pix) = 0)
         $str = STRCONCAT($pix, ";", $str)
         LOGWRITE ($pix, " - ", HGETTEXT($pix)) // выводим сам hwnd и имя окна, если доступно.
      END_IF
   END_CYC
END_CYC
HALT

12
Общие вопросы / Re: Навигация
« on: February 13, 2021, 03:08:05 PM »
Но хотелось бы увидеть, как бы это по другому можно написать, есть меню которое появляется каждый раз по другим координатам. из за этого нужно его все время определять. В меню как видно из скрипта есть кнопочки, которые нужно нажимать, по необходимости, и вот мне, интересно как бы вы это сделали?)

Если этот вопрос ко мне, то я бы так и сделал, как написал выше. Во первых, нужно найти опорную точку на этом меню. Которую можно быстро найти и от координат которой будут вычисляться координаты кнопок. Только непонятно в какой момент меню меняет свое местоположение. И надо ли его искать каждый раз перед очередным нажатием кнопок. Может быть достаточно будет найти его один раз, за всё время работы скрипта, и хранить его координаты в переменных? А в остальном всё тоже самое - запускаем подпрограмму типа Открыть("параметр"), которая пересчитает координаты для каждой кнопки и сделает клик, если нужно.
Ну а насчет того, чтобы написать по другому, то это можно. Можно например объединить две подпрограммы в одну. Можно отслеживать местоположение меню в отдельном потоке, через определенные интервалы времени. Можно использовать для хранения координат переменные, массив, строку, или файл. Если это весь скрипт, а не отдельный его кусок, то подпрограммы вообще можно выкинуть. И так далее...
И еще, я бы:
- кнопки вообще не искал, а назначил бы для них горячие клавиши;
- постарался зафиксировать меню;
- отказался от COLORMODE...
Если конечно всё это возможно. В общем, сначала максимально подготовил бы программу, с которой должен работать скрипт.
Короче, по месту смотреть надо, т.к. сейчас, лично у меня, вопросов больше, чем ответов. ))

13
Общие вопросы / Re: Навигация
« on: February 12, 2021, 08:49:01 PM »
Привет!
Вот, так примерно можно сделать удобный вызов нужного действия.
Code: (clickermann) [Select]
SUB(Сумка)
   $Sumka = 0
   WHILE($Sumka = 0)
      GETSCREEN(130,10, 1700,600)
      COLORMODE(7, 130,10, 1700,600)
      IF_PICTURE_IN (130,10, 1700,600, "..\Нарезка\Сумка.bmp")
         $Sumka = 1
         $x = $_return1
         $y = $_return2
         LOGWRITE ("коры ", $x, " x ", $y)
      ELSE
         KEYPRESS(#a) // Открыть сумку
         WAITMS(300)
      END_IF
   END_CYC
   WAITMS(100)
END_SUB


SUB(Открыть, $n)
   
   Сумка()
   
   SWITCH($n)
      CASE("Сейф")
         $x = $x - 90
         $y = $y + 30
      CASE("Востанов")
         $x = $x - 10
         $y = $y + 30
      CASE("Разбор")
         $x = $x + 15
         $y = $y + 30
      CASE("Удалить")
         $x = $x + 35
         $y = $y + 30
      CASE("Экипиров")
         $x = $x + 210
         $y = $y + 170
      CASE("Зелья") =
         $x = $x + 210
         $y = $y + 205
      CASE("Прочее")
         $x = $x + 210
         $y = $y + 270
      CASE("Удал/Раз")
         $x = $x - 210
         $y = $y + 460
   END_SWITCH
   
   LCLICK($x, $y) // Открыть то, что выбрано в параметре $n
   LOGWRITE ($x, " - ", $y) // проверка
   
END_SUB

Открыть ("Сейф")

HALT

А можно всё это вынести в #include, тогда в основном скрипте совсем красиво будет.)
Code: (clickermann) [Select]
#include "sumka.cms" // где то выше вызова подпрограммы "Открыть"
// ...
Открыть ("Сейф") // вызов подпрограммы "Открыть" в нужном месте и с нужным параметром

14
Привет!
Во тут есть два готовых решения, со строкой и с массивом:
http://crapware.aidf.org/forum/index.php?topic=1965.msg11825

Я не математик, по этому вот вариант, который мне показался проще.))
И на большом диапазоне цифр, он работает намного быстрее.
Code: (clickermann) [Select]
LOGCLEAR

FOR($n = 0, $n <= 50) // собираем входной массив из цифр - от 0 до 50
   ARRPUSH($arr, $n)
END_CYC

FOR($i = ARRSIZE($arr) - 1, $i > -1, -1)
   $n = RND(0,$i)
   LOGWRITE ($arr[$n]) // рандомная цифра в лог
   $arr[$n] = $arr[$i]
   $del = ARRPOP($arr)
END_CYC

HALT

15
Общие вопросы / Re: Зацикливание и переход
« on: February 05, 2021, 07:54:52 AM »
Code: (clickermann) [Select]
// 1. Этот кусок должен выполнится 10 раз
FOR($n = 0, $n < 10) // цикл на 10 повторов
   // здесь код, который должен выполниться 10 раз
END_CYC


// 2. Затем должен выполнится этот кусок 1 раз
// здесь код, который должен выполниться 1 раз (ФАРМ)


// 3. Затем должно начать с начала и так зациклить.
// если в конце скрипта нет директивы HALT, то скрипт начнется с начала и так будет повторяться бесконечно
WAITMS(1000) // пауза перед повором скрипта

Pages: [1] 2 3 ... 8