EE is on maintenance now, can i still use this bot or blinko will update his bot? btw i enjoying ur bot blinko! hehe, i have little time to play cause im working. im using this bot just for leveling up my other classes, thanks again blinko!
Just wondering. im trying to learn abit more about building bots.. i've tried to do a simple send keystrokes to eden eternal but it failed.. can you advise on below why it doesnt send?
$GameTitle = "Eden Eternal"
WinActivate($GameTitle)
Send("6",0)
Send("2",0)
WinActivate() is not needed in order to send keystrokes to the client.
Send() works by itself. That's how this bot is setup to begin with.
Quote:
Originally Posted by jabi29
EE is on maintenance now, can i still use this bot or blinko will update his bot? btw i enjoying ur bot blinko! hehe, i have little time to play cause im working. im using this bot just for leveling up my other classes, thanks again blinko!
Glad its working for ya mate. Once EE updates again I'll post up new updated files fresh to the website I'm using to host my files for free. Then the auto-updater will update the files that are in need of updates :P
...
Send() works by itself. That's how this bot is setup to begin with.
...
Hey how is it that your sending keystrokes to EE? I have looked through the source and it appears you are just using a Send(). The reason I ask is because I tried using AHK (almost the same as AU3) to send keystrokes with no success. It will send when the chat box is active but otherwise it wont.
Do you know why this is? Did you have to do something special to get the keys to send?
I have played around with different send modes (Input, Event, Play, Inputthenplay), I tried ControlSend() but I could never find the "control" that I would send to for the game, sending to the default control by not specifiing in the parameter doesn't work either. I also have been trying SendMessage() and PostMessage() with no success.
I downloaded Winspector but it has been of little use in finding the control to use for ControlSend() or SendMessage(). When monitoring the messages sent to the window I never see the wm_command that should show the control label number.
I created a bot for Twelve Sky 2 about 8 months ago (it was the only actual bot, not trainer), before Afterburn ripped it off. I like EE and I am rewriting my bot as a framework (portable to other games) using EE as a starting point. I have very advanced functions, I am just hung up on sending the keys.
If it simply wont work using AHK I'll just rewrite it in AU3 (eventually C#).
Currently the bot can move around fighting monsters 1v1, healing using anti-detection methods and weighted learning (adapts to current level/hp/damage being taken). In 1v1 mode it is aware of target HP and such. I'm working on getting the structures worked out so the bot can find groups of monsters in close proximity to use area attacks on. There is a customizable loot filter system that allows the user to select what they want to keep down to each specific item, not just item quality. There are alot of other fun stuff too. This is all built from my ts2 bot and adapted for EE, I just cant send the keys!
Hey how is it that your sending keystrokes to EE? I have looked through the source and it appears you are just using a Send(). The reason I ask is because I tried using AHK (almost the same as AU3) to send keystrokes with no success. It will send when the chat box is active but otherwise it wont.
Do you know why this is? Did you have to do something special to get the keys to send?
I have played around with different send modes (Input, Event, Play, Inputthenplay), I tried ControlSend() but I could never find the "control" that I would send to for the game, sending to the default control by not specifiing in the parameter doesn't work either. I also have been trying SendMessage() and PostMessage() with no success.
I downloaded Winspector but it has been of little use in finding the control to use for ControlSend() or SendMessage(). When monitoring the messages sent to the window I never see the wm_command that should show the control label number.
I created a bot for Twelve Sky 2 about 8 months ago (it was the only actual bot, not trainer), before Afterburn ripped it off. I like EE and I am rewriting my bot as a framework (portable to other games) using EE as a starting point. I have very advanced functions, I am just hung up on sending the keys.
If it simply wont work using AHK I'll just rewrite it in AU3 (eventually C#).
Currently the bot can move around fighting monsters 1v1, healing using anti-detection methods and weighted learning (adapts to current level/hp/damage being taken). In 1v1 mode it is aware of target HP and such. I'm working on getting the structures worked out so the bot can find groups of monsters in close proximity to use area attacks on. There is a customizable loot filter system that allows the user to select what they want to keep down to each specific item, not just item quality. There are alot of other fun stuff too. This is all built from my ts2 bot and adapted for EE, I just cant send the keys!
any help would be greatly appreciated!
dunno exactly what to tell you. The only way I send keystrokes is by using the Send() function in AutoIt. It works fine. And it wouldn't be worth rewriting all the code for C# and other languages lol. I have one for vb6.0 though that I did start but haven't really went anywhere yet beyond the memory reading functions.
Anywho AutoIt and AutoHotKey are very similar in the ways they function, however I find AHK rather complicated, so I stuck with AutoIt for quick on the fly botting.
Perhaps its the way AHK uses it's API calls I don't know.
Here is the only thing that runs the actual bot function from my bot.
I just make sure to convert the values from a string in the Input controls on the autoit form to integer, then I send the key press .
$key1 = Int(GuiCtrlRead($Combo1)) --Convert to Integer
Send($key1,0) -- the 0 is default.
from the AutoIt help file it says
Code:
keys The sequence of keys to send.
flag [optional] Changes how "keys" is processed:
flag = 0 (default), Text contains special characters like + and ! to indicate SHIFT and ALT key-presses.
flag = 1, keys are sent raw.
So I'm sending the keys with the default settings and it's working fine. I do know where you're coming from though.
I had one MMO that wouldn't work unless you used ControlClick(). However, the ControlClick just sent a mouse click within the game client to a given set of coordinates setup by the user. It was able to make a control click "without clicks to any controls", it just clicked at mouse pos. Which enabled the bot to run minimized as well. I tried this with EE and it failed. So it really just depends on the game client you're working on. AHK should be able to do something to work around the issue.
If you use skype just add me blinko9
Or xFire blinko2008
Or whatever Messenger you use I probably got it.
I'll send you some code snippets and see if we can't get you a work around.
I'm also working on a better GUI system I like the in-game window overlay, but I don't feel displaying stats that are visible within the client is of any good use, just takes up memory. I'm going to instead have it set to show a window with the bots hotkeys and delays etc..
Then I'll have it set to just run the bot with hotkey, show/hide window using hotkey for hotkeys and skills and hp/mp settings.
This way most of the time it sits taking up no memory what so ever.
Well I woke up this morning and decided to hell with AHK. It's kinda nice because of how it uses hotkeys and timers, and it has less syntax to worry about. But then again less syntax rules makes it a bit more difficult to read.
I downloaded autoit and made a simple function to send the number 1 and it worked... far easier solution that some of the things I had in mind (making a packet bot which requires learning assembly language).
So now I'm in the process of rewritting my bot in AU3. I popped open the documentation and within about an hour I think I understand the main differences. I just finished testing memory management (open, read, write, finding addresses using offsets) and so far no real problems.
Well I woke up this morning and decided to hell with AHK. It's kinda nice because of how it uses hotkeys and timers, and it has less syntax to worry about. But then again less syntax rules makes it a bit more difficult to read.
I downloaded autoit and made a simple function to send the number 1 and it worked... far easier solution that some of the things I had in mind (making a packet bot which requires learning assembly language).
So now I'm in the process of rewritting my bot in AU3. I popped open the documentation and within about an hour I think I understand the main differences. I just finished testing memory management (open, read, write, finding addresses using offsets) and so far no real problems.
Tested and working great. Now it's all about converting syntax.
well if you download the AutoUpdater, or just grab one of the earlier versions of the EEBot I started, you'll have the .au3 files ya need. And you'll get to see how everything is written out and build from it. It makes use of the EEAutoPilot.settings file though so make sure to grab the most current version of that (the updater will do this if EEAutoPilot.settings does not exist in the same directory as the Updater. It will act as an Install feature and Install the files to the working directory). Just need to allow it access to the Internet for downloading purposes.
In the attachments you'll find the most recent Updater, that will grab the source code from the website I'm storing them at. Also here is the source code to it as well, because I know applications that download files via INET usually get a Trojan virus false-positive from at least 1 source at Virustotal.com. You can compile the Updater and then you'll get a nice example of how to build off of a file/package updating script :P Then you ge the files needed kill two birds with one stone.
The ZIP file contains the Installer-Updater tool to grab the bot's source code from the website.
The RAR file contains the .au3 file used to make the AutoUpdater as well as the website it links to where you can even download the files manually.
Also since I just noticed that you posted a script snippet, here you go mine. This is how everything functions.
First Off Everything I got reads from the EEAutoPilot.settings file. This is just a ini file with the extension changed.
The settings section of the settings file you'll notice the keys
version,bgcolor,txt_color,win_trans and isTrans
version is for the updater to compare this version number with the version number stored in the autoupdate.dlc file from the website.
bgcolor is the key that sets all the background colors for all my controls and the GUI. This is also the color that appears transparent on the GUI's controls (labels,input boxes etc..) using a some simple API. So if the control background is this bgcolor then it'll make it transparent. Because by default if you change the background color of a control on the autoit forms they will have a box with solid color surrounding your text. This just allows the forms background color to show through.
txt_color is the key for all the text colors on the application.
win_trans is the value of transparency
and isTrans basically acts as a boolean.
Here is a slightly modified NomadMemory
Code:
#include-once
Func _EEMemOpen($DWACCESS = 0x1F0FFF, $DWINHERITHANDLE = 1)
$DWPROCID = ProcessExists(IniRead(@WorkingDir & "\EEAutoPilot.settings","main","exe",""))
If $DWPROCID = 0 then
MsgBox(0,"","Process Doesn't Exist!" & @crlf & "If however it DOES, then something is terribly wrong !")
exit 0
EndIf
local $DWHANDLES[2] = [DllOpen("kernel32.dll")]
If @error Then
SetError(2)
Return 0
EndIf
Local $DWOPENPROC = DllCall($DWHANDLES[0], "int", "OpenProcess", "int", $DWACCESS, "int", $DWINHERITHANDLE, "int", $DWPROCID)
If @error Then
SetError(3)
Return 0
EndIf
$DWHANDLES[1] = $DWOPENPROC[0]
Return $DWHANDLES
EndFunc
Func _EEMemClose($DWHANDLES)
If Not IsArray($DWHANDLES) Then
SetError(1)
Return 0
EndIf
DllCall($DWHANDLES[0], "int", "CloseHandle", "int", $DWHANDLES[1])
If Not @error Then
DllClose($DWHANDLES[0])
Return 1
Else
DllClose($DWHANDLES[0])
SetError(2)
Return 0
EndIf
EndFunc
Func _EEMemRead($DWADDRESS, $DWTYPE = "dword")
$DWHANDLES = _EEMemOpen()
If Not IsArray($DWHANDLES) Then
SetError(1)
Return 0
EndIf
Local $DWBUFFER = DllStructCreate($DWTYPE)
If @error Then
SetError(@error + 1)
Return 0
EndIf
DllCall($DWHANDLES[0], "int", "ReadProcessMemory", "int", $DWHANDLES[1], "int", $DWADDRESS, "ptr", DllStructGetPtr($DWBUFFER), "int", DllStructGetSize($DWBUFFER), "int", "")
If Not @error Then
Local $DWVALUE = DllStructGetData($DWBUFFER, 1)
_EEMemClose($DWHANDLES)
Return $DWVALUE
Else
SetError(6)
Return 0
EndIf
EndFunc
Func _EEMemWrite($DWADDRESS, $DWDATA, $DWTYPE = "dword")
$DWHANDLES = _EEMemOpen()
If Not IsArray($DWHANDLES) Then
SetError(1)
Return 0
EndIf
Local $DWBUFFER = DllStructCreate($DWTYPE)
If @error Then
SetError(@error + 1)
Return 0
Else
DllStructSetData($DWBUFFER, 1, $DWDATA)
If @error Then
SetError(6)
Return 0
EndIf
EndIf
DllCall($DWHANDLES[0], "int", "WriteProcessMemory", "int", $DWHANDLES[1], "int", $DWADDRESS, "ptr", DllStructGetPtr($DWBUFFER), "int", DllStructGetSize($DWBUFFER), "int", "")
If Not @error Then
Return 1
Else
SetError(7)
Return 0
EndIf
_EEMemClose($DWHANDLES)
EndFunc
You'll notice it also uses the EEAutoPilot.settings file to detect the process ID.
Here we have the EEData.au3 file
This is where the memory reading is done
If you're familiar with C# then you should be familiar with including files needed.
so by using #include 'EEMem.au3' at the top of the file this includes the functions from the selected au3 file in your current application. So you'll basically be able to make calls to all the memory reading functions inside the EEMem.au3. This file is really helpful while working with bot functions like your CheckHP() function
It is much more simple to check the HP, and this can be used in a loop (just as yours can, but with less mess in your main bot code)
Now using the function ReadEE inside the EEData.au3 included file you can grab mutiple memory values when needed with less clutter.
Code:
func CheckHP()
$hp = Int(ReadEE("current_hp"))
$hp_pot = Int(GuiCtrlRead($Input1))
if Int($hp) < Int($hp_pot) Then
$key4 = Int(GuiCtrlRead($Combo4))
Send($key4,0)
EndIf
EndFunc
Switching between the diff types allows you to read diff values. Whether it be a integer, or a string
_EEMemRead($var, "char[16]") - Returns a String Value from the Memory
_EEMemRead($var, "dword") - Returns a Integer
_EEMemRead($var, "double") - Returns a Double value
_EEMemRead($var, "float") - Returns a Floating Point
Code:
func ReadEE($type)
switch $type
case "player_name"
$p_name = _EEMemRead($PlayerPNAME, "char[16]")
return String($p_name)
case "player_guild_title"
$p_guildt = _EEMemRead($PlayerGuildTitle, "char[16]")
return String($p_guildt)
case "player_str"
$p_str = _EEMemRead($PlayerPSTR, "dword")
return Int($p_str)
case "player_agi"
$p_agi = _EEMemRead($PlayerPAGI, "dword")
return Int($p_agi)
case "player_int"
$p_int = _EEMemRead($PlayerPINT, "dword")
return Int($p_int)
case "player_acc"
$p_acc = _EEMemRead($PlayerPACC, "float")
return Int($p_acc)
case "player_crit"
$p_crit = _EEMemRead($PlayerPCRIT, "float")
return Int($p_crit)
case "player_def"
$p_def = _EEMemRead($PlayerDEF, "dword")
return Int($p_def)
case "base_lvl"
$base_lvl = _EEMemRead($BaseLVL, "dword")
return Int($base_lvl)
case "class_lvl"
$class_lvl = _EEMemRead($ClassLVL, "dword")
return Int($class_lvl)
case "current_cexp"
$cur_cexp = _EEMemRead($CurCEXP, "dword")
return Int($cur_cexp)
case "current_exp"
$cur_exp = _EEMemRead($CurEXP, "dword")
return Int($cur_exp)
case "player_target"
$targetbaseADDR = _EEMemRead($ptarget,"dword")
$target = '0x' & Hex($targetbaseADDR + $OFFSET_TARGET)
$targeted = '0x' & Hex($target)
$target = _EEMemRead($targeted, "dword")
Return Int($target)
case "name"
$name = _EEMemRead($pname, "char[16]")
return String($name)
case "current_hp"
$cur_hp = _EEMemRead($CurHP, "dword")
return Int($cur_hp)
case "max_hp"
$max_hp = _EEMemRead($MaxHP)
return Int($max_hp)
case "current_mp"
$cur_mp = _EEMemRead($CurMP)
return Int($cur_mp)
case "max_mp"
$max_mp = _EEMemRead($MaxMP)
return Int($max_mp)
EndSwitch
EndFunc
Code:
;EEAutoPilotBot - Data Source 1.2.001
#include 'EEMem.au3'
#include <Misc.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>
#Region====MISC FUNCTIONS==========================================================================
;GUICtrlCreateLabel("Label2", 5, 80, 150, 17)
func _GuiCreateLabel($caption,$left,$top,$width,$height,$fontsize,$bkcolor,$txtcolor)
$label = GuiCtrlCreateLabel($caption,$left,$top,$width,$height)
GuiCtrlSetBkColor(-1,$bkcolor)
GuiCtrlSetColor(-1,$txtcolor)
GuiCtrlSetFont(-1,$fontsize,1)
return $label
$label = ""
EndFunc
func _GuiCreateCombo($caption,$left,$top,$width,$height,$fontsize,$bkcolor,$txtcolor,$str)
$combo = GuiCtrlCreateCombo($caption,$left,$top,$width,$height)
GuiCtrlSetBkColor(-1,$bkcolor)
GuiCtrlSetColor(-1,$txtcolor)
GuiCtrlSetFont(-1,$fontsize,1)
GUICtrlSetData(-1, $str)
return $combo
$combo = ""
EndFunc
func _GuiCreateInput($caption,$left,$top,$width,$height,$fontsize,$bkcolor,$txtcolor)
$input = GuiCtrlCreateInput($caption,$left,$top,$width,$height)
GuiCtrlSetBkColor(-1,$bkcolor)
GuiCtrlSetColor(-1,$txtcolor)
GuiCtrlSetFont(-1,$fontsize,1)
return $input
$input = ""
EndFunc
func BackColor()
return IniRead(@WorkingDir & "\EEAutoPilot.settings","settings","bgcolor","")
EndFunc
func TextColor()
return IniRead(@WorkingDir & "\EEAutoPilot.settings","settings","txt_color","")
EndFunc
Func DragWindow($gui,$controls) ;allows dragging of widget and click to exit
$dll = DllOpen("user32.dll")
Local $PosDiff[2]
While 1
$MousePos = MouseGetPos ()
$WinPos = WinGetPos ($gui,"")
$PosDiff[0] = $WinPos[0] - $MousePos[0]
$PosDiff[1] = $WinPos[1] - $MousePos[1]
While _IsPressed ("01", $dll)
$MousePos = MouseGetPos ()
WinMove ($gui, "", $MousePos[0] + $PosDiff[0], $MousePos[1] + $PosDiff[1])
WinMove ($controls, "", $MousePos[0] + $PosDiff[0], $MousePos[1] + $PosDiff[1])
$WinPos = WinGetPos ("","")
WEnd
ExitLoop
WEnd
_WinAPI_RedrawWindow($gui,"","",BitOR($RDW_ERASE,$RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))
_WinAPI_RedrawWindow($controls,"","",BitOR($RDW_ERASE,$RDW_INVALIDATE,$RDW_UPDATENOW))
DLLCLose($dll)
EndFunc
;===============================================================================
;
; Function Name: _API_SetLayeredWindowAttributes
; Description:: Sets Layered Window Attributes:) See MSDN for more informaion
; Parameter(s):
; $hwnd - Handle of GUI to work on
; $i_transcolor - Transparent color
; $Transparency - Set Transparancy of GUI
; $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
; Requirement(s): Layered Windows
; Return Value(s): Success: 1
; Error: 0
; @error: 1 to 3 - Error from DllCall
; @error: 4 - Function did not succeed - use
; _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
; Author(s): Prog@ndy
;
;===============================================================================
;
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency, $isColorRef = False)
Local Const $AC_SRC_ALPHA = 1
Local Const $ULW_ALPHA = 2
Local Const $LWA_ALPHA = 0x2
Local Const $LWA_COLORKEY = 0x1
If Not $isColorRef Then
$i_transcolor = Hex(String($i_transcolor), 6)
$i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
EndIf
Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
Select
Case @error
Return SetError(@error,0,0)
Case $ret[0] = 0
Return SetError(4,0,0)
Case Else
Return 1
EndSelect
EndFunc;==>_API_SetLayeredWindowAttributes
Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3)
Dim $pos, $ret, $ret2
$pos = WinGetPos($h_win)
$ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long", $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3,"long", $i_y3)
If $ret[0] Then
$ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1)
If $ret2[0] Then
Return 1
Else
Return 0
EndIf
Else
Return 0
EndIf
EndFunc ;==>_GuiRoundCorners
;~ Function-'Format'-Description-------------------------------------------------------
;~ Format Function Created by Blinko
;~ Description: Format( $value )
;~ This was made to imitate Visual Basic's Format Function.
;~ Where (Example Text1 = Format( Text1, "###,###" )
;~ If Text1.text = 1000
;~ then Format(Text1, "###,###") = 1,000
;~ However AutoIt doesnt have a function for this. So i made one up.
;~
;~ Usage: Format($expression, $separator, $nSize)
;~ As the Above Example u want a string like 100000 to read as 100,000
;~ You simply say for example Format('100000' , ',' , 3)
;~ Usage Example: GuiCtrlSetData( $Label, Format(GetPlayerGold(), ',' , 3) )
;~ You may also use "," instead of ',' it does not matter :P
;~ ---------------------------------------------------------------------------------------
Func Format($expression, $separator, $nSize)
Local $split = StringSplit($expression, "")
Local $newText = ""
Local $counter = 0
If StringLen($expression) > $nSize Then
For $i = $split[0] To 1 Step -1
If $counter = $nSize Then
$newText = $split[$i] & $separator & $newText
$counter = 0
Else
$newText = $split[$i] & $newText
EndIf
$counter +=1
Next
Else
$expression = $expression
Return $expression
EndIf
Return $newText
EndFunc
#EndRegion===========================================================================================================================
#Region====EEAutoPilot.settings Info===============================================================
;~ local $app_base = 0x00C71E98
;~ local $Zoom_ADDR = 0x00C7157C
;~ local $ptarget = 0x00C71EAC
local $app_base = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","app_base","")
local $app_base_offset = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","app_base_offset","")
local $Zoom_ADDR = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","Zoom_ADDR","")
local $pname = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","pname","") ;static name
local $ptarget = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","ptarget","")
local $ZOOM_OFFSET1 = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","ZOOM_OFFSET1","")
local $OFFSET_CurHP = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_CurHP","")
local $OFFSET_MaxHP = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_MaxHP","")
local $OFFSET_CurMP = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_CurMP","")
local $OFFSET_MaxMP = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_MaxMP","")
local $OFFSET_TARGET = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_TARGET","")
local $OFFSET_EXP = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_EXP","")
local $OFFSET_CEXP = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_CEXP","")
local $OFFSET_CLASSLVL = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_CLASSLVL","")
local $OFFSET_BASELVL = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_BASELVL","")
local $OFFSET_PDEF = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PDEF","")
local $OFFSET_PCRIT = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PCRIT","")
local $OFFSET_PACC = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PACC","")
local $OFFSET_PSTR = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PSTR","")
local $OFFSET_PAGI = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PAGI","")
local $OFFSET_PINT = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PINT","")
local $OFFSET_PWIS = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PWIS","")
local $OFFSET_PLCK = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PLCK","")
local $OFFSET_GUILDTITLE = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_GUILDTITLE","")
local $OFFSET_PNAME = IniRead(@WorkingDir & "\EEAutoPilot.settings","main","OFFSET_PNAME","") ;offset for player name from app base address
#endregion============================================================================================================================
#region====BASE ADDRESS + OFFSETS==================================================================
func GetBaseAddress()
local $base = _EEMemRead($app_base)
local $ptr = '0x' & Hex($base + $app_base_offset)
local $base_address = _EEMemRead($ptr)
return $base_address
EndFunc
local $CurHP = '0x' & Hex(GetBaseAddress() + $OFFSET_CurHP)
local $MaxHP = '0x' & Hex(GetBaseAddress() + $OFFSET_MaxHP)
local $CurMP = '0x' & Hex(GetBaseAddress() + $OFFSET_CurMP)
local $MaxMP = '0x' & Hex(GetBaseAddress() + $OFFSET_MaxMP)
local $CurEXP = '0x' & Hex(GetBaseAddress() + $OFFSET_EXP)
local $CurCEXP = '0x' & Hex(GetBaseAddress() + $OFFSET_CEXP)
local $ClassLVL = '0x' & Hex(GetBaseAddress() + $OFFSET_CLASSLVL)
local $BaseLVL = '0x' & Hex(GetBaseAddress() + $OFFSET_BASELVL)
local $PlayerDEF = '0x' & Hex(GetBaseAddress() + $OFFSET_PDEF)
local $PlayerPCRIT = '0x' & Hex(GetBaseAddress() + $OFFSET_PCRIT)
local $PlayerPSTR = '0x' & Hex(GetBaseAddress() + $OFFSET_PSTR)
local $PlayerPAGI = '0x' & Hex(GetBaseAddress() + $OFFSET_PAGI)
local $PlayerPINT = '0x' & Hex(GetBaseAddress() + $OFFSET_PINT)
local $PlayerPWIS = '0x' & Hex(GetBaseAddress() + $OFFSET_PWIS)
local $PlayerPLCK = '0x' & Hex(GetBaseAddress() + $OFFSET_PLCK)
local $PlayerPACC = '0x' & Hex(GetBaseAddress() + $OFFSET_PACC)
local $PlayerGuildTitle = '0x' & Hex(GetBaseAddress() + $OFFSET_GUILDTITLE)
local $PlayerPNAME = '0x' & Hex(GetBaseAddress() + $OFFSET_PNAME)
#endregion=======================================================================================================================
#region====ReadEE/WriteEE Functions================================================================
func ReadEE($type)
switch $type
case "player_name"
$p_name = _EEMemRead($PlayerPNAME, "char[16]")
return String($p_name)
case "player_guild_title"
$p_guildt = _EEMemRead($PlayerGuildTitle, "char[16]")
return String($p_guildt)
case "player_str"
$p_str = _EEMemRead($PlayerPSTR, "dword")
return Int($p_str)
case "player_agi"
$p_agi = _EEMemRead($PlayerPAGI, "dword")
return Int($p_agi)
case "player_int"
$p_int = _EEMemRead($PlayerPINT, "dword")
return Int($p_int)
case "player_acc"
$p_acc = _EEMemRead($PlayerPACC, "float")
return Int($p_acc)
case "player_crit"
$p_crit = _EEMemRead($PlayerPCRIT, "float")
return Int($p_crit)
case "player_def"
$p_def = _EEMemRead($PlayerDEF, "dword")
return Int($p_def)
case "base_lvl"
$base_lvl = _EEMemRead($BaseLVL, "dword")
return Int($base_lvl)
case "class_lvl"
$class_lvl = _EEMemRead($ClassLVL, "dword")
return Int($class_lvl)
case "current_cexp"
$cur_cexp = _EEMemRead($CurCEXP, "dword")
return Int($cur_cexp)
case "current_exp"
$cur_exp = _EEMemRead($CurEXP, "dword")
return Int($cur_exp)
case "player_target"
$targetbaseADDR = _EEMemRead($ptarget,"dword")
$target = '0x' & Hex($targetbaseADDR + $OFFSET_TARGET)
$targeted = '0x' & Hex($target)
$target = _EEMemRead($targeted, "dword")
Return Int($target)
case "name"
$name = _EEMemRead($pname, "char[16]")
return String($name)
case "current_hp"
$cur_hp = _EEMemRead($CurHP, "dword")
return Int($cur_hp)
case "max_hp"
$max_hp = _EEMemRead($MaxHP)
return Int($max_hp)
case "current_mp"
$cur_mp = _EEMemRead($CurMP)
return Int($cur_mp)
case "max_mp"
$max_mp = _EEMemRead($MaxMP)
return Int($max_mp)
EndSwitch
EndFunc
func WriteEE($address,$offset,$value)
;"1198383360" zoom hack value
;1098383360 normal value
$1 = _EEMemRead($address, "dword")
_EEMemWrite($1 + $offset, $value, "dword")
EndFunc
#endregion=========================================================================================================================
#region====Control Functions=======================================================================
Func ZoomHack()
WriteEE($Zoom_ADDR,$ZOOM_OFFSET1,"1198383360")
EndFunc
#endregion=========================================================================================
Then we have the actual Bot File.
This uses slightly modified functions that AutoIt uses by default. Which are also inside the EEdata.au3 file.
for example, Auto It uses GuiCtrlCreateLabel, I've worked out a _GuiCreateLabel function that basically does the same, but lets me set values for like font, text color and all that at once without calling separate functions. It's a bit more code, but all this goes to helping you piece together a bot file with more options, and it's completely versitile you can use it in any application..
Like the DragWindow function. This lets you drag a window around from any control, or the gui itself without having to have a border around the GUI with the close buttons etc..
_GuiRoundCorners allows you to round the corners of your application.
But while using all this as a backbone, it's alot more simple to use these functions. So instead of making a GUI with a label and having to then set all the values you want, just make a new function.
Then using different setup HotKeys I can make the guis background appear (with its transparency), or disappear. While visible is can be moved around the screen, while its hidden the visible controls are placed within the client window fullscreen or minimized this is why there are controls to the window placement and such.
One HotKeys is there to hide the gui and everything even from within the game client because once you minimize it the visible controls (text and inputs) stay visible on top of all windows,so due to this bug I can't figure out how to fix I just have the HotKey hide the whole application and then make it visible again once the user is ready to continue using the bot.
The ZoomHack() function is used from within the EEData.au3 file but it's not working atm.
There is alot to take in from this bot, so I'd recommend you download it, or use the updater to grab you the files.
Eden Eternal bot issue 08/21/2011 - AutoIt - 7 Replies Im trying to use my own bot in the game Eden Eternal. But I'm not getting to use the _SendMessage and _PostMessage functons, i tried a lot to make it work but i didn't obtain success... just the Send function worked...
Code, doesnt work (the $HANDLER is working, i think. It just write into the chat):
;_SendMessage($HANDLE, 256, 112);
;_SendMessage($HANDLE, 0x4d, 0);
;_PostMessage($HANDLE, 256, 49, 0x20001);
;_PostMessage($HANDLE, 257, 49, 0x20001);
;ControlSend($HANDLE, "", "",...
Eden Eternal 08/16/2011 - General Gaming Discussion - 2 Replies Hallo Leute.
Ich wollte fragen ob ihr bei
der CB von Eden Eternal dabei wart,
was ihr davon haltet und ob es eventuell
Server files oder Language patches für die
Japanische version gibt.
Danke im vorraus.
Kexxi
WTS Eden Eternal Account. 07/11/2011 - Trading - 17 Replies Hello! Selling my Eden Eternal account from this site here:
Eden Eternal - Eden Eternal - A free MMORPG from Aeria Games
Game is open to ANYONE and EVERYONE. Meaning you can play from anywhere. Germany, Europe, Australia, Hawaii, United States, Canada, etc.
Server:
Aquamarine
Details:
Maverick Trait (10% AGI, 5% ATK Speed)
eden eternal hacks needed 07/01/2011 - General Coding - 3 Replies any1 gonna make hacks for eden eternal ?
Eternal Eden OB! 06/16/2011 - General Gaming Discussion - 0 Replies Eden Eternal - Eden Eternal - A free MMORPG from Aeria Games
signup here! ^
OB starts today
experience the fun!