belyankin12 |
Дата: Пятница, 18.01.2019, 20:08 | Сообщение # 1
|
Боец
Сообщений: 69
Статус: Offline
|
Здравствуйте, необходимо получить значение из памяти игры. Конкретно количество текущего топлива в автомобиле на samp-rp.ru. С помощью читенджина нахожу два нужных значения (оба меняются одновременно) правда хранятся не в виде байтов а в виде трехзначной строки. Адреса каждый раз разные, при перезапуске т.е. они меняются но их всегда два при отсеве. Картинка: http://prntscr.com/m8zq8r Беру любую из них и смотрю что записывает туда, находится одна инструкция, смещение 321 всегда:http://prntscr.com/m8zqo0 Беру вероятное значение указателя и ищу 4 byle в hex это значение, находится всегда один адрес: http://prntscr.com/m8zrkh Потом делаю с него указатель и у меня в таблице появляются два значения дублирующие друг-друга: http://prntscr.com/m8zrwj и http://prntscr.com/m8zs9m
В итоге у меня следующий код не выводит нужную мне строку, либо останавливается на Error_Read_Memory (я полагаю когда адрес неправильный какой-то указываю) либо вовсе выдает какую-то ересь на непонятной кодировке. Более того я даже не смог получить значение этого временного участка памяти (ну т.е. чтобы хотя бы на один раз сработало...), выдавало все тот же Error_Read_Memory. Код.
Код !1:: if (!CheckHandles()) { addmessagetochatwindow("123") return } addmessagetochatwindow(ReadString(hGTA, 16219058 + 321, 4)) return
Вопрос: где ошибки? Вообще не так адрес памяти нашел, или что не так в команде прописал? Есть ли какие-то инструкции или советы, или, может-быть даже, сделаете мне уже рабочий код? Рассчитываю на какую-нибудь помощь.
|
|
|
|
MrGPro |
Дата: Среда, 23.01.2019, 23:25 | Сообщение # 2
|
Боец
Сообщений: 202
Статус: Offline
|
Вот дерзай а основе данной конструкции лепи адрес
Код getVehicleIdServer(address=0x13C298, datatype="int", length=4, offset=0) { if (isPlayerDriver() != "-1" or isPlayerInAnyVehicle() != "0") { Process, Exist, gta_sa.exe PID_GTA := ErrorLevel VarSetCapacity(me32, 548, 0) NumPut(548, me32) snapMod := DllCall("CreateToolhelp32Snapshot", "Uint", 0x00000008, "Uint", PID_GTA) If (snapMod = -1) Return 0 If (DllCall("Module32First", "Uint", snapMod, "Uint", &me32)) { Loop { If (!DllCall("lstrcmpi", "Str", "samp.dll", "UInt", &me32 + 32)) { DllCall("CloseHandle", "UInt", snapMod) key:= NumGet(&me32 + 20) WinGet, PID_SAMP, PID, GTA:SA:MP hwnd_samp := DllCall("OpenProcess","Uint",0x1F0FFF,"int",0,"int", PID_SAMP) VarSetCapacity(readvalue,length, 0) DllCall("ReadProcessMemory","Uint",hwnd_samp,"Uint",key+address+offset,"Str",readvalue,"Uint",length,"Uint *",0) finalvalue := NumGet(readvalue,0,datatype) DllCall("CloseHandle", "int", hwnd_samp) return finalvalue } } Until !DllCall("Module32Next", "Uint", snapMod, "UInt", &me32) } DllCall("CloseHandle", "Uint", snapMod) } else Return 0 }
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
|
|
|
|
FForest |
Дата: Пятница, 25.01.2019, 00:55 | Сообщение # 3
|
Местный Дурачок
Сообщений: 129
Статус: Offline
|
MrGPro, А ты приколист я так посмотрю, кинул готовую функцию и сказал учиться. То же самое что кинуть человека по среди моря и сказать учись плавать. А автору хочу сказать что на Цм могут помочь с работой в памяти Тумкин и Мкфрии но его забанили ... так что стучись к тумкину.
|
|
|
|
|