1
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
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.
Добавлю и я свои пять копеек про использование потоков:коротко и лаконично.Огромное спасибо.подвести можно просто кучу игр так что работы потокам вагон и маленькая тележка
1 Мониторит нажатие клавиш, запускает и останавливает другие потоки.
2 Считывает количество жизни, маны, дебафы, координаты персонажей и вычисляет расстояние до лекарей/маназаливалок во всех окнах
3 На основании данных из 2го потока определяет последовательность кого и кем лечить/маназаливать/снимать дебафы
4 Бег бота по контрольным точкам
5 Ищет цель, если находит, останавливает 4й поток, управляет боем
6 Осуществляет 2х минутный баф
7 Осуществляет 20ти минутный баф
Кроме этого есть еще отдельный процесс написанный на Дельфи, который определяет в какой зоне расположены объекты (не боевая, боевая) и трассировку луча от дамагера до цели.
А также выводит в титул каждого объекта доступную информацию.
Выводы я делал по ходу дискуссии.Не отрицаю,что в большинстве неправильные.Просто клещами приходится вырывать информацию по заинтересовавшей теме.Как вишенку на торте к концу дискуссии получил от Вас чуть более развернутый ответ,за что отдельное спасибокак я понимаю уже вылечили и привязаться можно одновременно к нескольким окнам в нескольких потоках?Где и кто это сказал? У вас часто появляются выводы непонятно на чём основывающиеся.
Исправили только перезапуск потока, ведь о нём упоминалось в начале. Даже, не исправили, а доработали по просьбе. Это было довольно просто.
А вот разные привязки, разделённые буферы, переменные и подпрограммы - это довольно сложные изменения. Потребовалось бы вводить области видимости по одной из схем. Вводить динамические буферы в памяти и научить с ними работать все существующие команды, чтоб они понимали с каким буфером нужно работать в данный момент. Там ещё вагон и тележка проблем, поэтому автор отложил до "лучших" времён. А сейчас времена не "лучшие"
я бы сказал согласно логике а не вопреки.Так как своя проблема ближе к телу.Наркотическая ломка понятийного аппарата, назло логике летом отморожу ушиВ моем понимании ...
Немного не понял как ...
как я понимаю...
идея тоже понятна...
это не даст.
раздуло...
В моем понимании синхронизация и есть потоки.Один скрипт в 12 потоков в моем случае.Синхронизация может быть частным случаев потоков, а могут и разные действия выполнять. Вот только потоки выполняются параллельно, а вы почему то последовательно посчитали по 7 минут и получили более 84 минут.
Немного не понял как Вы избавляетесь от wait.В моем скрипте они везде нужны так как дают время на перезагрузку графики экрана.То есть если убрать wait кликер щелкнет по месту где,например только через секунду отрисуется кликабельная кнопка на которую нужно нажать.А в данный момент там просто серенький некликабельный фон
При последовательном выполнении паузы заменются полезным действием в другом окне. Пока вы совершаете то же действие в 11 других окнах, в первом окне графика уже перезагрузится.
Если вопрос решается синхронизацией, не понимаю зачем сюда городить потоки.В моем понимании синхронизация и есть потоки.Один скрипт в 12 потоков в моем случае.
Если время выполнения 7 минут, то очевидно есть какие-то паузы. Вместо пауз можно делать то же действие в другом окне.
Для эмуляторов делал без потоков. 9 эмуляторов на экране, делаем скрин и в цикле перебираем все 9 окон (смещения окон прописаны) все координаты идут с переменной смещения pxl(100+$dx,100+$dy)
Синхронизация не применима, тк матчи завершаются за разное время.
В принципе то же самое можно сделать с потоками, по потоку на окно, будет чуть быстрее (не будут суммироваться паузы wait, но это не критично)
Попробую вдуматься.Передо мной стоит задача открыть 12 одинаковых окон с разными аккаунтами и воспроизвести в них одинаковый скрипт длительностью 7 минут.Ок включаю синхронизацию на эмуляторе и через 7 минут моя задача выполнена.Если Вас не затруднит,не могли бы подсказать пофиксили ли другие проблемы из этого списка?Снова ошибаетесь, если вдуматься в суть, то это не проблемы, а ФИЧИ!
GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на все потоки.
забудьте эту фразу и никогда не используйте, ничего, Вы не понимаете.Дико извиняюсь за свою тупость.На крамольные мысли меня навели рассуждения одного из уважаемых мною пользователей программы.
Потоки перезапускаются в любой момент, размер скриптов не ограничен, Вам должно быть мучительно стыдно!
Потоки пока еще очень сырые.
GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на весе потоки.
Поток возможно поставить на паузу, но нельзя перезапустить.
Короче что то не сложное можно запихнуть в поток, но пытаться распихать 4 скрипта по потокам и чтоб все работало как 4 кликера пока рано.
Будем ждать дальнейших улучшений потоков.
$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
вот так прописываю дублирование.припопытке добавить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
$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