Форум программистов, компьютерный форум CyberForum.ru

Ориентация бота в игре - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
25.01.2013, 19:57     Ориентация бота в игре #1
Собственно, вопрос следующий, делаю что-то мини бота и меня интересует, как он может ориентироваться в игре, либо можно как-то прочитать по слоям информацию с экрана игры скорость, координаты, других игроков то есть можно ли вытянуть из игры данные в текстовом виде, или же боту придется ориентироваться чисто по картинке, которую мы получаем на экране, как пользователю? И что нужно юзать?

Добавлено через 48 минут
up>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
27.01.2013, 21:56     Ориентация бота в игре #21
denis0612,
C++
1
2
LPCTSTR lpClassName,    // указатель на имя класса
LPCTSTR lpWindowName    // указатель на имя окна
Добавлено через 3 минуты
Если заголовок все время меняется, но содержит при этом какую то постоянную надпись, тогда можно с помощью Enum перечислять окна, смотреть какая там надпись в заголовке, и если подходит под твое описание запоминать HWND окна, и прекращать перечисление.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hepper
Кодогенератор
 Аватар для hepper
195 / 195 / 35
Регистрация: 15.06.2011
Сообщений: 789
Завершенные тесты: 2
27.01.2013, 23:50     Ориентация бота в игре #22
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Мало что даст...
даже не мало что даст, а можно сказать ничего не даст. графика и клиент игры для реального человека создают сложности восприятия, для бота вообще будет нереал чтото делать, тем более игра очень динамичная.

а на счет трафика - даже если он зашифрован - клиент то у тебя на компе, надо его ковырнуть и достать оттуда методы кодировки/декодировки. я не думаю что это будет сложнее анализа игрового экрана...
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
28.01.2013, 16:47  [ТС]     Ориентация бота в игре #23
Цитата Сообщение от m1Rr0r Посмотреть сообщение
denis0612,
C++
1
2
LPCTSTR lpClassName,    // указатель на имя класса
LPCTSTR lpWindowName    // указатель на имя окна
Добавлено через 3 минуты
Если заголовок все время меняется, но содержит при этом какую то постоянную надпись, тогда можно с помощью Enum перечислять окна, смотреть какая там надпись в заголовке, и если подходит под твое описание запоминать HWND окна, и прекращать перечисление.
Да я это уже сто раз прочитал, думал вы пример приведете, а то у меня ошибка в компиляторе:
error C2664: FindWindowW: невозможно преобразовать параметр 2 из "const char [6]" в "LPCWSTR"
Пишу:
C++
1
2
HWND client;
client=FindWindow(NULL, "Skype");
Добавлено через 4 часа 14 минут
up+
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
28.01.2013, 18:01     Ориентация бота в игре #24
C++
1
2
HWND client;
client=FindWindow(NULL, (LPCWSTR)"Skype");
Как насчет такого ?
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
28.01.2013, 21:06  [ТС]     Ориентация бота в игре #25
Ура, и этого я добивался 2 дня, хух, идем дальше, почему функция возвращает 6 нулей:
FindWindow(NULL, (LPCWSTR)"Skype");
Причем заголовок какого окна я бы не писал...
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
28.01.2013, 21:41     Ориентация бота в игре #26
Пробуй так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
 
using namespace std;
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)  {
    char target[] = "Skype";
    char caption[255];
    if(GetWindowText(hwnd, caption, sizeof(caption)))
        if(strstr(caption, target) != 0)
            cout << "HWND: " << hwnd << " | " << "Text: " << caption << endl;
    return TRUE;
}
int main()  {
    setlocale(LC_ALL, "Russian");
    if(EnumWindows(&EnumWindowsProc, 0))
    return 0;
}
Через Spy++ удостоверься что заголовок правильный.
Или используй перечисление окон из примера выше)
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 22:13     Ориентация бота в игре #27
потому что нужно использовать не FindWindow, а FindWindowA
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
01.02.2013, 15:16  [ТС]     Ориентация бота в игре #28
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Пробуй так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
 
using namespace std;
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)  {
    char target[] = "Skype";
    char caption[255];
    if(GetWindowText(hwnd, caption, sizeof(caption)))
        if(strstr(caption, target) != 0)
            cout << "HWND: " << hwnd << " | " << "Text: " << caption << endl;
    return TRUE;
}
int main()  {
    setlocale(LC_ALL, "Russian");
    if(EnumWindows(&EnumWindowsProc, 0))
    return 0;
}
Через Spy++ удостоверься что заголовок правильный.
Или используй перечисление окон из примера выше)
Этот код не работает.
Название верное, беру из spy ++.
После запуска программы наблюдается следующее:
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\apphelp.dll", Невозможно найти или открыть файл PDB
SHIMVIEW: ShimInfo(Complete)
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\user32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msvcp100d.dll", Символы загружены.
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\gdi32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\imm32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msctf.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "ImageAtBase0xda0000", Загрузка отключена параметром включения/исключения.
"WOT_cheat.exe": Выгружено: "ImageAtBase0xda0000"
Программа "[2720] WOT_cheat.exe: Машинный код" завершилась с кодом -1073741510 (0xc000013a).

Добавлено через 17 часов 47 минут
up+++

Добавлено через 1 час 14 минут
+++
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
01.02.2013, 16:29     Ориентация бота в игре #29
Цитата Сообщение от denis0612 Посмотреть сообщение
Этот код не работает
Код работает.
Вот почему у Вас не работает, понятия не имею.
И потом...Ну допустим вы получили HWND окна, что вы делать дальше будете ?
Ogniel
 Аватар для Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
02.02.2013, 11:49     Ориентация бота в игре #30
Цитата Сообщение от denis0612 Посмотреть сообщение
Спасибо, а нет ли варианта, если не перехватывать пакеты, а просто разобрать экран по слоям, миникарта, фон, параметры, надписи? Это вообще можно сделать? А то чувствую, что перехватывать пакеты вряд ли удастся.
а для таких целей есть SDK. через него и оперируй)))
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
04.02.2013, 18:27  [ТС]     Ориентация бота в игре #31
Я так понимаю нужно юзать Directx SDK в моем случае.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
04.02.2013, 18:37     Ориентация бота в игре #32
denis0612,
...пальцем в небо тыкать далеко не уедешь...
Цитата Сообщение от denis0612 Посмотреть сообщение
Я так понимаю нужно юзать Directx SDK в моем случае.
Вариант с пакетами на мой взгляд самый оптимальный.
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
05.02.2013, 19:03  [ТС]     Ориентация бота в игре #33
Допустим стянуть и подменить пакет я смогу, а вот где искать метод шифровки я даже предположения не имею, так что думаю нужно плясать в другую сторону...

Добавлено через 23 часа 12 минут
Можно пример работы функции EnumChildWindows (перечислить все дочерние окна по его HWND), а то в документации не разберусь...
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
05.02.2013, 20:21     Ориентация бота в игре #34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <windows.h>
#include <iostream>
 
HWND winHWND = NULL;
 
 
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)  {
    char buff[255];
    GetWindowTextA(hwnd, buff, sizeof(buff));
    std::cout << "\tCaption: " << buff << " | HWND: " << hwnd << std::endl;
    return TRUE;
}
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)  {
    char buff[255];
    char target[] = "Skype";
    if(GetWindowTextA(hwnd, buff, sizeof(buff)))
        if(strstr(buff, target) != 0)  {
            std::cout << "Main win: " << buff << std::endl;
            std::cout << "Child windows: \n";
            EnumChildWindows(hwnd, &EnumChildProc, 0);
        }
    return TRUE;
}
 
 
 
int main()  {
    setlocale(LC_ALL, "Russian");
    if(EnumWindows(&EnumWindowsProc, 0))
    return 0;
}
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
05.02.2013, 20:26  [ТС]     Ориентация бота в игре #35
Спасибо, и еще вопрос, пытаюсь имитировать нажатия клавиш, так вот использую keybd_event. Символы и цифры работают, а спец. клавиши такие как ESC,ENT,TAB не работают...
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
05.02.2013, 20:52     Ориентация бота в игре #36
C++
1
VK_TAB
и т.д.
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
06.02.2013, 15:02  [ТС]     Ориентация бота в игре #37
Да это я знаю, именно так и не срабатывают.

Добавлено через 13 часов 33 минуты
Я где-то читал, что эта функция не работает в играх и некоторых приложениях, что использовать вместо нее.

Добавлено через 4 часа 9 минут
upp
hepper
Кодогенератор
 Аватар для hepper
195 / 195 / 35
Регистрация: 15.06.2011
Сообщений: 789
Завершенные тесты: 2
08.02.2013, 14:02     Ориентация бота в игре #38
Цитата Сообщение от denis0612 Посмотреть сообщение
Допустим стянуть и подменить пакет я смогу, а вот где искать метод шифровки я даже предположения не имею, так что думаю нужно плясать в другую сторону...
есть возможность подсмотреть исходники клиента... мб там будет нужный алгоритм...
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
08.02.2013, 14:46     Ориентация бота в игре #39
Цитата Сообщение от hepper Посмотреть сообщение
есть возможность подсмотреть исходники клиента... мб там будет нужный алгоритм...
имхо, больше нечего сказать. всё зависит от вашего мастерства и размера проекта. наврятли разбираемый вами пакет данных передаёт 3 типа значений
высота
ширина
матрица
или т. п.
разработчики могут просто сделать шифровку и фиг вы решите что тут сделанна именно она ,а не другая
C++
1
2
for(unsigned int i = 0; i > len; i++)
c[i] += i;
так что ... приводите
1 название программы
2 ваши наработки

Добавлено через 3 минуты
denis0612, насчёт перехвата пакета (для программы вашей) - емли любите "хардкор))" можете использовать сырые сокеты. как сделать на них снифер, примеров хватает в инете
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 21:36     Ориентация бота в игре
Еще ссылки по теме:

C++ Разработка бота-асистента
Ориентация треугольника в пространстве C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
hepper
Кодогенератор
 Аватар для hepper
195 / 195 / 35
Регистрация: 15.06.2011
Сообщений: 789
Завершенные тесты: 2
08.02.2013, 21:36     Ориентация бота в игре #40
я даж исходники бота нашел какого то... по протоколу еще ничего там не нашел, но возможно работает по принципу, на котором пытается остановится ТС
Yandex
Объявления
08.02.2013, 21:36     Ориентация бота в игре
Ответ Создать тему
Опции темы

Текущее время: 08:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru