XKahn Posted February 17, 2010 Posted February 17, 2010 Hello All, I am programmer from way back, I know many languages; C++, Fortran, Cobol, Pascal, BASIC, Visual Basic, among others. I run a small business and program lots of things in my spare time. I like this small concise compiler AutoIt. It packs a pretty good punch. I have been lurking in the shadows until now, looking over the forum for advice and such. I decide I better balance my karma and give something back. This is a little AutoIt script I worked out on my own, it is not a game bot(I read that posting) , it is a game trainer for a rather old game I have kicking around on my PC. So I will apologize that it is not highly "useful" in the practical sense. But someone can use it to learn from. expandcollapse popup;A short example of a game trainer ;shows how to access, read and write to process memory ;shows how to create and use a GUI (graphical user interface) ;This is a work in progress and should be used as a learning tool. #include <NomadMemory.au3> #include <GuiConstantsEx.au3> ;This trainer is made to access the old "Lucas Arts Afterlife" Heaven and Hell simulation game. ;I used another program TSearch ver 1.6 to find the addresses needed. ;Check to see if the program is in memory. If not ProcessExists("ALIFE.EXE") Then MsgBox(0, "Game Check", "After Life is not running.") Exit EndIf ;Get the process ID number $pid = ProcessExists("ALIFE.EXE") ; GUI GuiCreate("After Life Trainer 1.0", 400, 400) ;Get Pennies and Planet Population $Mem_Open = _MemoryOpen($pid) $Mem_Read = _MemoryRead("0x63043C", $Mem_Open) $Money = GuiCtrlCreateInput($Mem_Read, 5, 5, 120, 20) $Pennies = GuiCtrlCreateButton("Total Pennies", 140, 5, 100, 30) $gcx = GuiCtrlCreateInput(0, 130, 40, 30, 20) $gcy = GuiCtrlCreateInput(0, 165, 40, 30, 20) $Mem_Read = _MemoryRead("0x57E1C0", $Mem_Open) $population = GuiCtrlCreateInput($Mem_Read, 5, 40, 120, 20) GuiCtrlCreateLabel("Area Population in Sector on Planet", 5, 65, 200, 20) $SetPop = GuiCtrlCreateButton("Set Population", 5, 95, 100, 30) $BigPop = GuiCtrlCreateButton("Set to ALL Sectors", 105, 95, 100, 30) _MemoryClose($Mem_Open) ; GUI MESSAGE LOOP GuiSetState() $msg = GUIGetMsg() While $msg <> $GUI_EVENT_CLOSE $msg = GUIGetMsg() Select Case $msg = $Pennies ;Pennies button got pushed $Data = GUICtrlRead($Money) ;get the amount inside the input box $Mem_Open = _MemoryOpen($pid) ;open memory for read/write _MemoryWrite("0x63043C", $Mem_Open, $Data) ;patch the pennies with the new amount $Mem_Read = _MemoryRead("0x63043C", $Mem_Open) ;read the memory (just to be sure) GUICtrlSetData($Money, $Mem_Read) ;display what was entered _MemoryClose($Mem_Open) ;close the memory access ;This sets the surface population of the planet by sector. Case $msg = $SetPop $Data = GUICtrlRead($population) $Sector = 0x57E1C0 + GUICtrlRead($gcx)*1344 + GUICtrlRead($gcy)*42 $Mem_Open = _MemoryOpen($pid) _MemoryWrite($Sector, $Mem_Open, $Data) $Mem_Read = _MemoryRead($Sector, $Mem_Open) GUICtrlSetData($population, $Mem_Read) _MemoryClose($Mem_Open) ;This will set all the sectors to the same amount 2048 sectors times the amount entered. Case $msg = $BigPop $Data = GUICtrlRead($population) $Mem_Open = _MemoryOpen($pid) For $gcx = 0 to 63 For $gcy = 0 to 31 $Sector = 0x57E1C0 + $gcx*1344 + $gcy*42 _MemoryWrite($Sector, $Mem_Open, $Data) Next Next _MemoryClose($Mem_Open) EndSelect WEnd I plan to do more with this, but again it is a rather obscure game, so I will post more useful scripts in the future. I mainly did this script to wet my whistle on some of the basics of the language. Thanks
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now