I am quitting Hero... so there will no updates, fixes etc... but i release the boring source, so some lazy ppl can built, update or wtf ever there own bot/potter.
The Autopotter dont uses stupid pixelsearches etc... it works with the real memory adresses. The key delay times for mana or health are different -> most problem of other bots, clickers etc i ve seen -> multiexplosive pot using.
k here is the source that uses the nomad.au3 lib (included in the autopotter.rar file).
Code:
;+------------------------------ - - - - - - -
;| Author: Schlat
;| Beschreibung: Hero Online AutoPotter
;| v0.2 -global windowtimer to set hero window active if it gets inaktive -- not tested
;+-- - - -
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <file.au3>
#include <String.au3>
#include <NomadMemory.au3>
#include <Misc.au3>
Opt("WinTitleMatchMode", 3)
;Globals
Global $potting = 0
Global $ID = _MemoryOpen(ProcessExists ( "Hero.exe" ))
Global $dll = DllOpen("user32.dll")
Global $chi, $health, $injury, $chi_max, $health_max
Global $pet_health, $pet_chi, $pet_hunger, $pet_health_max
Global $trig_health, $trig_chi, $trig_injury
Global $trig_pet_health, $trig_pet_hunger
Global $Title = "Hero OnLine"
Global $timer, $windowtimer
;MemoryAdresses
;static base memory
$static_mem = 0x009ad8fc
$static_pet =0x009ad900
$static_view = 0x009ad93c
;offsets
$health_off = 1356;0x54c
$chi_off = 1360;0x550
$injury_off = 1380;0x564
$chi_max_off = 1376;560
$health_max_off = 1372;55c
;global read nemory
$mem_base = _MemoryRead($static_mem,$ID)
;memory vars
$health_addr = '0x' & Hex($mem_base + $health_off)
$chi_addr = '0x' & Hex($mem_base + $chi_off)
$injury_addr = '0x' & Hex($mem_base + $injury_off)
$chi_max_addr = '0x' & Hex($mem_base + $chi_max_off)
$health_max_addr = '0x' & Hex($mem_base + $health_max_off)
;Slots F1-F4 amount offsets
$slot_base_off = 184 ;B8
$slot_end_off = 3086;C0E
DIM $slot_1_off[4] = ['NULL',Dec("c4"),Dec("1DC"),Dec("c0e")];1DC
DIM $slot_2_off[4] = ['NULL',Dec("c4"),Dec("1E0"),Dec("c0e")]
DIM $slot_3_off[4] = ['NULL',Dec("c4"),Dec("1E4"),Dec("c0e")]
;Slot amount values
Dim $slot_amount[3]
;pet
Dim $pet_maxHealth_off[4] = ['NULL',Dec("41c"),Dec("290"),Dec("1E4")]
Dim $pet_Health_off[4] = ['NULL',Dec("41c"),Dec("290"),Dec("1F4")]
Dim $pet_injury_off[4] = ['NULL',Dec("41c"),Dec("298"),Dec("1F4")]
;GUI
$Hero = GUICreate("Hero AutoPotter Schlat v0.2", 320, 200, 260, 122)
$Pic1 = GUICtrlCreatePic(".\pics\wallpaper_03_800.jpg", 0, 0, 320, 200, BitOR($SS_SUNKEN,$WS_GROUP,$WS_CLIPSIBLINGS), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE,$GUI_WS_EX_PARENTDRAG))
$Button1 = GUICtrlCreateButton("Start AutoPotter", 140, 160, 80, 25, 0)
$Button2 = GUICtrlCreateButton("Init", 40, 160, 80, 25, 0)
$Label1 = GUICtrlCreateLabel("HP", 10, 60, 90, 18, BitOR($SS_CENTER,$SS_SUNKEN,$WS_BORDER))
$Label2 = GUICtrlCreateLabel("Chi", 10, 85, 90, 18, BitOR($SS_CENTER,$SS_SUNKEN,$WS_BORDER))
$Label4 = GUICtrlCreateLabel("Pet Health", 10, 110, 90, 18, BitOR($SS_CENTER,$SS_SUNKEN,$WS_BORDER))
$Label5 = GUICtrlCreateLabel("Pet Hunger", 10, 135, 90, 18, BitOR($SS_CENTER,$SS_SUNKEN,$WS_BORDER))
$Label3 = GUICtrlCreateInput("HP,CHI, Pethealth Shortkey(1,2,3)", 90, 25, 150, 20)
$Input1 = GUICtrlCreateInput("50", 110, 60, 40, 18)
$Input2 = GUICtrlCreateInput("50", 110, 85, 40, 18)
$Input3 = GUICtrlCreateInput("0", 110, 110, 40, 18)
$Input4 = GUICtrlCreateInput("0", 110, 135, 40, 18)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
GUICtrlSetState(-1,$GUI_SHOW)
GUICtrlSetLimit(-1,256)
GUISetState()
GUISetState(@SW_SHOW)
init()
;MainLoop
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
If $potting = 1 Then
$potting = 0
GUICtrlSetData($Label3, "...Bot stopped")
Else
$potting = 1
GUICtrlSetData($Label3, "Bot started...")
EndIf
Case $Button2
init()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $potting = 1 Then
potting()
;Sleep(250)
EndIf
update()
Wend
;Functions
;gets the max Heealth and chi values of the character
Func init()
$health_max = _MemoryRead($health_max_addr,$ID)
GUICtrlSetData($Label1, "Health " & $health_max)
$chi_max = _MemoryRead($chi_max_addr,$ID)
GUICtrlSetData($Label2, "Chi " & $chi_max)
$value = _MemoryPointerRead($static_pet,$ID,$pet_maxHealth_off,"Int")
$pet_health_max = $value[1]
GUICtrlSetData($Label4, "Pet Health " & $pet_health_max)
$trig_health = GUICtrlRead($Input1)
$trig_chi = GUICtrlRead($Input2)
$trig_pet_health = GUICtrlRead($Input3)
$trig_pet_hunger = GUICtrlRead($Input4)
$timer = TimerInit()
$windowtimer = TimerInit()
EndFunc
;update the character values
Func update()
$health = _MemoryRead($health_addr,$ID)
$chi = _MemoryRead($chi_addr,$ID)
$injury = _MemoryRead($injury_addr, $ID)
$value = _MemoryPointerRead($static_pet,$ID,$pet_Health_off,"Int")
$pet_health = $value[1]
$value = _MemoryPointerRead($static_pet,$ID,$pet_injury_off,"Int")
$pet_hunger = $value[1]
$value = _MemoryPointerRead($static_pet,$ID,$slot_1_off,"Byte")
$slot_amount[0] = $value[1]
$value = _MemoryPointerRead($static_pet,$ID,$slot_2_off,"Byte")
$slot_amount[1] = $value[1]
$value = _MemoryPointerRead($static_pet,$ID,$slot_3_off,"Byte")
$slot_amount[2] = $value[1]
EndFunc
;potting
Func potting()
If WinActive($title) Then
If $health < $trig_health AND $slot_amount[0] > 0 AND TimerDiff($timer) > 800 Then
Opt("SendKeyDownDelay", 50)
Send("1")
$timer = TimerInit()
EndIf
If $chi < $trig_chi AND $slot_amount[1] > 0 AND TimerDiff($timer) > 800 Then
Opt("SendKeyDownDelay", 35)
Send("2")
$timer = TimerInit()
EndIf
If $pet_health < $trig_pet_health AND $slot_amount[2] > 0 AND TimerDiff($timer) > 800 Then
Opt("SendKeyDownDelay", 50)
Send("3")
$timer = TimerInit()
EndIf
If $pet_hunger < $trig_pet_hunger AND $slot_amount[2] > 0 AND TimerDiff($timer) > 800 Then
Opt("SendKeyDownDelay", 50)
Send("3")
$timer = TimerInit()
EndIf
Elseif TimerDiff($windowtimer) > 300000 Then
WinActivate($title)
$windowtimer = TimerInit()
EndIf
EndFunc
So happy cheating botting potting coding etc.
-update new Cheattable v270-279






