Moin zusammen, ich möchte euch ein Tutorial über Register & Login System zeigen.
Also ich fange mal an, dies ist kein Copy & Past.
Ganz oben machen wir erst einmal:
#include <a_samp>
#include <dini>
Was bedeutet das eigentlich? Mit #include <Name>, Name ist ggf. a_samp, fügen wir einen Script rein, dies Spart Zeit und Platz.
So, danach kommt
#define DIALOG_LOGIN 1
#define DIALOG_REG 2
Was bedeutet #define ? Das ist einfach zusagen, es ist ein Platzhalter. (Siehe: Platzhalter )
Nun kommen wir zum Enum ich mache den Standart Enum:
enum spieler_daten
{
skin,
eingeloggt,
Admin,
Premium,
Geld,
Score
}
new Spieler[MAX_PLAYERS][spieler_daten];
Nehmen wir uns den Score vor, der Score dort bedeutet das in der Ini Datei eine Textzeile Score=0 heißen wird. Dazu aber später mehr...
"new Spieler[MAX_PLAYERS][spieler_daten];" Muss immer unter dem Enum! Sonst Fehler ! Siehe Beitrag weiter unten für Infos xD
Bei "public OnPlayerConnect(playerid)" schreiben wir folgendes:
new string[64];
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"German/Spieler/%s.ini",pname); //Prüft ob Datei schon Existiert
if(fexist(accFormat))
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Dein Account wurde gefunden! Du kannst dich nun Einloggen.","Abbrechen","Weiter");
format(string, sizeof(string), "Herzlich Willkommen %s!", pname) ;
}
else // Wenn nicht schreibt er:
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","{FFFFFF}Dein Account wurde {CC0000}nicht{FFFFFF} gefunden. Wir freuen uns das du unseren\n Server gefunden hast. Bitte gib dein Passwort ein!","Abbrechen","Weiter");
GivePlayerMoney(playerid, 15000); // GGF. ANPASSEN !!!!
}
Nun sind wir auch schon bei "public OnPlayerDisconnect(playerid, reason)"
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"German/Spieler/%s.ini",pname);//Öffnet seine Datei
if(fexist(accFormat) && Spieler[playerid][eingeloggt])
{//Speichert alles<!>
dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
dini_IntSet(accFormat,"Premium",Spieler[playerid][Premium]);
dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
}
Spieler[playerid][eingeloggt] = 0;// Loggt den Spieler aus der Dini aus
Jetzt wird es einwenig Schwieriger!
Wir sind jetzt bei "public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])"
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"German/Spieler/%s.ini",pname);//Sucht Spieler's Datei
if(response)
{
switch(dialogid)
{
case DIALOG_LOGIN:// Wenn gefunden:
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Dein Account wurde gefunden! Du kannst dich nun Einloggen.","Abbrechen","Weiter");
return SendClientMessage(playerid,0xFFFFFFFF,"Du hast kein Passwort angegeben!");// Keine Passwort eingabe
}
if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)//Wenn man erfolgreich Eingeloggt ist...
{//Lädt alles auser der Dini
Spieler[playerid][skin] = dini_Int(accFormat,"skin");
Spieler[playerid][eingeloggt] = 1;
Spieler[playerid][Premium] = dini_Int(accFormat, "Premium");
SetPlayerScore(playerid, dini_Int(accFormat, "Score"));
GivePlayerMoney(playerid, dini_Int(accFormat, "Geld")-GetPlayerMoney(playerid));
Spieler[playerid][Admin] = dini_Int(accFormat, "Admin");
SendClientMessage(playerid,0xFFFFFFFF,"Du hast dich {CC0000}Eingeloggt{FFFFFF}.");
}
else//Wenn das Passwort falsch ist
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Dein Account wurde gefunden! Du kannst dich nun Einloggen.","Abbrechen","Weiter");
SendClientMessage(playerid,0xFFFFFFFF,"Du hast ein falsches Passwort eingegeben!");
}
}
case DIALOG_REG:// Datei nicht gefunden
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
return SendClientMessage(playerid,0xFFFFFFFF,"Dein Passwort ist zukurz!");
}// Erstellt die Ini Datei für den Spieler mit allem auf 0
dini_Create(accFormat);
dini_Set(accFormat,"Passwort",inputtext);
dini_IntSet(accFormat, "Admin" , 0);
dini_IntSet(accFormat, "Score", 0);
dini_IntSet(accFormat, "Geld", 0);
dini_IntSet(accFormat, "Premium", 0);
Spieler[playerid][Admin] = 0;
Spieler[playerid][eingeloggt] = 1;//Loggt den Spieler automatisch ein
SendClientMessage(playerid,0xFFFFFFFF,"Du hast dir einen Account auf /*DEINNAME*/ angelegt. Viel Spaß!");
}
}
}
else
{
switch(dialogid)//Bei falschem Passwort
{
case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","{FFFFFF}Dein Account wurde {CC0000}nicht{FFFFFF} gefunden. Wir freuen uns das du unseren\n Server gefunden hast. Bitte gib dein Passwort ein!","Abbrechen","Weiter");
}
}
if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)//Erfolgreich eingeloggt
{
Spieler[playerid][skin] = dini_Int(accFormat,"skin");
Spieler[playerid][Admin] = dini_Int(accFormat, "Admin"); // Das Level wird aus der Datei geladen
Spieler[playerid][Premium] = dini_Int(accFormat, "Premium");
SetPlayerScore(playerid, dini_Int(accFormat, "Score"));
GivePlayerMoney(playerid, dini_Int(accFormat, "Geld")-GetPlayerMoney(playerid));
Spieler[playerid][eingeloggt] = 1;
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
}
Ich hoffe ich konnte euch damit weiterhelfen, sollte ich irgendwo ein Fehler gemacht haben bitte bescheid geben !<Nehme Kritik entgegen>!
Ich wünsche euch viel Spaß
PS: Das ist mein erstes Tutorial
MFG,
Dead