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

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

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

> Описание: Как разделить строку на числа.. И как кликнуть в окно по указателю на окно..
legro0303
Отправлено: 19 Июля, 2020 - 15:13:58
Post Id



Пользователь
Наблюдатель


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




Добрый день, не могу разобраться как в символьном массиве char найти несколько числовых значений, каждое из которых присвоить новой переменной типа double ?
Грубо говоря мне нужен аналог strtok из си.
Пример:
Имеется строка координат "990.123 550.7035 1234.01"
Необходимо разделить полученную строку на координаты
X = 990.123
Y = 550.7035
Z = 1234.01
 
 Top
Zireael
Отправлено: 19 Июля, 2020 - 15:25:06
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




CODE:
string s = "990.123 550.7035 1234.01";

string result[3];
if(regexsearch(sizearray(result), #result[0], s, "\d+(\.\d+)*")>0)
{
double X = formatsn(result[0]);
double Y = formatsn(result[1]);
double Z = formatsn(result[2]);

messagebox(X);
messagebox(Y);
messagebox(Z);
}

(Отредактировано автором: 19 Июля, 2020 - 15:27:58)

 
 Top
legro0303
Отправлено: 19 Июля, 2020 - 22:44:18
Post Id



Пользователь
Наблюдатель


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




 Zireael пишет:
CODE:
string s = "990.123 550.7035 1234.01";

string result[3];
if(regexsearch(sizearray(result), #result[0], s, "\d+(\.\d+)*")>0)
{
double X = formatsn(result[0]);
double Y = formatsn(result[1]);
double Z = formatsn(result[2]);

messagebox(X);
messagebox(Y);
messagebox(Z);
}


Огромное спасибо, теперь я смогу двигаться дальше. Хочу сделать бота для ММОРПГ. Пока что он распознает координаты на экране и помещает их в переменные типа double. Теперь мне нужно чтобы координаты считывались с экрана каждые ~5секунд и в зависимости от полученных координат нажимать клавиши на клавиатуре, не подскажете как можно это реализовать ?
Пример: X:11.22 Y:33.44 Z:55.66
Алгоритм действий:
1. Координаты X =11.22 Y =33.44 Z = 55.66?
Если да, то шаг 2, если нет, то нажать клавишу "0"(персонаж использует телепорт и окажется на необходимых для старта координатах)
2. Нажать клавишу "3" на верхней части клавиатуры (необходимо для вызыва питомца персонажа, чтобы быстрее передвигаться)
3. Нажимаем по клавише "W" (чтобы персонаж начал двигаться вперёд)
4. Координаты X =22.33 Y =33.44 Z = 55.66?
Если да, то шаг 5, если нет, то продолжать движение (Продолжать жать кнопку "W"Подмигивание
5. Жмем на клавишу "D" на 2 секунды (необходимо для поворота персонажа направо, т.к. на координатах X =22.33 Y =33.44 Z = 55.66 находится дерево которое нужно объехать_
и так далее до прохождения к необходимым координатам
Вот в чем заключается сам вопрос
Я посмотрел ролик о создании визуальном редакторе кода. Допустим я создам необходимый алгоритм, как мне в полученный алгоритм притянуть код который вы помогли мне написать ? Тобишь следующие проблемы возникают:
1. Как каждые 5 секунд проверять координаты заново, чтобы отталикиваясь от них делать необходимые действия
2. Как в визуальный редактор засунуть часть кода, где происходит преобразование координат в переменные типа double
 
 Top
Zireael
Отправлено: 19 Июля, 2020 - 22:48:42
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
1. Как каждые 5 секунд проверять координаты заново, чтобы отталикиваясь от них делать необходимые действия

Добавить таймер Версия 3.33 Добавление функции таймера (код выполняемый по времени)
 Цитата:
2. Как в визуальный редактор засунуть часть кода, где происходит преобразование координат в переменные типа double

Добавить блок кода или функцию.
 
 Top
legro0303
Отправлено: 19 Июля, 2020 - 23:41:32
Post Id



Пользователь
Наблюдатель


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




 Zireael пишет:
 Цитата:
1. Как каждые 5 секунд проверять координаты заново, чтобы отталикиваясь от них делать необходимые действия

Добавить таймер Версия 3.33 Добавление функции таймера (код выполняемый по времени)
 Цитата:
2. Как в визуальный редактор засунуть часть кода, где происходит преобразование координат в переменные типа double

Добавить блок кода или функцию.


Хорошо, попробую.
Подскажите пожалуйста, я сделал условие, что если у меня совпадают координаты, то бот жмет клавишу "0" на верхней клавиатуре. Условие срабатывает, однако клавиша не нажимается. Подозреваю что проблема в том, что окно игры является неактивным. Смотрел примеры и не понял, как получить закодычную переменную "win w", которая является одним из параметров функции sendkey. Не понимаю что нужно указывать в параметрах функции win w=window ("Калькулятор", "CalcFrame", -1);
Что нужно указывать вместо "Калькулятор" и что нужно указывать вместо "CalcFrame"?


Вот мой код :
CODE:
string text_KIB;
loadsymbolbase("F:\Games\BOT\text\Новая база.sib");
int size_key_char_KIB=-1;

readtext(NUM | MARK, #text_KIB, 8, -1, -1, -1, -1, -1, -1, 0, -1, 3, 62, 227, 81, -1);

char CTEXT[1000];
strcpy(#CTEXT[0], text_KIB);

//удаляем из массива элементов лишние элементы кроме цифр, точек и пробелов
deletetext(#CTEXT[0], "-");

//преобразуем массив элементов назад в строку чтобы использовать regexsearch
string Lul;
Lul=format(#CTEXT[0]);

double X;
double Y;
double Z;
string result[3];

//ищем координаты и преобразуем их в переменные типа double
if(regexsearch(sizearray(result), #result[0], Lul, "\d+(\.\d+)*")>0)
{
X = formatsn(result[0]);
Y = formatsn(result[1]);
Z = formatsn(result[2]);

messagebox(X);
messagebox(Y);
messagebox(Z);
}



if (X>=999.523) goto m_KIB4;
else goto m_KIB5;
m_KIB5: key_(96, 1, "", 0, 0, 0); goto exit_KIB;
m_KIB4: key_(56, 1, "", 0, 0, 0);
exit_KIB:;


function key_(int k, int m, string text, int pc, int p1, int p2)
{
pause(p1);
if (m==-1)
{
if (size_key_char_KIB==-1)
{
size_key_char_KIB=100;
new char key_char_KIB[size_key_char_KIB+1];
}
int size_key=size(text);
if (size_key_char_KIB<size_key)
{
delete key_char_KIB;
size_key_char_KIB=size_key;
new char key_char_KIB[size_key_char_KIB+1];
}
strcpy(#key_char_KIB[0], text);
for (int n=0; n<size_key; n++){key(key_char_KIB[n]); sleep(pc);}
}
else
{
if (m==1) key(k);
if (m==2) keydown(k);
if (m==3) keyup(k);
}
pause(p2);
}
 
 Top
Kibor
Отправлено: 19 Июля, 2020 - 23:45:39
Post Id



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


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




 legro0303 пишет:
Не понимаю что нужно указывать в параметрах функции win w=window ("Калькулятор", "CalcFrame", -1);
Что нужно указывать вместо "Калькулятор" и что нужно указывать вместо "CalcFrame"?

Перейти в вкладку "шпион", навести мышь на окно игры и нажать контл шифт s.
Функция сгенерируется сама.
Для вставки в редактор кликнуть по ней.

небольшое упрощение
CODE:
string text_KIB;
loadsymbolbase("F:\Games\BOT\text\Новая база.sib");
int size_key_char_KIB=-1;

readtext(NUM | MARK, #text_KIB, 8, -1, -1, -1, -1, -1, -1, 0, -1, 3, 62, 227, 81, -1);

//удаляем из массива элементов лишние элементы кроме цифр, точек и пробелов
regexreplace(-1, #text_KIB, text_KIB, "-", "");

double X;
double Y;
double Z;
string result[3];

//ищем координаты и преобразуем их в переменные типа double
if(regexsearch(sizearray(result), #result[0], text_KIB, "\d+(\.\d+)*")>0)
{
X = formatsn(result[0]);
Y = formatsn(result[1]);
Z = formatsn(result[2]);

messagebox(X);
messagebox(Y);
messagebox(Z);
}



if (X>=999.523) goto m_KIB4;
else goto m_KIB5;
m_KIB5: key_(96, 1, "", 0, 0, 0); goto exit_KIB;
m_KIB4: key_(56, 1, "", 0, 0, 0);
exit_KIB:;


function key_(int k, int m, string text, int pc, int p1, int p2)
{
pause(p1);
if (m==-1)
{
if (size_key_char_KIB==-1)
{
size_key_char_KIB=100;
new char key_char_KIB[size_key_char_KIB+1];
}
int size_key=size(text);
if (size_key_char_KIB<size_key)
{
delete key_char_KIB;
size_key_char_KIB=size_key;
new char key_char_KIB[size_key_char_KIB+1];
}
strcpy(#key_char_KIB[0], text);
for (int n=0; n<size_key; n++){key(key_char_KIB[n]); sleep(pc);}
}
else
{
if (m==1) key(k);
if (m==2) keydown(k);
if (m==3) keyup(k);
}
pause(p2);
}
 
 Top
legro0303
Отправлено: 20 Июля, 2020 - 00:36:58
Post Id



Пользователь
Наблюдатель


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




[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
 Kibor пишет:
 legro0303 пишет:
Не понимаю что нужно указывать в параметрах функции win w=window ("Калькулятор", "CalcFrame", -1);
Что нужно указывать вместо "Калькулятор" и что нужно указывать вместо "CalcFrame"?

Перейти в вкладку "шпион", навести мышь на окно игры и нажать контл шифт s.
Функция сгенерируется сама.
Для вставки в редактор кликнуть по ней.

небольшое упрощение
CODE:
string text_KIB;
loadsymbolbase("F:\Games\BOT\text\Новая база.sib");
int size_key_char_KIB=-1;

readtext(NUM | MARK, #text_KIB, 8, -1, -1, -1, -1, -1, -1, 0, -1, 3, 62, 227, 81, -1);

//удаляем из массива элементов лишние элементы кроме цифр, точек и пробелов
regexreplace(-1, #text_KIB, text_KIB, "-", "");

double X;
double Y;
double Z;
string result[3];

//ищем координаты и преобразуем их в переменные типа double
if(regexsearch(sizearray(result), #result[0], text_KIB, "\d+(\.\d+)*")>0)
{
X = formatsn(result[0]);
Y = formatsn(result[1]);
Z = formatsn(result[2]);

messagebox(X);
messagebox(Y);
messagebox(Z);
}



if (X>=999.523) goto m_KIB4;
else goto m_KIB5;
m_KIB5: key_(96, 1, "", 0, 0, 0); goto exit_KIB;
m_KIB4: key_(56, 1, "", 0, 0, 0);
exit_KIB:;


function key_(int k, int m, string text, int pc, int p1, int p2)
{
pause(p1);
if (m==-1)
{
if (size_key_char_KIB==-1)
{
size_key_char_KIB=100;
new char key_char_KIB[size_key_char_KIB+1];
}
int size_key=size(text);
if (size_key_char_KIB<size_key)
{
delete key_char_KIB;
size_key_char_KIB=size_key;
new char key_char_KIB[size_key_char_KIB+1];
}
strcpy(#key_char_KIB[0], text);
for (int n=0; n<size_key; n++){key(key_char_KIB[n]); sleep(pc);}
}
else
{
if (m==1) key(k);
if (m==2) keydown(k);[img]https://imgur.com/a/8SaPzt5[/img]
if (m==3) keyup(k);
}
pause(p2);
}

Благодарю за ответ, собственно говоря получилось как на скриншоте (ссылка на скриншот в самом начале сообщения), нажатия клавиши так и не происходит не могу понять в чем проблема (в условие if x>= программа заходит, проверял с помощью messagebox внутри, который писал сообщение если условие срабатывало)

(Отредактировано автором: 20 Июля, 2020 - 00:38:20)

 
 Top
Zireael
Отправлено: 20 Июля, 2020 - 00:45:06
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




Указатель на окно неправильно написан.
CODE:
win w=window("Teoc", "GAME", -1);
if(w)textout(0, 0, 0, "Окно найдено", 1); // сообщение в левом верхнем углу
else textout(0, 0, 0, "Окно не найдено", 1);
sleep(1000);
 
 Top
legro0303
Отправлено: 20 Июля, 2020 - 01:03:35
Post Id



Пользователь
Наблюдатель


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




Вроде как окно находит, а клавишу всё равно не прожимает
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]


CODE:
string text_KIB;
loadsymbolbase("F:\Games\BOT\text\Новая база.sib");
int size_key_char_KIB=-1;

readtext(NUM | MARK, #text_KIB, 8, -1, -1, -1, -1, -1, -1, 0, -1, 3, 62, 227, 81, -1);


regexreplace(-1, #text_KIB, text_KIB, "-", "");

double X;
double Y;
double Z;
string result[3];

if(regexsearch(sizearray(result), #result[0], text_KIB, "\d+(\.\d+)*")>0)
{
X = formatsn(result[0]);
Y = formatsn(result[1]);
Z = formatsn(result[2]);

}

win w= window ("Teoc", "GAME", -1);

if (X>=999.523){
if(w)
{
textout(0, 0, 0, "Окно найдено", 1); //
sleep(1000);
}
else textout(0, 0, 0, "Окно не найдено, 1);
sendkey('56', w);
}
 
 Top
Zireael
Отправлено: 20 Июля, 2020 - 01:21:04
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
а клавишу всё равно не прожимает

Для начала проверьте работают ли вообще нажатия.
'56' это текст, а 56 код клавиши.
Пример как напечатать текст в блокноте:
CODE:
win w = window (-1, "Edit", window (-1, "Notepad", -1));
key(56, 1, 1, w); // нажать цифру 8
key("56", 1, 1, w); // напечатать текст 56

CODE:
win w = window (-1, "Edit", window (-1, "Notepad", -1));
sendkey(56, w); // нажать цифру 8
sendkey("56", w); // напечатать текст 56
 
 Top
Страниц (6): [1] 2 3 4 5 6 »
Сейчас эту тему просматривают: 5 (гостей: 5, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by