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

Список содержимого инвентаря

-

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

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

Ответ
 
Опции темы
Старый 13.01.2015, 20:14   #1
 Разведчик
Аватар для Adrev
 
Adrev никому не известный тип
Регистрация: 27.10.2010
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Список содержимого инвентаря

Всем доброго времени суток. Получаю список содержимого инвентаря, вот так:
Код:
DWORD Item, ItemWId=0,ItemType,ItemId,ItemLVL,ItemN,ItemName,Col=32;
float ItemDis,ItemLocX,ItemLocY,ItemLocZ;

for (int i=0; i<Integer(Col); i++)
	{
	int ItemWID=0;
	ReadProcessMemory (hProcess, Pointer(0xCCEFAC), &Item, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0x1C), &Item, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0x30), &Item, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0xF74),&Item, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0x10), &Col, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0xC), &Item, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+i*0x4), &Item, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0xC), &ItemWId, 4, NULL);
	ReadProcessMemory (hProcess, Pointer(Item+0x4C), &ItemId, 4, NULL);
	AnsiString s;

	if (Integer(ItemWId) != 0)
		{
		//ReadProcessMemory (hProcess, Pointer(Item+0x150), &ItemType, 4, NULL);
		WideChar nm[1024];
		//if ((Integer(ItemType)==2)||(Integer(ItemType)==1)||(Integer(ItemType)==3))
			{
			ReadProcessMemory(hProcess, LPCVOID(Item+0x4C), LPVOID(&ItemN), sizeof(DWORD(ItemN)), LPDWORD(NULL));
			ReadProcessMemory(hProcess, LPCVOID(ItemN+0x0), &nm, 1024, LPDWORD(NULL));
Но только две проблемы:
1. Если мышкой не наводил на итем в инвентаре, то он не отобразится в списке.
2. Все пустые ячейки в инвентаре забиваются "клонами" последней занятой ячейки.

Добавлено через 17 минут
3. При изменение количества предметов в инвентаре (подобрал что нибудь) в массиве данных всё ьакже ничего не изменяется.
Может можно как нибудь ещё получать список инвентаря?

Последний раз редактировалось Adrev; 13.01.2015 в 20:32. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 13.01.2015, 23:10   #2
 Разведчик
Аватар для Simyr
 
Simyr никому не известный тип
Регистрация: 23.10.2010
Сообщений: 7
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 7 раз(а) в 5 сообщениях
 
По умолчанию Re: Список содержимого инвентаря

мой код:
Код:
hProcess=OpenProcess_(#PROCESS_ALL_ACCESS, #False, Fid(GetGadgetState(#ComboBox_NamePers))) ; открываем процесс с полным доступом
  ReadProcessMemory_(hProcess,(#BA),@ba,4,rw)
  ReadProcessMemory_(hProcess,(ba+$1C),@ga,4,rw)
  ReadProcessMemory_(hProcess,(ga+$30),@PersArr,4,rw)
  ReadProcessMemory_(hProcess,(PersArr+$F74),@InvArr,4,NoB)
  ReadProcessMemory_(hProcess,(InvArr+$10),@InvMax,4,NoB)
  ReadProcessMemory_(hProcess,(InvArr+#C),@buf,4,NoB)
  For i=0 To InvMax-1
    
    ReadProcessMemory_(hProcess,(buf+(i*$4)),@Inv,4,NoB)
    If inv=0 : Continue : EndIf ;если яч пустая следующая интерация
    ReadProcessMemory_(hProcess,(Inv+#InvType),@InvType,4,NoB)
    ReadProcessMemory_(hProcess,(Inv+#InvId),@InvId,4,NoB)
    
    
    AddGadgetItem(#Editor,-1,"№="+Str(I)+"   Id="+Str(InvId)+"   Type="+Str(InvType))
 Next
результат:
Код:
№=0   Id=30795     Type=31
№=1   Id=41038     Type=9
№=3   Id=27425     Type=20
№=4   Id=32515     Type=0
№=5   Id=8608     Type=9
№=6   Id=8637     Type=9
№=7   Id=33997     Type=20
№=8   Id=25724     Type=19
№=9   Id=11290     Type=31
№=10   Id=11297     Type=31
№=11   Id=34757     Type=0
№=12   Id=32527     Type=0
№=14   Id=8607     Type=9
№=15   Id=35256     Type=20
  Ответить с цитированием
Старый 14.01.2015, 00:02   #3
 Разведчик
Аватар для Adrev
 
Adrev никому не известный тип
Регистрация: 27.10.2010
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Список содержимого инвентаря

Цитата:
Simyr

, проверил ваш код, получилось тоже самое.

Добавлено через 12 часов 51 минуту
а кстати у вас этот код выдаёт список предметов сразу после захода в игру? Или тож надо проводить мышью?

Добавлено через 19 часов 43 минуты
Хотя не совсем правильно сказал, только условие
Цитата:
If inv=0 : Continue : EndIf

даёт плюс, то что не заполняются все оставшиеся клетки последним итемом. А в остальном всё таже проблема, пока не наведёшь на предмет в инвентаре мышью так он в инвентаре и не отобразится.
С другой стороны в инвентаре же я вижу содержимое (в игре) и следовательно это всё хранится где то в памяти, скорее всего не правильная цепочка адресов, хотя такая же как у вас.

Добавлено через 20 часов 59 минут
Всё разобрался. Просто пока не навёл в игре, достпен ID и количество предметов, а имя становится доступным только после наведения)

Последний раз редактировалось Adrev; 14.01.2015 в 21:01. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 14.01.2015, 23:24   #4
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Список содержимого инвентаря

Получается есть какая-то таблица соответствий ID/предмет?
  Ответить с цитированием
Старый 14.01.2015, 23:49   #5
 Разведчик
Аватар для Hilling
 
Hilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личность
Регистрация: 05.09.2010
Сообщений: 32
Популярность: 1182
Сказал(а) спасибо: 38
Поблагодарили 12 раз(а) в 10 сообщениях
 
По умолчанию Re: Список содержимого инвентаря

При наведении мыши срабатывает функция, которая передает в клиент подробную информацию об итеме.
Можно вычислить эту функцию и запускать вручную. Тогда не надо будет наводить мышью, но всю информацию сервер тебе передаст. По-крайне мере я так понял, читая статью на elitepvpers, где ее и находили.

хз на счет таблицы соответствия в клиенте, как, например, между ID клана и именем клана, но если приспичит узнать имя по ID и наоборот, то можно воспользоваться pwdatabase: например [Ссылки могут видеть только зарегистрированные пользователи. ], где 25465 - ID итема
  Ответить с цитированием
Старый 15.01.2015, 00:17   #6
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Список содержимого инвентаря

Hilling, понял, спасибо тебе!
  Ответить с цитированием
Старый 15.01.2015, 19:45   #7
 Разведчик
Аватар для Simyr
 
Simyr никому не известный тип
Регистрация: 23.10.2010
Сообщений: 7
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 7 раз(а) в 5 сообщениях
 
По умолчанию Re: Список содержимого инвентаря

как читать название предмета
http://zhyk.ru/forum/showthread.php?t=348356
(оффсеты старые)
  Ответить с цитированием
Старый 30.01.2015, 03:45   #8
 Разведчик
Аватар для Adrev
 
Adrev никому не известный тип
Регистрация: 27.10.2010
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Список содержимого инвентаря

Всё покоя не даёт функция наведеняи на предмет в инвентаре. Через CE попытался найти нужную функцию, но без успешно, толи она вызывается несколько раз в подряд (что вряд ли), а скорее всего она вызывается ешё где то походу. Т.к посмотрел в дебаге все эти адреса и скорее всего функция должна вызываться с двумя параметрами ID и номер ячейки, но ничего похожего не нашел. Никто не искал эту функцию? Может быть кто то достиг больших успехов в этом вопросе?
  Ответить с цитированием
Старый 23.02.2015, 10:05   #9
 Разведчик
Аватар для Adrev
 
Adrev никому не известный тип
Регистрация: 27.10.2010
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Список содержимого инвентаря

Нашёл на elitepvpers подобную тему. Но оффсеты функции там старые, а как новые найти вообще не понятно. Там вот такой код используется

Код:
itemAddress[i] = [[[player + 0xC68] + 0xC] + i * 4] 
funcAddress[i] = [[itemAddress[i] + 0] + 0x34]

pushad
mov ECX, itemAddress[i]
mov EAX, funcAddress[i]
call EAX
popad

then itemdesc[i]= [[[itemAddress[i] + 0x40] + 0]
Но как уже говорил в посту выше, с помощью CE так и не получилось найти нужный адрес.
  Ответить с цитированием
Старый 23.02.2015, 20:47   #10
 Разведчик
Аватар для Adrev
 
Adrev никому не известный тип
Регистрация: 27.10.2010
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Список содержимого инвентаря

Судя повсему нашёл нужную функцию
Olly показал следующее
В EBX лежит ItemStruct
Но только не пойму куда адрес функции вписать в код
A1 AC EF CC 00 8B 16 8B CE 8D 78 7C FF 52 54
да и не каком сдвиге адрес функции от ItemStruct
Изображения
Тип файла: jpg 123.jpg (6.4 Кб, 164 просмотров)
  Ответить с цитированием
Старый 25.02.2015, 23:45   #11
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 03.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: Список содержимого инвентаря

Цитата:
Сообщение от AdrevПосмотреть сообщение
Нашёл на elitepvpers подобную тему. Но оффсеты функции там старые, а как новые найти вообще не понятно. Там вот такой код используется

Код:
itemAddress[i] = [[[player + 0xF74] + 0xC] + i * 4] 
funcAddress[i] = [[itemAddress[i] + 0] + 0x30]

pushad
mov ECX, itemAddress[i]
mov EAX, funcAddress[i]
call EAX
popad

then itemdesc[i]= [[[itemAddress[i] + 0x40] + 0]
Но как уже говорил в посту выше, с помощью CE так и не получилось найти нужный адрес.


Хз, что ты скатал, но это часть функции, офзет поправил.

player = CCEFAC + 1c + 30

Последний раз редактировалось diagnost; 01.03.2015 в 08:10.
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Руководство] Проверка пароля, и открытие содержимого! vovanre C# 6 25.05.2012 15:39
[Куплю] Прогу для просмотра содержимого в сондуках Ребята Dark Orbit 5 12.02.2012 15:23
[Помогите!] Загрузка содержимого memo в поток. *Хalyava* Вопросы и ответы, обсуждения 4 04.12.2011 20:23
программа для просмотра содержимого аккаунта tpo9ljkee Garena 2 10.12.2010 16:34

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

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

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