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

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

1. Adomb - 30 Июля, 2015 - 03:15:08 - перейти к сообщению
Допустим так
CODE:

loop:
...
здесь что-нидь исполняется
...
и хоп-
function B()
...
sleep(500);
goto loop;

function B()
{
mb: sendmouse(LEFT, x, y, main); //ткнуть
sleep(500);
if ((1@()==1)||(2@()==1))goto mb2;
else goto mb;
mb2:
}

1@ и 2@, соответственно, ищут картинки.
Ткнули, если картинки не найдены, снова ткнули.
Если найдена хоть одна - как прыгнуть, например, на loop (goto loop), а не на mb2?
Или закончить выполнение функции без goto mb2? Я сначала сделал:
CODE:
function B()
{
mb: sendmouse(LEFT, x, y, main); //ткнуть
sleep(500);
if ((1@()==1)||(2@()==1));
else goto mb;
}

чувствовал, что будет ошибка, так и вышло - отсутствует метка goto.
2. Kibor - 30 Июля, 2015 - 03:59:39 - перейти к сообщению
если ответить на вопрос названия темы то так перейти на метку вне функции зависимо от выполнения функции
CODE:
int a;

loop:
...
здесь что-нидь исполняется
ff:;
...
a=B();
if (a==1) goto ff;........../////////
if (a==2) goto hh;........../////////

...
здесь что-нидь исполняется
hh:;
...
sleep(500);
goto loop;

function B()
{
if (1@()==1)return 1;
if (2@()==1)return 2;
return 0;
}


если по самому вопросу в теле темы то так
CODE:
loop:
...
здесь что-нидь исполняется
...
B();
sleep(500);
goto loop;

function B()
{
mb: sendmouse(LEFT, x, y, main); //ткнуть..
sleep(500);
if (1@()==1||2@()==1)return;
goto mb;
}
3. Adomb - 30 Июля, 2015 - 04:07:22 - перейти к сообщению
Блин, спасибо, мозги вправляете, ведь очевидно же, что именно так правильно/будет работать, как указали.
4. Kibor - 30 Июля, 2015 - 04:12:28 - перейти к сообщению
поправил код. там вообще лишне возвращать с функции.

ну а если говорить о правильности и стабильности... то никогда нельзя делать такой код который загоняет в замкнутый цикл без какого то времени разрешенного на него. так как в случае к примеру проблем с интернетом (если в браузере) или еще каких то непредвиденных вообще ситуаций (просто не появятся картинки) бот зависнет...

так надо
CODE:
loop:
...
здесь что-нидь исполняется
...
if (B()==-1) {messagebox ("прошло более 10 мин.. и ничего не нашлось......");goto er;}

sleep(500);
goto loop;

er:;
function B()
{
int t=gettime();
mb: sendmouse(LEFT, x, y, main); //ткнуть
sleep(500);
if (1@()==1||2@()==1)return 1;
if (gettime()-t<600000)goto mb;
return -1;
}


тут просто через 10 минут бот выйдет с цикла и завершит работу.

можно к примеру перегрузить страницу и перезапустить скрипт сначала или еще что то..
5. Adomb - 30 Июля, 2015 - 04:37:55 - перейти к сообщению
Ну в цикле у меня картинки ищутся через "if (функция найти картинку()==1)", и бот ищет картинки круглосуточно, так как события происходят постоянно. Но мысль понятна.
UPD. А, имеется ввиду, что когда зайдёт на функцию B() и в ней картинка по какой-либо причине не появится, бот зациклится и "сломается" Радость
Ясно. Да, очень хорошая идея.
(Добавление)
В главном цикле у меня есть метки, которые останавливают скрипт, если что-то не так пошло.
6. Kibor - 30 Июля, 2015 - 05:08:59 - перейти к сообщению
 Adomb пишет:
В главном цикле у меня есть метки, которые останавливают скрипт, если что-то не так пошло.

это лучше делать не главном цикле.. это лучше делать в таймере. то есть в таймере можно отслеживать появление каких то окон, надписей, табличек которые могу появляться в любое время.. ну а в главном цикле если что то можно ожидать конкретно..
пример тут Учебный, полезный и рабочий бот для На рыбалку в вк
7. Adomb - 30 Июля, 2015 - 06:58:26 - перейти к сообщению
CODE:
int a=1;

if (B()==-1) {messagebox ("бла..бла..");goto er;}

B();

er:

function B()
{
int t=gettime();
beep(2500, 1000); // какое-нибудь действие
sleep(500);
mb:
beep(2500, 400); //действие, которое зацикливается, если a не равно 1
sleep(500);
if (a==1)return 1;
if (gettime()-t<4000)goto mb;
return -1;
}

Но, если с таймером, получается он функцию два раза с начала проходит, если условие верно, прежде чем сработает a=1. По писку понятно. Должен же на "if (a==1)return 1; " просто выйти из функции, а выходит только на второй раз. Почему так?
(Добавление)
Хотя таймер не причём, так тоже 2 раза функцию обрабатывает.
CODE:
int a=1;

if (B()==-1) {messagebox ("бла..бла..");goto er;}

B();

er:

function B()
{
int t=gettime();
beep(2500, 1000); // какое-нидь действие
sleep(500);
mb:
beep(2500, 400); //действие, которое зацикливается, если a не равно 1
sleep(500);
if (a==1)return 1;
if (a!=1)goto mb;
return -1;
}

(Добавление)
А если добавить переменную
CODE:
int a=1;

int b=B(); //добавили переменную

if (B()==-1) {messagebox ("бла..бла..");goto er;}

B();

er:

function B()
{
beep(2500, 1000); // какое-нидь действие
sleep(500);
mb:
beep(2500, 400); //действие, которое зацикливается, если a не равно 1
sleep(500);
if (a==1)return 1;
if (a!=1)goto mb;
return -1;
}

то вообще три раза срабатывает. Я не могу понять. Радость
8. Kibor - 30 Июля, 2015 - 07:55:26 - перейти к сообщению
........

а зачем вызывать 2... 3 раза??
if (B()==-1) {messagebox ("бла..бла..");goto er;}

B();

========================

int b=B(); //добавили переменную

if (B()==-1) {messagebox ("бла..бла..");goto er;}

B();

------------------------------------
(для просмотра ссылки Вам необходимо авторизоваться)
9. Adomb - 30 Июля, 2015 - 08:05:43 - перейти к сообщению
Вы, наверно, не поняли
код (Отобразить)

Функция B() вызывается один раз и, если условие верно (a==1), скрипт должен просто выйти из функции, и закончить свою работу. Но это не происходит, пока функция не сработает дважды. Понимаете? Только после двух раз, это можно отловить запустив скрипт. Должно пикнуть - 1 длинный и один короткий, а пикает по кругу 2 раза. Если вместо пика кликать мышью, скрипт сделает лишние клики.
10. Kibor - 30 Июля, 2015 - 10:30:31 - перейти к сообщению
Я вижу то что есть в коде.
Я не вижу то что есть в программе(игре).
Могу посмотреть если будет скайп.. ну и если надо..


======================


Появилась возможность выйти из функции на метку основного скрипта по инструкции

CODE:
goto global M;

M:; - метка вне функции.

Powered by ExBB FM 1.0 Final