Amateur FFXIV EXP/GRINDING Bot with autoit

01/16/2011 13:47 Dok33#1
Hi folks, (and please excuse my average english)

I've made a little bot for final fantasy XIV, based on autoit and pixel detection (easy to set up), and i would appreciate any feedback on it. Just made a querty version but i don't know if it will work well on these keyboards.

Basically the bot's features are :

* Watch out for HP and MP.
* Self Healing and almost unkillable
* Uses buffs, abilites and weapon skills (you can configure it)
* User interface to configure the keys you want to use on your keyboard (Attack key, heal key, weapon skill key, refresh MP key, two different buff keys to randomly use buffs like protect or shock spikes (you chose the ability you want to use)
* Almost unstoppable : The bot uses the mini-map to look for obstacles and bypasses. It also checks your position to make sure you’re not blocked.

I explain everything on the bot's page : [Only registered and activated users can see links. Click Here To Register...]

Enjoy
01/16/2011 16:19 Chefes#2
Quote:
Originally Posted by Dok33 View Post
Hi folks, (and please excuse my average english)

I've made a little bot for final fantasy XIV, based on autoit and pixel detection (easy to set up), and i would appreciate any feedback on it. Just made a querty version but i don't know if it will work well on these keyboards.

Basically the bot's features are :

* Watch out for HP and MP.
* Self Healing and almost unkillable
* Uses buffs, abilites and weapon skills (you can configure it)
* User interface to configure the keys you want to use on your keyboard (Attack key, heal key, weapon skill key, refresh MP key, two different buff keys to randomly use buffs like protect or shock spikes (you chose the ability you want to use)
* Almost unstoppable : The bot uses the mini-map to look for obstacles and bypasses. It also checks your position to make sure you’re not blocked.

I explain everything on the bot's page : [Only registered and activated users can see links. Click Here To Register...]

Enjoy
check this... should help you a lot...

HP Current:
Base: ffxivgame.exe+0x00D16358
Offset: 0x65

HP Maximum:
Base: ffxivgame.exe+0x00D16358
Offset: 0x75

AutoIt Sample:

Func playermaxhp()
OPENAIONMEMORY()
$STATICOFFSET = Dec("00D0BCE8")
Global $PID
Global $CUROFFSET[1]
$CUROFFSET[0] = 0
$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
$MEMTEST = _MEMORYREAD($MEMTEST + 0x75, $OPENMEM)
Return $MEMTEST
EndFunc
01/16/2011 16:29 Dok33#3
i've been searching for this for hours, gonna have a look at this now if it works hell yeah it's gonna be something different, thank you.
Any informations or link about how to get the base offset and the pointers ? I tried it myself but in the end it always end up having the memory adress and the pointer related to it exactly the same value. It all leads to the same memory region.
01/16/2011 17:27 Chefes#4
Quote:
Originally Posted by Dok33 View Post
i've been searching for this for hours, gonna have a look at this now if it works hell yeah it's gonna be something different, thank you.
Any informations or link about how to get the base offset and the pointers ? I tried it myself but in the end it always end up having the memory adress and the pointer related to it exactly the same value. It all leads to the same memory region.
This one has been static for a while... once you have the HP location... - 0x65 and search for that
adress in CE... a green one should show up ;D

some of my memstuff... at the end the imported stuff of Nomad Mem UDF...

How do you handel the target reading?

You have to update the mem adress in belows Sample !! .. CT File on page 2

Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;
;;;;;   FFXIV Adjusted Memory Functions  (Offsets Hardcoded .... temp till all is running
;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Func playerxpos()                                                                  ; Player Y pos
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0A36C")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x154, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x18, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x10, $OPENMEM, "Float")
;~ 	MsgBox( 0 , "foeget" , $MEMTEST )
	Return $MEMTEST
EndFunc

Func playerzpos()                                                                  ; Player Y pos
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0A36C")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x154, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x18, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x14, $OPENMEM, "Float")
;~ 	MsgBox( 0 , "foeget" , $MEMTEST )
	Return $MEMTEST
EndFunc

Func playerypos()                                                                  ; Player Y pos
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0A36C")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x154, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x18, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x18, $OPENMEM, "Float")
;~ 	MsgBox( 0 , "foeget" , $MEMTEST )
	Return $MEMTEST
EndFunc

 ; Angel of the Player 360° / 2 :)   ....  0 - 180   and -180 - 0
Func playerrotation()
;~ 	Return MEMREADDLL($playerrotation, "float")
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D09274")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x40  , $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x64  , $OPENMEM )
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x1A4 , $OPENMEM )
	$MEMTEST = _MEMORYREAD($MEMTEST         , $OPENMEM )
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x10  , $OPENMEM )
	$camx = _MEMORYREAD($MEMTEST    + 0x030 , $OPENMEM, "Float")
	$camy = _MEMORYREAD($MEMTEST    + 0x038 , $OPENMEM, "Float")
;~ 	MsgBox( 0 , "cy" ,  $camy )
	$playerxcoord = playerxpos()
	$playerycoord = playerypos()
;~ 	$playerzcoord = playerzpos()
	$diffy = round( $camy - $playerycoord,6)
	$diffx = round($camx - $playerxcoord,6)
	$Steigung = $diffy/ $diffx
	$pi = 3.14159265358979
	$RADZUGRAD = 180 / $pi
	$GRAD = atan( $Steigung ) * $RADZUGRAD
    $GRAD = 90  - $GRAD

if      $diffy > 0 and $diffx > 0 Then
		$GRAD = 90 - $GRAD +270
		Return $GRAD
ElseIf  $diffy < 0 and $diffx < 0 Then
		$grad =   180 - $GRAD
		Return   $GRAD
ElseIf  $diffy > 0 and $diffx < 0 Then
		$grad = ( 180 - $GRAD )
		Return $GRAD
ElseIf  $diffy < 0 and $diffx > 0 Then
		$grad =  (180 - $GRAD ) +180
		Return $GRAD
EndIf
EndFunc

Func playermaxhp()
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0BCE8")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x75, $OPENMEM)
	Return $MEMTEST
EndFunc
Func playerCurrectHp()
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0BCE8")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x65, $OPENMEM)
	Return $MEMTEST
EndFunc

Func playerCurrectMpPercent()
	$VAL = playerCurrectMana()
	$PVAL = ($VAL * 100) / playerMaxMana()
	Return Round($PVAL)
EndFunc

Func playerCurrectHpPercent()
	$VAL = playerCurrectHp()
	$PVAL = ($VAL * 100) / playerMaxHP()
	Return Round($PVAL)
EndFunc

Func playerCurrectMana()
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0BCE8")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x85, $OPENMEM)
	Return $MEMTEST
EndFunc

func playerMaxMana()
	OPENAIONMEMORY()
	$STATICOFFSET = Dec("00D0BCE8")
	Global $PID
	Global $CUROFFSET[1]
	$CUROFFSET[0] = 0
	$BASEADDR = _MEMORYMODULEGETBASEADDRESS($PID, "ffxivgame.exe")
	$FINALADDR = "0x" & Hex($BASEADDR + $STATICOFFSET)
	$MEMTEST = _MEMORYREAD($FINALADDR, $OPENMEM)
	$MEMTEST = _MEMORYREAD($MEMTEST + 0x87, $OPENMEM)
	Return $MEMTEST
endfunc

















;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,,,,,     Nomad Mem add   ,,,;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Func _MEMORYOPEN($IV_PID, $IV_DESIREDACCESS = 2035711, $IV_INHERITHANDLE = 1)
	If Not ProcessExists($IV_PID) Then
		SetError(1)
		Return 0
	EndIf
	Local $AH_HANDLE[2] = [DllOpen("kernel32.dll")]
	If @error Then
		SetError(2)
		Return 0
	EndIf
	Local $AV_OPENPROCESS = DllCall($AH_HANDLE[0], "uint", "OpenProcess", "uint", $IV_DESIREDACCESS, "uint", $IV_INHERITHANDLE, "uint", $IV_PID)
	If @error Then
		DllClose($AH_HANDLE[0])
		SetError(3)
		Return 0
	EndIf
	$AH_HANDLE[1] = $AV_OPENPROCESS[0]
	Return $AH_HANDLE
EndFunc
Func _MEMORYREAD($IV_ADDRESS, $AH_HANDLE, $SV_TYPE = "dword")
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	Local $V_BUFFER = DllStructCreate($SV_TYPE)
	If @error Then
		SetError(@error + 1)
		Return 0
	EndIf
	DllCall($AH_HANDLE[0], "uint", "ReadProcessMemory", "uint", $AH_HANDLE[1], "uint", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "uint", DllStructGetSize($V_BUFFER), "uint", "")
	If Not @error Then
		Local $V_VALUE = DllStructGetData($V_BUFFER, 1)
		Return $V_VALUE
	Else
		SetError(6)
		Return 0
	EndIf
EndFunc

Func MemWriteDLL($offset, $data)
	$StaticOffset = Dec($offset)
	Global $pid
	Global $CUROffset[1]
	$CUROffset[0] = 0
	$baseADDR = _MemoryModuleGetBaseAddress($pid, "ffxivgame.exe")
	$finalADDR = "0x" & Hex($baseADDR + $StaticOffset)

	_MemoryWrite($finalADDR, $openmem, $data, "float")
	Return
EndFunc   ;==>MemWriteDLL


Func _MEMORYWRITE($IV_ADDRESS, $AH_HANDLE, $V_DATA, $SV_TYPE = "dword")
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	Local $V_BUFFER = DllStructCreate($SV_TYPE)
	If @error Then
		SetError(@error + 1)
		Return 0
	Else
		DllStructSetData($V_BUFFER, 1, $V_DATA)
		If @error Then
			SetError(6)
			Return 0
		EndIf
	EndIf
	DllCall($AH_HANDLE[0], "uint", "WriteProcessMemory", "uint", $AH_HANDLE[1], "uint", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "uint", DllStructGetSize($V_BUFFER), "uint", "")
	If Not @error Then
		Return 1
	Else
		SetError(7)
		Return 0
	EndIf
EndFunc
Func _MEMORYCLOSE($AH_HANDLE)
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	DllCall($AH_HANDLE[0], "uint", "CloseHandle", "uint", $AH_HANDLE[1])
	If Not @error Then
		DllClose($AH_HANDLE[0])
		Return 1
	Else
		DllClose($AH_HANDLE[0])
		SetError(2)
		Return 0
	EndIf
EndFunc
Func _MEMORYMODULEGETBASEADDRESS($IPID, $SMODULE)
	If Not ProcessExists($IPID) Then Return SetError(1, 0, 0)
	If Not IsString($SMODULE) Then Return SetError(2, 0, 0)
	Local $PSAPI = DllOpen("psapi.dll")
	Local $HPROCESS
	Local $PERMISSION = BitOR(2, 1024, 8, 16, 32)
	If $IPID > 0 Then
		Local $HPROCESS = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "uint", 0, "dword", $IPID)
		If $HPROCESS[0] Then
			$HPROCESS = $HPROCESS[0]
		EndIf
	EndIf
	Local $MODULES = DllStructCreate("ptr[1024]")
	Local $ACALL = DllCall($PSAPI, "uint", "EnumProcessModules", "ptr", $HPROCESS, "ptr", DllStructGetPtr($MODULES), "dword", DllStructGetSize($MODULES), "dword*", 0)
	If $ACALL[4] > 0 Then
		Local $IMODNUM = $ACALL[4] / 4
		Local $ATEMP
		For $I = 1 To $IMODNUM
			$ATEMP = DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $HPROCESS, "ptr", Ptr(DllStructGetData($MODULES, 1, $I)), "wstr", "", "dword", 260)
			If $ATEMP[3] = $SMODULE Then
				DllClose($PSAPI)
				Return Ptr(DllStructGetData($MODULES, 1, $I))
			EndIf
		Next
	EndIf
	DllClose($PSAPI)
	Return SetError(-1, 0, 0)
EndFunc
Func SETPRIVILEGE($PRIVILEGE, $BENABLE)
	Const $nTOKEN_ADJUST_PRIVILEGES = 32
	Const $nTOKEN_QUERY = 8
	Const $nSE_PRIVILEGE_ENABLED = 2
	Local $HTOKEN, $SP_AUXRET, $SP_RET, $HCURRPROCESS, $NTOKENS, $NTOKENINDEX, $PRIV
	$NTOKENS = 1
	$LUID = DllStructCreate("dword;uint")
	If IsArray($PRIVILEGE) Then $NTOKENS = UBound($PRIVILEGE)
	$TOKEN_PRIVILEGES = DllStructCreate("dword;dword[" & (3 * $NTOKENS) & "]")
	$NEWTOKEN_PRIVILEGES = DllStructCreate("dword;dword[" & (3 * $NTOKENS) & "]")
	$HCURRPROCESS = DllCall("kernel32.dll", "hwnd", "GetCurrentProcess")
	$SP_AUXRET = DllCall("advapi32.dll", "uint", "OpenProcessToken", "hwnd", $HCURRPROCESS[0], "uint", BitOR($nTOKEN_ADJUST_PRIVILEGES, $nTOKEN_QUERY), "uint_ptr", 0)
	If $SP_AUXRET[0] Then
		$HTOKEN = $SP_AUXRET[3]
		DllStructSetData($TOKEN_PRIVILEGES, 1, 1)
		$NTOKENINDEX = 1
		While $NTOKENINDEX <= $NTOKENS
			If IsArray($PRIVILEGE) Then
				$PRIV = $PRIVILEGE[$NTOKENINDEX - 1]
			Else
				$PRIV = $PRIVILEGE
			EndIf
			$RET = DllCall("advapi32.dll", "uint", "LookupPrivilegeValue", "str", "", "str", $PRIV, "ptr", DllStructGetPtr($LUID))
			If $RET[0] Then
				If $BENABLE Then
					DllStructSetData($TOKEN_PRIVILEGES, 2, $nSE_PRIVILEGE_ENABLED, (3 * $NTOKENINDEX))
				Else
					DllStructSetData($TOKEN_PRIVILEGES, 2, 0, (3 * $NTOKENINDEX))
				EndIf
				DllStructSetData($TOKEN_PRIVILEGES, 2, DllStructGetData($LUID, 1), (3 * ($NTOKENINDEX - 1)) + 1)
				DllStructSetData($TOKEN_PRIVILEGES, 2, DllStructGetData($LUID, 2), (3 * ($NTOKENINDEX - 1)) + 2)
				DllStructSetData($LUID, 1, 0)
				DllStructSetData($LUID, 2, 0)
			EndIf
			$NTOKENINDEX += 1
		WEnd
		$RET = DllCall("advapi32.dll", "uint", "AdjustTokenPrivileges", "hwnd", $HTOKEN, "uint", 0, "ptr", DllStructGetPtr($TOKEN_PRIVILEGES), "uint", DllStructGetSize($NEWTOKEN_PRIVILEGES), "ptr", DllStructGetPtr($NEWTOKEN_PRIVILEGES), "uint_ptr", 0)
		$F = DllCall("kernel32.dll", "uint", "GetLastError")
	EndIf
	$NEWTOKEN_PRIVILEGES = 0
	$TOKEN_PRIVILEGES = 0
	$LUID = 0
	If $SP_AUXRET[0] = 0 Then Return 0
	$SP_AUXRET = DllCall("kernel32.dll", "uint", "CloseHandle", "hwnd", $HTOKEN)
	If Not $RET[0] And Not $SP_AUXRET[0] Then Return 0
	Return $RET[0]
EndFunc


Func ProcessGetWindow($PId)
    If IsNumber($PId) = 0 Or ProcessExists(ProcessGetName($PId)) = 0 Then
        SetError(1)
    Else

        Local $WinList = WinList()
        Local $i = 1
        Local $WindowTitle = ""

        While $i <= $WinList[0][0] And $WindowTitle = ""
            If WinGetProcess($WinList[$i][0], "") = $PId Then
                $WindowTitle = $WinList[$i][0]
            Else
                $i = $i + 1
            EndIf
        WEnd

        Return $WindowTitle
    EndIf
EndFunc   ;==>ProcessGetWindow

Func ProcessGetId($Process)
    If IsString($Process) = 0 Then
        SetError(2)
    ElseIf ProcessExists($Process) = 0 Then
        SetError(1)
    Else

        Local $PList = ProcessList($Process)
        Local $i
        Local $PId[$PList[0][0] + 1]

        $PId[0] = $PList[0][0]

        For $i = 1 To $PList[0][0]
            $PId[$i] = $PList[$i][1]
        Next

        Return $PId
    EndIf
EndFunc   ;==>ProcessGetId

Func ProcessGetName($PId)
    If IsNumber($PId) = 0 Then
        SetError(2)
    ElseIf $PId > 9999 Then
        SetError(1)
    Else

        Local $PList = ProcessList()
        Local $i = 1
        Local $ProcessName = ""

        While $i <= $PList[0][0] And $ProcessName = ""
            If $PList[$i][1] = $PId Then
                $ProcessName = $PList[$i][0]
            Else
                $i = $i + 1
            EndIf
        WEnd

        Return $ProcessName
    EndIf
EndFunc   ;==>ProcessGetName
01/16/2011 20:59 antonbb#5
Thanks for sharing Dok33. The bot looks great. Need help with the HP adress please, I don't really understand. I'm going to follow this project.
01/17/2011 16:50 Dok33#6
Thanks to chefes i'm gonna look in the upcoming days (still busy at the moment with work >_<) at the memory stuff and it seems like i won't have too many difficulties making it work with memory only, so you won't need to get yourself the memory adress of the HP.

That beeing said, if you still want to try the current version, i suggest you to look for "cheat engine" on youtube, it's really easy to find that adress and you'll find nice tutorials there (it doesn't take more than 30 secs to get it).

If you still have trouble with getting the adress i'll be posting a little "how to" ;)
01/17/2011 17:15 antonbb#7
Yes, thanks to Chefes too ;) Yes, I have looked at Youtube for tutorials on Cheat Engine but there isn't a tutorial over there for FFXIV? I have tried to run the bot without the adresses but it didn't work very well. My character did target mobs but it didn't go to the mob and attacked. But it's because I don't have the HP adress or what? :) Thanks!
01/17/2011 17:23 Dok33#8
Indeed what the bot does is when it finds the desired target (blue mobs or green mobs as you chose in the ui) it's supposed to lock it with the * key of your numpad and then run towards the mob for 5.5 seconds. If it doesn't do this and keep target things around you i means that the pixel detection isn't working.

Actually the bot does look for the little pearl's color in the target box to attack or not a mob. I suggest you to check the following point :

- Are your windows desktop and Final Fantasy XIV in 1280*768 ? Is FFXIV configured in WINDOWED mode ?

I also suggest you to place the action bar at the top of the screen.
01/17/2011 17:28 Dok33#9
For cheat engine what i do is :

Once Final Fantasy XIV attached to CE :

1) I look in game what is my current HP, let's say it's 654
2) I type 654 in the input box and hit "first scan" button
3) Then i switch weapon to switch classes, so my HP goes up to 720
4) Wait in game to get back your maximum HP back and switch back to CE and type 720 in the input box and hit "next scan". You will have to memory values or so in the left bar, one is your current HP and the other your max HP, generally the current HP always ends up with "CD". Get this adress and paste it to the bot
01/17/2011 17:40 antonbb#10
Thanks for the guides. Really helpful :) Yes, my resolution is 1280*768 on pc and FFXIV. I got window mode. No required graphic settings? :) Thx alot!

Edit: I tried to run the bot now. But he brings up the command window (Emotes and signs) and press sit. and sometimes stand up again. Kinda weird :P
01/17/2011 17:47 Dok33#11
If it still doesn't work i won't be able to help without you to help me.

If you have the time, could you check with the Autoit Window Info tool (installed automatically with autoit) the coordinates of the exact center of the "blue bead" in the target box (X,Y) and its color in hexadecimal.

I use a square detection (pixelsearch) and not a punctual pixel and has tolerance on the color used so it's supposed to work everywhere (that's what i tought)...

Thank you
01/17/2011 18:18 Chefes#12
people should reset their window positions (ingame) in the options... i think
that should help so it reads the color from the right position...

for the people havign cheatengine troubles... use this file...


How to find the adress needed for this bot...

1. Login to FFXIV
2. Load CE and attach to FFXIV
3. Open the file you can download here with CE

Write down the adress you see (like this)
[Only registered and activated users can see links. Click Here To Register...]

Cheers and have fun botting
01/17/2011 18:36 antonbb#13
Quote:
Originally Posted by Dok33 View Post
If it still doesn't work i won't be able to help without you to help me.

If you have the time, could you check with the Autoit Window Info tool (installed automatically with autoit) the coordinates of the exact center of the "blue bead" in the target box (X,Y) and its color in hexadecimal.

I use a square detection (pixelsearch) and not a punctual pixel and has tolerance on the color used so it's supposed to work everywhere (that's what i tought)...

Thank you
Window:
Position -6, -10
Size 1286, 800
Style 0x94CA0000
ExStyle 0x00000100
Handle 0x00980286

Mouse:
Position 748,561
Cursor ID 0
Color 0x1E6591

Thank you for helping, I post it all cause I didn't really know lol :)
01/17/2011 18:51 Dok33#14
Thanks a lot chefes, i'm on it right now and will be releasing a new version based on memory in the upcoming days.

@antonbb : I have these values :
Mouse:
Position 748,561

That explains a lot of things... ^^
I suggest you to wait for the next version you won't have to do all this stuff. Thanks for trying anyway.
01/17/2011 18:56 antonbb#15
Dok33: Yeah, it's probably better to wait instead. I'm going to follow you're progress. Thanks for the help :)

Chefes: Thanks for the help :)