Code:
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; This script requires full Administrative rights
#include <Array.au3>
#include "NomadMemory.au3"
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("", 140, 193, 303, 226)
Global $Input1 = GUICtrlCreateInput("", 8, 32, 121, 21)
$Label1 = GUICtrlCreateLabel("Old Action Struct Offset:", 8, 16, 118, 17)
$Button1 = GUICtrlCreateButton("Search", 16, 128, 107, 41)
$Label2 = GUICtrlCreateLabel("New Action Struct Offset:", 8, 72, 124, 17)
Global $Input2 = GUICtrlCreateInput("", 8, 88, 121, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; Declare Off-Set Variables
Global $SOFTWARE_OFFSET_CONFIG = "Custom_OffSets.ini", $CFG_OFFSET_ROOT_KEY = "Custom_32_Offsets_In_Decimal", $CFG_BASEADDRESS_ROOT_KEY = "Perfect_World_Base_Address_In_Decimal", $CFG_BASEADDRESS_APP_KEY = "Application_Title", $CFG_BASEADDRESS_KEY = "Base_Address", $CFG_BASEADDRESSFZ_KEY = "Base_AddressFZ", $CFG_BASEADDRESSEXP_KEY = "Base_AddressEXP"
Global $APP_BASE_ADDRESS = "0x" & Hex(IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_BASEADDRESS_ROOT_KEY, $CFG_BASEADDRESS_KEY, "")), $APP_BASE_ADDRESSFZ = "0x" & Hex(IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_BASEADDRESS_ROOT_KEY, $CFG_BASEADDRESSFZ_KEY, "")), $APP_BASE_ADDRESSEXP = "0x" & Hex(IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_BASEADDRESS_ROOT_KEY, $CFG_BASEADDRESSEXP_KEY, ""))
Global $APP_TITLE = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_BASEADDRESS_ROOT_KEY, $CFG_BASEADDRESS_APP_KEY, "Perfect World International"), $HANDLE = ControlGetHandle($APP_TITLE, "", ""), $KERNEL32 = DllOpen('kernel32.dll')
Global $PROCESS_ID = WinGetProcess($APP_TITLE), $PROCESS_INFORMATION = _MemoryOpen($PROCESS_ID), $APP_PATH = _ProcessIdPath($PROCESS_ID)
Global $test_offset,$Return
$MOVETOX=1220.00109863281
$MOVETOY=140.000015258789
$MOVETOZ=248.451446533203
$HIGHT=24.451446533203
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_SearchOffset(GUICtrlRead($Input1))
EndSwitch
unFreeze()
Sleep(100)
WEnd
Func _SearchOffset($old_offset)
For $test_offset=$old_offset To 9999
Global $OFFSET_ACTIONFLAG[4], $CFG_OFFSET_ACTIONFLAG = "ActionFlag_Offset"
$OFFSET_ACTIONFLAG[1] = 52 ;0x30
$OFFSET_ACTIONFLAG[2] = $test_offset ;0x100C
$OFFSET_ACTIONFLAG[3] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONFLAG, "24")
Global $OFFSET_ACTIONREAD[5], $CFG_OFFSET_ACTIONREAD = "ActionRead_Offset"
$OFFSET_ACTIONREAD[1] = 52 ;0x30
$OFFSET_ACTIONREAD[2] = $test_offset ;0x100C
$OFFSET_ACTIONREAD[3] = 48 ;030
$OFFSET_ACTIONREAD[4] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONREAD, "4")
Global $OFFSET_ACTIONREAD2[5], $CFG_OFFSET_ACTIONREAD2 = "ActionRead2_Offset"
$OFFSET_ACTIONREAD2[1] = 52 ;0x30
$OFFSET_ACTIONREAD2[2] = $test_offset ;0x100C
$OFFSET_ACTIONREAD2[3] = 48 ;030
$OFFSET_ACTIONREAD2[4] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONREAD2, "8")
Global $OFFSET_ACTIONREAD3[5], $CFG_OFFSET_ACTIONREAD3 = "ActionRead3_Offset"
$OFFSET_ACTIONREAD3[1] = 52 ;0x30
$OFFSET_ACTIONREAD3[2] = $test_offset ;0x100C
$OFFSET_ACTIONREAD3[3] = 48 ;030
$OFFSET_ACTIONREAD3[4] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONREAD3, "28") ; 1c
Global $OFFSET_ACTIONWRITE[4], $CFG_OFFSET_ACTIONWRITE = "ActionWrite_Offset"
$OFFSET_ACTIONWRITE[1] = 52 ;0x30
$OFFSET_ACTIONWRITE[2] = $test_offset ;0x100C
$OFFSET_ACTIONWRITE[3] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONWRITE, "12") ;0xC
Global $OFFSET_ACTIONWRITE2[4], $CFG_OFFSET_ACTIONWRITE2 = "ActionWrite2_Offset"
$OFFSET_ACTIONWRITE2[1] = 52 ;0x30
$OFFSET_ACTIONWRITE2[2] = $test_offset ;0x100C
$OFFSET_ACTIONWRITE2[3] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONWRITE2, "20") ;0x14
Global $OFFSET_ACTIONMOVEX[6], $CFG_OFFSET_ACTIONMOVEX = "ActionMoveX_OffSet"
$OFFSET_ACTIONMOVEX[1] = 52 ;0x30
$OFFSET_ACTIONMOVEX[2] = $test_offset ;0x100C
$OFFSET_ACTIONMOVEX[3] = 48 ;030
$OFFSET_ACTIONMOVEX[4] = 4 ;0x4
$OFFSET_ACTIONMOVEX[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONMOVEX, "32")
Global $OFFSET_ACTIONMOVEY[6], $CFG_OFFSET_ACTIONMOVEY = "ActionMoveY_OffSet"
$OFFSET_ACTIONMOVEY[1] = 52 ;0x30
$OFFSET_ACTIONMOVEY[2] = $test_offset ;0x100C
$OFFSET_ACTIONMOVEY[3] = 48 ;030
$OFFSET_ACTIONMOVEY[4] = 4 ;0x4
$OFFSET_ACTIONMOVEY[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONMOVEY, "40")
Global $OFFSET_ACTIONMOVEZ[6], $CFG_OFFSET_ACTIONMOVEZ = "ActionMoveZ_OffSet"
$OFFSET_ACTIONMOVEZ[1] = 52 ;0x30
$OFFSET_ACTIONMOVEZ[2] = $test_offset ;0x100C
$OFFSET_ACTIONMOVEZ[3] = 48 ;030
$OFFSET_ACTIONMOVEZ[4] = 4 ;0x4
$OFFSET_ACTIONMOVEZ[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONMOVEZ, "36")
Global $OFFSET_ACTIONHEIGHT[6], $CFG_OFFSET_ACTIONHEIGHT = "ActionHeight_OffSet"
$OFFSET_ACTIONHEIGHT[1] = 52 ;0x30
$OFFSET_ACTIONHEIGHT[2] = $test_offset ;0x100C
$OFFSET_ACTIONHEIGHT[3] = 48 ;030
$OFFSET_ACTIONHEIGHT[4] = 4 ;0x4
$OFFSET_ACTIONHEIGHT[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONHEIGHT, "104")
Global $OFFSET_ACTIONHEIGHTFLAG[6], $CFG_OFFSET_ACTIONHEIGHTFLAG = "ActionHeightFlag_OffSet"
$OFFSET_ACTIONHEIGHTFLAG[1] = 52 ;0x30
$OFFSET_ACTIONHEIGHTFLAG[2] = $test_offset ;0x100C
$OFFSET_ACTIONHEIGHTFLAG[3] = 48 ;030
$OFFSET_ACTIONHEIGHTFLAG[4] = 4 ;0x4
$OFFSET_ACTIONHEIGHTFLAG[5]= IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONHEIGHTFLAG, "100")
Global $OFFSET_ACTIONHEIGHTFLAG2[6], $CFG_OFFSET_ACTIONHEIGHTFLAG2 = "ActionHeightFlag2_Offset"
$OFFSET_ACTIONHEIGHTFLAG2[1] = 52 ;0x30
$OFFSET_ACTIONHEIGHTFLAG2[2] = $test_offset ;0x100C
$OFFSET_ACTIONHEIGHTFLAG2[3] = 48 ;030
$OFFSET_ACTIONHEIGHTFLAG2[4] = 4 ;0x4
$OFFSET_ACTIONHEIGHTFLAG2[5]= IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONHEIGHTFLAG2, "108")
Global $OFFSET_ACTIONDONE[6], $CFG_OFFSET_ACTIONDONE = "ActionDoneFlag_OffSet"
$OFFSET_ACTIONDONE[1] = 52 ;0x30
$OFFSET_ACTIONDONE[2] = $test_offset ;0x100C
$OFFSET_ACTIONDONE[3] = 48 ;030
$OFFSET_ACTIONDONE[4] = 4 ;0x4
$OFFSET_ACTIONDONE[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONDONE, "8")
Global $OFFSET_ACTIONVALUE[6], $CFG_OFFSET_ACTIONVALUE = "ActionValue_OffSet"
$OFFSET_ACTIONVALUE[1] = 52 ;0x30
$OFFSET_ACTIONVALUE[2] = $test_offset ;0x100C
$OFFSET_ACTIONVALUE[3] = 48 ;030
$OFFSET_ACTIONVALUE[4] = 4 ;0x4
$OFFSET_ACTIONVALUE[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONVALUE, "44")
Global $OFFSET_ACTIONVALUE2[6], $CFG_OFFSET_ACTIONVALUE2 = "ActionValue2_OffSet"
$OFFSET_ACTIONVALUE2[1] = 52 ;0x30
$OFFSET_ACTIONVALUE2[2] = $test_offset ;0x100C
$OFFSET_ACTIONVALUE2[3] = 48 ;030
$OFFSET_ACTIONVALUE2[4] = 4 ;0x4
$OFFSET_ACTIONVALUE2[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONVALUE2, "64")
Global $OFFSET_ACTIONSETERROR[6], $CFG_OFFSET_ACTIONSETERROR = "ActionSetError_Offset"
$OFFSET_ACTIONSETERROR[1] = 52 ;0x30
$OFFSET_ACTIONSETERROR[2] = $test_offset ;0x100C
$OFFSET_ACTIONSETERROR[3] = 48 ;0x30
$OFFSET_ACTIONSETERROR[4] = 8 ;0x8
$OFFSET_ACTIONSETERROR[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONSETERROR, "52")
Global $OFFSET_ACTIONFINISHED[6], $CFG_OFFSET_ACTIONFINISHED = "ActionFinished_Offset"
$OFFSET_ACTIONFINISHED[1] = 52 ;0x30
$OFFSET_ACTIONFINISHED[2] = $test_offset ;0x100C
$OFFSET_ACTIONFINISHED[3] = 48 ;0x30
$OFFSET_ACTIONFINISHED[4] = 8 ;0x8
$OFFSET_ACTIONFINISHED[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONFINISHED, "8")
Global $OFFSET_ACTIONSTART[6], $CFG_OFFSET_ACTIONSTART = "ActionStart_Offset"
$OFFSET_ACTIONSTART[1] = 52 ;0x30
$OFFSET_ACTIONSTART[2] = $test_offset ;0x100C
$OFFSET_ACTIONSTART[3] = 48 ;0x30
$OFFSET_ACTIONSTART[4] = 8 ;0x8
$OFFSET_ACTIONSTART[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONSTART, "20")
Global $OFFSET_ACTIONNOTSTART[6], $CFG_OFFSET_ACTIONNOTSTART = "ActionNotStart_Offset"
$OFFSET_ACTIONNOTSTART[1] = 52 ;0x30
$OFFSET_ACTIONNOTSTART[2] = $test_offset ;0x100C
$OFFSET_ACTIONNOTSTART[3] = 48 ;0x30
$OFFSET_ACTIONNOTSTART[4] = 8 ;0x8
$OFFSET_ACTIONNOTSTART[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONNOTSTART, "36")
Global $OFFSET_ACTIONOBJECT[6], $CFG_OFFSET_ACTIONOBJECT = "ActionObject_Offset"
$OFFSET_ACTIONOBJECT[1] = 52 ;0x30
$OFFSET_ACTIONOBJECT[2] = $test_offset ;0x100C
$OFFSET_ACTIONOBJECT[3] = 48 ;0x30
$OFFSET_ACTIONOBJECT[4] = 8 ;0x8
$OFFSET_ACTIONOBJECT[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONOBJECT, "32")
Global $OFFSET_OBJECTACTION[6], $CFG_OFFSET_OBJECTACTION = "ObjectAction_Offset"
$OFFSET_OBJECTACTION[1] = 52 ;0x30
$OFFSET_OBJECTACTION[2] = $test_offset ;0x100C
$OFFSET_OBJECTACTION[3] = 48 ;0x30
$OFFSET_OBJECTACTION[4] = 8 ;0x8
$OFFSET_OBJECTACTION[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_OBJECTACTION, "56")
Global $OFFSET_ACTIONSKILL[6], $CFG_OFFSET_ACTIONSKILL = "ActionSkill_Offset"
$OFFSET_ACTIONSKILL[1] = 52 ;0x30
$OFFSET_ACTIONSKILL[2] = $test_offset ;0x100C
$OFFSET_ACTIONSKILL[3] = 48 ;0x30
$OFFSET_ACTIONSKILL[4] = 8 ;0x8
$OFFSET_ACTIONSKILL[5] = IniRead($SOFTWARE_OFFSET_CONFIG, $CFG_OFFSET_ROOT_KEY, $CFG_OFFSET_ACTIONSKILL, "80")
MoveToXYZ($MOVETOX, $MOVETOY, $MOVETOZ, $HIGHT /10)
$Return = msgbox(262144+4,"Found Offset ?",$test_offset,0)
If $Return = 6 Then
GuiCtrlSetData($Input2, $test_offset)
exitloop
endif
next
EndFunc
Func unFreeze()
$FZ = _MemoryRead($APP_BASE_ADDRESSFZ, $PROCESS_INFORMATION)
If $FZ <> 1 Then
_MemoryWrite($APP_BASE_ADDRESSFZ, $PROCESS_INFORMATION, "1")
EndIf
EndFunc
Func MoveToXYZ($MOVETOX, $MOVETOY, $MOVETOZ, $HIGHT)
Local $Read = _MemoryPointerRead($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONREAD)
Local $Flag = _MemoryPointerRead($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONHEIGHTFLAG)
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONMOVEX, $MOVETOX, "Float")
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONMOVEY, $MOVETOY, "Float")
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONMOVEZ, "0", "Float")
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONDONE, "0")
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONFLAG, "1")
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONWRITE, $Read[1])
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONWRITE2, $Read[1])
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONHEIGHT, $HIGHT, "Float")
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONHEIGHTFLAG, $Flag[1] + 1)
_MemoryPointerWrite($APP_BASE_ADDRESS, $PROCESS_INFORMATION, $OFFSET_ACTIONHEIGHTFLAG2, "0")
EndFunc ;==>
Func _ProcessIdPath ( $vPID )
Local $objWMIService, $oColItems
Local $sNoExePath = ''
Local Const $wbemFlagReturnImmediately = 0x10
Local Const $wbemFlagForwardOnly = 0x20
Local $RetErr_ProcessDoesntExist = 1
Local $RetErr_ProcessPathUnknown = 2
Local $RetErr_ProcessNotFound = 3
Local $RetErr_ObjCreateErr = 4
Local $RetErr_UnknownErr = 5
If Not ProcessExists ( $vPID ) Then
SetError ( $RetErr_ProcessDoesntExist )
Return $sNoExepath
EndIf
$objWMIService = ObjGet ( 'winmgmts:\\localhost\root\CIMV2' )
$oColItems = $objWMIService.ExecQuery ( 'SELECT * FROM Win32_Process', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly )
If IsObj ( $oColItems ) Then
For $objItem In $oColItems
If $vPID = $objItem.ProcessId Then
If $objItem.ExecutablePath = '0' Then
If FileExists ( @SystemDir & '\' & $objItem.Caption ) Then
Return @SystemDir & '\' & $objItem.Caption
Else
SetError ( $RetErr_ProcessPathUnknown )
Return $sNoExepath
EndIf
Else
Return $objItem.Executablepath
EndIf
EndIf
Next
SetError ( $RetErr_ProcessNotFound )
Return $sNoExepath
Else
SetError ( $RetErr_ObjCreateErr )
Return $sNoExepath
EndIf
SetError ( $RetErr_UnknownErr )
Return $sNoExepath
EndFunc ;==>_ProcessIdPath