Anzahl der Beiträge : 6 Punkte : 25 Bewertungssystem : 0 Anmeldedatum : 24.04.10 Alter : 26
Thema: GUI Login/Register System Mo Apr 26, 2010 2:56 pm
Hallo Liebe Community ,
da ich mir die ganze Zeit ansehen musste wie alle am Simplen GUI scheitern & damit versuchten ein Login & Register System auf die Beine zu stellen erkläre nun einmal.
Als erstes beziehen wir Dini ein , das könnt ihr auf www.draco-blue.net runterladen , wir können auch Raw also den normalen Dateityp nutzen aber das wäre zu unübersichtlich & raubt uns nur unsere Zeit , zudem ist es für einen Anfänger eher ungeeignet #include <dini>
Ihr beginnt damit eine normale Struktur aufzubauen, mit allen Daten die ihr braucht
nun möchten wir das ganze auch nutzen können für die Gesamten Spieler , man könnte das natürlich gleich alles mit MAX_PLAYERS hinklatschen aber so macht ihr alles nur Unordentlicher & unübersichtlicher ( vom Ressourcen verbraucht mal ganz abgesehen )
Code:
new Spieler[MAX_PLAYERS][spieler_daten];
Wie ihr seht die Variable ,,Spieler´´ mit 200 Slots & 200x den gleichen Inhalt also spieler_daten , warum mache ich das so ? Nun ja so wird das ganze noch einmal ein Stück besser da man sich keine Zahlen oder extra Variablen merken muss & zudem ist das ganze Strukturierter aufgebaut.
Als nächstes geht ihr erst einmal in die Klasse/Callback ,,OnPlayerDisconnect´´ & löscht die Daten bzw. setzt sie zurück damit nicht Später ein anderer Spieler eure Daten hat, außerdem Speichern wir alle wichtigen Dinge vorher, wir müssen aber auch abfragen ob der Spieler schon eingeloggt war damit nicht irgendwelche Daten gespeichert werden.
So fürs erste war es das , nun geht es weiter mit den Dialog ID's , ihr definiert nun oben die Dialog ID's , ihr könnt natürlich auch gleich irgendwelche Zahlen nehmen aber so verliert man die Übersicht nicht & weiß welchen Dialog man schon belegt hat.
Code:
#define DIALOG_LOGIN 3 #define DIALOG_REG 4
Das tut ihr am besten in den Kopf des Skripts wo die von außerhalb einbezogenen Inc Dateien auch ihren Platz finden. So also unser Login Dialog hat ID 3 & die 4 bekommt der Dialog für die Registrierung.
Fahren wir weiter fort mit dem erkennen des Accounts & abfragen dazu gehen wir in OnPlayerConnect & fragen ab ob die Datei mit unserem Nickname existiert.
So nun Suchen wir ,,OnDialogResponse´´ auf Fragen die Dialog Daten ab.
Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { new pname[MAX_PLAYERS],accFormat[128]; GetPlayerName(playerid,pname,sizeof pname); format(accFormat,sizeof accFormat,"%s.datei",pname); if(response) { switch(dialogid) // dialogid auswählen { case DIALOG_LOGIN: // ID Login { if(!strlen(inputtext)) { ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter"); return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!"); } if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden { Spieler[playerid][wanted] = dini_Int(accFormat,"wanted"); Spieler[playerid][skin] = dini_Int(accFormat,"skin"); Spieler[playerid][lastx] = dini_Float(accFormat,"lastx"); Spieler[playerid][lasty] = dini_Float(accFormat,"lasty"); Spieler[playerid][lastz] = dini_Float(accFormat,"lastz"); Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt."); } else { ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter"); SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!"); } } case DIALOG_REG: // ID Registrieren { if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts { ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter"); return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!"); } dini_Create(accFormat); dini_Set(accFormat,"Passwort",inputtext); Spieler[playerid][eingeloggt] = 1; SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt."); } } } else { switch(dialogid) { case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter"); case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter"); } } return 1; }
So wie man sieht Frage ich ab ob der Button 1 genutzt wird ,,if(response)´´ und fahre fort , dann wechsele ich zur richtigen Dialog ID und handle dementsprechend wie in einem normalen Login/Register System, der Unterschied ist dabei das wir nicht abfragen müssen ob der Spieler schon eingeloggt oder Registriert ist , denn der Spieler kann die Dialoge ja nicht Manuell abrufen wann er möchte denn das wird bei OnPlayerConnect erledigt.
Zum Schluss muss ich noch sagen , das ihr die Daten wir Wanted noch im Spieler übernehmen bzw. könnt ihr eure Variable nehmen oder sie setzen wie Beispielsweise mi SetPlayerWantedLevel oder die Position bei OnPlayerSpawn , hier mal eben gemacht , also wie gesagt einfach selber übernehmen , hier geht es nur um die Verbindung zwischen GUI & Interaktiven Funktionen etc.
Code:
new pname[MAX_PLAYERS],accFormat[128]; GetPlayerName(playerid,pname,sizeof pname); format(accFormat,sizeof accFormat,"%s.datei",pname); if(dini_Isset(accFormat,"lastx")) { SetPlayerPos(playerid,Spieler[playerid][lastx],Spieler[playerid][lasty],Spieler[playerid][lastz]); }