GTASAMultiplayer
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.
GTASAMultiplayer

San Andreas Multiplayer - Deutsches Forum
 
StartseiteGalerieNeueste BilderSuchenAnmeldenLogin

 

 GUI Login/Register System

Nach unten 
AutorNachricht
Killerboy

Killerboy


Anzahl der Beiträge : 6
Punkte : 25
Bewertungssystem : 0
Anmeldedatum : 24.04.10
Alter : 26

GUI Login/Register System Empty
BeitragThema: GUI Login/Register System   GUI Login/Register System EmptyMo 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


Code:
enum spieler_daten
{
wanted,
skin,
Float:lastx,Float:lasty,Float:lastz,
eingeloggt
}

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.




Code:
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(fexist(accFormat) && Spieler[playerid][eingeloggt])
{
dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
dini_FloatSet(accFormat,"lastx",Spieler[playerid][lastx]);
dini_FloatSet(accFormat,"lasty",Spieler[playerid][lasty]);
dini_FloatSet(accFormat,"lastz",Spieler[playerid][lastz]);
}
Spieler[playerid][eingeloggt] = 0;
Spieler[playerid][wanted] = 0;
Spieler[playerid][skin] = 0;
Spieler[playerid][lastx] = (0.0);
Spieler[playerid][lasty] = (0.0);
Spieler[playerid][lastz] = (0.0);

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.


Code:
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(fexist(accFormat))
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
}
else
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
}

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]);
}

MFG:Killerboy
Von:Killerboy
Nach oben Nach unten
http://gtasamultiplayer.liberte.tv
 
GUI Login/Register System
Nach oben 
Seite 1 von 1

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
GTASAMultiplayer :: Tutorials-
Gehe zu: