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

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

1. legro0303 - 19 Июля, 2020 - 07:13:58 - перейти к сообщению
Добрый день, не могу разобраться как в символьном массиве char найти несколько числовых значений, каждое из которых присвоить новой переменной типа double ?
Грубо говоря мне нужен аналог strtok из си.
Пример:
Имеется строка координат "990.123 550.7035 1234.01"
Необходимо разделить полученную строку на координаты
X = 990.123
Y = 550.7035
Z = 1234.01
2. Zireael - 19 Июля, 2020 - 07:25:06 - перейти к сообщению
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);
}
3. legro0303 - 19 Июля, 2020 - 14:44:18 - перейти к сообщению
 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
4. Zireael - 19 Июля, 2020 - 14:48:42 - перейти к сообщению
 Цитата:
1. Как каждые 5 секунд проверять координаты заново, чтобы отталикиваясь от них делать необходимые действия

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

Добавить блок кода или функцию.
5. legro0303 - 19 Июля, 2020 - 15:41:32 - перейти к сообщению
 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);
}
6. Kibor - 19 Июля, 2020 - 15:45:39 - перейти к сообщению
 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);
}
7. legro0303 - 19 Июля, 2020 - 16:36:58 - перейти к сообщению
[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 внутри, который писал сообщение если условие срабатывало)
8. Zireael - 19 Июля, 2020 - 16:45:06 - перейти к сообщению
Указатель на окно неправильно написан.
CODE:
win w=window("Teoc", "GAME", -1);
if(w)textout(0, 0, 0, "Окно найдено", 1); // сообщение в левом верхнем углу
else textout(0, 0, 0, "Окно не найдено", 1);
sleep(1000);
9. legro0303 - 19 Июля, 2020 - 17:03:35 - перейти к сообщению
Вроде как окно находит, а клавишу всё равно не прожимает
[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);
}
10. Zireael - 19 Июля, 2020 - 17:21:04 - перейти к сообщению
 Цитата:
а клавишу всё равно не прожимает

Для начала проверьте работают ли вообще нажатия.
'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

Powered by ExBB FM 1.0 Final