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

Страниц (1): [1]
 

1. Bubblegum - 06 Ноября, 2014 - 08:32:05 - перейти к сообщению
Приветствую!

Скрипт как в моей теме(для просмотра ссылки Вам необходимо авторизоваться)
CODE:

int mob[3];
mob[0]=117; mob[1]=118; mob[2]=119;

//int baf_time[1];
//baf_time[0]=90000;

//int baf_t[1];
//baf_t[0];

int col_pix, X_pix, Y_pix;
int col_pix1, X_pix1, Y_pix1;
int col_pix2, X_pix2, Y_pix2;
int col_pix3, X_pix3, Y_pix3;

int N=0;
int k_mob=0;
int k_error_tim;
int col, xek, yek;
int error_tim=25000;


nastroit();

////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////Основной цикл///////////////////////////////////////
cikl:;

keydown(116);
pause(rand(100, 200));
keyup(116);
pause(rand(500, 550));


if (getcolor(X_pix, Y_pix)!=col_pix)
{
cikl1: keydown(mob[k_mob]);pause(rand(100, 200));keyup(mob[k_mob]);
k_mob++;
if (k_mob==2)k_mob=0;
pause(rand(1000, 1100));
}



if (getcolor(X_pix, Y_pix)==col_pix)
{
bit1: k_error_tim=gettime();
bit: if (getcolor(X_pix, Y_pix)==col_pix)
{

if(gettime()-k_error_tim>error_tim)
{
if (getcolor(X_pix1, Y_pix1)==col_pix1)
{
keydown(27);pause(rand(100, 200));keyup(27);
goto cikl1;
}
}




keydown(113);pause(rand(100, 200));keyup(113);
keydown(112);pause(rand(100, 200));keyup(112);
goto bit;
}

N++;
textout(0, X_pix, Y_pix+20, "Мобов слито:"+format (N), 0);
podbor();

goto cikl;
}
/////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////Подбор///////////////////////////////////////////

function podbor()
{
keydown(115);pause(rand(450, 500));keyup(115);keydown(115);pause(rand(450, 500));keyup(115);
keydown(115);pause(rand(450, 500));keyup(115);keydown(115);pause(rand(450, 500));keyup(115);
keydown(115);pause(rand(450, 500));keyup(115);keydown(F4);pause(rand(450, 500));keyup(115);
keydown(115);pause(rand(450, 500));keyup(115);keydown(F4);pause(rand(450, 500));keyup(115);
keydown(115);pause(rand(450, 500));keyup(115);keydown(27);pause(rand(100, 200));keyup(27);
}


//////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////Настройка//////////////////////////////////////////
function nastroit()
{
getdisplay(col, xek, yek);
xek=xek/2-200; yek=yek/2;

textbkcolor (0,255);
textout(0, xek, yek, "Первый пиксель ХП:", 0);
e: if (getkeystate(192)==0) {sleep(50); goto e;}
getmouse(X_pix, Y_pix);
q: if (getcolor(X_pix, Y_pix)==getcolor(X_pix-1, Y_pix)) {X_pix--; goto q;}
col_pix=getcolor(X_pix, Y_pix);
pause(500);

textbkcolor (0,65280);
textout(0, xek, yek, "Последний пиксель ХП:", 0);
e1: if (getkeystate(192)==0) {sleep(50); goto e1;}
getmouse(X_pix1, Y_pix1);
q1: if (getcolor(X_pix1, Y_pix1)==getcolor(X_pix1+1, Y_pix1)) {X_pix1++; goto q1;}
col_pix1=getcolor(X_pix1, Y_pix1);

pause (500);


textbkcolor (0,65280);
textout(0, xek, yek, "Старт?", 0);
e7: if (getkeystate(192)==0) {sleep(50); goto e7;}
pause (5000);

textout(0, xek, yek, "", 2);
resettextout(1);
textbkcolor (0,65280);
}


В целом работает, и задачу выполняет, однако периодически случается остановка скрипта, без какого-либо сообщения об ошибках и вылет в окно среды разработки. Следил за скриптом в процессе выполнения и пытался ловить что бы могло вызвать ошибку - и не смог, вроде все делает как надо, никакие внутриигровые глюки вроде не мешают, мобы там застрявшие или исчезающие, не знаю, окошки перекрывали может быть полоску ХП моба, ничего такого).

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

Спасибо!
2. Kibor - 06 Ноября, 2014 - 13:31:28 - перейти к сообщению
все просто...
цикл замкнут goto cikl

а оно в блоке if (getcolor(X_pix, Y_pix)==col_pix)

отсюда, переход на метку только если if (getcolor(X_pix, Y_pix)==col_pix)


а если нет, то финиш...

вынесите goto cikl за блок
3. Bubblegum - 06 Ноября, 2014 - 13:38:41 - перейти к сообщению
Спасибо! Сейчас запущу, буду смотреть вылетит или нет.

А по вопросу отладки и поиска мест вылета, на будущее, что-нибудь посоветуете?
4. Kibor - 06 Ноября, 2014 - 13:54:40 - перейти к сообщению
CODE:
log("wwwaardtygyiu");
log("jhljihkjio");

function log(string s)
{
if (fope n ("c:\5.txt", "a")!=0)
{
fwri e(s);fwrit e(ENDL);
fclos e();
}
}


что то с форумом.. удалить пробелы
5. Bubblegum - 06 Ноября, 2014 - 14:26:17 - перейти к сообщению
Ну то есть вести логирование каждой функции или даже нескольких точек в функциях, все записывать в файл последовательно, чтобы при вылете по логу видеть где мы находились в последний раз, так я понимаю.

 Kibor пишет:
CODE:
log("wwwaardtygyiu");
log("jhljihkjio");

function log(string s)
{
if (fope n ("c:\5.txt", "a")!=0)
{
fwri e(s);fwrit e(ENDL);
fclos e();
}
}


что то с форумом.. удалить пробелы
6. Kibor - 06 Ноября, 2014 - 14:28:16 - перейти к сообщению
наверно...
только вылетало из за петли неправильной
7. Bubblegum - 06 Ноября, 2014 - 14:37:19 - перейти к сообщению
 Kibor пишет:
наверно...
только вылетало из за петли неправильной


Да, цикл поправил уже, тестирую, обычно за ночь работы вылетаело стабильно. Сегодня-завтра-послезавтра ставлю на проверку. Вдруг не только это...

Если мне память не изменяет, оператор goto никогда не пользовался особой популярностью среди программеров, вроде мог работать как-то криво. А здесь у меня их понатыкано достаточно.

Хотя мои знания ниразу не авторитет, я этим последний раз в школе еще интересовался, бейсик/делфи. Насколько он надежен в си++ не имею понятия.
8. Kibor - 06 Ноября, 2014 - 14:53:33 - перейти к сообщению
 Bubblegum пишет:
оператор goto никогда не пользовался особой популярностью среди программеров, вроде мог работать как-то криво


гг... им бы волю дать...
для информации, goto это самое близкое к машинной команде EB xx.
и все эти if, for, while сделаны для удобства и транслируются в goto, то есть EB

просто надо применять правильно . ну конечно не стоит писать сплошное полотно с goto..
код должен быть читаем, но не бояться использовать где надо.
9. Bubblegum - 06 Ноября, 2014 - 15:02:26 - перейти к сообщению
 Kibor пишет:
 Bubblegum пишет:
оператор goto никогда не пользовался особой популярностью среди программеров, вроде мог работать как-то криво


гг... им бы волю дать...
для информации, goto это самое близкое к машинной команде EB xx.
и все эти if, for, while сделаны для удобства и транслируются в goto, то есть EB

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


Ну, повторюсь, я чайник в этом всем. Спасибо за помощь, продолжаю разбираться.

Powered by ExBB FM 1.0 Final