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

Pages: [1]
1
У меня была похожая проблема.2 внутриигровых она,все координаты известны,,но с перетаскиванием беда.Казалось бы берешь LDOWN ,делаешь MOVE и отпускаешь на нужных координатах через LUP.Все работает прекрасно,до тех пор пока не включаешьрежим привязки.В режиме привязки почему-то работать отказывается и все тут.После нескольких неудачных попыток я заметил,что если именно записать через сам кликер перетаскивание предметов,то оно будет работать даже в оконном режиме.Я понятия не имею с чем это связано,но каким-то непостижимым образом это заработало,хотя там все то же самое по сути в коде.Мне помогло : я выкинул весь лишний код,вставил переменные какие мне нужны вместо точечных значений и скрипт заработал как я хотел. + подключил плавное движение мыши

Code: [Select]
move($x_mod+20,$y_mod-28) //ставишь мышь на позицию "откуда надо тянуть"
waitms(42)
lDown($x_mod+20,$y_mod-28)
waitms(42)



MOVE_SLOW($x_gila,$y_gila) //Куда надо тянуть

waitms(42)
lUp($x_gila,$y_gila) //отпускаем

Прекрасно работает в режиме привязки.Тянет с одного окна на другое будь здоров.

А вот вам и подпрограмма для плавного движения мыши.Скорее всего работать будет и без нее,но с ней покрасивше

Code: [Select]

SUB(MOVE_SLOW, $MOVE_END_X, $MOVE_END_Y)   
   $MOVE_SPEED = 15 // множитель скорости в попугаях меньше-быстрее. Можно дробный
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
 
   $dist= DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
 
   $MOVE_SPEEDVAR= INT((SQRT($dist))/$MOVE_SPEED)   
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR=1
   END_IF
 
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step       
 
   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X+$MOVE_X_step
      $MOVE_Y = $MOVE_Y+$MOVE_Y_step
      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
      WAITMS(1)
   END_CYC
 
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB


Рекомендую выкинуть ее в отдельный файл и подключить где-то в самом начале.

2
Предложения / Re: Потоки
« on: January 30, 2019, 09:41:04 PM »
Еще кое что,где бы мне это могло пригодится:у меня в кликере есть небольшой баг(встречал 2 раза за месяц) когда кликер растягивал внутриигровое окно.Я бы мог написать небольшой поток который отслеживал бы состояние этого окна например раз в полсекунды и если бы этот баг произошёл вновь - я бы этим потоком остановил бы весь скрипт и посмотрел бы по логам что именно его вызвало.Удобно?Очень удобно.Вот например исходя из своей ситуации я уже несколько применений такому продвинутому потоку нашел.Я уверен,что другие люди так же бы нашли куда можно применить такое нововведение.

3
Предложения / Re: Потоки
« on: January 30, 2019, 09:36:33 PM »
Что тут не обоснованного?Я кажется ясно написал,что было бы гораздо Гораздо ГОРАЗДО удобнее если бы мне не пришлось делать так(условно говоря):

Code: [Select]
подпрограмма 1

проверка на вылета инетнета
проверка на дроп окон

подпрограмма 2

проверка на вылета инетнета
проверка на дроп окон
подпрограмма 3

проверка на вылета инетнета
проверка на дроп окон
подпрограмма 4

проверка на вылета инетнета
проверка на дроп окон
и.т.д


а сделать так:
Code: [Select]
Поток 1
проверка на вылета инетнета
wait(30)
конец потока

Code: [Select]
поток 2
проверка на дроп окон
wait(30)
конец потока

Code: [Select]
основной поток
подпрограмма 1

подпрограмма 2

подпрограмма 3

подпрограмма 4

Конец потока

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

4
Предложения / Re: Потоки
« on: January 30, 2019, 08:27:09 PM »
Ускорит или нет - не знаю,но такой подход 100% облегчил бы мне работу если бы независимая проверка включалась бы отдельно раз например в 30 секунд чем я эту самую проверку подпрограммой отдельно 10 раз вставлю в коде

5
Предложения / Потоки
« on: January 30, 2019, 08:13:30 PM »
Потоки - вещь очень удобна,но слишком ограниченная.У потоков есть свои подпрограммы,но почему нет своего гетскрина и своего колормода?Я написал неплохого бота по EVE Online ,но половину функционала можно было бы значительно ускорить и упростить если бы некоторые вещи выполнялись параллельно,например проверка на дроп интернета,проверка на суицидников в гриде,проверка на размеры окон,не закрылись или не переместились ли они из-за миссклика.Бот состоит из кучи подпрограмм,и теперь эти проверки приходится пихать по ходу дела,последовательно,затормаживая работу.Сделайте,пожалуйста,такой функционал в следующем обновлении(надеюсь оно выйдет пораньше чем прошлое и уверен,многие скажут за него вам отдельное СПАСИБО)  :D

6
Общие вопросы / Re: Вопрос про потоки
« on: January 27, 2019, 11:28:15 AM »
Скорость работы скрипта такой подход конечно же не ускорит,это правда.Но он очень поможет т.к. максимально быстро мог бы увидеть суицидников которые прилетят меня убивать и отреагировать на них)НАсчет двух поток я думал уже,тогда уж в моем случае проще просто поток превратить в подпрограмму.Жаль

7
Общие вопросы / Re: Вопрос про потоки
« on: January 27, 2019, 11:17:29 AM »
Поток

Code: [Select]
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 

Код вайла

Code: [Select]
//Включаем поток комгетскрина (тест)
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.Я несколько раз просмотрел их код и чтобы убедится что это точно так я каждую из них из кода удалял и смотрел как все отработает)

8
Общие вопросы / Вопрос про потоки
« on: January 26, 2019, 11:58:59 PM »
Добрый день товарищи,имеется к вам такой вот интересный вопрос.

Есть скрипт,вот его суть :

Code: [Select]
Поток

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_поток


Так же имеется цикл,для которого этот поток работает

Code: [Select]
вайл($что-то там=0)

подпрограмма 1

подпрограмма 2

подпрограмма 3

end_цикл

Поток делает анализ снимка экрана,а вайл,работая с потоком параллельно,берет этот анализ снимка и ищет последовательно подпрограммами свои цели.
Проблема в том,что иногда(8 из 10) случаем вайл берет информацию когда поток успел сделать гетскрин и 1 -2 колормода обработать(они ведь работают параллельно) и получается что все трещит по швам т.к подпрограммы думают что заданных целей для них нет.На скриншотах видно что я имею ввиду.Так вот,как это можно решить?Может как-то можно все колормоды одной программой задать вместе с гетскрином?Тогда либо новый отфильтрованный снимок уже есть,либо если программа не успела сделать новый - в буфере должен был остаться старый отфильтрованный.Можно конечно выкинуть поток в помойку и просто сделать это подпрограммой,но прелесть потока именно в параллельности,бот сможет гораздо быстрее отреагировать на всяких неожиданных гостей ,поскольку каждые полсекунды он сканирует наличие этих самых незваных гостей,в то время как подпрограмме пришлось бы ждать своей очереди на выполнение.Надеюсь кто-то с таким сталкивался и решение лежит на поверхности ,а я еще слишком зелен чтобы его самостоятельно увидеть)

9
Если я правильно понял ,то ты хочешь что-то такое:

Code: [Select]
//использовать будем кнопку W и R

sub(one)
print("Запуск первого цикла")
END_SUB

sub(two)
print("Запуск второго цикла")
END_SUB

print("Сканирую нажатие")

$cycle="0"

WHILE($cycle = 0)


IF (ISKEYDOWN(#W) = 1)
 
one()
   waitms(600)
ELSE
 
   IF(ISKEYDOWN(#R) = 1)
     two()
      waitms(600)
     ELSE
     
     //print("Нажатий не обнаружено,сканирую еще раз")
     
   END_IF
       waitms(50)
   
 
END_IF

END_CYC

10
Я смог разобраться как слать сообщения к себе в телегу.Могу написать гайдик небольшой если кому-нибудь это интересно.

11
Запись - это конечно хорошо и удобно в некоторых случаях,но если нужна именно скорость - придется хорошенько изучить справку и переписать скрипт "ручками").Год назад я впервые открыл эту программу чтобы написать торговый бот для своей любимой EVE online.Учился на ходу,до этого програмированием не занимался.Часть функция была написана через alt-r как у тебя,работало все медленно и ненадежно.Бот за минуту делал 1 - 2 ордера при том,что человек может 5.Я хорошо почитал спраку и переписал значительную часть бота после чего он стал обрабатывать все быстрее (4 - 5) ордера.Сейчас если бы я написал такого бота с нуля,думаю он бы запросто делал до 10 ордеров в минуту что очень быстро)Так что разбирай справку,эксперементируй,задавай вопросы сюда - постараемся помочь)

12
Слушай, если сможешь реализовать это дело - поделись плиз наработками, сам об этом думал, но решил сперва реализовать и проверить все в своём боте и только потом заниматься системой оповещения

13
Общие вопросы / Re: Переменные
« on: December 28, 2018, 12:38:46 PM »
 :) Пока переделывал код возник еще один вопрос.Как реализовать вот такую механику?

Code: [Select]

SUB(gowarp,$telowarpa)


//---===STARTWARP===---//
WHILE($warponper < 24)
   #include "WARPON.cms"
   waitms(300)
   
   IF($errorwarp = 1)
//НИЖЕ ЕСЛИ ВАРП НЕ ПРОШЕЛ


    $telowarpa
   

     
//--//
      $warponper="0"   
      $errorwarp="0"
   END_IF
END_CYC
//---======---===---===---//


END_SUB


   gowarp("rewarp()")     


Грубо говоря у нас есть подпрограмма,которая контролирует движение корабля в пространстве.Если все сработало как надо - хорошо,но если нет(миссклик например),должна вызываться подпрограмма rewarp() и цикл отработается по новой.Сейчас gowarp("rewarp()")  отрабатывается в теле SUB(gowarp,$telowarpa) через $telowarpa как простой набор текста,а не как подпрограмма.Должно выйти что-то вроде переменной подпрограммы в подпрограмме.

14
Общие вопросы / Re: Переменные
« on: December 27, 2018, 11:37:54 PM »
Спасибо за помощь,вроде работает.
Quote
Кстати зачем ты присваиваешь числа перемененным как текст?
Я не слишком опытен пока в таких вопросах.Я всего месяц юзаю программу,до этого никогда не програмировал,так что,можно сказать,учусь на ходу. :)

15
Общие вопросы / Переменные
« on: December 27, 2018, 04:51:38 PM »
Добрый день знатоки кликермана! :)

Сразу к делу:

Я написал бота под игру,он прекрасно работает и выполняет все что мне от него нужно.Время от времени я стараюсь его улучшить,чтобы он работал точнее и быстрее.Сейчас при запуске бот около 30 секунд гетскринит,считывает существующие координаты всех нужных в игре окон(через IF_PICTURES_IN) и запоминает координаты и в дальнейшем ему не приходится при обращении к ним искать их заново по всему экрану,он уже имеет их координаты.Захотел я сделать это считывание координат более быстрым и интереесным.
Я решил переделать скрипт,чтобы он прежде чем искать картинку по всему экрану обращался в config.ini для поиска координаты этого окна с предыдущего прогона.Тоесть например кликер ищет окно склада,обращается к INI файлу,находит там $xsklad и $ysklad(стартовые координаты картинки) ,проверяет условие IF_PICTURE_IN ($xsklad, $ysklad, $x_max,$y_max, "img/sklad.bmp", -1, 90) .Если скрипт срабатывает - бот переходит к поиску следующей картинки,если не срабатывает,то $xsklad и $ysklad делает равным 0,ищет еще раз и ,обнаружив,перезаписывает координаты в INI файл.Все это я сделал,все это легко


Код имеет примерно такой вид

Code: [Select]

//----------------SKLAD---------------------------//
$analiz="0"
WHILE($analiz < 1)

$xsklad=INIREAD("config.ini", "$xsklad","Analizsystem")
$ysklad=INIREAD("config.ini", "$ysklad","Analizsystem")

IF_PICTURE_IN ($xsklad, $ysklad, $x_max,$y_max, "img/sklad.bmp", -1, 90)

print("SKLAD..ОК")

$xsklad=$_return1
$ysklad=$_return2

$analiz="1"

print("Перезаписываю координаты")
INIWRITE("config.ini", "$xsklad", $xsklad ,"Analizsystem")
INIWRITE("config.ini", "$ysklad", $ysklad ,"Analizsystem")


ELSE

$xsklad="0"
$ysklad="0"
$record="1"

END_IF

END_CYC
//=======================================================//



Так вот,перед тем как основной скрипт приступит к работе ему надо найти около 30 таких картинок на экране.Я как нубас могу написать просто 30 раз кусок этого кода каждый раз меняя переменные $xsklad и $ysklad на другие,но я хочу сделать это красиво через WHILE чтобы при каждом новом цикле этого оператора у меня из INI файла брались значения трех переменных (картинка,х,у),подставлялись в cкрипт и отрабатывали ,после чего по новой до тех пор пока while не закроется.Но я столкнулся с проблемой,что я не могу заменить одну переменную на другую.Например у нас есть кусочек кода


Code: [Select]
$xnn=INIREAD("config.ini", "$xnn","Analizsystem")

В нем я хочу заменить $xnn на $xdps.Я пробовал через все что нашел в справке,особенно близок был STRREPLACE,но все мои усилия привели лишь к тому,что $xdps воспринимался программой не как переменная при подобного рода замене,а как просто текст.По сути мне нужно понять как именно заменить одну переменную на другую,не приравнять их ,а именно  заменить.


Я очень надеюсь что решение очень простое,но я по неопытности и невнимательности его каким-то образом обошел.



Pages: [1]