|
Как читать ник персонажа/название локации? - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
05.06.2017, 21:19
|
#1
|
|
|
|
Разведчик
|
Регистрация: 06.07.2013
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Как читать ник персонажа/название локации?
Как прочитать и вывести в консоль ник персонажа или название локации??
что я пробовал:
WCHAR name[8];
wchar_t name_[8];
std::basic_string<WCHAR> wstr;
std::wstring wstr_2;
Ничто из этого не работает. Подскажите, как надо?
|
|
|
06.06.2017, 01:55
|
#2
|
|
|
|
Разведчик
|
Регистрация: 11.05.2011
Сообщений: 41
Популярность: 305
Сказал(а) спасибо: 43
Поблагодарили 12 раз(а) в 7 сообщениях
|
Re: Как читать ник персонажа/название локации?
Вот вариант кода на C:
Код:
wchar_t wsBuffer[ 100 ];
//...
int res = ChainReadString( wsBuffer, hProcess, 0x00E4BAB0, 32, 4, 0x1C, 0x34, 0x750, 0x0 );
// wsBuffer содержит имя персонажа, Юникод (16бит)
Код:
int ReadInt32( LPVOID buffer, HANDLE hProcess, DWORD address )
{
DWORD read;
return ReadProcessMemory( hProcess, ( LPCVOID ) address, buffer, sizeof( int ), &read );
}
int ReadString( LPVOID buffer, HANDLE hProcess, DWORD address, DWORD length )
{
int result = 0;
DWORD read;
result = ReadProcessMemory( hProcess, ( LPCVOID ) address, buffer, length, &read );
return result;
}
int ChainReadString( LPVOID buffer, HANDLE hProcess, DWORD address, DWORD length, DWORD offsets, ... )
{
if ( offsets == 0 )
return ReadString( buffer, hProcess, address, length );
int tmpInt = 0;
int result = ReadInt32( &tmpInt, hProcess, address );
if ( result ) {
va_list ap;
va_start( ap, offsets );
DWORD offset = 0;
for ( DWORD i = 0; i < offsets - 1; i++ ) {
offset = va_arg( ap, DWORD );
result = ReadInt32( &tmpInt, hProcess, tmpInt + offset );
}
offset = va_arg( ap, DWORD );
va_end( ap );
result = ReadString( buffer, hProcess, tmpInt + offset, length );
}
return result;
}
|
|
|
06.06.2017, 12:42
|
#3
|
|
|
|
Разведчик
|
Регистрация: 06.07.2013
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Как читать ник персонажа/название локации?
Лол, я думал, что 0x750 - это последний оффсет, т.е. что это оффсет сразу на массив байтов, но нет, это только указатель на массив байтов, Теперь всё, работает, спасибо!
UPD: А теперь тот же самый вопрос, про название локации, там 0x0 не забыл, но всё равно чушь. И какая длина названия?
BA + 0x1C + 0x1C + 0x60 +0x4 + 0x0
Добавлено через 1 час 6 минут
|
Цитата: |
|
|
|
|
|
|
|
|
#define BA 0x00E4BAB0
#define Arr1 0x1C
#define Arr2 0x1C
#define LocID 0x94
#define LocName 0x60
#define LocName_off1 0x4
...
//value = BA
ReadProcessMemory(hProcess, (void*)value, (void*)&value, 4, 0);
ReadProcessMemory(hProcess, (void*)(value + Arr1), (void*)&value, 4, 0);
ReadProcessMemory(hProcess, (void*)(value + Arr2), (void*)&locname_pointer, 4, 0);
ReadProcessMemory(hProcess, (void*)(locname_pointer + LocName), (void*)&locname_pointer, 4, 0);
//ReadProcessMemory(hProcess, (void*)(locname_pointer), (void*)&pers.locname_len, 4, 0);
ReadProcessMemory(hProcess, (void*)(locname_pointer + LocName_off1), (void*)&locname_pointer, 4, 0);
ReadProcessMemory(hProcess, (void*)(locname_pointer), (void*)&locname_pointer, 4, 0);
ReadProcessMemory(hProcess, (void*)(locname_pointer), (void*)pers.locname, sizeof(WCHAR)*128, 0); |
|
|
|
|
|
у меня такой вот код, в pers.locname оказывается чушь
если делать
|
Цитата: |
|
|
|
|
|
|
|
|
ReadProcessMemory(hProcess, (void*)(locname_pointer + LocName_off1), (void*)&locname_pointer, 4, 0);
ReadProcessMemory(hProcess, (void*)(locname_pointer), (void*)pers.locname, sizeof(WCHAR)*128, 0); |
|
|
|
|
|
то тоже чушь.
Последний раз редактировалось dronte; 06.06.2017 в 13:53.
Причина: Добавлено сообщение
|
|
|
07.06.2017, 00:20
|
#4
|
|
|
|
Разведчик
|
Регистрация: 11.05.2011
Сообщений: 41
Популярность: 305
Сказал(а) спасибо: 43
Поблагодарили 12 раз(а) в 7 сообщениях
|
Re: Как читать ник персонажа/название локации?
|
Цитата: |
|
|
|
|
|
|
|
|
|
UPD: А теперь тот же самый вопрос, про название локации, там 0x0 не забыл, но всё равно чушь. И какая длина названия?
BA + 0x1C + 0x1C + 0x60 +0x4 + 0x0
|
|
|
|
|
|
Вроде офсеты правильные. Вот пример рабочего кода (у меня для удобства сохранен адрес GA = [BA]+1C), только что проверил.
Код:
static const DWORD MAX_LOC_NAME = 64;
static const DWORD GA = 0x00E4C45C;
static const DWORD OFFS_LOCATION_NAME_0 = 0x001C;
static const DWORD OFFS_LOCATION_NAME_1 = 0x0060;
static const DWORD OFFS_LOCATION_NAME_2 = 0x0004;
ChainReadString( wsLocName, cw->hProcess, GA, MAX_LOC_NAME * sizeof( TCHAR ), 4, OFFS_LOCATION_NAME_0, OFFS_LOCATION_NAME_1, OFFS_LOCATION_NAME_2, 0x00 );
Максимальная длина взята "от балды".
Последний раз редактировалось pw.lancer; 07.06.2017 в 00:26.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Локаций для PW
|
serii23 |
Обсуждение игровых проектов |
0 |
11.04.2017 20:17 |
[Пакеты] Тп по локации без птички!
|
G0lovoreZZ |
Боты, скрипты и прочий софт для Aion |
21 |
06.09.2012 14:17 |
название локаций
|
RWD |
Вопросы и ответы, обсуждения |
2 |
17.04.2012 18:53 |
[Статья] Локации для точки
|
lookartis236 |
Общение и обсуждение Perfect World |
2 |
05.06.2011 15:56 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 19:19.
|
|