Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Artsakh on December 21, 2016, 07:27:39 AM
-
Дратути всем. Я столкнулся с большим неудобством в виде пары сотен кейсов.)) Подскажите пожалуйста, как можно заменить свитч?
INC($var,1)
SWITCH($var)
CASE(1)
$rx = 1410
$ry = 690
$rx1 = 1405
$ry1 = 685
$rx2 = 1415
$ry2 = 695
CASE(2)
$rx = 1415
$ry = 690
$rx1 = 1410
$ry1 = 685
$rx2 = 1430
$ry2 = 695
CASE(3)
$rx = 1420
$ry = 690
$rx1 = 1415
$ry1 = 685
$rx2 = 1425
$ry2 = 695
CASE(4)
$rx = 1425
$ry = 690
$rx1 = 1420
$ry1 = 685
$rx2 = 1430
$ry2 = 695
CASE(5)
$rx = 1430
$ry = 690
$rx1 = 1420
$ry1 = 685
$rx2 = 1430
$ry2 = 695
CASE(6)
$rx = 1435
$ry = 690
$rx1 = 1430
$ry1 = 680
$rx2 = 1440
$ry2 = 695
CASE(7)
$rx = 1440
$ry = 690
$rx1 = 1435
$ry1 = 680
$rx2 = 1445
$ry2 = 695
CASE(8)
$rx = 1445
$ry = 690
$rx1 = 1440
$ry1 = 680
$rx2 = 1450
$ry2 = 695
CASE(9)
$rx = 1450
$ry = 690
$rx1 = 1445
$ry1 = 680
$rx2 = 1460
$ry2 = 695
CASE(10)
$rx = 1455
$ry = 690
$rx1 = 1450
$ry1 = 680
$rx2 = 1460
$ry2 = 695
//----------////////////
CASE(11)
$rx = 1465
$ry = 700
$rx1 = 1460
$ry1 = 690
$rx2 = 1470
$ry2 = 705
CASE(12)
$rx = 1465
$ry = 710
$rx1 = 1460
$ry1 = 700
$rx2 = 1470
$ry2 = 715
CASE(13)
$rx = 1455
$ry = 715
$rx1 = 1445
$ry1 = 705
$rx2 = 1460
$ry2 = 720
//----------////////////
CASE(14)
$rx = 1450
$ry = 715
$rx1 = 1445
$ry1 = 705
$rx2 = 1455
$ry2 = 720
CASE(15)
$rx = 1445
$ry = 715
$rx1 = 1440
$ry1 = 705
$rx2 = 1450
$ry2 = 720
CASE(16)
$rx = 1440
$ry = 715
$rx1 = 1435
$ry1 = 705
$rx2 = 1445
$ry2 = 720
CASE(17)
$rx = 1435
$ry = 715
$rx1 = 1430
$ry1 = 705
$rx2 = 1440
$ry2 = 720
CASE(18)
$rx = 1430
$ry = 715
$rx1 = 1425
$ry1 = 705
$rx2 = 1435
$ry2 = 720
CASE(19)
$rx = 1425
$ry = 715
$rx1 = 1420
$ry1 = 705
$rx2 = 1430
$ry2 = 720
CASE(20)
$rx = 1420
$ry = 715
$rx1 = 1415
$ry1 = 705
$rx2 = 1425
$ry2 = 720
CASE(21)
$rx = 1415
$ry = 715
$rx1 = 1410
$ry1 = 705
$rx2 = 1420
$ry2 = 720
CASE(22)
$rx = 1410
$ry = 715
$rx1 = 1405
$ry1 = 705
$rx2 = 1415
$ry2 = 720
//----------
CASE(23)
$rx = 1395
$ry = 705
$rx1 = 1390
$ry1 = 695
$rx2 = 1400
$ry2 = 710
CASE(24)
$rx = 1395
$ry = 695
$rx1 = 1390
$ry1 = 685
$rx2 = 1400
$ry2 = 700
//----------
$var = 0
END_SWITCH
MOVE($rx,$ry)
LCLICK($rx,$ry)
WAITMS(300)
IF(($var!1)&($var!2)&($var!10)&($var!11)&($var!12)&($var!13)&($var!14)&($var!23)&($var!24))
GETSCREEN
PXLREPLACE($xShip_hp1,$yShip_hp1,$xShip_hp2,$yShip_hp2, $hp_nps, $hp_ship)
IF_PIXEL_IN(0,0, $_xmax,$_ymax, $hp_nps)
ELSE
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, $nps)
IF(($_return1>$xm1)&($_return1<$xm2)&($_return2>$ym1)&($_return2<$ym2))
$_return1 = 0
$_return2 = 0
END_IF
LCLICK($_return1, $_return2)
WAITMS(180)
KEYPRESS(#1)
WAITMS(25)
MOVE($rx,$ry)
LCLICK($rx,$ry)
ELSE
WAITMS(25)
END_IF
END_IF
END_IF
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN($rx1,$ry1, $rx2,$ry2, $red)
$check = 1
ELSE
WAITMS(25)
END_IF
END_CYC
-
А что именно смущает? Размер кода? Ну вынести его в инклюд и все дела.
А можно заменить на массивы, только задавать будет не так наглядно.
Или файлы ini - никакой выгоды, те же строки, то же количество, только вынесены в ini.
Или в файлы txt. Тут 2 варианта в одном файле или с разделением. Нужно выбрать по ситуации, смотря как удобней заносить и редактировать данные в конкретной задаче.
Если у тебя координаты это последовательности, можно их вычислять на лету.
-
// массив, всё в одной куче
STRSEPARATE("1410,690,1405,685,1415,695,1415,690,1410,685,1430,695,1420,690,1415,685,1425,695", ",", $data)
FOR($i=0, $i < ARRSIZE($data), 6)
$rx = $data[$i]
$ry = $data[$i+1]
$rx1 = $data[$i+2]
$ry1 = $data[$i+3]
$rx2 = $data[$i+4]
$ry2 = $data[$i+5]
END_CYC
// массив, каждые данные в своём массиве
STRSEPARATE("1410,1415,1420", ",", $a_rx)
STRSEPARATE("690,690,690", ",", $a_ry)
STRSEPARATE("1405,1410,1415", ",", $a_rx1)
STRSEPARATE("685,685,685", ",", $a_ry1)
STRSEPARATE("1415,1430,1425", ",", $a_rx2)
STRSEPARATE("695,695,695", ",", $a_ry2)
FOR($i=0, $i < ARRSIZE($a_rx))
$rx = $a_rx[$i]
$ry = $a_ry[$i]
$rx1 = $a_rx1[$i]
$ry1 = $a_ry1[$i]
$rx2 = $a_rx2[$i]
$ry2 = $a_ry2[$i]
END_CYC
// то же самое из файла/ов
//всё в куче
TFREADARR("data.txt", $data)
FOR($i=0, $i < ARRSIZE($data), 6)
$rx = $data[$i]
$ry = $data[$i+1]
$rx1 = $data[$i+2]
$ry1 = $data[$i+3]
$rx2 = $data[$i+4]
$ry2 = $data[$i+5]
END_CYC
// каждые данные в своём файле-массиве
TFREADARR("a_rx.txt", $a_rx)
TFREADARR("a_ry.txt", $a_ry)
TFREADARR("a_rx1.txt", $a_rx1)
TFREADARR("a_ry1.txt", $a_ry1)
TFREADARR("a_rx2.txt", $a_rx2)
TFREADARR("a_ry2.txt", $a_ry2)
FOR($i=0, $i < ARRSIZE($a_rx))
$rx = $a_rx[$i]
$ry = $a_ry[$i]
$rx1 = $a_rx1[$i]
$ry1 = $a_ry1[$i]
$rx2 = $a_rx2[$i]
$ry2 = $a_ry2[$i]
END_CYC
// или комбинации. Что можно вычислить вычисляем, что нельзя задаём в массивах
-
Информация полезная в заметки, но я имел ввиду другое. Я хотел избежать ручного вбивания координат, что то вроде наращивания переменных может быть, и так же, что бы на некоторых координатах как в кейсах условие не срабатывало.)
-
Да кто ж его знает что тебя не устраивало. Проблема была заменить свитч, а не заменить ввод данных
...как можно заменить свитч?
Про данные...
Если у тебя координаты это последовательности, можно их вычислять на лету.
Нужно проанализировать цикличность и вычислять если можно. Смотрю там всё подвержено странной логике и, наверно, без объяснения что это за координаты и как они формируются не понять или очень долго разбираться.
Было бы гораздо понятней с объяснением типа. Сетка ячеек n на m так-то и так-то по ним проходимся в таких направлениях... Такие-то пропускаем. И прочие нюансы.
-
https://www.youtube.com/watch?v=-ll8UIjg-No
Не знаю как объяснить, скрипт прокликивает в игре овальную траекторию по миникарте. На поворотах мобы исчезают из поля зрения, на видео этого нету, но видно как они отдаляются
-
Ну вот что нарисовало.
Чёрным - rx, ry
зелёным - rx1, ry1
красным - rx2, ry2
Что за смещение в зелёной области слева вверху?
Красный в начале вообще мечется беспорядочно, возможно координаты напутаны.
Если они все будут одинаковые просто со смещением задать будет не сложно.
-
Всё должно быть ровно, это скорее я напутал. Расстояние между чёрными точками 5 пикселей, на повороте 10. У каждой чёрной точки есть своя зона поиска 15 на 15 в которой анализируется миникарта на красный пиксель, что бы дистанцию между мобами контролировать.
(http://data3.floomby.com/files/share/21_12_2016/8/4lxoPdlDkeFc6gH5FTniw.jpg)
-
Всё хорошо, только нижний ряд на повороте вверху 10, внизу 5.
И зона не 15х15, а 10х10.
Так в твоих данных.
-
ну смысл ясен)
-
Вот как у тебя было... так и сделал, только правильно.
// левая точка в верхнем ряду (из 10) - базовая. Её смещение 0/0.
// Её номер 1. Нумерация по часовой стрелке (так и было).
//
INC($var,1)
IF($var < 11) // верхний ряд
$dx = ($var-1) * 5 // дельта значения X
$dy = 0 // дельта значения Y
END_IF
IF(($var > 12) & ($var < 23)) // нижний ряд
$dx = (9 - ABS($var - 13)) * 5
$dy = 25
END_IF
IF(($var = 11) | ($var = 12)) // правые точки
$dx = 55
$dy = ($var - 10) * 10
END_IF
IF(($var = 23) | ($var = 24)) // левые точки
$dx = -15
$dy = 25 - ($var - 22) * 10
END_IF
$rx = 1410 + $dx
$ry = 690 + $dy
$rx1 = $rx - 5
$ry1 = $ry - 5
$rx2 = $rx + 5
$ry2 = $ry + 5
MOVE($rx,$ry)
LCLICK($rx,$ry)
WAITMS(300)
// и т.д.
-
Смотри слева поворот отстоит на 15, а не 10.
Овал чуть наклонён, правые ниже, левые выше.
-
Это то, что мне было нужно. Спасибо.
-
Это то, что мне было нужно. Спасибо.
Я не смог в нём разобраться и всё исправить, закоменти код пожалуйста).