Okay Hier:
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define DIALOG_LOGIN 3
#define DIALOG_REG 4
enum spieler_daten
{
skin,
geld,
score,
eingeloggt,
AdminLevel
}
new Spieler[MAX_PLAYERS][spieler_daten];
public OnPlayerConnect(playerid)
{
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"); // Falls der Acc existiert
else ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter"); // Falls er nicht existiert
TextDrawShowForPlayer(playerid,RealClock);
TextDrawShowForPlayer(playerid,Datum);
TextDrawShowForPlayer(playerid,Schrift);
SetPlayerScore(playerid,dini_Int(accFormat,"score"));
GivePlayerMoney(playerid,dini_Int(accFormat,"geld"));
pBombStatus[playerid] = 0;
pPlacedBomb[playerid] = 0;
PlaceBombFunc[playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
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,"skin",Spieler[playerid][skin]);
dini_IntSet(accFormat,"score",GetPlayerMoney(playerid));
dini_IntSet(accFormat,"geld",GetPlayerMoney(playerid));
dini_IntSet(accFormat, "AdminLevel", Spieler[playerid][AdminLevel]);
}
Spieler[playerid][eingeloggt] = 0;
Spieler[playerid][skin] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
SetPlayerArmour(playerid,100);
return 1;
}
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)
{
Spieler[playerid][skin] = dini_Int(accFormat,"skin");
GivePlayerMoney(playerid,dini_Int(accFormat,"geld"));
SetPlayerScore(playerid,dini_Int(accFormat,"score"));
Spieler[playerid][AdminLevel] = dini_Int(accFormat, "AdminLevel"); // Das Level wird aus der Datei geladen
Spieler[playerid][eingeloggt] = 1;
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
return 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);
dini_IntSet(accFormat, "AdminLevel" , 0); // Das Adminlevel auf 0 setzen.
Spieler[playerid][AdminLevel] = 0;
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;
}
dcmd_setlevel(playerid,params[])
{
new pID, Level;
if(sscanf(params, "ud",pID,Level))return SendClientMessage(playerid,0xFF0000FF,"Benutze: /setlevel [ID][Level]!"); //Falls nur /setlevel eingegeben wurde
if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"Spielerid ist nicht vorhanden!");
// Falls eine falsche ID angegeben wurde, wird 0 returnt
if (IsPlayerAdmin(playerid)) // Hier wird abgefragt ob das Level des Spielers der den Befehl eingegeben hat größer als 3 ist.
{
new adminstring[128],levelsetter[MAX_PLAYER_NAME], playername[MAX_PLAYER_NAME];
GetPlayerName(pID,playername,sizeof playername);
format(adminstring,sizeof(adminstring),"Admins/%s.sav",playername);
GetPlayerName(playerid,levelsetter,sizeof(levelsetter));
Spieler[pID][AdminLevel] = Level; //Hier wird die Levelvariable mit dem neu eingegebenen Level überschrieben
dini_IntSet(adminstring,"AdminLevel",Level); // Und hier das neue Level in der Datei gespeichert.
format(adminstring,sizeof(adminstring),"%s hat dein Level auf %d gesetzt!",levelsetter, Level);
SendClientMessage(pID,0x33FF33FF, adminstring);
}
else return SendClientMessage(playerid, 0xFF0000FF, "Dein Level reicht nicht aus!");
// Falls das Level nicht ausreicht wird dieser Text gesendet.
return 1;
}
dcmd_kick(playerid,params[])
{
new pID, str[64];
if(sscanf(params, "uz",pID,str))return SendClientMessage(playerid,0xFF0000FF,"USAGE: /kick ID Grund");
//Falls nur /Kick eingegeben wurde
if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit angegebener ID Online!");
//Falsche Id
if (pID == playerid)return SendClientMessage(playerid,0xFF0000FF,"Du kannst dich nicht selber kicken!");
// Falls man seine eigene ID angegeben hat
if(Spieler[playerid][AdminLevel] > 0) // Wenn das Level größer ist als 0
{
new ThePlayer[MAX_PLAYER_NAME], str2[128];
GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
format(str2,sizeof(str2),"%s wurde vom Server gekickt!(Grund: %s)",ThePlayer,str[0] ? str : "<Kein Grund>");
// Falls kein Grund angegeben wird als Grund <Kein Grund> angegeben
SendClientMessageToAll(0xFF0000FF,str);
Kick(pID);
}
else return SendClientMessage(playerid, 0xFF0000FF, "Dein Level reicht nicht aus!");
return 1;
}