[rSRO] Grab range changer

07/01/2010 15:45 jooni22#1
Hi I had some time and make grab range changer for rsro. So as script work you must need Autoit.
Code:
;------------------------------------------------------------------------------
;    Memory functions                                                          -
;------------------------------------------------------------------------------

Func _OpenProcess($hWnd, $use_pid=0)
    If $use_pid = 0 Then
        Local $pid = DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hWnd, "int*", 0)
        If IsArray($pid) Then
            $pid = $pid[2]
        Else
            SetError(-1)
            Return
        EndIf
    Else
        Local $pid = $hWnd
    EndIf

    ; 0x001f0fff - All Access
    Local $pHandle = DllCall("kernel32.dll", "long", "OpenProcess", "int", 0x001f0fff, "int", 0, "int", $pid)
    If IsArray($pHandle) And $pHandle[0] > 0 Then
        $pHandle = $pHandle[0]
    Else
        SetError(-2)
        Return
    EndIf

    Return $pHandle
EndFunc

Func _CloseHandle($pHandle)
    DllCall("kernel32.dll", "int", "CloseHandle", "int", $pHandle)
EndFunc

Func _WriteFloat($pHandle, $Address, $value)
    Local $float = DllStructCreate("float")
    DllStructSetData($float, 1, $value)

    ; Need to make the memory writeable first! You should really restore the page protection afterwards though, but this is to make it work
    $outDw = 1
    DllCall("kernel32.dll", "int", "VirtualProtectEx", "int", $pHandle, "ptr", $Address, "int", 4, "dword", 0x40, "dword*", $outDw)

    Local $ret = DllCall("kernel32.dll", "int", "WriteProcessMemory", "int", $pHandle, "int", $Address, "ptr", DllStructGetPtr($float), "int", 4, "int", 0)
    If IsArray($ret) Then
        If $ret[0] <> 0 Then
            Return True
        Else
            SetError(-2)
            Return False
        EndIf
    Else
        SetError(-1)
        Return False
    EndIf
EndFunc

Func _ReadFloat($pHandle, $Address)
    Local $floatReturn = 0
    Local $float = DllStructCreate("float")
    Local $ret = DllCall("kernel32.dll", "int", "ReadProcessMemory", "int", $pHandle, "int", $Address, "ptr", DllStructGetPtr($float), "int", 4, "int", 0)
    If IsArray($ret) Then
        If $ret[0] = 1 Then
            $floatReturn = DllStructGetData($float, 1)
        Else
            SetError(-1)
        EndIf
    Else
        SetError(-2)
    EndIf
  
    Return $floatReturn
EndFunc


;------------------------------------------------------------------------------
;    Script code                                                                  -
;------------------------------------------------------------------------------

$address = 0xCDFF98

$pHandle = _OpenProcess(WinGetHandle("SRO_Client"))

MsgBox(64, "TEST BYTE PTR DS:[ESI-11C],1", "Aktualny zasi?g dzia©©ania AutoSelect: " & _ReadFloat($pHandle, $address))
MsgBox(64, "ksro D13500", _WriteFloat($pHandle, $address, [COLOR="Red"]20000000[/COLOR]))
MsgBox(64, "tsro C647AC", "AutoSelect zosta©© zwi?kszony do: " & _ReadFloat($pHandle, $address))

_CloseHandle($pHandle)
20000000 - Grab Distance

Script compatible with rSro version 1.016
07/01/2010 22:29 InvincibleNoOB#2
#Approved.
07/03/2010 11:55 blackeagle321#3
what does it do?
07/03/2010 21:10 jooni22#4
With this script you can grab items from ground in longer rage
07/04/2010 09:10 machaunder#5
Nice script but i need this to csro beacuase butterfly dont have a good grab fuction:P
07/04/2010 11:57 jooni22#6
Send me sro_client from csro, I can try do it.
07/04/2010 12:26 machaunder#7
this is sro_client for csro [Only registered and activated users can see links. Click Here To Register...]
07/04/2010 15:28 jooni22#8
Try this and tell me if work or doesn't work
Code:
;------------------------------------------------------------------------------
;    Memory functions                                                          -
;------------------------------------------------------------------------------

Func _OpenProcess($hWnd, $use_pid=0)
    If $use_pid = 0 Then
        Local $pid = DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hWnd, "int*", 0)
        If IsArray($pid) Then
            $pid = $pid[2]
        Else
            SetError(-1)
            Return
        EndIf
    Else
        Local $pid = $hWnd
    EndIf

    ; 0x001f0fff - All Access
    Local $pHandle = DllCall("kernel32.dll", "long", "OpenProcess", "int", 0x001f0fff, "int", 0, "int", $pid)
    If IsArray($pHandle) And $pHandle[0] > 0 Then
        $pHandle = $pHandle[0]
    Else
        SetError(-2)
        Return
    EndIf

    Return $pHandle
EndFunc

Func _CloseHandle($pHandle)
    DllCall("kernel32.dll", "int", "CloseHandle", "int", $pHandle)
EndFunc

Func _WriteFloat($pHandle, $Address, $value)
    Local $float = DllStructCreate("float")
    DllStructSetData($float, 1, $value)

    ; Need to make the memory writeable first! You should really restore the page protection afterwards though, but this is to make it work
    $outDw = 1
    DllCall("kernel32.dll", "int", "VirtualProtectEx", "int", $pHandle, "ptr", $Address, "int", 4, "dword", 0x40, "dword*", $outDw)

    Local $ret = DllCall("kernel32.dll", "int", "WriteProcessMemory", "int", $pHandle, "int", $Address, "ptr", DllStructGetPtr($float), "int", 4, "int", 0)
    If IsArray($ret) Then
        If $ret[0] <> 0 Then
            Return True
        Else
            SetError(-2)
            Return False
        EndIf
    Else
        SetError(-1)
        Return False
    EndIf
EndFunc

Func _ReadFloat($pHandle, $Address)
    Local $floatReturn = 0
    Local $float = DllStructCreate("float")
    Local $ret = DllCall("kernel32.dll", "int", "ReadProcessMemory", "int", $pHandle, "int", $Address, "ptr", DllStructGetPtr($float), "int", 4, "int", 0)
    If IsArray($ret) Then
        If $ret[0] = 1 Then
            $floatReturn = DllStructGetData($float, 1)
        Else
            SetError(-1)
        EndIf
    Else
        SetError(-2)
    EndIf
  
    Return $floatReturn
EndFunc


;------------------------------------------------------------------------------
;    Script code                                                                  -
;------------------------------------------------------------------------------

$address = 0xD08028

$pHandle = _OpenProcess(WinGetHandle("SRO_Client"))

MsgBox(64, "TEST BYTE PTR DS:[ESI-11C],1", "Aktualny zasi?g dzia©©ania AutoSelect: " & _ReadFloat($pHandle, $address))
MsgBox(64, "ksro D13500", _WriteFloat($pHandle, $address, 20000000))
MsgBox(64, "tsro C647AC", "AutoSelect zosta©© zwi?kszony do: " & _ReadFloat($pHandle, $address))

_CloseHandle($pHandle)
07/04/2010 15:46 machaunder#9
100% working :P in csro hehe:P