Guten Abend, liebe Scripter!
Ich habe mich mal dazu entschieden, ein Login/Register System zu erstellen, dass jedoch über CMD's funktioniert.
Benötigt wird die dini Include, zcmd Include und die sscanf Include.
Download im Anhang oder hier Includes Download
Vorraussetzungen:
Ihr solltet Zeit haben und Aufmerksamkeit besitzen.
Keine Besonderen Scriptkentnisse erforderlich.
Los geht's!
Zuerst geht es an unsere Includes & Defines.
#include <a_samp>
#include <zcmd>
#include <sscanf>
#include <dini>
#define PLAYER_FOLDER "/Spieler/%s.ini"//Dient einer einfacheren Handhabung
Jetzt die new's
new SpielerName[MAX_PLAYERS][MAX_PLAYER_NAME];//Damit können wir später den Namen leichter ermitteln. Bsp.: SpielerName[pID];
new Eingeloggt[MAX_PLAYERS];//Eine einfache Variable, welche für jeden Spieler verfügbar ist ([MAX_PLAYERS] )
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, SpielerName[playerid], MAX_PLAYER_NAME); //Hier kommt das new SpielerName erstmal's zum Einsatz. Der Name jedes sich einloggenden Spielers wird ausgelsen
new s[128];//Variable zum Ermitteln der Spielerdatei
format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
if(!dini_Exists(s)) { //Wenn die Spielerdatei nicht vorhanden ist
SendClientMessage(playerid,0xF0F0F0FF,"Bitte registriere dich!");
SendClientMessage(playerid,0xF0F0F0FF,"/register [Passwort]"); }
else { //Falls sie vorhanden ist
SendClientMessage(playerid,0xF0F0F0FF,"Bitte logge dich ein!");
SendClientMessage(playerid,0xF0F0F0FF,"/login [Passwort]"); }
return 1;
}
Unsere Cmd's
CMD:register(playerid,params[])
{
new pass[200],s[128]; //Variablen für den Befehl (s könnte auch path o.Ä. heißen, dient zur Formatierung)
if(sscanf(params, "s",pass))return SendClientMessage(playerid,0xF0F0F0FF,"TIPP: /register [Passwort]"); //Falls ihr sscanf nicht kennt, schaut euch den Link am Ende des Themas an. Einfache Erklärung: sscanf ermittelt die Parameter aus der Eingabe des Spielers
format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
if(!dini_Exists(s)) //Falls die Spielerdatei noch nicht existiert
{
dini_Create(s); //Spieler Datei wird im Ornder "Spieler" erstellt
dini_Set(s, "Passwort", pass); //Passwort wird eingetragen
SendClientMessage(playerid,0xF0F0F0FF,"Du hast dich erfolgreich registriert!");
Eingeloggt[playerid] = 1; //Setzt die Variable Eingeloggt auf 1
} else { SendClientMessage(playerid,0xF0F0F0FF,"Du bist bereits registriert!"); } //Falls doch, erscheint diese Nachricht [ kann auch else return heißen]
return 1;
}
CMD:login(playerid,params[])
{
new pass[128],s[128],pw[200];
if(sscanf(params, "s",pass))return SendClientMessage(playerid,0xF0F0F0FF,"TIPP: /login [Passwort]");
if(pInfo[playerid][Eingeloggt] == 1)return SendClientMessage(playerid,0xF0F0F0FF,"Du bist bereits eingeloggt!"); //Falls Eingeloggt auf 1 steht, wird diese Nachricht returnt
format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
if(!dini_Exists(s))return SendClientMessage(playerid,0xF0F0F0FF,"Du musst dich erst registrieren!"); //Das Selbe Schema wie oben
format(pw, sizeof(pw), "%s", dini_Get(s, "Passwort"));//Passwort wird ermittelt
if(strcmp(pass, pw) == 0) //Falls das Passwort stimmt
{
Eingeloggt[playerid] = 1;//Variable wird auf 1 gesetzt
SpawnPlayer(playerid); //Spawnt den Spieler direkt, um die Skinauswahl zu überspringen
SendClientMessage(playerid,0xF0F0F0FF,"Du hast dich erfolgreich eingeloggt!");
} else { SendClientMessage(playerid,0xF0F0F0FF,"Falsches Passwort angegeben!"); }//Falls nicht, erscheint wieder eine Nachricht [auch hier würde else return gehen]
return 1;
}
CMD:changepass(playerid,params[]) {
new pass[128],s[128,str[128];
if(sscanf(params, "s",pass))return SendClientMessage(playerid,0xF0F0F0FF,"TIPP: /changepass [Passwort]");
if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid,0xF0F0F0FF,"Du musst dich erst einloggen");
format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
dini_Set(s, "Passwort", pass); //Neues Passwort wird eingetragen 'pass' ist die oben definierte Variable.
format(str,sizeof(str),"Passwort erfolgreich geändert [%s]",pass);
SendClientMessage(playerid,0xF0F0F0FF,str);
return 1; }
Falls ihr jetzt Eingeloggt nutzen wollt, hier ein Beispiel.
public OnPlayerRequestSpawn(playerid)
{
if(Eingeloggt[playerid]== 0){ SendClientMessage(playerid, 0xF0F0F0FF, "Du musst dich vorher einloggen!"); return 0;}
return 1;
}
Beim Disconnect solltet ihr Eingeloggt wieder auf 0 setzen, damit sich kein Anderer mit eurem Account vergnügen kann.
public OnPlayerDisconnect(playerid, reason)
{
Eingeloggt[playerid] = 0;
return 1;
}
Im Anhang gibt es die .pwn + die Includes zum Downloaden.
Falls ihr noch Fragen habt, stellt sie hier im Thread, ich helfe gerne weiter.
Hier noch die Erklärung zu sscanf klick
Hoffe, ihr habt alles verstanden und ich hab nicht allzu umständlich erklärt.</a_samp>