I recently managed to crack (after alot of hard work) a still unreleased bot. This bot is very similar to MMOglider (has way
points, kills shit) but its much safer as MUCH MUCH less people have it.
I managed to decompile the .exe and essentially de-obfuscate the code and remove the parts in which you had to enter your 'thermkey' and then it forced your client to authenticate your unique 'thermkey' with his server.
I then recompiled it.
There is a readme included and i suggest you read it.
From my over zealous scanning / reversing i found no malicious code. That said, i still suggest you hex it yourself to be sure (Or at least scan it)
Link to scanners:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Link to file
[Only registered and activated users can see links. Click Here To Register...]
This Bot is coded in AUTOIT therefore some virus scanners (Due to heuristics) might pick it up; its a false positive.
HERE IS THE SOURCE, COMPILE IT FOR YOUR OWN SAFETY OR DOWNLOAD WITH THE LINK PROVIDED
points, kills shit) but its much safer as MUCH MUCH less people have it.
I managed to decompile the .exe and essentially de-obfuscate the code and remove the parts in which you had to enter your 'thermkey' and then it forced your client to authenticate your unique 'thermkey' with his server.
I then recompiled it.
There is a readme included and i suggest you read it.
From my over zealous scanning / reversing i found no malicious code. That said, i still suggest you hex it yourself to be sure (Or at least scan it)
Link to scanners:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Link to file
[Only registered and activated users can see links. Click Here To Register...]
This Bot is coded in AUTOIT therefore some virus scanners (Due to heuristics) might pick it up; its a false positive.
HERE IS THE SOURCE, COMPILE IT FOR YOUR OWN SAFETY OR DOWNLOAD WITH THE LINK PROVIDED
Code:
#Region;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_outfile=..\..\Scripts\Thermo.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_UseUpx=n #AutoIt3Wrapper_Allow_Decompile=n #AutoIt3Wrapper_Run_Obfuscator=n #EndRegion;**** Directives created by AutoIt3Wrapper_GUI **** ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; Author: ; Malu05 aka. Mads Hagbart Lund <[Only registered and activated users can see links. Click Here To Register...]> ; ; Script Function: ; Thermo Prime - A Automated Movement Script for wow. ; ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; About Project Thermo: ; A Memory Reading Automated Movement Script for World Of Warcraft. ; Developed to be fully indenpendet. ; ---------------------------------------------------------------------------- ; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ;Includes #include <GUIConstants.au3> #include <String.au3> #include <Date.au3> #include <array.au3> #include <Math.au3> #include <File.au3> #include <_XMLDomWrapper.au3> #include <NomadMemory.au3> #include <File.au3> ;Hotkeys HotKeySet("{ESC}", "terminate") HotKeySet("{F2}", "RunTheBot") ;hotkeyset("{F3}","Pause") - Implant soon... HotKeySet("{F4}", "SaveDestination") HotKeySet("{F5}", "SaveDestination_Ghost") ;;============================================================================== = ;;Variable Definition; ;;============================================================================== = ;;App $App_name = "Thermo Prime";Main Name of the application $App_version = "3.1";Version Number of the Application $App_Title = ($App_name & " v" & $App_version & " -Full version Enabled-" & " Cracked By DiEsIeL");Final Name of Process ;Files Global $WowProcessName = "World of Warcraft";Name of the process (CASE SENSITIVE!!! FIX FOR YOUR VERSION) Global $logname = "/Progress.log";Name of the logfile ;; Usual Config Dim $RatioConvertion = "100" Dim $slowdistance = "1" Dim $TimeBeforeJump = "4000";ms before starting to jump over a obstecle Dim $TimeBeforeReverse = "10000";ms before going back to previous waypoint Dim $walkkey = "{NUMLOCK}";Not used ;others Global $wait, $running, $MouseDown, $taskset, $rot_perfect = 0;MouseDown is 1 when the mouse is down, and 0 when not Dim $cmdtabel = 0;When running the bot it will automaticly go to the first CASE in the CMDTable Global $CurrentCheck = 1;Is 1 when its first time a check is being made Dim $dubblecheckPos Dim $Overllrot, $OverllLocX, $OverllLocY, $OverllZone, $CurrentRot, $CurrentLocX, $CurrentLocY, $continentID, $lastX, $lastY, $debug, $toposX, $toposY, $result = 0 Dim $dubblecheckPos, $ycheck, $slow, $move_x_big, $move_y_big, $rot_perfect, $rot_fast, $down, $XCurBigger, $YCurBigger, $jtdif, $jtstart = 0 Dim $checkagain = 0 Global $arraynumber = "0" Dim $array_x_number = "0" Global $pi = 4 * ATan(1) Dim $Xstart, $Ystart = 0 Global $pasedborder = 0 Dim $jumptimerwalk, $deathNY = 0 $alive = 1 ;for XML Process Global $xmlFile;Name of the XML File open Dim $test_pause = 0 $ATTRIBS = _ArrayCreate("Continent", "Zone", "Nr", "posX", "posY", "Comment") $CHILDATTRIBS = _ArrayCreate("Continent", "Zone", "Nr", "posX", "posY", "Comment") Global $xmlFile Global $count = 0 Global $sNxPath, $fHwnd Global $ARRAY[1][1] Global $ARRAYX Global $ARRAYY Local $additional = 1 Local $numb = 0001 Dim $corpselocX, $releasecorpse, $corpselocY = 0 ;for XML Process __ for save waypoint Local $szXPath1, $szXPath2, $aNodeName1, $aNodeName2, $find, $oXSD, $iNodeCount, $aAttrName1[1], $aAttrVal1[1], $aAttrName2[1], $aAttrVal2[1], $ret_val, $X Opt("WinTitleMatchMode", 4) Global $ProcessID = WinGetProcess($WowProcessName, "") SetPrivilege ("SeDebugPrivilege", 1) If $ProcessID = -1 Then MsgBox(4096, "Thermo Prime - ERROR", "Failed to detect World of Warcraft running.") Exit EndIf _FileWriteLog(@ScriptDir & $logname, ":::Start Of Session:::") ;;============================================================================== = ;;GUI; ;;============================================================================== = ;Window GUICreate($App_Title, 500, 250) GUISetState(@SW_SHOW) ;Buttons $Button_SelectProfile = GUICtrlCreateButton("Select Profile", 100, 10, 100) $Button_NewProfile = GUICtrlCreateButton("New Profile", 100, 40, 100) ;Labels $FinalCharname = GUICtrlCreateLabel("Charname", 10, 10, 70, 20, ($SS_SUNKEN)) $Finallocx = GUICtrlCreateLabel("Position X", 10, 40, 70, 20, ($SS_SUNKEN)) $Finallocy = GUICtrlCreateLabel("Position Y", 10, 70, 70, 20, ($SS_SUNKEN)) $Finalrot = GUICtrlCreateLabel("Rotation", 10, 100, 70, 20, ($SS_SUNKEN)) $Finalrandom = GUICtrlCreateLabel("ZoneID", 10, 130, 70, 20, ($SS_SUNKEN)) ;Labels_debug $DebugID = GUICtrlCreateLabel("StatusID", 5, 210, 120, 20, ($SS_SUNKEN)) $RotationID = GUICtrlCreateLabel("RotationID", 5, 190, 120, 20, ($SS_SUNKEN)) ;Checkbox $debugcheck = GUICtrlCreateCheckbox("Debug Mode", 5, 230, 160, 20) $combatmode = GUICtrlCreateCheckbox("Combat Mode", 180, 230, 260, 20) ;WinSetOnTop($App_Title, "", 1) - Implant soon... SmartBehavior() ;;============================================================================== = ;;THERMO START! ;;============================================================================== = Func SmartBehavior() While $wait = 0 ;Check GUI for userinput $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit 0 Case $msg = $Button_SelectProfile SelectOpenXML() Case $msg = $Button_NewProfile NewProfile() EndSelect ;Check if wow is running If WinActive("World of Warcraft") Then If $xmlFile = "" Then Sleep(10) MsgBox(0, "Thermo Prime - ERROR", "You have not selected a XML File! Please press the [Select Profile] button and select a profile before running") WinWaitActive($App_Title) Else _FileWriteLog(@ScriptDir & $logname, "World Of Warcraft process opned") Sleep(20) Send("{Enter}") Sleep(11) ClipPut("/script DEFAULT_CHAT_FRAME:AddMessage(""" & $App_name & " v" & $App_version & " is running!! "",0.0,0.0,1.0); ") Sleep(11) Send("^v") Sleep(11) Send("{Enter}") $wait = 1 EndIf EndIf WEnd ;Start the bot----------------- While 1 Cmdtable() WEnd EndFunc ;==>SmartBehavior ;;============================================================================== = ;;Command Table; ;;============================================================================== = Func Cmdtable();;Command Table for functions, this table can be used for configuring the steps of the bots behaviour $debug = GUICtrlRead($debugcheck) Switch $cmdtabel Case 0 ;ControlSetText($App_Title, "", $DebugID, "0-GetCurrentData") GetCurrentData() Case 1 ControlSetText($App_Title, "", $DebugID, "1-EventCalculation" & $array_x_number);these are for debuggin - Remove soon... EventCalculation() Case 2 ControlSetText($App_Title, "", $DebugID, "2-CheckRotation") _FileWriteLog(@ScriptDir & $logname, "checkRotation" & $taskset) CheckRotation() Case 3 ControlSetText($App_Title, "", $DebugID, "3-GoToPos") _FileWriteLog(@ScriptDir & $logname, "Gotopos") GoToPos() Case 4 ControlSetText($App_Title, "", $DebugID, "4-Dubblecheck") _FileWriteLog(@ScriptDir & $logname, "dualchecl") Dubblecheck() Case 5 ControlSetText($App_Title, "", $DebugID, "5-runbot") _FileWriteLog(@ScriptDir & $logname, "runbot") RunBot() EndSwitch Return EndFunc ;==>Cmdtable ;;============================================================================== = ;;GetCurrentData; ;;============================================================================== = Func GetCurrentData();Read data from memory If $CurrentCheck = 1 Then MemoryLoop() EndIf If $dubblecheckPos = 1 Then $cmdtabel = 4;Next step = 4 Dubblecheck() Return Else $cmdtabel = 1;Next step = EvenCalculation() Return EndIf EndFunc ;==>GetCurrentData ;;============================================================================== = ;;EvenCalculation; ;;============================================================================== = Func EventCalculation();With the info from GetCurrentData calculate what to do If $deathNY = 0 Then If $alive = 1 Then $alive = 0 $corpselocX = $CurrentLocX $corpselocY = $CurrentLocY Sleep(20) Send("{Enter}") Sleep(11) ClipPut("/script RepopMe()") Sleep(11) Send("^v") Sleep(11) Send("{Enter}") EndIf EndIf If $running = "1" Then If $CurrentLocX = $toposX Then If $CurrentLocY = $toposY Then $running = "0" $checkagain = 0 $dubblecheckPos = 0 $cmdtable = 5 $rot_perfect = 0 Return;Next step = GetCurrentData() EndIf EndIf ;$cmdtable = 5 ;$rot_perfect = 0 ;Return;Next step = GetCurrentData() EndIf If $pasedborder = 1 Then $running = "0" $checkagain = 0 $dubblecheckPos = 0 $cmdtable = 5 $rot_perfect = 0 Return;Next step = GetCurrentData() EndIf If $taskset = 1 Then _FileWriteLog(@ScriptDir & $logname, "Data recived from game; Rotation=" & $CurrentRot & ". PositionX=" & $CurrentLocX & ". PositionY=" & $CurrentLocY & ".") $cmdtabel = 2;Next step = CheckRotation() Return EndIf If $rot_perfect = 1 Then $cmdtabel = 3;Next step = GoToPos() Return EndIf $cmdtabel = 0;Next step = GetCurrentData() Return EndFunc ;==>EventCalculation ;;============================================================================== = ;;CheckRotation ;;============================================================================== = Func CheckRotation() If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("Current = " & $CurrentRot & " result= " & $result) Send("^v") Sleep(200) Send("{Enter}") EndIf $jtstart = "0" $jumptimerwalk = "0" $lastX = "0" $lastY = "0" $windowsize = WinGetPos($WowProcessName) MouseMove((($windowsize[2] / 2) + $windowsize[0]), (($windowsize[3] / 2) + $windowsize[1]), 0) While $taskset = 1 MemoryLoop() Rotationfix() $Rot_Smallest = _Min($CurrentRot, $result) $Rot_Biggest = _Max($CurrentRot, $result) If $CurrentRot = $Rot_Biggest Then If ($CurrentRot - $result) < 190 Then $down = 1 If ($CurrentRot - $result) < 50 Then $rot_fast = 0 If ($CurrentRot - $result) < 9 Then $rot_fast = 2 EndIf Else $rot_fast = 1 EndIf Else $down = 0 If (($result + 360) - $CurrentRot) < 50 Then $rot_fast = 0 If (($result + 360) - $CurrentRot) < 9 Then $rot_fast = 2 EndIf Else $rot_fast = 1 EndIf EndIf Else If ($result - $CurrentRot) < 190 Then $down = 0 If ($result - $CurrentRot) < 50 Then $rot_fast = 0 If ($result - $CurrentRot) < 9 Then $rot_fast = 2 EndIf Else $rot_fast = 1 EndIf Else $down = 1 If (($CurrentRot + 360) - $result) < 50 Then $rot_fast = 0 If (($CurrentRot + 360) - $result) < 9 Then $rot_fast = 2 EndIf Else $rot_fast = 1 EndIf EndIf EndIf If $CurrentLocX = $toposX Then If $CurrentLocY = $toposY Then $cmdtabel = 5;Next step = GetCurrentData() $rot_perfect = 1 $taskset = 0 Return;Next step = GetCurrentData() EndIf EndIf MouseDown("right") If $rot_fast = 1 Then If $down = 0 Then ;MouseDown("right") _MouseMovePlus(-20, 0) Sleep(10) Else ;MouseDown("right") _MouseMovePlus(20, 0) Sleep(10) EndIf EndIf If $rot_fast = 0 Then If $down = 0 Then MouseDown("right") _MouseMovePlus(-10, 0) Sleep(10) ;sleep(200) Else ;MouseDown("right") _MouseMovePlus(10, 0) Sleep(10) EndIf EndIf If $rot_fast = 2 Then If $down = 0 Then ;MouseDown("right") _MouseMovePlus(-2, 0) Sleep(10) ;sleep(200) Else ;MouseDown("right") _MouseMovePlus(2, 0) Sleep(10) EndIf EndIf ;Update Rotation Data MemoryLoop() Rotationfix() If Floor($CurrentRot) = Floor($result) Then MouseUp("right") $taskset = 0 Sleep(200) EndIf WEnd _FileWriteLog(@ScriptDir & $logname, "Rotation Complete; CurrentRotation=" & $CurrentRot & ". FinalRotation=" & $result & ".") MouseUp("right") $cmdtabel = 0;Next step = GetCurrentData() $rot_perfect = 1 $taskset = 0 Return EndFunc ;==>CheckRotation ;;============================================================================== = ;;GoToPos ;;============================================================================== = Func GoToPos() ; [Find The Coordinate Place] If $toposX <= $Xstart Then $XCurBigger = 1 Else $XCurBigger = 0 EndIf If $toposY <= $Ystart Then $YCurBigger = 1 Else $YCurBigger = 0 EndIf $distance = _Max(($CurrentLocX + $CurrentLocY), ($toposX + $toposY)) - _Min(($CurrentLocX + $CurrentLocY), ($toposX + $toposY)) ; [/Find The Coordinate Place] Send("{w down}") While $rot_perfect = 1 ;For Jump Timer $lastX = $CurrentLocX $lastY = $CurrentLocY ; [Gather Position Data From WoW] MemoryLoop() ;[Tjek Data] ;Jump Timer (if the player stays too long at the same location it will start jumping, and short after return to previous waypoint.) If $lastX = $CurrentLocX Then If $lastY = $CurrentLocY Then If $jtstart = 0 Then $jumptimerwalk = TimerInit() $jtstart = 1 EndIf $jtdif = TimerDiff($jumptimerwalk) ControlSetText($App_Title, "", $RotationID, "TimerLoc:" & $lastX & "," & $lastY & " t:" & Floor($jtdif)) If $jtdif > $TimeBeforeReverse Then;For Going Back One Step in the Waypoint Section If $deathNY = 0 Then If $alive = 1 Then $alive = 0 $corpselocX = $CurrentLocX $corpselocY = $CurrentLocY Sleep(20) Send("{Enter}") Sleep(11) ClipPut("/script RepopMe()") Sleep(11) Send("^v") Sleep(11) Send("{Enter}") EndIf EndIf _FileWriteLog(@ScriptDir & $logname, "Could not reach the desired destination; waypoint: " & $array_x_number & ", retrying from last waypoint. RP=" & $jtdif) $array_x_number = $array_x_number - 1 $cmdtabel = 5;Next step = Save_test() $jtstart = 0 ;send ("{w down}") Send("{w}") Return EndIf If $jtdif > $TimeBeforeJump Then;For Basic Jump after X Secounds _FileWriteLog(@ScriptDir & $logname, "Suspected stuck trying to reach; waypoint: " & $array_x_number & ", attempting jump procedure. RP=" & $jtdif) Send("{w up}") Sleep(20) Send("{space}") Sleep(100) Send("{w down}") EndIf Else $jumptimerwalk = 0 $jtstart = 0 $jtdif = 0 EndIf Else $jumptimerwalk = 0 $jtstart = 0 $jtdif = 0 EndIf ;[Tjek Data] If _Max(($CurrentLocX + $CurrentLocY), ($toposX + $toposY)) - _Min(($CurrentLocX + $CurrentLocY), ($toposX + $toposY)) > $distance Then $cmdtabel = 0;Next step = Save_test() Send("{w}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return EndIf If $XCurBigger = 0 Then If $CurrentLocX >= $toposX Then ;send ("{w down}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return;Next step = GetCurrentData() EndIf EndIf If $XCurBigger = 1 Then If $CurrentLocX <= $toposX Then If $YCurBigger = 1 Then If $CurrentLocY <= $toposY Then ;send ("{w down}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return;Next step = GetCurrentData() EndIf EndIf If $YCurBigger = 0 Then If $CurrentLocY >= $toposY Then ;send ("{w down}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return;Next step = GetCurrentData() EndIf EndIf EndIf EndIf If $YCurBigger = 0 Then If $CurrentLocY >= $toposY Then ;send ("{w down}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return;Next step = GetCurrentData() EndIf EndIf If $YCurBigger = 1 Then If $CurrentLocY <= $toposY Then If $XCurBigger = 0 Then If $CurrentLocX >= $toposX Then ;send ("{w down}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return;Next step = GetCurrentData() EndIf EndIf If $XCurBigger = 1 Then If $CurrentLocX <= $toposX Then ;send ("{w down}") $dubblecheckPos = 1 $cmdtable = 0 $rot_perfect = 0 $pasedborder = 1 Return;Next step = GetCurrentData() EndIf EndIf EndIf EndIf ControlSetText($App_Title, "", $DebugID, "3-GoToPos:" & $toposX & "," & $toposY) WEnd If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("Error") Send("^v") Sleep(200) Send("{Enter}") EndIf ;send ("{w up}") $cmdtabel = 0;Next step = GetCurrentData() Return EndFunc ;==>GoToPos ;;============================================================================== = ;;Dubblecheck() ;;============================================================================== = Func Dubblecheck() If $CurrentLocX <= ($toposX + 1) And $CurrentLocX >= ($toposX - 1) Then If $CurrentLocY <= ($toposY + 1) And $CurrentLocY >= ($toposY - 1) Then $dubblecheckPos = 0 $taskset = 0 $rot_perfect = 0 $cmdtabel = 0 ;send("{´}") $slow = 0 If ($ARRAY[4][($ARRAYY - $arraynumber) + 0]) = $arraynumber Then $checkagain = 1 MsgBox(0, "error", "error") Return Else $cmdtabel = 5 $checkagain = 0 _FileWriteLog(@ScriptDir & $logname, "Succes Reaching waypoint: " & $array_x_number & " check" & $CurrentLocX & "=" & $toposX & " . " & $CurrentLocY & "=" & $toposY) If $deathNY = 0 Then If $releasecorpse = 1 Then Send("{Enter}") Sleep(11) ClipPut("/script RetrieveCorpse()") Sleep(11) Send("^v") Sleep(11) Send("{Enter}") $alive = 1 EndIf EndIf Return EndIf EndIf EndIf $checkagain = 1 $dubblecheckPos = 0 $cmdtabel = 5;Next step = EvenCalculation() Send("{w up}") Return EndFunc ;==>Dubblecheck ;;============================================================================== = ;;Runbot; ;;============================================================================== = Func RunBot() ;msgbox(0,"LOL",$toposX & " " & $toposY & " <- " & $CurrentLocX & " " & $CurrentLocY) $running = "1" If $checkagain = 0 Then ;;For repeat (if the current number goes beyond the last array it will set to 1) If $deathNY = 1 Then If ($array_x_number) = ($ARRAYY) Then $array_x_number = 0 Return EndIf EndIf $array_x_number = $array_x_number + 1 EndIf If $deathNY = 0 Then If ($array_x_number) = ($ARRAYY) Then Send("{Enter}") Sleep(11) ClipPut("/script RetrieveCorpse()") Sleep(11) Send("^v") Sleep(11) Send("{Enter}") Sleep(20) If $deathNY = 1 Then $alive = 1 $array_x_number = 0 Else $posx2 = $CurrentLocX $posy2 = (($CurrentLocY / "100") * $RatioConvertion) $toposX = $corpselocX $toposY = $corpselocY $posx1 = $corpselocX $posy1 = (($corpselocY / "100") * $RatioConvertion) $releasecorpse = 1 MsgBox(0, "test", $corpselocX & " " & $corpselocY) $radToDeg = -180 / $pi $result = ATan(($posy1 - $posy2) / ($posx2 - $posx1)) * $radToDeg If $posx2 < $posx1 Then If $result < 0 Then $result = 270 + $result Else $result = 270 + $result EndIf EndIf If $posx2 >= $posx1 Then If $result < 0 Then $result = 90 + $result Else $result = 90 + $result EndIf EndIf $result = $result - 360 $result = Floor(($result - $result) - $result) If $result = "360" Then $result = 0 $cmdtabel = 0 $taskset = 1 $pasedborder = 0 $cmdtable = 1 EndIf Return;Next step = GetCurrentData() EndIf EndIf ;; If the Current number is 0 it will go to the last waypoint to make it backwoards compatible. If $array_x_number = 0 Then $array_x_number = $ARRAYY EndIf _FileWriteLog(@ScriptDir & $logname, "Processing Destination Waypoint; " & $array_x_number & ".") If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("1 = " & $array_x_number) Sleep(20) Send("^v") Sleep(200) Send("{Enter}") EndIf If $deathNY = 1 Then $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWDATA" Else $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWGHOST" Secureghost() ;$array_x_number = 0 EndIf ;; If the Current number is 0 it will go to the last waypoint to make it backwoards compatible. ;if $array_x_number = 0 Then ; $array_x_number = $ARRAYY ; EndIf ReDim $ARRAY[$ARRAYX][$ARRAYY + 1] ;TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1) $aNodeName1 = _XMLGetChildNodes ($szXPath1) $aNodeName2 = _XMLGetChildNodes ($szXPath2) If $aNodeName1 <> -1 Then ;LOOP THROUGH //DATAPACKET/METADATA/FIELDS For $find = 1 To $aNodeName1[0] _XMLGetAllAttrib ($szXPath1 & "/*" & '[' & $find & ']', $aAttrName1, $aAttrVal1) ;ADD TO ARRAY $ARRAY[$find - 1][0] = $aAttrVal1[0] ;LOOP THROUGH //DATAPACKET/ROWDATA For $X = 1 To $aNodeName2[0] _XMLGetAllAttrib ($szXPath2 & "/*" & '[' & $X & ']', $aAttrName2, $aAttrVal2) ;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW If $find <= UBound($aAttrName2) Then ;msgbox(0,"hej",$find & " X= " & $X & " att " &$aNodeName2[0] & " AN= " & $aNodeName1[0] & " " & $aAttrVal2[$find-1]) Secureghost() $ARRAY[$find - 1][$X] = $aAttrVal2[$find - 1] EndIf Next Next Else MsgBox(0, "Error:", "No nodes found for " & $szXPath1) EndIf ;if $array_x_number = ($ARRAYY+1) Then ; $array_x_number = $array_x_number - 1 ; EndIf $posx2 = $CurrentLocX $posy2 = (($CurrentLocY / "100") * $RatioConvertion) $posx1 = $ARRAY[3][$array_x_number] $posy1 = ((($ARRAY[4][$array_x_number]) / "100") * $RatioConvertion) $toposX = $ARRAY[3][$array_x_number] $toposY = $ARRAY[4][$array_x_number] $checkagain = 1 ;if $deathNY = 0 Then ; if ($array_x_number+1) = ($ARRAYY) Then ; $toposX = $corpselocX ; $toposY = $corpselocY ; $posx1 = $corpselocX ; $posy1 = (($corpselocY/"100")*$RatioConvertion ) ; $releasecorpse = 1 ; msgbox(0,"test",$corpselocX & " " & $corpselocY) ; EndIf ;EndIf ;msgbox(0,"hej","$posx1=" & $posx1 & " " & "$posy1=" & $posy1 & " " & "$posx2=" &$posx2 & " " & "$posy2=" & $posy2 & " " & "$toposX=" &$toposX & " " & "$toposY=" & $toposY) _FileWriteLog(@ScriptDir & $logname, "Data From XML - " & $array_x_number & ". Destination pos: " & $toposX & "." & $toposY) If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("1 = " & $ARRAY[3][1] & " 2 = " & $ARRAY[4][1] & " 3 =" & $array_x_number) Sleep(20) Send("^v") Sleep(200) Send("{Enter}") EndIf $radToDeg = -180 / $pi $result = ATan(($posy1 - $posy2) / ($posx2 - $posx1)) * $radToDeg If $posx2 < $posx1 Then If $result < 0 Then $result = 270 + $result Else $result = 270 + $result EndIf EndIf If $posx2 >= $posx1 Then If $result < 0 Then $result = 90 + $result Else $result = 90 + $result EndIf EndIf $result = $result - 360 $result = Floor(($result - $result) - $result) If $result = "360" Then $result = 0 $cmdtabel = 0 $taskset = 1 If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("Current position = " & $CurrentLocX & "," & $CurrentLocY & " End Position = " & $toposX & "," & $toposY & " rotation calculated = " & $result) Sleep(20) Send("^v") Sleep(200) Send("{Enter}") EndIf $pasedborder = 0 $cmdtable = 1 Return;Next step = GetCurrentData() EndFunc ;==>RunBot ;;============================================================================== = ;;Runbot1; ;;============================================================================== = Func RunTheBot() If $test_pause = 0 Then $oXSD = _XMLFileOpen ($xmlFile, "") ;If @error Or $oXSD < 1 Then ; MsgBox(0, "Error", "There was an error opening the file " & $xmlFile) ; $oXSD = 0 ; _FileWriteLog(@ScriptDir & $logname,"Error Opning XMLFile - Ending Session") ; _FileWriteLog(@ScriptDir & $logname,":::End Of Session:::") ; Exit ;EndIf If $deathNY = 1 Then $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWDATA" Else $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWGHOST" $array_x_number = 0 EndIf $ARRAYX = _XMLGetNodeCount ($szXPath1 & "/*") $ARRAYY = _XMLGetNodeCount ($szXPath2 & "/*") $additional = $ARRAYY ;ReDim $ARRAY[$ARRAYX][$ARRAYY+1] If $ARRAYY < 0 Then $ARRAYY = 0 TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1) $aNodeName1 = _XMLGetChildNodes ($szXPath1) $aNodeName2 = _XMLGetChildNodes ($szXPath2) If $aNodeName1 <> -1 Then ;LOOP THROUGH //DATAPACKET/METADATA/FIELDS For $find = 1 To $aNodeName1[0] _XMLGetAllAttrib ($szXPath1 & "/*" & '[' & $find & ']', $aAttrName1, $aAttrVal1) ;ADD TO ARRAY ;$ARRAY[$find-1][0] = $aAttrVal1[0] ;LOOP THROUGH //DATAPACKET/ROWDATA ;For $X=1 To $aNodeName2[0] ; _XMLGetAllAttrib($szXPath2 & "/*" & '[' & $X & ']',$aAttrName2,$aAttrVal2) ;;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW ; If $find <= Ubound($aAttrName2) Then ; $ARRAY[$find-1][$X] = $aAttrVal2[$find-1] ; EndIf ;Next Next Else MsgBox(0, "Error:", "No nodes found for " & $szXPath1) EndIf ;$arraynumber = ($ARRAY[2][$ARRAYY]) $array_x_number = 0;$arraynumber $oXSD = 0 EndIf RunBot() EndFunc ;==>RunTheBot ;;============================================================================== = ;;Secure Ghost ;;============================================================================== = Func Secureghost() If $test_pause = 0 Then $oXSD = _XMLFileOpen ($xmlFile, "") ;If @error Or $oXSD < 1 Then ; MsgBox(0, "Error", "There was an error opening the file " & $xmlFile) ; $oXSD = 0 ; _FileWriteLog(@ScriptDir & $logname,"Error Opning XMLFile - Ending Session") ; _FileWriteLog(@ScriptDir & $logname,":::End Of Session:::") ; Exit ;EndIf If $deathNY = 1 Then $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWDATA" Else $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWGHOST" EndIf $ARRAYX = _XMLGetNodeCount ($szXPath1 & "/*") $ARRAYY = _XMLGetNodeCount ($szXPath2 & "/*") $additional = $ARRAYY ;ReDim $ARRAY[$ARRAYX][$ARRAYY+1] If $ARRAYY < 0 Then $ARRAYY = 0 TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1) $aNodeName1 = _XMLGetChildNodes ($szXPath1) $aNodeName2 = _XMLGetChildNodes ($szXPath2) If $aNodeName1 <> -1 Then ;LOOP THROUGH //DATAPACKET/METADATA/FIELDS For $find = 1 To $aNodeName1[0] _XMLGetAllAttrib ($szXPath1 & "/*" & '[' & $find & ']', $aAttrName1, $aAttrVal1) ;ADD TO ARRAY ;$ARRAY[$find-1][0] = $aAttrVal1[0] ;LOOP THROUGH //DATAPACKET/ROWDATA ;For $X=1 To $aNodeName2[0] ; _XMLGetAllAttrib($szXPath2 & "/*" & '[' & $X & ']',$aAttrName2,$aAttrVal2) ;;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW ; If $find <= Ubound($aAttrName2) Then ; $ARRAY[$find-1][$X] = $aAttrVal2[$find-1] ; EndIf ;Next Next Else MsgBox(0, "Error:", "No nodes found for " & $szXPath1) EndIf ;$arraynumber = ($ARRAY[2][$ARRAYY]) $oXSD = 0 EndIf Return EndFunc ;==>Secureghost ;;============================================================================== = ;;MemoryLoop; ;;============================================================================== = Func MemoryLoop() ;Check if memory is accesible Local $DllInformation = _MemoryOpen ($ProcessID) If @error Then MsgBox(4096, "ERROR", "Failed to open memory.") Exit EndIf $CurrentCharname = _MemoryRead (0x00cbaa88, $DllInformation, 'char[11]') If @error Then MsgBox(4096, "ERROR", "Failed to read memory.") Exit EndIf $CurrentLocX = Floor(_MemoryRead (0x00D80228, $DllInformation, 'float')) If @error Then MsgBox(4096, "ERROR", "Failed to read memory.") Exit EndIf $CurrentLocY = Floor(_MemoryRead (0x00D81234, $DllInformation, 'float')) If @error Then MsgBox(4096, "ERROR", "Failed to read memory.") Exit EndIf $CurrentRot = _MemoryRead (0x00d80248, $DllInformation, 'float') If @error Then MsgBox(4096, "ERROR", "Failed to read memory.") Exit EndIf $continentID = _MemoryRead (0x008D5B20, $DllInformation, 'dword') If @error Then MsgBox(4096, "ERROR", "Failed to read memory.") Exit EndIf $deathNY = _MemoryRead (0x00C58FD0, $DllInformation, 'dword') If @error Then MsgBox(4096, "ERROR", "Failed to read memory.") Exit EndIf _MemoryClose ($DllInformation) ;Final Calculations $Xstart = $CurrentLocX $Ystart = $CurrentLocY $CurrentRot = Floor(($CurrentRot / (3.14159265358979 / 180))) ;Update GUI ControlSetText($App_Title, "", $FinalCharname, $CurrentCharname) ControlSetText($App_Title, "", $Finalrot, $CurrentRot) ControlSetText($App_Title, "", $Finallocx, $CurrentLocX) ControlSetText($App_Title, "", $Finallocy, $CurrentLocY) ControlSetText($App_Title, "", $Finalrandom, $continentID) EndFunc ;==>MemoryLoop ;;============================================================================== = ;;Rotationfix ;;============================================================================== = Func Rotationfix() $posx2 = $CurrentLocX $posy2 = (($CurrentLocY / "100") * $RatioConvertion) $posx1 = $ARRAY[3][$array_x_number] $posy1 = ((($ARRAY[4][$array_x_number]) / "100") * $RatioConvertion) $toposX = $ARRAY[3][$array_x_number] $toposY = $ARRAY[4][$array_x_number] $radToDeg = -180 / $pi $result = ATan(($posy1 - $posy2) / ($posx2 - $posx1)) * $radToDeg If $posx2 < $posx1 Then If $result < 0 Then $result = 270 + $result Else $result = 270 + $result EndIf EndIf If $posx2 >= $posx1 Then If $result < 0 Then $result = 90 + $result Else $result = 90 + $result EndIf EndIf $result = $result - 360 $result = Floor(($result - $result) - $result) If $result = "360" Then $result = 0 EndFunc ;==>Rotationfix ;;============================================================================== = ;;Select XML; ;;============================================================================== = Func SelectOpenXML() $xmlFile = FileOpenDialog("Open XML", @ScriptDir, "XML (*.XML)", 1) If @error Then MsgBox(4096, "Thermo Prime - File Open", "No file chosen, you must select a profile to be able to run the bot!") Else _FileWriteLog(@ScriptDir & $logname, "XML File Selected; " & $xmlFile) If $test_pause = 0 Then $oXSD = _XMLFileOpen ($xmlFile, "") ;If @error Or $oXSD < 1 Then ; MsgBox(0, "Error", "There was an error opening the file " & $xmlFile) ; $oXSD = 0 ; _FileWriteLog(@ScriptDir & $logname,"Error Opning XMLFile - Ending Session") ; _FileWriteLog(@ScriptDir & $logname,":::End Of Session:::") ; Exit ;EndIf $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWDATA" $ARRAYX = _XMLGetNodeCount ($szXPath1 & "/*") $ARRAYY = _XMLGetNodeCount ($szXPath2 & "/*") $additional = $ARRAYY ;ReDim $ARRAY[$ARRAYX][$ARRAYY+1] If $ARRAYY < 0 Then $ARRAYY = 0 TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1) $aNodeName1 = _XMLGetChildNodes ($szXPath1) $aNodeName2 = _XMLGetChildNodes ($szXPath2) If $aNodeName1 <> -1 Then ;LOOP THROUGH //DATAPACKET/METADATA/FIELDS For $find = 1 To $aNodeName1[0] _XMLGetAllAttrib ($szXPath1 & "/*" & '[' & $find & ']', $aAttrName1, $aAttrVal1) ;ADD TO ARRAY ;$ARRAY[$find-1][0] = $aAttrVal1[0] ;LOOP THROUGH //DATAPACKET/ROWDATA ;For $X=1 To $aNodeName2[0] ; _XMLGetAllAttrib($szXPath2 & "/*" & '[' & $X & ']',$aAttrName2,$aAttrVal2) ;;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW ; If $find <= Ubound($aAttrName2) Then ; $ARRAY[$find-1][$X] = $aAttrVal2[$find-1] ; EndIf ;Next Next Else MsgBox(0, "Error:", "No nodes found for " & $szXPath1) EndIf ;$arraynumber = ($ARRAY[2][$ARRAYY]) $array_x_number = 0;$arraynumber $oXSD = 0 EndIf Return EndIf Return EndFunc ;==>SelectOpenXML ;;============================================================================== = ;;Create New XML; ;;============================================================================== = Func NewProfile() $newprfname = InputBox("Thermo Prime - New Profile", "Enter Profile Name.", "", "", 20, 20) If @error Then MsgBox(4096, "Thermo Prime - New Profile", "No Profile Created") Else $newprfname = ($newprfname & ".xml") If FileExists($newprfname) Then $answer1 = MsgBox(4, "Thermo Prime - New Profile", "A profile with that name; " & $newprfname & " does allready exists. Do you want to overwrite this file?") If $answer1 = 6 Then FileDelete($newprfname) Else Return EndIf EndIf _FileCreate($newprfname) $file = FileOpen($newprfname, 1) FileWriteLine($newprfname, "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>") FileWriteLine($newprfname, "<DATAPACKET Version=""2.0"">") FileWriteLine($newprfname, " <METADATA>") FileWriteLine($newprfname, " <FIELDS>") FileWriteLine($newprfname, " <FIELD attrname=""Continent"" fieldtype=""i4""/>") FileWriteLine($newprfname, " <FIELD attrname=""Zone"" fieldtype=""i4""/>") FileWriteLine($newprfname, " <FIELD attrname=""Nr"" fieldtype=""i4""/>") FileWriteLine($newprfname, " <FIELD attrname=""posX"" fieldtype=""i4""/>") FileWriteLine($newprfname, " <FIELD attrname=""posY"" fieldtype=""i4""/>") FileWriteLine($newprfname, " <FIELD attrname=""Comment"" fieldtype=""string"" WIDTH=""20""/>") FileWriteLine($newprfname, " </FIELDS>") FileWriteLine($newprfname, " <PARAMS/>") FileWriteLine($newprfname, " </METADATA>") FileWriteLine($newprfname, " <ROWDATA>") FileWriteLine($newprfname, " </ROWDATA>") FileWriteLine($newprfname, " <ROWGHOST>") FileWriteLine($newprfname, " </ROWGHOST>") FileWriteLine($newprfname, "</DATAPACKET>") FileClose($newprfname) Return EndIf EndFunc ;==>NewProfile ;;============================================================================== = ;;SaveDestination; ;;============================================================================== = Func SaveDestination() If $test_pause = 0 Then $toposX = $CurrentLocX $toposY = $CurrentLocY $oXSD = _XMLFileOpen ($xmlFile, "") If @error Or $oXSD < 1 Then MsgBox(0, "Error", "There was an error opening the file " & $xmlFile) $oXSD = 0 _FileWriteLog(@ScriptDir & $logname, "Error Opening XMLFile- Ending Session") _FileWriteLog(@ScriptDir & $logname, ":::End Of Session:::") Exit EndIf $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWDATA" $ARRAYX = _XMLGetNodeCount ($szXPath1 & "/*") $ARRAYY = _XMLGetNodeCount ($szXPath2 & "/*") If $ARRAYY = -1 Then $ARRAYY = 0 EndIf $additional = $ARRAYY ReDim $ARRAY[$ARRAYX][$ARRAYY + 1] TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1) $aNodeName1 = _XMLGetChildNodes ($szXPath1) $aNodeName2 = _XMLGetChildNodes ($szXPath2) If $aNodeName1 <> -2 Then ;LOOP THROUGH //DATAPACKET/METADATA/FIELDS For $find = 1 To $aNodeName1[0] _XMLGetAllAttrib ($szXPath1 & "/*" & '[' & $find & ']', $aAttrName1, $aAttrVal1) ;ADD TO ARRAY $ARRAY[$find - 1][0] = $aAttrVal1[0] ;LOOP THROUGH //DATAPACKET/ROWDATA If $ARRAYY > 0 Then For $X = 1 To $aNodeName2[0] _XMLGetAllAttrib ($szXPath2 & "/*" & '[' & $X & ']', $aAttrName2, $aAttrVal2) ;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW If $find <= UBound($aAttrName2) Then $ARRAY[$find - 1][$X] = $aAttrVal2[$find - 1] EndIf Next EndIf Next Else MsgBox(0, "Error:", "No nodes found for " & $szXPath1) EndIf $arraynumber = ($ARRAY[2][$ARRAYY]) $array_x_number = 0;$arraynumber ;MsgBox(0, "hej", $ARRAY[2][$ARRAYY]);[$additional]) $oXSD = 0 $currentZone = 1 $numb = $ARRAY[2][$additional] $CHILDVALUES = _ArrayCreate($continentID, $currentZone, ($numb + 1), $toposX, $toposY, "For Testing") _XMLCreateChildWAttr ("//DATAPACKET/ROWDATA[1]", "ROW", $CHILDATTRIBS, $CHILDVALUES);by node index If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("Waypoint - " & ($numb + 1) & " pos: " & $toposX & "." & $toposY) _FileWriteLog(@ScriptDir & $logname, "Waypoint - " & ($numb + 1) & ". Saves pos: " & $toposX & "." & $toposY) Sleep(20) Send("^v") Sleep(200) Send("{Enter}") EndIf EndIf Return EndFunc ;==>SaveDestination ;;============================================================================== = ;;SaveDestinationGhost; ;;============================================================================== = Func SaveDestination_Ghost() If $test_pause = 0 Then $toposX = $CurrentLocX $toposY = $CurrentLocY $oXSD = _XMLFileOpen ($xmlFile, "") If @error Or $oXSD < 1 Then MsgBox(0, "Error", "There was an error opening the file " & $xmlFile) $oXSD = 0 _FileWriteLog(@ScriptDir & $logname, "Error Opening XMLFile- Ending Session") _FileWriteLog(@ScriptDir & $logname, ":::End Of Session:::") Exit EndIf $szXPath1 = "//DATAPACKET/METADATA/FIELDS" $szXPath2 = "//DATAPACKET/ROWGHOST" $ARRAYX = _XMLGetNodeCount ($szXPath1 & "/*") $ARRAYY = _XMLGetNodeCount ($szXPath2 & "/*") If $ARRAYY = -1 Then $ARRAYY = 0 EndIf $additional = $ARRAYY ReDim $ARRAY[$ARRAYX][$ARRAYY + 1] TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1) $aNodeName1 = _XMLGetChildNodes ($szXPath1) $aNodeName2 = _XMLGetChildNodes ($szXPath2) If $aNodeName1 <> -2 Then ;LOOP THROUGH //DATAPACKET/METADATA/FIELDS For $find = 1 To $aNodeName1[0] _XMLGetAllAttrib ($szXPath1 & "/*" & '[' & $find & ']', $aAttrName1, $aAttrVal1) ;ADD TO ARRAY $ARRAY[$find - 1][0] = $aAttrVal1[0] ;LOOP THROUGH //DATAPACKET/ROWDATA If $ARRAYY > 0 Then For $X = 1 To $aNodeName2[0] _XMLGetAllAttrib ($szXPath2 & "/*" & '[' & $X & ']', $aAttrName2, $aAttrVal2) ;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW If $find <= UBound($aAttrName2) Then $ARRAY[$find - 1][$X] = $aAttrVal2[$find - 1] EndIf Next EndIf Next Else MsgBox(0, "Error:", "No nodes found for " & $szXPath1) EndIf $arraynumber = ($ARRAY[2][$ARRAYY]) $array_x_number = 0;$arraynumber ;MsgBox(0, "hej", $ARRAY[2][$ARRAYY]);[$additional]) $oXSD = 0 $currentZone = 1 $numb = $ARRAY[2][$additional] $CHILDVALUES = _ArrayCreate($continentID, $currentZone, ($numb + 1), $toposX, $toposY, "For Testing") _XMLCreateChildWAttr ("//DATAPACKET/ROWGHOST[1]", "ROWGHOST", $CHILDATTRIBS, $CHILDVALUES);by node index If $debug = 1 Then Send("{Enter}") Sleep(200) ClipPut("Waypoint - " & ($numb + 1) & " pos: " & $toposX & "." & $toposY) _FileWriteLog(@ScriptDir & $logname, "Waypoint - " & ($numb + 1) & ". Saves pos: " & $toposX & "." & $toposY) Sleep(20) Send("^v") Sleep(200) Send("{Enter}") EndIf EndIf Return EndFunc ;==>SaveDestination_Ghost ;;============================================================================== = ;;MouseMovePlus (thx to Oxin8 for this code) ;;============================================================================== = Func _MouseMovePlus($X, $Y, $absolute = 0) Local $MOUSEEVENTF_MOVE = 1 Local $MOUSEEVENTF_ABSOLUTE = 32768 DllCall("user32.dll", "none", "mouse_event", _ "long", $MOUSEEVENTF_MOVE + ($absolute * $MOUSEEVENTF_ABSOLUTE), _ "long", $X, _ "long", $Y, _ "long", 0, _ "long", 0) EndFunc ;==>_MouseMovePlus ;;============================================================================== = ;;Terminate; ;;============================================================================== = Func terminate() WinSetOnTop($App_Title, "", 0) Send("{w}") If $MouseDown = 1 Then MouseUp("right") EndIf MsgBox(1, "Info", "Terminate") _FileWriteLog(@ScriptDir & $logname, "User Termination - Ending Session") _FileWriteLog(@ScriptDir & $logname, ":::End Of Session:::") Exit 0 EndFunc ;==>terminate