Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Без описания
Adomb
Отправлено: 30 Июля, 2015 - 11:15:08
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015  
Репутация: 1




Допустим так
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.

(Отредактировано автором: 30 Июля, 2015 - 11:17:09)

 
 Top
Kibor
Отправлено: 30 Июля, 2015 - 11:59:39
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




если ответить на вопрос названия темы то так перейти на метку вне функции зависимо от выполнения функции
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;
}
 
 Top
Adomb
Отправлено: 30 Июля, 2015 - 12:07:22
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015  
Репутация: 1




Блин, спасибо, мозги вправляете, ведь очевидно же, что именно так правильно/будет работать, как указали.
 
 Top
Kibor
Отправлено: 30 Июля, 2015 - 12:12:28
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




поправил код. там вообще лишне возвращать с функции.

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

так надо
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 минут бот выйдет с цикла и завершит работу.

можно к примеру перегрузить страницу и перезапустить скрипт сначала или еще что то..
 
 Top
Adomb
Отправлено: 30 Июля, 2015 - 12:37:55
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015  
Репутация: 1




Ну в цикле у меня картинки ищутся через "if (функция найти картинку()==1)", и бот ищет картинки круглосуточно, так как события происходят постоянно. Но мысль понятна.
UPD. А, имеется ввиду, что когда зайдёт на функцию B() и в ней картинка по какой-либо причине не появится, бот зациклится и "сломается" Радость
Ясно. Да, очень хорошая идея.
(Добавление)
В главном цикле у меня есть метки, которые останавливают скрипт, если что-то не так пошло.

(Отредактировано автором: 30 Июля, 2015 - 12:42:19)

 
 Top
Kibor
Отправлено: 30 Июля, 2015 - 13:08:59
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Adomb пишет:
В главном цикле у меня есть метки, которые останавливают скрипт, если что-то не так пошло.

это лучше делать не главном цикле.. это лучше делать в таймере. то есть в таймере можно отслеживать появление каких то окон, надписей, табличек которые могу появляться в любое время.. ну а в главном цикле если что то можно ожидать конкретно..
пример тут Учебный, полезный и рабочий бот для На рыбалку в вк
 
 Top
Adomb
Отправлено: 30 Июля, 2015 - 14:58:26
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015  
Репутация: 1




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;
}

то вообще три раза срабатывает. Я не могу понять. Радость

(Отредактировано автором: 30 Июля, 2015 - 15:03:22)

 
 Top
Kibor
Отправлено: 30 Июля, 2015 - 15:55:26
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




........

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

B();

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

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

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

B();

------------------------------------
(для просмотра ссылки Вам необходимо авторизоваться)
 
 Top
Adomb
Отправлено: 30 Июля, 2015 - 16:05:43
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015  
Репутация: 1




Вы, наверно, не поняли
код (Отобразить)

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

(Отредактировано автором: 30 Июля, 2015 - 16:07:41)

 
 Top
Kibor
Отправлено: 30 Июля, 2015 - 18:30:31
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Я вижу то что есть в коде.
Я не вижу то что есть в программе(игре).
Могу посмотреть если будет скайп.. ну и если надо..


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


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

CODE:
goto global M;

M:; - метка вне функции.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by