Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Отдельная тема по сокращению кода.

Страниц (5): [1] 2 3 4 5 »
 

1. 007wan - 29 Апреля, 2019 - 08:31:47 - перейти к сообщению
Я никогда не умел сокращать код и поэтому я создал отдельную тему, что бы узнат ькак это можно сделать.
Вот такой хитрый код у меня и я не знаю как его сжать. Объясню в коде через //
Код (Отобразить)

(Добавление)
Грубо говоря ЭТОТ
код 1 из таймера (Отобразить)

Повторяется что и в этом же таймере, но случаи разные
кода 2 из таймера (Отобразить)
Из-за
CODE:
Log(format(#Time[0])+"Ошибка в работе. Окно игры не найдено.");
и
CODE:
Log(format(#Time[0])+"Не удается найти Image_0.bmp");
коды разные, но часть из них все-таки слишком одинакова если не считать вверхние строчки, но случаи абсолютно разные.
(Добавление)
Конечно я могу запилить это в функцию и вызывать ее, но в функции никак не поменять эти строчки и не понятно как их вызывать в каких случаях. А про метки вообщзе молчу. то, что выше выполнятся не будет, а это нужно
2. Dantes3000 - 29 Апреля, 2019 - 08:45:41 - перейти к сообщению
CODE:
fu("Ошибка в работе. Окно игры не найдено.");


function fu(string str)
{

Log(format(#Time[0])+str);

//тоже самое, что и повторябщиеся

}
3. 007wan - 29 Апреля, 2019 - 08:52:46 - перейти к сообщению
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 может быть неограниченно.
4. Dantes3000 - 29 Апреля, 2019 - 10:52:01 - перейти к сообщению
loop(3) mouse(LEFT, Image_x[0], Image_y[0], Game);
5. 007wan - 29 Апреля, 2019 - 10:55:20 - перейти к сообщению
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);
}
}







6. Dantes3000 - 29 Апреля, 2019 - 13:08:08 - перейти к сообщению
Можешь моей функцией пользоваться

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]));
7. Zireael - 29 Апреля, 2019 - 23:43:48 - перейти к сообщению
 Цитата:
WaitPic(#Image_0, 100, format(#Load_Checkbox2[0]));

 Цитата:
WaitPic(#Image_0[0][0], 100, format(#Load_Checkbox2[0]));

007wan, в визуальном редакторе коде создайте несколько поисков изображения и посмотрите полученный код. Функция для поиска изображений одна, но может выполнять разные действия.
В любом случае сначала нужно разобраться с передачей параметров и указателей в функцию.
8. 007wan - 30 Апреля, 2019 - 05:10:58 - перейти к сообщению
 Zireael пишет:
WaitPic(#Image_0[0][0], 100, format(#Load_Checkbox2[0]), 5);//последний параметр - количество кликов. А в функции добавить loop()//количество кликов

(Добавление)
 007wan пишет:
А в функции добавить loop()//количество кликов
не стану расписывать и так понятно.
9. 007wan - 02 Мая, 2019 - 03:42:52 - перейти к сообщению
Это можно как-нибудь сократить?
Код (Отобразить)
10. Zireael - 02 Мая, 2019 - 03:55:02 - перейти к сообщению
 Цитата:
Это можно как-нибудь сократить?

Это будет иметь смысл только если пунктов меню много.

Powered by ExBB FM 1.0 Final