Kostick |
Отправлено: 01 Декабря, 2021 - 21:06:38
|
Мастер
Покинул форум
Сообщений всего: 184
Дата рег-ции: Авг. 2020
Репутация: 1
|
Я не умею программировать, но визуальный редактор спасает.
В игре Black Desert есть рыбалка. Нужно Нажать Space, чтобы закинуть удочку, потом дождать клева и снова нажать Space, чтобы подсечь. Появится полоса ловли. Когда она будет в синей зоне, нужно снова нажать Space. После появится капча: нужно ввести рандомную последовательность из клавиш W, A, S, D. Я смог дойти до капчи, т.е. все нажатия Space kibor выполняет, но дальше нужно прожать клавиши из капчи.
Например, на данном скриншоте надо ввести wwaads.
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Т.е. кибор распознает текст из определенной области [667, 493, 1227, 623].
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Т.к. кроме нужных символов есть лишние из-за стрелок под буквами того же цвета, нужно провести корректность распознавания. Окно распознавания текста выглядит так:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Я знаю, что в блок кода нужно примерно ввести вот это:
Цитата: char A[300];
int kml=0;
int nkml;
int kor=0;
for (int n=0; n<aw; n++) // Перебираем посимвольно
{
if (c_text[n]!=' ' && symbolcorrect(kor)>0.45) // если корректность более 0.45
{
A[kml]=c_text[n]; // Сохраним символ
kml++;
key(c_text[n]); // нажми распознанный символ, у которого корректность больше 0.45
pause(100); // пауза 100 мс
}
kor++;
}
A[kml]=0;
Его я использовал в прошлом боте год назад, но бот перестал работать, и за этот год визуальный редактор теперь не открывает файлы расширения ".vc", которое было год назад. Вот так выглядел код в визуальном редакторе тогда:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Таймер был нужен, чтобы прожимать свитки на бафы на клавиши 2 и 5, но его я пока не вставлял.
Теперь при добавлении этого кода выдает ошибку:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Не могу понять, как в блоке распознавания текста в новом визуальном редакторе называется массив после корректного распознавания и не перекликаются ли другие переменные этого отрывка с остальным кодом. Подскажите пожалуйста,
Прилагаю архив файлов визуального редактора, базу для распознавания текста, код для кибора и изображения, необходимые для блока распознавания изображения. Плюс код прошлогоднего бота.
Ссылка на архив
*Необходима расширенная версия для запуска кода, т.к. в коде задействуется функция распознавание текста*(Отредактировано автором: 01 Декабря, 2021 - 21:09:51) |
|
|
Kostick |
Отправлено: 01 Декабря, 2021 - 22:11:20
|
Мастер
Покинул форум
Сообщений всего: 184
Дата рег-ции: Авг. 2020
Репутация: 1
|
konctantin777 пишет: Если распознавать только буквы без знаков ?
Да, только английские буквы(Отредактировано автором: 01 Декабря, 2021 - 22:11:55) |
|
|
Kostick |
Отправлено: 01 Декабря, 2021 - 23:51:19
|
Мастер
Покинул форум
Сообщений всего: 184
Дата рег-ции: Авг. 2020
Репутация: 1
|
Ilya001 пишет: Цитата: for (int n=0; n<aw; n++)
А где этот переменный aw? Что в нём храниться?
Нашел в коде прошлого бота. Это переменная на количество символов. Я пропустил, сейчас попробую с ней вот так, спасибо.
CODE:char c_Text_S[100]; // В этот массив запишем текст весь
int aw=size(Text_S); // Узнаем кол-во символов
strcpy(#c_Text_S[0], Text_S); // Скопируем текст с string в массив char
char A[300];
int kml=0;
int nkml;
int kor=0;
for (int n=0; n<aw; n++) // Перебираем посимвольно
{
if (c_Text_S[n]!=' ' && symbolcorrect(kor)>0.45) // если корректность более 0.45
{
A[kml]=c_Text_S[n]; // Сохраним символ
kml++;
key(c_Text_S[n]); // нажми распознанный символ, у которого корректность больше 0.45
pause(100); // пауза 100 мс
}
kor++;
}
A[kml]=0;
(Добавление)
Kostick пишет: Ilya001 пишет: Цитата: for (int n=0; n<aw; n++)
А где этот переменный aw? Что в нём храниться?
Нашел в коде прошлого бота. Это переменная на количество символов. Я пропустил, сейчас попробую с ней вот так, спасибо.
CODE:char c_Text_S[100]; // В этот массив запишем текст весь
int aw=size(Text_S); // Узнаем кол-во символов
strcpy(#c_Text_S[0], Text_S); // Скопируем текст с string в массив char
char A[300];
int kml=0;
int nkml;
int kor=0;
for (int n=0; n<aw; n++) // Перебираем посимвольно
{
if (c_Text_S[n]!=' ' && symbolcorrect(kor)>0.45) // если корректность более 0.45
{
A[kml]=c_Text_S[n]; // Сохраним символ
kml++;
key(c_Text_S[n]); // нажми распознанный символ, у которого корректность больше 0.45
pause(100); // пауза 100 мс
}
kor++;
}
A[kml]=0;
Так, он начал писать, но не те клавиши. Как посмотреть, какие он нажимает клавиши, например, вывести сообщение на экран через команду messangebox? Просто что нужно туда вписать?
Когда вставляю
CODE:messagebox(c_Text_S[n]);
выводит пустое сообщение.(Отредактировано автором: 01 Декабря, 2021 - 23:59:46) |
|
|
Ilya001 |
Отправлено: 02 Декабря, 2021 - 11:41:20
|
Эксперт
Покинул форум
Сообщений всего: 459
Дата рег-ции: Май 2020
Репутация: 23
|
Вот такой код у меня работает:
CODE:char C_Text[100];
string Text;
loadsymbolbase (*/Путь к вашей базе/*);
read(); // вызов функции OCR для распознавания текста
beep(700, 200); // просто сигнал об успешной работе
perebor(); // тут перебор
function read()
{
pause(1000);
readtext (RU, #Text, 13, 1, -1, -1, -1, -1, -1, 0, -1, 29, 316, 384, 352, -1);
//messagebox (Text);
//regexreplace(-1, #Text, Text, " ", ""); этого можно не использовать, оно пробелы убирает просто
strcpy(#C_Text[0], Text);
}
function perebor()
{
int aw=size(Text);
for (int n=0; n<aw; n++)
{
key(C_Text[n]);
//messagebox(C_Text[n]);
sleep(200);
}
}
(Добавление)
Для визуального редактора:
https://ibb.co/mqwKwhR
(Добавление)
[quote=Ilya001]Для визуального редактора:(для просмотра ссылки Вам необходимо авторизоваться) /quote]
(Добавление)
[youtube=Пример работы кода](для просмотра ссылки Вам необходимо авторизоваться) /youtube]
Это просто пример, если что-то не правильно работает, проверяйте хорошо ли распознаются тексты.(Отредактировано автором: 02 Декабря, 2021 - 11:42:42) |
|
|
Kostick |
Отправлено: 02 Декабря, 2021 - 13:50:47
|
Мастер
Покинул форум
Сообщений всего: 184
Дата рег-ции: Авг. 2020
Репутация: 1
|
[quote=Ilya001]Вот такой код у меня работает:
CODE:char C_Text[100];
string Text;
loadsymbolbase (*/Путь к вашей базе/*);
read(); // вызов функции OCR для распознавания текста
beep(700, 200); // просто сигнал об успешной работе
perebor(); // тут перебор
function read()
{
pause(1000);
readtext (RU, #Text, 13, 1, -1, -1, -1, -1, -1, 0, -1, 29, 316, 384, 352, -1);
//messagebox (Text);
//regexreplace(-1, #Text, Text, " ", ""); этого можно не использовать, оно пробелы убирает просто
strcpy(#C_Text[0], Text);
}
function perebor()
{
int aw=size(Text);
for (int n=0; n<aw; n++)
{
key(C_Text[n]);
//messagebox(C_Text[n]);
sleep(200);
}
}
(Добавление)
Для визуального редактора:
https://ibb.co/mqwKwhR
(Добавление)
Ilya001 пишет: Для визуального редактора:(для просмотра ссылки Вам необходимо авторизоваться) /quote]
(Добавление)
[youtube=Пример работы кода](для просмотра ссылки Вам необходимо авторизоваться) /youtube]
Это просто пример, если что-то не правильно работает, проверяйте хорошо ли распознаются тексты.
Хорошо, это сработало. Но как добавить функцию symbolcorrect в этот цикл? Потому что кроме нужных символов имеются просто точки
Что пишет:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Что видит:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
(Добавление)
[quote=Kostick] Ilya001 пишет: Вот такой код у меня работает:
CODE:char C_Text[100];
string Text;
loadsymbolbase (*/Путь к вашей базе/*);
read(); // вызов функции OCR для распознавания текста
beep(700, 200); // просто сигнал об успешной работе
perebor(); // тут перебор
function read()
{
pause(1000);
readtext (RU, #Text, 13, 1, -1, -1, -1, -1, -1, 0, -1, 29, 316, 384, 352, -1);
//messagebox (Text);
//regexreplace(-1, #Text, Text, " ", ""); этого можно не использовать, оно пробелы убирает просто
strcpy(#C_Text[0], Text);
}
function perebor()
{
int aw=size(Text);
for (int n=0; n<aw; n++)
{
key(C_Text[n]);
//messagebox(C_Text[n]);
sleep(200);
}
}
(Добавление)
Для визуального редактора:
https://ibb.co/mqwKwhR
(Добавление)
Ilya001 пишет: Для визуального редактора:(для просмотра ссылки Вам необходимо авторизоваться) /quote]
(Добавление)
[youtube=Пример работы кода](для просмотра ссылки Вам необходимо авторизоваться) /youtube]
Это просто пример, если что-то не правильно работает, проверяйте хорошо ли распознаются тексты.
Хорошо, это сработало. Но как добавить функцию symbolcorrect в этот цикл? Потому что кроме нужных символов имеются просто точки
Что пишет:
[img] (для просмотра ссылки Вам необходимо авторизоваться) /img]
Что видит:
[img] (для просмотра ссылки Вам необходимо авторизоваться) /img]
А, кажется получилось. Сделал так:
CODE:char c_Text[100];
strcpy(#c_Text[0], Text_S);
int aw=size(Text_S);
int kor=0;
for (int n=0; n<aw; n++)
{
if (c_Text[n]!=' ' && symbolcorrect(kor)>0.45)
{
key(c_Text[n]);
sleep(200);
}
kor++
} |
|
|
Ilya001 |
Отправлено: 02 Декабря, 2021 - 15:36:57
|
Эксперт
Покинул форум
Сообщений всего: 459
Дата рег-ции: Май 2020
Репутация: 23
|
Kostick пишет: То следующая капча уже такая:
тогда вам нужно сделать поиск какой то части этого капчи(через findimage к примеру), а потом относительно него распознавать текст, тогда не будет такого(Отредактировано автором: 02 Декабря, 2021 - 15:37:28) |
|
|
|