Проблема с чтением WID моба (С++) - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок
08.01.2015, 23:34
#1
Разведчик
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Проблема с чтением WID моба (С++)
Друзья, подскажите пожалуйста, в чем проблема, пытаюсь получить WID моба (первого попавшегося в несортированном массиве), пишу на C++, вот реализация функции:
Код:
DWORD MemReader::ReadPointer2(DWORD base, DWORD count)
{
for (int i =0; i < count; i ++)
{
DWORD buff = Read(base,4).toUINT32();
buff = Read(buff+0x1C,4).toUINT32();
buff = Read(buff+0x1C,4).toUINT32();
buff = Read(buff+0x24,4).toUINT32();
buff = Read(buff+0x1C,4).toUINT32();
buff = Read(buff+(i*0x4),4).toUINT32();
buff = Read(buff+0x4,4).toUINT32();
buff = Read(buff,4).toUINT32();
if (buff !=0)
{
buff = Read(buff+0x120,4).toUINT32();
cout << buff << "\n";}
else
{
break;
}
При вызове в функцию передаю (0x00CCEFAC, 769)
и на выходе всегда получаю 0. Подскажите, что я неправильно делаю?
09.01.2015, 00:32
#2
Разведчик
Регистрация: 23.10.2010
Сообщений: 7
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 7 раз(а) в 5 сообщениях
Re: Как написать бота с нуля [Borland C++ Builder 6]
неверные офсеты
buff = Read(buff+0x24,4).toUINT32();
должно быть
buff = Read(buff+0x20 ,4).toUINT32();
09.01.2015, 01:50
#3
Разведчик
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: Как написать бота с нуля [Borland C++ Builder 6]
Simyr, Спасибо за ответ! Но проблема точно не в этом (пробовал и с твоим оффсетом). Немного переделал структур программы
Код:
DWORD offsets[] = {0x1c,0x1c,0x24,0x1c};
DWORD buff = mem-> ReadPointer(0x00CCEFAC,offsets,4);
cout << hex << buff <<"\n"; // считывается 27964bd8 - все верно
for (int i =0; i <767; i ++)
{
DWORD wid = mem ->Read(buff+(i*0x4)+0x4,4).toUINT32(); //считываем значение buff + (i*0x4)+0x4 в переменную wid
if (wid !=0)
{wid = mem->Read(wid+0x120,4).toUINT32(); // получаем WID ближайщих мобов
cout <<dec << wid <<"\n";}
}
В итоге при выполнении получаю вот что:
[
Ссылки могут видеть только зарегистрированные пользователи. ]
что никак не соответствует WID, как я понимаю
В чем косяк, народ, помогите, всю голову уже сломал
((
09.01.2015, 12:13
#4
Разведчик
Регистрация: 13.08.2011
Сообщений: 15
Популярность: 10
Сказал(а) спасибо: 6
Поблагодарили 1 раз в 1 сообщении
Re: Проблема с чтением WID моба (С++)
WID это может соответствовать, попробуй смотреть ID - 0x124
С ним будет проще
09.01.2015, 22:51
#5
Разведчик
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: Проблема с чтением WID моба (С++)
Вообщем переделал программу, чтобы оффсеты считались не циклом, а просто по порядку, один фиг что-то неверно
Код:
DWORD buff = mem->Read(0x00CCEFAC, 4).toINT32();
buff = mem->Read(buff+0x1c, 4).toINT32();
buff = mem->Read(buff+0x1c, 4).toINT32();
buff = mem->Read(buff+0x24, 4).toINT32();
buff = mem->Read(buff+0x1c, 4).toINT32();
for (int i =0; i <0x300; i ++)
{
DWORD id = mem ->Read(buff+(i*0x4)+0x4,4).toUINT32();
if (wid !=0)
{id = mem->Read(id+0x124,4).toUINT32(); ;
cout <<"hex "<< hex << id << " dec "<< dec << id<< "\n";}
}
Вычисляю ID мобов, получаю
[
Ссылки могут видеть только зарегистрированные пользователи. ]
если же вместо выделенного жирным оффсетом ставлю
0x20 , то получаю:
[
Ссылки могут видеть только зарегистрированные пользователи. ]
Тестирую все на последней РУОФФЕ (версия от 28.12.2014).
Что-то из вышеперечисленного вывода вообще походит на ID?
Заранее спасибо всем!
Добавлено через 38 минут
Все, разобрался, спасибо!
Проблема была в этой строке:
Код:
DWORD id = mem ->Read(buff+(i*0x4)+0x4,4).toUINT32();
Не приплюсовывалось 0x4, переделал следующим образом
Код:
DWORD wid = mem ->Read(buff+(i*0x4),4).toUINT32();
wid = mem ->Read(wid+0x4,4).toUINT32();
и все стало норм! Спасибо еще раз всем откликнувшимся!
Последний раз редактировалось Fess88; 09.01.2015 в 23:30 .
Причина: Добавлено сообщение
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 00:59 .