Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Проблема с чтением WID моба (С++)

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 08.01.2015, 23:34   #1
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 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
 Разведчик
Аватар для Simyr
 
Simyr никому не известный тип
Регистрация: 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
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 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
 Разведчик
Аватар для zasranecqwe1111
 
zasranecqwe1111 никому не известный тип
Регистрация: 13.08.2011
Сообщений: 15
Популярность: 10
Сказал(а) спасибо: 6
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Проблема с чтением WID моба (С++)

WID это может соответствовать, попробуй смотреть ID - 0x124
С ним будет проще
  Ответить с цитированием
Старый 09.01.2015, 22:51   #5
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 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. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Моба FFForever Lineage 2 5 14.03.2015 14:53
[Обсуждение] Проблема со чтением базы сервера в havij Brute Pro Общение и обсуждение, архив Lineage 2 1 27.01.2013 01:03
[Обменяю] 3 акк на 1 мочнова elvis1231 Dark Orbit 2 10.02.2012 00:26

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 00:59.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net