[AutoIt] Register/Login/Level/Rasse speichern...

12/10/2013 22:54 Claiver#1
Heute will ich euch mal zeigen wie man mit AutoIt Registrieren Login Level und Rasse speichern kann...

Als erstes müssen wir die GUI fürs das Register erstellen...
Code:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Check", 285, 134, 192, 124)
GUISetBkColor(0x00FF00)
$Input1 = GUICtrlCreateInput("", 64, 16, 121, 21)
$Name = GUICtrlCreateLabel("Name:", 8, 16, 35, 17)
$Label1 = GUICtrlCreateLabel("Passwort:", 8, 40, 50, 17)
$Input2 = GUICtrlCreateInput("", 64, 40, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
$Label5 = GUICtrlCreateLabel("Rasse:", 8, 72, 37, 17)
$Button1 = GUICtrlCreateButton("Save",8,97,77,27)
$Combo1 = GUICtrlCreateCombo("Ninja", 64, 67, 97, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Sura|Krieger|Schmane")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
        EndSwitch
WEnd
Soo...
Jetzt bestimmen wir den Button "Check"...

Code:
Case $Button1
Da muss dann rein, dass er checkt was in den Inputs steht...

Code:
$Name_Check = GUICtrlRead($Input1)
	  $PW_Check = GUICtrlRead($Input2)
Jetzt müssen wir checken ob in $Input1 und $Input2 etwas steht...

Code:
If $Name_Check = "" Or $PW_Check = "" Then

         Else

         EndIf
Soo... Wenn nichts drinnen steht soll nur eine MsgBox geschickt werden...

Code:
If $Name_Check = "" Or $PW_Check = "" Then
			MsgBox(0,"Registrieren","Du musst alle Felder ausfüllen um dich anzumelden!")
			GUICtrlSetData($Name_Check,"")
			GUICtrlSetData($PW_Check,"")
		Else

                EndIf
Jetzt wenn beide ausgefüllt sind, muss es gespeichert werden... Das geht dann mit IniWrite...

Code:
If $Name_Check = "" Or $PW_Check = "" Then
			MsgBox(0,"Registrieren","Du musst alle Felder ausfüllen um dich anzumelden!")
			GUICtrlSetData($Name_Check,"")
			GUICtrlSetData($PW_Check,"")
		Else
		IniWrite(@ScriptDir & "\Log\" & $Name_Check & ".ini","","Name",$Name_Check)
		IniWrite(@ScriptDir & "\Log\" & $Name_Check & ".ini","","Passwort",$PW_Check)
		IniWrite(@ScriptDir & "\Log\" & $Name_Check & ".ini","","Level","1")
		$Rasse = GUICtrlRead($Combo1)
		IniWrite(@ScriptDir & "\Log\" & $Name_Check & ".ini","","Rasse",$Rasse)
		MsgBox(0,"Registrieren","Erfolgreich registriert!")
		EndIf
@ScriptDir ist einfach der Pfad wo das Script drin ist.. und dann wird einfach die .ini Datei in einen Ordner danach eingespeichert der bei mir "Log" heißt

So...
Jetzt haben wir bis jetzt das hier...


Jetzt müssen wir uns einloggen können... Und unser Level auch ändern wie ein Spiel halt...
Das machen wir in einem anderen Script...

Als erstes muss man den Namen und das Passwort abfragen...

Code:
$Name = InputBox("Login","Gib deinen Loginnamen ein!")
$Passwort = InputBox("Login","Gib dein Passwort ein!")
Dann soll er rauslesen was darin steht, aber nur das was wir brauchen... In diesem Fall Name Passwort Level und Rasse...

Code:
$Ende1 = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Passwort","")
$Ende = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Name","")
$Ende2 = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Level","")
$Ende5 = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Rasse","")

Jetzt muss er gucken ob der Name und das Passwort richtig ist...Wenn Ja dann soll das Spiel geöffnet werden, wenn nicht dann nicht...

Code:
$Ende1 = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Passwort","")
$Ende = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Name","")
If $Passwort = $Ende1 And $Name = $Ende Then
$Ende2 = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Level","")
$Ende5 = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Rasse","")
MsgBox(4096,"Logbuch","Name = " & $Ende & @CRLF & "Passwort = " & $Ende1 & @CRLF & "Level = " & $Ende2 & @CRLF & "Rasse = " & $Ende5)
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate($Ende, 347, 50, 192, 124)
$Button1 = GUICtrlCreateButton("Leveln", 8, 8, 97, 33)
$Label1 = GUICtrlCreateLabel("Level: " & $Ende2, 128, 0, 120, 41)
GUICtrlSetFont(-1, 23, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$Level = IniRead(@ScriptDir & "\Log\" & $Name & ".ini","","Level","")
			$Level = $Level + 1
			GUICtrlSetData($Label1,"Level: " & $Level)
			IniWrite(@ScriptDir & "\Log\" & $Name & ".ini","","Level",$Level)
	EndSwitch
WEnd
Else
	MsgBox(4096,"Login","Name oder Passwort falsch")
	Exit
EndIf
Und wenn man den Button klickt wird man halt Lvl up :D
12/11/2013 15:07 alpines#2
Du scheinst ja seit knapper Zeit etwas zu releasen, das hab ich bisher auch mitverfolgt und rate dir deine Projekte nicht immer so halbherzig anzugehen.
Warum sollte man seine Sachen so abspeichern? Ini-Datei öffnen und Level auf 9001 setzen und schon hat man dein Spiel ausgetrickst.
Du erklärst eigentlich nur wie man Einstellungen speichern kann und mehr ist das auch glaube ich nicht.
Wenn du Daten richtig speichern möchtest, dann verschlüsselt man sie -sofern die auf dem PC sind- oder speichert sie auf einem FTP-Server oder ähnliches, Hauptsache man kommt so schnell nicht dran.

Desweiteren rate ich dir (ist zwar Geschmackssache aber trotzdem) dir die ungarische Notation für AutoIt anzugewöhnen.
Code:
$Level
sagt weniger als
Code:
$iLevel
aus oder
Code:
$Name
weniger als
Code:
$sName
da man schon im Präfix den Typ der Variable erkennt.
12/12/2013 08:23 Shadow992#3
Nur etwas allgemeines:
Ungarische Notation bei Sprachen, die den Variablen keine festen Typen zuweisen halte ich für sehr fraglich. Soviel ich weiß handelt AutoIt sogar intern alles als String (abgesehen von arrays logischerweise) und wandelt je nach Bedarf um, das heißt korrekt wäre es nur wirklich wenn man wirklich immer $s... schreibt.

Also von den komischen Fixen halte ich sehr wenig, zumindest bei Scriptsprachen, die nicht typfest sind. Dasselbe gilt auch bei PHP.

Was sinnvoll sein kann ist lokal und global zu unterscheiden und auch zwischen array und standard. Ansonsten würde ich dazu raten die Variablennamen nicht zu lang zu machen aber lang genug, damit sich ihr Sinn nach dem durchlesen wieder so gut wie von alleine ergibt.

Schlecht wäre damit also:
Global $das_standard_bild_das_in_die_gui_geladen

Besser:
Global $gDefaultGuiPic

Aber auch nicht viel besser ist:
Global $Pic

Das sagt zwar aus, dass es ein Bild ist, aber beim erneuten Durchlesen nach ein paar Wochen sieht man nicht mehr auf den ersten Blick, was für ein Bild das ist bzw. wo es benutzt wird.
12/12/2013 12:58 alpines#4
Man sollte aber schon wissen worum es sich handelt und wenn man mehrere Zeilen Code hat dann verliert man schon leicht die Übersicht was in der Variable enthalten ist, dann helfen auch Präfixe. Ich hab mir das angewöhnt Präfixe zu nutzen auch wenn es wenige Zeilen Code sind.
Das ist aber eine Sache des Programmierstils und steht jedem natürlich offen.