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

Pages: [1]
2
Добавлю и я свои пять копеек про использование потоков:
1 Мониторит нажатие клавиш, запускает и останавливает другие потоки.
2 Считывает количество жизни, маны, дебафы, координаты персонажей и вычисляет расстояние до лекарей/маназаливалок во всех окнах
3 На основании данных из 2го потока определяет последовательность кого и кем лечить/маназаливать/снимать дебафы
4 Бег бота по контрольным точкам
5 Ищет цель, если находит, останавливает 4й поток, управляет боем
6 Осуществляет 2х минутный баф
7 Осуществляет 20ти минутный баф

Кроме этого есть еще отдельный процесс написанный на Дельфи, который определяет в какой зоне расположены объекты (не боевая, боевая) и трассировку луча от дамагера до цели.
А также выводит в титул каждого объекта доступную информацию.
коротко и лаконично.Огромное спасибо.подвести  можно  просто кучу игр так что работы потокам вагон и маленькая тележка

3
как я понимаю уже вылечили и привязаться можно одновременно к нескольким окнам  в нескольких потоках?
Где и кто это сказал? У вас часто появляются выводы непонятно на чём основывающиеся.

Исправили только перезапуск потока, ведь о нём упоминалось в начале. Даже, не исправили, а доработали по просьбе. Это было довольно просто.
А вот разные привязки, разделённые буферы, переменные и подпрограммы - это довольно сложные изменения. Потребовалось бы вводить области видимости по одной из схем. Вводить динамические буферы в памяти и научить с ними работать все существующие команды, чтоб они понимали с каким буфером нужно работать в данный момент. Там ещё вагон и тележка проблем, поэтому автор отложил до "лучших" времён. А сейчас времена не "лучшие"   :D
Выводы я делал по ходу дискуссии.Не отрицаю,что в большинстве неправильные.Просто клещами приходится вырывать информацию по заинтересовавшей теме.Как вишенку на торте к концу дискуссии получил от Вас чуть более развернутый ответ,за что отдельное спасибо

4
Общие вопросы / Re:Реально нереально!
« on: July 07, 2022, 07:42:15 AM »
В моем понимании ...
Немного не понял как ...

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


5
В моем понимании синхронизация и есть потоки.Один скрипт в 12 потоков в моем случае.
Немного не понял как Вы избавляетесь от wait.В моем скрипте они везде нужны так как дают время на перезагрузку графики экрана.То есть если убрать wait кликер щелкнет по месту где,например только через секунду отрисуется кликабельная кнопка на которую нужно нажать.А в данный момент там просто серенький некликабельный фон
Синхронизация может быть частным случаев потоков, а могут и разные действия выполнять. Вот только потоки выполняются параллельно, а вы почему то последовательно посчитали по 7 минут и получили более 84 минут.
При последовательном выполнении паузы заменются полезным действием в другом окне. Пока вы совершаете то же действие в 11 других окнах, в первом окне графика уже перезагрузится.

Привязка одна на все потоки.Последовательно посчитал  основываясь на этом утверждении как я понимаю уже вылечили и привязаться можно одновременно к нескольким окнам  в нескольких потоках?
по поводу  разных действий в разных окнах идея тоже понятна.В первом окне графика не всегда успевает прогружаться.Да я могу разбить скрипт скажем на полсотни условных блоков и в разных окнах выполнять разные действия,для баловства.Скорости выполнения задачи это не даст.
ну и что самое печальное,по итогу мой скрипт длиной полторы тысячи строчек раздуло до плюс минус восемнадцати тысяч строк.

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

6
Если вопрос решается синхронизацией, не понимаю зачем сюда городить потоки.
Если время выполнения 7 минут, то очевидно есть какие-то паузы. Вместо пауз можно делать то же действие в другом окне.

Для эмуляторов делал без потоков. 9 эмуляторов на экране, делаем скрин и в цикле перебираем все 9 окон (смещения окон прописаны) все координаты идут с переменной смещения pxl(100+$dx,100+$dy)
Синхронизация не применима, тк матчи завершаются за разное время.
В принципе то же самое можно сделать с потоками, по потоку на окно, будет чуть быстрее  (не будут суммироваться паузы wait, но это не критично)
В моем понимании синхронизация и есть потоки.Один скрипт в 12 потоков в моем случае.
Немного не понял как Вы избавляетесь от wait.В моем скрипте они везде нужны так как дают время на перезагрузку графики экрана.То есть если убрать wait кликер щелкнет по месту где,например только через секунду отрисуется кликабельная кнопка на которую нужно нажать.А в данный момент там просто серенький некликабельный фон


7
Если Вас не затруднит,не могли бы подсказать пофиксили ли другие проблемы из этого списка?

GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на все потоки.
Снова ошибаетесь, если вдуматься в суть, то это не проблемы, а ФИЧИ! ;)
Попробую вдуматься.Передо мной стоит задача открыть 12 одинаковых окон с разными аккаунтами и воспроизвести в них  одинаковый скрипт длительностью 7 минут.Ок включаю синхронизацию на эмуляторе и через 7 минут моя задача выполнена.
А что с потоками,сейчас подумаю.Открываю окна и начинаю по очереди перепривязываясь выполнять скрипт.Учитывая задержки на перепривязку у меня ушло 87 минут или 1 час 27 минут или почти полтора часа.
 Да,это действительно фича.Дает время задуматься,а надо ли мне то,чем я занимаюсь.
Я ничего не упустил в своих размышлениях?






8
Если Вас не затруднит,не могли бы подсказать пофиксили ли другие проблемы из этого списка?

GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на все потоки.

9
забудьте эту фразу и никогда не используйте, ничего, Вы не понимаете.
 Потоки перезапускаются в любой момент, размер скриптов не ограничен, Вам должно быть мучительно стыдно! :-[
Дико извиняюсь за свою тупость.На крамольные мысли меня навели рассуждения одного из уважаемых мною пользователей программы.
Потоки пока еще очень сырые.
GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на весе потоки.
Поток возможно поставить на паузу, но нельзя перезапустить.

Короче что то не сложное можно запихнуть в поток, но пытаться распихать 4 скрипта по потокам и чтоб все работало как 4 кликера пока рано.

Будем ждать дальнейших улучшений потоков.

10
А как насчет того что потоки нельзя перезапустить?То есть как я понимаю  вариант годится только для скриптов в десяток строк.

11
для моих целей это шедевр но не могу допилить сюда движение
Code: [Select]
$h1 =HGET(1000,900)                    // hwnd окна источника
$h2 = HGET(1000,600)
$h3 = HGET(1000,300)
$h4 = HGET(1000,100)

 SUB(_klik,$set)
   WNDGETINFO($h1, $posx1, $posy1, $sizx1, $sizy1)
   WNDGETINFO($h2, $posx2, $posy2, $sizx2, $sizy2)
   WNDGETINFO($h3, $posx3, $posy3, $sizx3, $sizy3)
   WNDGETINFO($h4, $posx4, $posy4, $sizx4, $sizy4)
   $sx = $_xmouse
   $sy = $_ymouse
   SWITCH($set)
      CASE(1)
         LCLICK(($_xmouse-$posx1)+$posx2,($_ymouse-$posy1)+$posy2)
      WAITMS(10)
LCLICK(($_xmouse-$posx2)+$posx3,($_ymouse-$posy2)+$posy3)
      WAITMS(10)
LCLICK(($_xmouse-$posx3)+$posx4,($_ymouse-$posy3)+$posy4)
      WAITMS(10)
END_SWITCH
   MOVE($sx,$sy)
END_SUB 
  WHILE(1)
   IF(ISKEYDOWN(1)=1)
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(10)
      END_CYC
      _klik(1)
ELSE
         WAITMS(10)
   END_IF
END_CYC
вот так прописываю дублирование.припопытке добавить
Code: [Select]
SUB(A_KEYDOWN, $A_key, $A_hwnd)
   postmessage($A_hwnd,0x0100,$A_key,0)
END_SUB
SUB(A_KEYUP, $A_key, $A_hwnd)
   postmessage($A_hwnd,0x0101,$A_key,0)
END_SUB


 SUB(A_LCLICK, $A_x, $A_y, $A_hwnd)
   postmessage($A_hwnd,0x0201,0x0001,$A_x+($A_y*65536))
   waitms($A_press_delay)
   postmessage($A_hwnd,0x0202,0x0001,$A_x+($A_y*65536))
END_SUB
SUB(A_LUP, $A_x, $A_y, $A_hwnd)
   postmessage($A_hwnd,0x0202,0x0001,$A_x+($A_y*65536))
END_SUB
$h1 =HGET(600,800)                    // hwnd окна источника
$h2 = HGET(1000,800)
$h3 = HGET(1000,600)
$h4 = HGET(1000,300) 

IF(ISKEYDOWN(#DOWN))
WAITMS(30)
A_KEYDOWN(#S,$h1)
WAITMS(30)
A_KEYDOWN(#S,$h2)
WAITMS(30)
A_KEYDOWN(#S,$h3)
WAITMS(30)
A_KEYDOWN(#S,$h4)
WHILE(ISKEYDOWN(#DOWN))   
        WAITMS(10)
    END_CYC
A_KEYUP(#S,$h1)
A_KEYUP(#S,$h2)
A_KEYUP(#S,$h3)
A_KEYUP(#S,$h4)   
    WAITMS(30)
END_IF

IF(ISKEYDOWN(#UP))
WAITMS(30)
A_KEYDOWN(#W,$h1)
WAITMS(30)
A_KEYDOWN(#W,$h2)
WAITMS(30)
A_KEYDOWN(#W,$h3)
WAITMS(30)
A_KEYDOWN(#W,$h4)
WHILE(ISKEYDOWN(#UP))   
        WAITMS(10)
    END_CYC
A_KEYUP(#W,$h1)
A_KEYUP(#W,$h2)
A_KEYUP(#W,$h3)
A_KEYUP(#W,$h4)
   
    WAITMS(30)
END_IF

IF(ISKEYDOWN(#RIGHT))
WAITMS(30)
A_KEYDOWN(#D,$h1)
WAITMS(30)
A_KEYDOWN(#D,$h2)
WAITMS(30)
A_KEYDOWN(#D,$h3)
WAITMS(30)
A_KEYDOWN(#D,$h4)
WHILE(ISKEYDOWN(#RIGHT))   
        WAITMS(10)
    END_CYC
A_KEYUP(#D,$h1)
A_KEYUP(#D,$h2)
A_KEYUP(#D,$h3)
A_KEYUP(#D,$h4)
   
    WAITMS(30)
END_IF


IF(ISKEYDOWN(#LEFT))
WAITMS(30)
A_KEYDOWN(#A,$h1)
WAITMS(30)
A_KEYDOWN(#A,$h2)
WAITMS(30)
A_KEYDOWN(#A,$h3)
WAITMS(30)
A_KEYDOWN(#A,$h4)
WHILE(ISKEYDOWN(#LEFT))   
        WAITMS(10)
    END_CYC
A_KEYUP(#A,$h1)
A_KEYUP(#A,$h2)
A_KEYUP(#A,$h3)
A_KEYUP(#A,$h4)
WAITMS(30)
 END_IF
 
   
IF(ISKEYDOWN(#SPACE)=1)
             
A_LCLICK(370,235,$h1)
WAITMS(50)
A_LCLICK(370,235,$h2)
WAITMS(50)
A_LCLICK(370,235,$h3)
WAITMS(50)
A_LCLICK(370,235,$h4)
WAITMS(50)       
   
    ELSE
     WAITMS(25)   
   
END_IF
 
выдает ошибку.дублирование работает а движения нет . подскажите пожалуйста как обьединить эти два скрипта   

   
Code: [Select]
$h1 =HGET(1000,900)                    // hwnd окна источника
$h2 = HGET(400,600)
$h3 = HGET(400,300)
$h4 = HGET(400,100)
$h5 = HGET(700,900)
$h6 = HGET(700,600)
$h7 = HGET(700,300)
$h8 = HGET(700,100)
$h9 =  HGET(400,900)                   
$h10 = HGET(1000,600)
$h11 = HGET(1000,300)
$h12 = HGET(1000,100)                          // hwnd окна получателя
SUB(A_KEYDOWN, $A_key, $A_hwnd)
   postmessage($A_hwnd,0x0100,$A_key,0)
END_SUB
SUB(A_KEYUP, $A_key, $A_hwnd)
   postmessage($A_hwnd,0x0101,$A_key,0)
END_SUB

SUB(_klik,$set)
   WNDGETINFO($h1, $posx1, $posy1, $sizx1, $sizy1)
   WNDGETINFO($h2, $posx2, $posy2, $sizx2, $sizy2)
   WNDGETINFO($h3, $posx3, $posy3, $sizx3, $sizy3)
   WNDGETINFO($h4, $posx4, $posy4, $sizx4, $sizy4)
   WNDGETINFO($h5, $posx5, $posy5, $sizx5, $sizy5)
   WNDGETINFO($h6, $posx6, $posy6, $sizx6, $sizy6)
   WNDGETINFO($h7, $posx7, $posy7, $sizx7, $sizy7)
   WNDGETINFO($h8, $posx8, $posy8, $sizx8, $sizy8)
   WNDGETINFO($h9, $posx9, $posy9, $sizx9, $sizy9)
   WNDGETINFO($h10, $posx10, $posy10, $sizx10, $sizy10)
   WNDGETINFO($h11, $posx11, $posy11, $sizx11, $sizy11)
   WNDGETINFO($h12, $posx12, $posy12, $sizx12, $sizy12)   
   WNDGETINFO($h13, $posx13, $posy13, $sizx13, $sizy13)
   WNDGETINFO($h14, $posx14, $posy14, $sizx14, $sizy14)
   WNDGETINFO($h15, $posx15, $posy15, $sizx15, $sizy15)
   WNDGETINFO($h16, $posx16, $posy16, $sizx16, $sizy16)

   
   
   
   
   $sx = $_xmouse
   $sy = $_ymouse
   SWITCH($set)
   
       CASE(1)
         LCLICK(($_xmouse-$posx1)+$posx2,($_ymouse-$posy1)+$posy2)
      WAITMS(30)
LCLICK(($_xmouse-$posx2)+$posx3,($_ymouse-$posy2)+$posy3)
      WAITMS(30)
LCLICK(($_xmouse-$posx3)+$posx4,($_ymouse-$posy3)+$posy4)
      WAITMS(30)
LCLICK(($_xmouse-$posx4)+$posx5,($_ymouse-$posy4)+$posy5)
      WAITMS(30)
LCLICK(($_xmouse-$posx5)+$posx6,($_ymouse-$posy5)+$posy6)
      WAITMS(30)
LCLICK(($_xmouse-$posx6)+$posx7,($_ymouse-$posy6)+$posy7)
      WAITMS(30)
LCLICK(($_xmouse-$posx7)+$posx8,($_ymouse-$posy7)+$posy8)
      WAITMS(30) 
      LCLICK(($_xmouse-$posx8)+$posx9,($_ymouse-$posy8)+$posy9)
      WAITMS(30)
LCLICK(($_xmouse-$posx9)+$posx10,($_ymouse-$posy9)+$posy10)
      WAITMS(30)
LCLICK(($_xmouse-$posx10)+$posx11,($_ymouse-$posy10)+$posy11)
      WAITMS(30)
LCLICK(($_xmouse-$posx11)+$posx12,($_ymouse-$posy11)+$posy12)

CASE(2)
A_KEYDOWN(#S,$h1)
WAITMS(30)
A_KEYDOWN(#S,$h2)
WAITMS(30)
A_KEYDOWN(#S,$h3)
WAITMS(30)
A_KEYDOWN(#S,$h4)
WAITMS(30)
A_KEYDOWN(#S,$h5)
WAITMS(30)
A_KEYDOWN(#S,$h6)
WAITMS(30)
A_KEYDOWN(#S,$h7)
WAITMS(30)
A_KEYDOWN(#S,$h8)
WAITMS(30)
A_KEYDOWN(#S,$h9)
WAITMS(30)
A_KEYDOWN(#S,$h10)
WAITMS(30)
A_KEYDOWN(#S,$h11)
WAITMS(30)
A_KEYDOWN(#S,$h12)

CASE(3)
A_KEYDOWN(#W,$h1)
WAITMS(30)
A_KEYDOWN(#W,$h2)
WAITMS(30)
A_KEYDOWN(#W,$h3)
WAITMS(30)
A_KEYDOWN(#W,$h4)
WAITMS(30)
A_KEYDOWN(#W,$h5)
WAITMS(30)
A_KEYDOWN(#W,$h6)
WAITMS(30)
A_KEYDOWN(#W,$h7)
WAITMS(30)
A_KEYDOWN(#W,$h8)
WAITMS(30)
A_KEYDOWN(#W,$h9)
WAITMS(30)
A_KEYDOWN(#W,$h10)
WAITMS(30)
A_KEYDOWN(#W,$h11)
WAITMS(30)
A_KEYDOWN(#W,$h12)

CASE(4)
A_KEYDOWN(#D,$h1)
WAITMS(30)
A_KEYDOWN(#D,$h2)
WAITMS(30)
A_KEYDOWN(#D,$h3)
WAITMS(30)
A_KEYDOWN(#D,$h4)
WAITMS(30)
A_KEYDOWN(#D,$h5)
WAITMS(30)
A_KEYDOWN(#D,$h6)
WAITMS(30)
A_KEYDOWN(#D,$h7)
WAITMS(30)
A_KEYDOWN(#D,$h8)
WAITMS(30)
A_KEYDOWN(#D,$h9)
WAITMS(30)
A_KEYDOWN(#D,$h10)
WAITMS(30)
A_KEYDOWN(#D,$h11)
WAITMS(30)
A_KEYDOWN(#D,$h12)

CASE(5)
A_KEYDOWN(#A,$h1)
WAITMS(30)
A_KEYDOWN(#A,$h2)
WAITMS(30)
A_KEYDOWN(#A,$h3)
WAITMS(30)
A_KEYDOWN(#A,$h4)
WAITMS(30)
A_KEYDOWN(#A,$h5)
WAITMS(30)
A_KEYDOWN(#A,$h6)
WAITMS(30)
A_KEYDOWN(#A,$h7)
WAITMS(30)
A_KEYDOWN(#A,$h8)
WAITMS(30)
A_KEYDOWN(#A,$h9)
WAITMS(30)
A_KEYDOWN(#A,$h10)
WAITMS(30)
A_KEYDOWN(#A,$h11)
WAITMS(30)
A_KEYDOWN(#A,$h12)

   END_SWITCH
   MOVE($sx,$sy)
END_SUB

WHILE(1)
   IF(ISKEYDOWN(1)=1)
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(30)
      END_CYC
      _klik(1)
 ELSE
      IF(ISKEYDOWN(#DOWN)=1)
         WHILE(ISKEYDOWN(#DOWN)=1)
            WAITMS(30)
         END_CYC
         _klik(2)     
ELSE
      IF(ISKEYDOWN(#UP)=1)
         WHILE(ISKEYDOWN(#UP)=1)
            WAITMS(30)
         END_CYC
         _klik(3)     
 ELSE
      IF(ISKEYDOWN(#RIGHT)=1)
         WHILE(ISKEYDOWN(#RIGHT)=1)
            WAITMS(30)
         END_CYC
         _klik(4)
 ELSE
      IF(ISKEYDOWN(#LEFT)=1)
         WHILE(ISKEYDOWN(#LEFT)=1)
            WAITMS(30)
         END_CYC
         _klik(5)     
 ELSE
         WAITMS(30)
             END_IF
           END_IF
         END_IF
      END_IF
   END_IF
END_CYC       
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
   

вот так пытался обьединить но движение не работает

12
Использование / Re: дублирование мыши
« on: August 31, 2021, 02:09:33 AM »
В моем случае скрипт Космича сработал только один раз после первого включения.Может есть еще варианты касаемо LBUTTONDOWN и_MOUSEMOVE?
причина в защите игры.Скрипт отличный,коротко и лаконично.

Pages: [1]