Im heutigen Tutorial werden wir mit Hilfe des Wissens was wir bisher erworben haben dieses Benutzerinterface erstellen.
[Only registered and activated users can see links. Click Here To Register...]
Wichtig:
Name für das HP-Eingabefeld = txtHP
name für das Aufsammeltastenfeld = txtASK
name für das Schlaftastenfeld = txtSK
name für die minHP = txtMinHP
name für die maxHP = txtMaxHP
Für die Checkbox(Das zu Anhaken) = chkAufsammeln
der StartButton = cmdSS
der Pausebutton = cmdPause
Legt nun das Benutzerinterface so wie abgebildet an!
Nun lassen wir uns(wieim letzten Tutorial gelernt) den Code generieren.
Wir erhalten in etwas folgendes:
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("NetMax's TutorialBot", 259, 403, 192, 124)
$grpAufsammeln = GUICtrlCreateGroup("Aufsammeln", 16, 88, 233, 65)
$chkAufsammeln = GUICtrlCreateCheckbox("Aufsammeln", 88, 128, 97, 17)
$Label2 = GUICtrlCreateLabel("Aufsammeltaste", 32, 104, 78, 17)
$txtASK = GUICtrlCreateInput("", 120, 104, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grpAdd = GUICtrlCreateGroup("Adressen", 16, 24, 233, 57)
$Label1 = GUICtrlCreateLabel("HP", 32, 56, 19, 17)
$txtHP = GUICtrlCreateInput("", 88, 48, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grpSteuerung = GUICtrlCreateGroup("Steuerung", 16, 304, 233, 81)
$cmdSS = GUICtrlCreateButton("Start", 48, 320, 179, 25, 0)
$cmdPause = GUICtrlCreateButton("Pause", 48, 348, 179, 25, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Sonstige = GUICtrlCreateGroup("Sonstige Tasten", 16, 152, 233, 57)
$Label3 = GUICtrlCreateLabel("Schlaf-Taste", 32, 176, 64, 17)
$txtSK = GUICtrlCreateInput("", 120, 174, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group1 = GUICtrlCreateGroup("Sonstige Einstellungen", 16, 216, 233, 89)
$Label4 = GUICtrlCreateLabel("MinHP", 32, 240, 36, 17)
$Label5 = GUICtrlCreateLabel("MaxHP", 32, 274, 39, 17)
$txtMinHP = GUICtrlCreateInput("", 99, 238, 121, 21)
$txtMaxHP = GUICtrlCreateInput("", 97, 271, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Nun wollen wir die Aktionen für die Tasten definieren. Wir sehen eine While-Schleife.
$nMsg = GUIGetMsg() fragt ab ob sich etwas am formular geändert hat.
Das Switch unterscheidet die einzelnen Veränderungen.
Standartmäßig gibt es
Code:
Case $GUI_EVENT_CLOSE
Exit
Nun wollen wir eine Aktion für unseren Startknopf definieren. Dieser heißt cmdSS
Wir fügen ein Case hinzu:
Code:
Case $cmdSS
startstop()
Die Funktion startstop() werden wir später definieren
Nun definieren wir auch noch eine Aktion für den Pause-Knopf(cmdPause):
Code:
Case $cmdPause
pause()
Der fertige Code mit dem Rohbau der Funktionen startstop() und TogglePause() sollte so aussehen:
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
...
#EndRegion ### END Koda GUI section ###
func startstop()
;die StartStopFUnktion
EndFunc
func TogglePause()
;die PauseFUnktion
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $cmdSS
startstop()
Case $cmdPause
TogglePause()
EndSwitch
WEnd
Da wir das Rad nicht jedesmal neuerfinden müssen nehmen wir einfach die Pause Funktion aus LEKTION VI.
Zur erinnerung folgende Code-Teile sind für die Pause funktion wichtig:
Code:
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
Func TogglePause()
$Paused = Not $Paused
While $Paused
Sleep(100)
WEnd
EndFunc
Diese Funktion bauen wir jetzt gleih in unseren Code ein:
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("NetMax's TutorialBot", 259, 340, 192, 124)
$grpAufsammeln = GUICtrlCreateGroup("Aufsammeln", 16, 104, 233, 105)
$chkAufsammeln = GUICtrlCreateCheckbox("Aufsammeln", 88, 176, 97, 17)
$Label2 = GUICtrlCreateLabel("Aufsammeltaste", 32, 136, 78, 17)
$txtASK = GUICtrlCreateInput("", 120, 136, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grpAdd = GUICtrlCreateGroup("Adressen", 16, 24, 233, 73)
$Label1 = GUICtrlCreateLabel("HP", 32, 56, 19, 17)
$txtHP = GUICtrlCreateInput("", 88, 48, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grpSteuerung = GUICtrlCreateGroup("Steuerung", 16, 216, 233, 105)
$cmdSS = GUICtrlCreateButton("Start", 48, 240, 179, 25, 0)
$cmdPause = GUICtrlCreateButton("Pause", 48, 268, 179, 25, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Sonstige = GUICtrlCreateGroup("Sonstige Tasten", 16, 152, 233, 57)
$Label3 = GUICtrlCreateLabel("Schlaf-Taste", 32, 176, 64, 17)
$txtSK = GUICtrlCreateInput("", 120, 174, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group1 = GUICtrlCreateGroup("Sonstige Einstellungen", 16, 216, 233, 89)
$Label4 = GUICtrlCreateLabel("MinHP", 32, 240, 36, 17)
$Label5 = GUICtrlCreateLabel("MaxHP", 32, 274, 39, 17)
$txtMinHP = GUICtrlCreateInput("", 99, 238, 121, 21)
$txtMaxHP = GUICtrlCreateInput("", 97, 271, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
func startstop()
;die StartStopFUnktion
EndFunc
Func TogglePause()
$Paused = Not $Paused
While $Paused
Sleep(100)
WEnd
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $cmdSS
startstop()
Case $cmdPause
TogglePause()
EndSwitch
WEnd
Wir wollen einen Bot machen der sich hinsetzt wenn zu wenig HP vorhanden sind. Dann sitzen bleibt bis wieder die Maximalen HP erreicht sind. Zwischendurch greift er an und sammelt auf. Die HP Zahl lesen wir wie in LEKTION VII aus dem Arbeitspeicher aus.
Was brauchen wir?
4 neue Funktionen:
doSleep() --> Setzt sich hin und wartet bis HP wieder voll. Steht dannach auf.
attack() --> Drückt den Attack Key
loot() --> Drückt die Aufsammeltaste
checkHP() --> Ließt die aktuellen HP aus dem Arbeitsspeicher und gibt sie Zurück
und wir müssen das Programm erweitern:
checkHP():
Code:
func checkHP()
$SPA = "0x27A839C" ; Die Speicheradresse(mit CE suchen)
$pid = WinGetProcess($windowname) ; hier besorge ich die PID
; process öffnen
$ProcessInformation = _MemoryOpen($pid)
$Number = _MemoryRead($SPA, $ProcessInformation) ;Lesen
_MemoryClose($ProcessInformation)
return $Number ; Wert zurückgeben
EndFunc
doSleep():
Code:
func doSleep()
ControlSend($windowname, '', '', $sk) ;Schlaftaste drücken
while(checkHP()<$maxHP) ; Schauen ob aktuelle HP < maxHP sind
sleep(500) ; Warten
WEnd
ControlSend($windowname, '', '', $sk) ; Wiederaufstehen
EndFunc
attack und loot senden jeweils nur eine Taste:
Code:
func loot()
ControlSend($windowname, '', '', $lk)
EndFunc
func attack()
ControlSend($windowname, '', '', $atk)
EndFunc
Das hauptprogramm:
Code:
if $running == True Then ; $running müssen wir in der Funktion startstop() setzen
if(checkHP()<$minHP) Then ; wir schauen ob die Hp kleiner als die MinimumHP sind --> wenn ja schlafen
doSleep()
EndIf
attack() ;--> Angreifen
loot() ; --> Aufsammeln
EndIf
Die veränderte startstop Funktion:
Code:
$running = false
func startstop()
$running = NOT $running
EndFunc
Das ganze sieht nun so aus:
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
#Region ### START Koda GUI section ### Form=
...gekürzt...
#EndRegion ### END Koda GUI section ###
func startstop()
$running = NOT $running
EndFunc
Func TogglePause()
$Paused = Not $Paused
While $Paused
Sleep(100)
WEnd
EndFunc
func checkHP()
$SPA = "0x27A839C"
$pid = WinGetProcess($windowname) ; hier besorge ich die PID
;open the process
$ProcessInformation = _MemoryOpen($pid)
$Number = _MemoryRead($SPA, $ProcessInformation)
_MemoryClose($ProcessInformation)
return $Number
EndFunc
func loot()
ControlSend($windowname, '', '', $lk)
EndFunc
func attack()
ControlSend($windowname, '', '', $atk)
EndFunc
func doSleep()
ControlSend($windowname, '', '', $sk)
while(checkHP()<$maxHP)
sleep(500)
WEnd
ControlSend($windowname, '', '', $sk)
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $cmdSS
startstop()
Case $cmdPause
TogglePause()
EndSwitch
if $running == True Then
if(checkHP()<$minHP) Then
doSleep()
EndIf
attack()
loot()
EndIf
WEnd