Author Topic: Как сохранить координаты записанных действий в окне при его перемещении.  (Read 9894 times)

0 Members and 4 Guests are viewing this topic.

Oraven

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

Вот новый вариант.
Скрипт для записи
Code: (clickermann) [Select]
//=== Запись ==========================================

GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "ориентир.bmp") // объект
   $x = $_return1 // координата начальной точки
   $y = $_return2
   HINTPOPUP("Теперь кликай по миникарте для записи координат.", "Запись координат")   
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF

WHILE(1)
   IF(ISKEYDOWN(1)=1)
      $x2 = $_xmouse-$x
      $y2 = $_ymouse-$y
      TFWRITE("Move.txt", STRCONCAT($x2, ",", $y2))
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(5)
      END_CYC
   END_IF
   WAITMS(20)
END_CYC

твой код для игры
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "ориентир.bmp") // объект
   $x = $_return1
   $y = $_return2
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF

WHILE(1) // Бесконечный цикл, прокручиваем твою запись по кругу
   FOR($a=1,$a<TFCOUNT("Move.txt")+1)
      STRSEPARATE(TFREAD("Move.txt", $a), ",", $a_cor)
      LCLICK($x + $a_cor[0],$y + $a_cor[1]) // клик по миникарте
      UNDEFINE($a_cor)
      WAITMS(50)
     
      // далее идет цикл поиска пиксела в течении заданного времени
      $time = $_time_t + 10 // таймер на 10 секунд
      WHILE($time > $_time_t)
         GETSCREEN
         IF_PICTURE_IN IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255) // тут надо настроить область поиска и цвет
            $time = $_time_t + 2 // если найдено продлеваем поиск еще на 2е секунды
            LCLICK($_return1, $_return2)
            WAITMS(100)
         ELSE
            WAITMS(20)
         END_IF
      END_CYC
     
   END_CYC
END_CYC

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Я делал скрипт для этой игры, однако сам в нее не играю.
https://vk.com/topic-14410794_32095607?post=30773

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста с написанием.
« Reply #17 on: March 14, 2017, 12:28:05 PM »
А как все эти скрипты согласуются с начальным требованием сохранения задержек:
Допустим кликер радомно тыкнет рядом с кораблем ,в паре милиметрах и все, корабль тупо пролетел 1 секунду и стоит и ждет свови 10-15 секунд до нового цикла. Зачем это??? Это не эффективно.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Я делал скрипт для этой игры, однако сам в нее не играю.
https://vk.com/topic-14410794_32095607?post=30773

Эта ссылка дана ещё в Ответ #4, но ТС это не подходит или он проигнорировал.


Jon

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Нет друзья, тот скрипт мне не подходит. Я уже полно всего перечитал и пересмотрел и тот тоже раньше видел.
Мне не нужно чтобы кораблик искал и собирал эти коробки, нужно лишь чтобы корабль летал по определенному маршруту. Коробки собирает PET.
Суть вот в чем. Кораблик запрыгивает на ПВП карту и летит там по определенному маршруту, именно в те места, где респится наибольшее количество этих бонусных коробок. Затем, пролетев маршрут , он подлетает к порту и выпрыгивает с ПВП. После этого он проверяет кучу всего, не убили ли кораблик, не потеряно ли соединение с игрой, не уничтожили ли PETа, Проверяет где(на какой карте) он находится и летит на нужную карту, и т.д. После этого скрипт повторяется. Точнее, действия происходят наоборот: Сначала идут все проверки, а после этого он запрыгивает на ПВП карту, но сути это не меняет.
Все остальные действия у меня уже привязаны к картинкам, либо просто ориентируются по пикселу, а вот с движением мыши - проблемы. Точнее проблема тогда возникает. когда окно с миникартой перемещается. Они(окна в игре, аналогичные миникарте) бывают смещаются сами по себе, при сворачивании браузера, или при перетаскивании с одного монитора на другой и обратно.
Для чего все это мне? Почему так сложно? Для того, чтобы просто включить игру, и включить бота, и все, не париться , где там кораблик, что с ним. Кликер сам все проверит и приведет кораблик в нужное место.

P.S. Могу показать весь скрипт, ну так, чисто Вам поржать))
« Last Edit: March 14, 2017, 01:07:59 PM by Jon »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Можно конечно и время между кликами записывать.

Вот такой вариант. Теперь в "Move.txt" будут 3 числа, последнее отвечает за задержку перед кликом.
Code: (clickermann) [Select]
//=== Запись ==========================================

GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "ориентир.bmp") // объект
   $x = $_return1 // координата начальной точки
   $y = $_return2
   HINTPOPUP("Теперь кликай по миникарте для записи координат.", "Запись координат")
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF

$m = $_ms
WHILE(1)
   IF(ISKEYDOWN(1)=1)
      $x2 = $_xmouse-$x
      $y2 = $_ymouse-$y
      TFWRITE("Move.txt", STRCONCAT($x2, ",", $y2, ",", $_ms-$m))
      $m = $_ms
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(5)
      END_CYC
   END_IF
   WAITMS(20)
END_CYC

Code: (clickermann) [Select]
//=== Воспроизведение ==========================================

// тут код с твоими проверками

GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "ориентир.bmp") // объект
   $x = $_return1
   $y = $_return2
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF

FOR($a=1,$a<TFCOUNT("Move.txt")+1)
   STRSEPARATE(TFREAD("Move.txt", $a), ",", $a_cor)
   WAITMS($a_cor[2])
   LCLICK($x + $a_cor[0],$y + $a_cor[1]) // клик по миникарте
   UNDEFINE($a_cor)
END_CYC

Jon

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Попробовал два новых скрипта... Истина где-то рядом :D

Почему мне хочется именно move с зажатой ЛКМ, дело в том, что при частом клике по окну игры,или по окну миникарты, у меня почему-то начинает она подтормаживать, не знаю точно с чем это связано, то ли слишком часто идут команды на сервер, то ли сам  комп от чего-то тормозит, не знаю точно...
Вторая причина: Бот "матерый", кораблик летает невидимый(так как ПВП) и чтобы, хотя бы криворуким, врагам было сложней его поймать, движения корабля не прямолинейные, а с "выкрутасами" (невидимый кораблик можно поймать лишь в основном окне игры, наведя курсор на предполагаемое место расположение кораблика, в этот момент указатель курсора меняется со стрелочки на руку. ЛКМ в этот момент и все, кораблик в локе.) Так вот, чтобы такого не было, приходится "юлить задом"
По этому частые клики по миникарте, чтобы кораблик резко поменял движение, приводят к подтормаживанию игры. Для таких движений больше подходит просто зажать ЛКМ и водить по миникарте туда-сюда, НО продвигаясь по основному напрвлению.
Еще один нюанс - время. То есть в определенное время он должен подлететь к порту, и выпрыгнуть с ПВП карты. При определенной скорости корабля, он должен подлететь в определенную точку и моментально выпрыгнуть, чтобы вражины не успели "зажопить"

Это я к чему все, к тому что простые клики по миникарте не совсем подходят. Ну наверно можно долго-долго подстраивать ик и подгонять, но очень долго и сложно. Проще, на мой взгляд, было бы простое движение мыши, с зажатой ЛКМ.

В остальном все отлично, Курсор ориентируется на определенный обьект, и кликает относительно его в нужном месте, но он либо кликает, либо просто водит курсором без зажатой ЛКМ.

Oraven

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

Тогда так
Code: (clickermann) [Select]
//=== Воспроизведение ==========================================

// тут код с твоими проверками

GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "ориентир.bmp") // объект
   $x = $_return1
   $y = $_return2
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF

STRSEPARATE(TFREAD("Move.txt", 1), ",", $a_cor)
WAITMS($a_cor[2])
LDOWN($x + $a_cor[0],$y + $a_cor[1]) // зажали
UNDEFINE($a_cor)

FOR($a=1,$a<TFCOUNT("Move.txt")+1)
   STRSEPARATE(TFREAD("Move.txt", $a), ",", $a_cor)
   WAITMS($a_cor[2])
   MOVE($x + $a_cor[0],$y + $a_cor[1]) // водим
   UNDEFINE($a_cor)
END_CYC
LUP(-1,-1) // отпустили

Jon

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Очень долго мудрил с Вашими скриптами, подставлял один к другому и наоборот...(голова чуть не лопнула) в итоге пришел к следующему.
Скрипт для записи:
Code: [Select]
GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "42.bmp") // объект
    $x = $_return1
    $y = $_return2
END_IF

$x = $_return1 // координата начальной точки
$y = $_return2
 
WHILE(1)
   $x2 = $_xmouse-$x
   $y2 = $_ymouse-$y
   TFWRITE("Move.txt", STRCONCAT($x2, ",", $y2))
   WAITMS(50)
END_CYC
Скрипт для воспроизведения:
Code: [Select]
GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "42.bmp") // объект
   $x = $_return1
   $y = $_return2
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF
 
WHILE(2) // Бесконечный цикл, прокручиваем твою запись по кругу
   FOR($a=1,$a<TFCOUNT("Move.txt")+1)
      STRSEPARATE(TFREAD("Move.txt", $a), ",", $a_cor)
      LDOWN($x + $a_cor[0],$y + $a_cor[1]) //
      UNDEFINE($a_cor)
      WAITMS(50)
   END_CYC   
END_CYC
LUP(-1,-1)
Этот скрипт для воспроизведения собирал сам из Ваших предложенных, возможно тут что-то не правильно. И он зациклен.
Не могли бы Вы его чуть переделать, чтобы цикла не было? У меня не получается(
Нужно чтобы он воспроизводился только один раз за весь скрипт. Иначе мой скрипт доходит до него и все, зацикливается на нем. А нужно, чтобы он воспроизвел его один раз, и перешел к следующему шагу. Затем снова доходил до него, воспроизводил, и т.д.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну так убери WHILE(2) и его END_CYC

Почему у тебя LDOWN засунут в цикл? Зажать нужно перед циклом, а в цикле только двигать.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Вот так правильно

Code: (clickermann) [Select]
//=== Воспроизведение ==========================================

// тут код с твоими проверками

GETSCREEN
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "ориентир.bmp") // объект
   $x = $_return1
   $y = $_return2
ELSE
   HINTPOPUP("Ориентир не найден", "Ошибка")
   HALT
END_IF

STRSEPARATE(TFREAD("Move.txt", 1), ",", $a_cor)
LDOWN($x + $a_cor[0],$y + $a_cor[1]) // зажали
UNDEFINE($a_cor)
WAITMS(50)

FOR($a=2,$a<TFCOUNT("Move.txt")+1)
   STRSEPARATE(TFREAD("Move.txt", $a), ",", $a_cor)
   MOVE($x + $a_cor[0],$y + $a_cor[1]) // водим
   UNDEFINE($a_cor)
   WAITMS(50)
END_CYC
LUP(-1,-1) // отпустили

Jon

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
УРРРРАА Заработало!!!)))
 Спасибо Вам друзья большое!!)