Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: sektant23tm on January 26, 2019, 11:58:59 PM
-
Добрый день товарищи,имеется к вам такой вот интересный вопрос.
Есть скрипт,вот его суть :
Поток
getscreen
colormode(5,$x_sys_info-780,$y_sys_info+9,$x_sys_info-30,$y_sys_info+80) //Таргеты
colormode(7,$x_obz_panel-21,$y_obz_panel+79+($vsegogaits*19),$x_obz_panel+2,$y_obz_panel+400) //Полоска неписи //
colormode(7,$x_name-7, $y_name+13,$x_type-9, $y_type+335) //Фракционник + суицидник
colormode(6,$x_sys_info-780,$y_sys_info+110,$x_sys_info-30,$y_sys_info+190)
waitms(500)
end_поток
Так же имеется цикл,для которого этот поток работает
вайл($что-то там=0)
подпрограмма 1
подпрограмма 2
подпрограмма 3
end_цикл
Поток делает анализ снимка экрана,а вайл,работая с потоком параллельно,берет этот анализ снимка и ищет последовательно подпрограммами свои цели.
Проблема в том,что иногда(8 из 10) случаем вайл берет информацию когда поток успел сделать гетскрин и 1 -2 колормода обработать(они ведь работают параллельно) и получается что все трещит по швам т.к подпрограммы думают что заданных целей для них нет.На скриншотах видно что я имею ввиду.Так вот,как это можно решить?Может как-то можно все колормоды одной программой задать вместе с гетскрином?Тогда либо новый отфильтрованный снимок уже есть,либо если программа не успела сделать новый - в буфере должен был остаться старый отфильтрованный.Можно конечно выкинуть поток в помойку и просто сделать это подпрограммой,но прелесть потока именно в параллельности,бот сможет гораздо быстрее отреагировать на всяких неожиданных гостей ,поскольку каждые полсекунды он сканирует наличие этих самых незваных гостей,в то время как подпрограмме пришлось бы ждать своей очереди на выполнение.Надеюсь кто-то с таким сталкивался и решение лежит на поверхности ,а я еще слишком зелен чтобы его самостоятельно увидеть)
-
Выложи весь код какой он есть на самом деле
-
Поток
THREAD(potok_comgetscreen,0)
getscreen
colormode(5,$x_sys_info-780,$y_sys_info+9,$x_sys_info-30,$y_sys_info+80) //Таргеты
colormode(7,$x_obz_panel-21,$y_obz_panel+79+($vsegogaits*19),$x_obz_panel+2,$y_obz_panel+400) //Полоска неписи //
colormode(7,$x_name-7, $y_name+13,$x_type-9, $y_type+335) //Фракционник + суицидник
colormode(6,$x_sys_info-780,$y_sys_info+110,$x_sys_info-30,$y_sys_info+190)
waitms(500)
END_THREAD
Код вайла
//Включаем поток комгетскрина (тест)
SETTHREAD(potok_comgetscreen,1)
$cbabbing_plex="0"
$kolvotarget="0"
WHILE($cbabbing_plex = 0)
//Ищем фракционника
IF($dread = 0)
search_commandnpc()
END_IF
//Лочим цели
IF($kolvotarget <= 4)
target_lock()
END_IF
//Определяем сколько целей мы залочили
much_target()
IF($kolvotarget != 0)
//Ищем номер дрона
where_drones()
//Ищем номер миссла
where_missles()
//Подключаем логику
damage_logic()
wait(1)
END_IF
//Анализируем когда НПЦ все умрут + собираем дроны
the_end()
END_CYC
Все эти подсистемы не используют свой гетскрин,они лишь анализирую существующий в буфере через if_pixel_in или ip_pictures_in.Я несколько раз просмотрел их код и чтобы убедится что это точно так я каждую из них из кода удалял и смотрел как все отработает)
-
Такой подход ничего не ускорит и добавит только проблем что и произошло.
И поток делающий подряд разные колормоды безсмысленнен, ты не будешь попадать на нужные большую часть времени. И как это помогает вовремя что-то отловить я не понимаю.
Для использования гетскрина в отдельном потоке (чтобы одновременно разные гетскрины не писали в буфер) нужно привести все поиски к одному колормоду если конечно возможно.
Или все делать в основном коде вместе с скринами.
Можно сделать 2 потока основнойи дополнительный. В дополнительном будут все основные действия.
В основном только отлов нужных окон. Постановка доп потока на паузу. Поиск со своим гетскрином и колормодом, отлавливание, новый гетскрин с колормода из основных действий для возврата буфера в предыдущее состояние. Снятие с паузы. Задержка, чтобы этот поиск не ожирал много времени. Область поиска, заготовки, размеры, всё минимизировать чтобы этот поток не сжирал время лопатой. И опять же по возможности привести к одному колормоду.
-
Скорость работы скрипта такой подход конечно же не ускорит,это правда.Но он очень поможет т.к. максимально быстро мог бы увидеть суицидников которые прилетят меня убивать и отреагировать на них)НАсчет двух поток я думал уже,тогда уж в моем случае проще просто поток превратить в подпрограмму.Жаль