[CM]Слюнявчик
Дата: Четверг, 05.01.2017, 21:14 | Сообщение # 1
Новичок
Сообщений: 19
Статус: Offline
Пол года назад я делал по заказу CRMP UDF. Но забросил это дело Вообщем, наконец-то решился выложить то что натворил:
Код
global newPID := getPID("grand_theft_auto_san_andreas.dll") global hGTA := openProcess(newPID) ;GTA Adresses global ADDR_POSITION_X := 0xB6F2E4 global ADDR_POSITION_Y := 0xB6F2E8 global ADDR_POSITION_Z := 0xB6F2EC global ADDR_CPED_PTR := 0xB6F5F0 global ADDR_CPED_HPOFF := 0x540 global ADDR_CPED_ARMOROFF := 0x548 global ADDR_CPED_MONEY := 0x0B7CE54 global ADDR_CPED_INTID := 0xA4ACE8 global ADDR_CPED_SKINIDOFF := 0x22 ; global ADDR_VEHICLE_PTR := 0xBA18FC global ADDR_VEHICLE_HPOFF := 0x4C0 global ADDR_VEHICLE_DOORSTATE := 0x4F8 global ADDR_VEHICLE_ENGINESTATE := 0x428 global ADDR_VEHICLE_SIRENSTATE := 0x1069 global ADDR_VEHICLE_SIRENSTATE2 := 0x1300 global ADDR_VEHICLE_LIGHTSTATE := 0x584 global ADDR_VEHICLE_MODEL := 0x22 global ADDR_VEHICLE_TYPE := 0x590 global ADDR_VEHICLE_DRIVER := 0x460 global ADDR_VEHICLE_X := 0x44 global ADDR_VEHICLE_Y := 0x48 global ADDR_VEHICLE_Z := 0x4C global ERROR_OK := 0 global ERROR_PROCESS_NOT_FOUND := 1 global ERROR_OPEN_PROCESS := 2 global ERROR_INVALID_HANDLE := 3 global ERROR_MODULE_NOT_FOUND := 4 global ERROR_ENUM_PROCESS_MODULES := 5 global ERROR_READ_MEMORY := 6 global ERROR_WRITE_MEMORY := 7 ; ######################################################################### ; # - getPlayerHealth() # ; # - getPlayerArmour() # ; # - getPlayerInteriorId() # ; # - getPlayerSkinId() # ; # - getPlayerMoney() # ; # - getPlayerWanteds() # ; # - getPlayerWeaponId() # ; # - getPlayerState() # ; # - IsPlayerInMenu() # ; # - GetPlayerPos(x, y, z) # ; # - IsPlayerInRangeOfPoint(x, y, z, radius) # ; ######################################################################### ;########################################################################## ; # - isPlayerInAnyVehicle() # ; # - getVehicleHealth() # ; # - isPlayerDriver() # ; # - getVehicleModelId() # ; # - getVehicleLightState() # ; # - getVehicleEngineState() # ; # - getVehicleLockState() # ; # - getVehicleColor1() # ; # - getVehicleColor2() # ; # - getVehicleSpeed() # ; # - getPlayerRadiostationID() # ;########################################################################## readMem(hProcess, dwAddress, dwLen=4, type="UInt") { if(!hProcess) { ErrorLevel := ERROR_INVALID_HANDLE return 0 } VarSetCapacity(dwRead, dwLen) dwRet := DllCall( "ReadProcessMemory" , "UInt", hProcess , "UInt", dwAddress , "Str", dwRead , "UInt", dwLen , "UInt*", 0) if(dwRet == 0) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return NumGet(dwRead, 0, type) } readFloat(hProcess, dwAddress) { if(!hProcess) { ErrorLevel := ERROR_INVALID_HANDLE return 0 } VarSetCapacity(dwRead, 4) ; float = 4 dwRet := DllCall( "ReadProcessMemory" , "UInt", hProcess , "UInt", dwAddress , "Str", dwRead , "UInt", 4 , "UInt*", 0 , "UInt") if(dwRet == 0) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return NumGet(dwRead, 0, "Float") } readString(hProcess, dwAddress, dwLen) { if(!hProcess) { ErrorLevel := ERROR_INVALID_HANDLE return 0 } VarSetCapacity(sRead, dwLen) dwRet := DllCall( "ReadProcessMemory" , "UInt", hProcess , "UInt", dwAddress , "Str", sRead , "UInt", dwLen , "UInt*", 0 , "UInt") if(dwRet == 0) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return sRead } readDWORD(hProcess, dwAddress) { if(!hProcess) { ErrorLevel := ERROR_INVALID_HANDLE return 0 } VarSetCapacity(dwRead, 4) dwRet := DllCall( "ReadProcessMemory" , "UInt", hProcess , "UInt", dwAddress , "Str", dwRead , "UInt", 4 , "UInt*", 0) if(dwRet == 0) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return NumGet(dwRead, 0, "UInt") } getPID(sProcess) { Process, Exist, %sProcess% dwPID = %ErrorLevel% if(dwPID == 0) { ErrorLevel := ERROR_PROCESS_NOT_FOUND return 0 } ErrorLevel := ERROR_OK return dwPID } openProcess(dwPID, dwRights = 0x1F0FFF) { hProcess := DllCall("OpenProcess" , "UInt", dwRights , "int", 0 , "UInt", dwPID , "Uint") if(hProcess == 0) { ErrorLevel := ERROR_OPEN_PROCESS return 0 } ErrorLevel := ERROR_OK return hProcess } closeProcess(hProcess) { if(hProcess == 0) { ErrorLevel := ERROR_INVALID_HANDLE return 0 } dwRet := DllCall( "CloseHandle" , "Uint", hProcess , "UInt") ErrorLevel := ERROR_OK } getModuleBaseAddress(sModule, hProcess) { if(!sModule) { ErrorLevel := ERROR_MODULE_NOT_FOUND return 0 } if(!hProcess) { ErrorLevel := ERROR_INVALID_HANDLE return 0 } dwSize = 1024*4 VarSetCapacity(hMods, dwSize) VarSetCapacity(cbNeeded, 4) dwRet := DllCall( "Psapi.dll\EnumProcessModules" , "UInt", hProcess , "UInt", &hMods , "UInt", dwSize , "UInt*", cbNeeded , "UInt") if(dwRet == 0) { ErrorLevel := ERROR_ENUM_PROCESS_MODULES return 0 } dwMods := cbNeeded / 4 i := 0 VarSetCapacity(hModule, 4) VarSetCapacity(sCurModule, 260) while(i < dwMods) { hModule := NumGet(hMods, i*4) DllCall("Psapi.dll\GetModuleFileNameEx" , "UInt", hProcess , "UInt", hModule , "Str", sCurModule , "UInt", 260) SplitPath, sCurModule, sFilename if(sModule == sFilename) { ErrorLevel := ERROR_OK return hModule } i := i + 1 } ErrorLevel := ERROR_MODULE_NOT_FOUND return 0 } getPlayerHealth() { if !ch() return "error" dwCPedPtr := readDWORD(hGTA, 0xB6F5F0) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } dwAddr := dwCPedPtr + ADDR_CPED_HPOFF fHealth := readFloat(hGTA, dwAddr) if errorlevel return -1 return Round(fHealth) } getPlayerArmor() { if !ch() return "error" dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF fHealth := readFloat(hGTA, dwAddr) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return Round(fHealth) } getPlayerInteriorId() { if !ch() return "error" iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return iid } getPlayerSkinID() { if !ch() return "error" dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } dwAddr := dwCPedPtr + ADDR_CPED_SKINIDOFF SkinID := readMem(hGTA, dwAddr, 2, "byte") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return SkinID } getPlayerMoney() { if !ch() return "error" money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return "" } ErrorLevel := ERROR_OK return money } getPlayerWanteds() { if !ch() return "error" dwPtr := 0xB7CD9C dwPtr := readDWORD(hGTA, dwPtr) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } Wanteds := readDWORD(hGTA, dwPtr) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return Wanteds } getPlayerWeaponId() { if !ch() return "error" WaffenId := readMem(hGTA, 0xBAA410, 4, "byte") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } return WaffenId } getPlayerState() { if !ch() return "error" dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } State := readDWORD(hGTA, dwCPedPtr + 0x530) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return State } IsPlayerInMenu() { if !ch() return "error" IsInMenu := readMem(hGTA, 0xBA67A4, 4, "byte") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return IsInMenu } isPlayerInAnyVehicle() { if !ch() return "error" dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } return (dwVehPtr > 0) } isPlayerDriver() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } if(!dwAddr) return -1 dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return (dwVal==dwCPedPtr) } getVehicleHealth() { if !ch() return "error" dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF fHealth := readFloat(hGTA, dwAddr) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return Round(fHealth) } getVehicleModelId() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } if(!dwAddr) return 0 sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return sVal } getVehicleLightState() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } if(!dwAddr) return -1 dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return (dwVal>0) } getVehicleEngineState() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } if(!dwAddr) return -1 cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return (cVal==24 || cVal==56 || cVal==88 || cVal==120) } getVehicleSirenState() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } if(!dwAddr) return -1 cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_SIRENSTATE, 1, "Char") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return (cVal==-48) } getVehicleLockState() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } if(!dwAddr) return -1 dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return -1 } ErrorLevel := ERROR_OK return (dwVal==2) } getVehicleColor1() { if !ch() return "error" dwAddr := readDWORD(hGTA, 0xBA18FC) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } if(!dwAddr) return 0 sVal := readMem(hGTA, dwAddr + 1076, 1, "byte") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return sVal } getVehicleColor2() { if !ch() return "error" dwAddr := readDWORD(hGTA, 0xBA18FC) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } if(!dwAddr) return 0 sVal := readMem(hGTA, dwAddr + 1077, 1, "byte") if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK return sVal } getVehicleSpeed() { if !ch() return "error" dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return "" } fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float") fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float") fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float") fVehicleSpeed := sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ)) fVehicleSpeed := (fVehicleSpeed * 100) * 1.43 ;Der Wert "1.43" ist meistens auf jedem Server anders. Die Geschwindigkeit wird somit erhГѓВ¶ht bzw. verringert return fVehicleSpeed } GetPlayerPos(ByRef fX,ByRef fY,ByRef fZ) { if !ch() return "error" fX := readFloat(hGTA, ADDR_POSITION_X) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } fY := readFloat(hGTA, ADDR_POSITION_Y) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } fZ := readFloat(hGTA, ADDR_POSITION_Z) if(ErrorLevel) { ErrorLevel := ERROR_READ_MEMORY return 0 } ErrorLevel := ERROR_OK } IsPlayerInRangeOfPoint(_posX, _posY, _posZ, _posRadius) { if !ch() return "error" GetPlayerPos(posX, posY, posZ) X := posX -_posX Y := posY -_posY Z := posZ -_posZ if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)) && ((Z < _posRadius) && (Z > -_posRadius))) return TRUE return FALSE } ch() { global newPID := getPID("grand_theft_auto_san_andreas.dll") if(!newPID) { dwGTAPID := 0 global hGTA := openProcess(newPID) return false } if(!hGTA || (dwGTAPID != newPID)) { hGTA := openProcess(newPID) if(ErrorLevel) { dwGTAPID := 0 global hGTA := openProcess(newPID) return false } dwGTAPID := newPID return true } return true } ConvertBase(InputBase, OutputBase, number) { static u := A_IsUnicode ? "_wcstoui64" : "_strtoui64" static v := A_IsUnicode ? "_i64tow" : "_i64toa" VarSetCapacity(s, 65, 0) value := DllCall("msvcrt.dll\" u, "Str", number, "UInt", 0, "UInt", InputBase, "CDECL Int64") DllCall("msvcrt.dll\" v, "Int64", value, "Str", s, "UInt", OutputBase, "CDECL") return s }
Облако@Mail.ru версия с функциями для работы с мультиплеером потеряна остались только скрины с адресами, если надо кому - скину
Сообщение отредактировал [CM]Слюнявчик - Четверг, 05.01.2017, 21:15