007wan |
Отправлено: 29 Апреля, 2019 - 16:31:47
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Я никогда не умел сокращать код и поэтому я создал отдельную тему, что бы узнат ькак это можно сделать.
Вот такой хитрый код у меня и я не знаю как его сжать. Объясню в коде через //
Код (Отобразить)CODE:CREATE_TIMER(2, 1000)
{
Game = window (-1, "GeckoFPSandboxChildWindow", window ("тут имя окна...", "MozillaWindowClass", -1));
if (Game != 0)
{
if(SettingGame == "0")
{
Log(format(#Time[0])+"Идет настройка бота...");
if(findimage(1, #Image_0[0][0], -1, #ImageX[0], #ImageX[0], 0, 0, Display_Width, Display_Height, -1) > 0)
{
sendmouse (LEFT, ImageX[0], ImageY[0], Game);
sendmouse (LEFT, ImageX[0], ImageY[0], Game);
sendmouse (LEFT, ImageX[0], ImageY[0], Game);
}
else
{
GetWindowText(Object_Button1, address(#Text_Button1[0]), sizearray(Text_Button1));//повторяющаяся
GetWindowText(Object_Button2, address(#Text_Button2[0]), sizearray(Text_Button2));//повторяющаяся
if(format(#Text_Button1[0]) == "Остановить")//повторяющаяся
{
Log(format(#Time[0])+"Не удается найти Image_0.bmp");
SetWindowTextA(Object_Button1, "Запустить");
EnableWindow(Object_Button2, 0);
transparency(100, Browser);
if(format(#Text_Button2[0]) == "Отключить визуальное окно")//повторяющаяся
{
SetWindowTextA(Object_Button2, "Получить изображение из игры");//повторяющаяся
disablevisualwindow(0);//повторяющаяся
resettextout(1);//повторяющаяся
}
disabletimer(2);//повторяющаяся
}
}
}
SettingGame = "0";
Log(format(#Time[0])+"Бот настроен.");
}
else
{
GetWindowText(Object_Button1, address(#Text_Button1[0]), sizearray(Text_Button1));//тоже самое, что и повторябщиеся
GetWindowText(Object_Button2, address(#Text_Button2[0]), sizearray(Text_Button2));//тоже самое, что и повторябщиеся
if(format(#Text_Button1[0]) == "Остановить")//тоже самое, что и повторябщиеся
{
Log(format(#Time[0])+"Ошибка в работе. Окно игры не найдено.");//тоже самое, что и повторябщиеся, ВОТ только из-за этой строчки она отличается я не могу сделать метку иначе игнорируется то, что выше
SetWindowTextA(Object_Button1, "Запустить");//тоже самое, что и повторябщиеся
EnableWindow(Object_Button2, 0);//тоже самое, что и повторябщиеся
transparency(100, Browser);//тоже самое, что и повторябщиеся
if(format(#Text_Button2[0]) == "Отключить визуальное окно")//тоже самое, что и повторябщиеся
{
SetWindowTextA(Object_Button2, "Получить изображение из игры");//тоже самое, что и повторябщиеся
disablevisualwindow(0);//тоже самое, что и повторябщиеся
resettextout(1);//тоже самое, что и повторябщиеся
}
disabletimer(2);//тоже самое, что и повторябщиеся
}
}
}
(Добавление)
Грубо говоря ЭТОТкод 1 из таймера (Отобразить)CODE:GetWindowText(Object_Button1, address(#Text_Button1[0]), sizearray(Text_Button1));
GetWindowText(Object_Button2, address(#Text_Button2[0]), sizearray(Text_Button2));
if(format(#Text_Button1[0]) == "Остановить")
{
Log(format(#Time[0])+"Ошибка в работе. Окно игры не найдено.");
SetWindowTextA(Object_Button1, "Запустить");
EnableWindow(Object_Button2, 0);
transparency(100, Browser);
if(format(#Text_Button2[0]) == "Отключить визуальное окно")
{
SetWindowTextA(Object_Button2, "Получить изображение из игры");
disablevisualwindow(0);
resettextout(1);
}
disabletimer(2);
}
Повторяется что и в этом же таймере, но случаи разные
кода 2 из таймера (Отобразить)CODE: GetWindowText(Object_Button1, address(#Text_Button1[0]), sizearray(Text_Button1));
GetWindowText(Object_Button2, address(#Text_Button2[0]), sizearray(Text_Button2));
if(format(#Text_Button1[0]) == "Остановить")
{
Log(format(#Time[0])+"Не удается найти Image_0.bmp");
SetWindowTextA(Object_Button1, "Запустить");
EnableWindow(Object_Button2, 0);
transparency(100, Browser);
if(format(#Text_Button2[0]) == "Отключить визуальное окно")
{
SetWindowTextA(Object_Button2, "Получить изображение из игры");
disablevisualwindow(0);
resettextout(1);
}
disabletimer(2);
}
}
} Из-за CODE: Log(format(#Time[0])+"Ошибка в работе. Окно игры не найдено."); и CODE: Log(format(#Time[0])+"Не удается найти Image_0.bmp"); коды разные, но часть из них все-таки слишком одинакова если не считать вверхние строчки, но случаи абсолютно разные.
(Добавление)
Конечно я могу запилить это в функцию и вызывать ее, но в функции никак не поменять эти строчки и не понятно как их вызывать в каких случаях. А про метки вообщзе молчу. то, что выше выполнятся не будет, а это нужно(Отредактировано автором: 29 Апреля, 2019 - 16:36:11) |
|
|
007wan |
Отправлено: 29 Апреля, 2019 - 16:52:46
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Dantes3000 , Спасибо.
Я тут подумал. Можно и такое запилить. Как раз недавно об этом писал.
CODE:
StopScript("1");//пишем номер ошибки или команды, что бы вызвать нужную строку сообщения
function StopScript(int error)
{
string Errors[2] = {"Бот остановлен пользователем", "Бот остановлен. Причина: не найдено игровое окно."};
//дальше я не буду описывать, но суть в том, что какую цифру примем, то такой текст и возьмем
}
(Добавление)
А как бороться с этим?
Цитата: if(findimage(1, #Image_0[0][0], -1, #Image_x[0], #Image_y[0], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
//messagebox("Найдено");
if(format(#Load_Checkbox2[0]) == "1")
{
sendmouse(LEFT, Image_x[0], Image_y[0], Game);
sendmouse(LEFT, Image_x[0], Image_y[0], Game);
sendmouse(LEFT, Image_x[0], Image_y[0], Game);
}
else
{
mouse(LEFT, Image_x[0], Image_y[0], Game);
mouse(LEFT, Image_x[0], Image_y[0], Game);
mouse(LEFT, Image_x[0], Image_y[0], Game);
} Повторяется. Дело в том, что у меня поиск изображений будет очень много и каждый раз писать это не очень. Потому что sendmouse нажимает только в неактивном окне, поэтому приходится использовать mouse
(Добавление)
+} забыл.
(Добавление)
sendmouse и mouse может быть неограниченно. |
|
|
007wan |
Отправлено: 29 Апреля, 2019 - 18:55:20
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Dantes3000 , Да не, дело не в этом, что и сколько повторять, а в том, что приходится сравнивать галочку если выбрана и имеет значение 1, то использовать sendmouse, а если 0, то mouse
CODE: if(format(#Load_Checkbox2[0]) == "1")//узнаем состояние галочки
{//если 1
sendmouse(LEFT, Image_x[0], Image_y[0], Game);//клик вне окна
}
else
{
mouse(LEFT, Image_x[0], Image_y[0], Game);//использовать клик в окне
}
(Добавление)
Причем если таких поиска изображений много, то приходится постоянно сравнивать то, что выше
(Добавление)
Грубо говоря вот что выйдет:
CODE: if(findimage(1, #Image_0[0][0], -1, #Image_x[0], #Image_y[0], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
if(format(#Load_Checkbox2[0]) == "1")
{
sendmouse(LEFT, Image_x[0], Image_y[0], Game);
}
else
{
mouse(LEFT, Image_x[0], Image_y[0], Game);
}
}
if(findimage(1, #Image_1[0][0], -1, #Image_x[0], #Image_y[0], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
if(format(#Load_Checkbox2[0]) == "1")//снова сравниваем, как избавится?
{//если кликов может быть не один.
sendmouse(LEFT, Image_x[0], Image_y[0], Game);
}
else
{
mouse(LEFT, Image_x[0], Image_y[0], Game);
}
}
(Отредактировано автором: 29 Апреля, 2019 - 18:56:39) |
|
|
Dantes3000 |
Отправлено: 29 Апреля, 2019 - 21:08:08
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Можешь моей функцией пользоваться
CODE:function WaitPic(int #arr, int r, string click)
{
int x,y;
looptime(50000)
{
if(findimage(1, #arr[0][0], 0, #x, #y, 0, 0, xe, ye,r,r,r,r,r,r,100,1, w)>0)
{
if(click=="1") mouse(LFFT, x, y, w);
else sendmouse(LEFT, x, y, w);
log("Найдено");
return 1;
}
sleep(10);
}
log("Не найдено!");
return 0;
}
WaitPic(#Image_0, 100, format(#Load_Checkbox2[0])); |
|
|
Zireael |
Отправлено: 30 Апреля, 2019 - 07:43:48
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: WaitPic(#Image_0, 100, format(#Load_Checkbox2[0]));
Цитата: WaitPic(#Image_0[0][0], 100, format(#Load_Checkbox2[0]));
007wan, в визуальном редакторе коде создайте несколько поисков изображения и посмотрите полученный код. Функция для поиска изображений одна, но может выполнять разные действия.
В любом случае сначала нужно разобраться с передачей параметров и указателей в функцию. |
|
|
007wan |
Отправлено: 30 Апреля, 2019 - 13:10:58
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: WaitPic(#Image_0[0][0], 100, format(#Load_Checkbox2[0]), 5);//последний параметр - количество кликов. А в функции добавить loop()//количество кликов
(Добавление)
007wan пишет: А в функции добавить loop()//количество кликов не стану расписывать и так понятно. |
|
|
007wan |
Отправлено: 02 Мая, 2019 - 11:42:52
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Это можно как-нибудь сократить?Код (Отобразить)CODE:HMENU = CreateMenu();
AppendMenu(HMENU, MF_POPUP, 1, "Настройки" );
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(gethwnd(0), HMENU);
HMENU1 = CreatePopupMenu();
HMENU2 = CreatePopupMenu();
HMENU3 = CreatePopupMenu();
AppendMenu(HMENU2, MF_STRING, 2, "Минимальный" );
AppendMenu(HMENU2, MF_STRING, 3, "Максимальный" );
AppendMenu(HMENU3, MF_STRING, 4, "25%" );
AppendMenu(HMENU3, MF_STRING, 5, "50%" );
AppendMenu(HMENU3, MF_STRING, 6, "75%" );
AppendMenu(HMENU3, MF_STRING, 7, "100%" );
AppendMenu(HMENU1, MF_POPUP, HMENU2, "Размер окна" );
AppendMenu(HMENU1, MF_POPUP, HMENU3, "Прозрачность" ); |
|
|
|