Score/Geld speichern?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich habe grade bei mir ein Login/register System eingebaut es gefällt mir auch eigentlich ganz gut aber iwie bekomme ich es nicht hin das der Score/Skin/Geld speichert hier mal die daten:


    #define DIALOG_LOGIN 3
    #define DIALOG_REG 4



    enum spieler_daten
    {
    score,
    geld,
    skin,
    eingeloggt
    }
    new Spieler[MAX_PLAYERS][spieler_daten];



    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","Einloggen","-");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Registrieren","-");
    }


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


    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","Einloggen","-");
    return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
    if(strcmp(inputtext,dini_Get(accFormat,"geld")) == 0)
    if(strcmp(inputtext,dini_Get(accFormat,"score")) == 0)
    if(strcmp(inputtext,dini_Get(accFormat,"skin")) == 0)
    {
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    SendClientMessage(playerid,0xFFFFFFFF,"Bitte waehle jetzt dein gewünschten Skin aus.");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Einloggen","-");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    }
    case DIALOG_REG:
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Registrieren","Abbrechen");
    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_LOGINhowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Einloggen","-");
    case DIALOG_REGhowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Registrieren","Abbrechen");
    }
    return 1;
    }



    Wie gesagt es ist alles drin nur es wird halt nicht gespeichert wenn ich -2 score habe und ich server restarte ist alles auf 0

  • Beim Auslog ding:



    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",GetPlayerSkin(playerid));


    }

  • mhm wo soll das denn da rein?


    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);
    pBombStatus[playerid] = 0;
    pPlacedBomb[playerid] = 0;
    PlaceBombFunc[playerid] = 0;
    return 1;
    }

  • 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")); //lädt den Score wenn man connected
    SetPlayerMoney(playerid,dini_Int(accFormat,"Geld")); //lädt das Geld wenn man connected
    pBombStatus[playerid] = 0;
    pPlacedBomb[playerid] = 0;
    PlaceBombFunc[playerid] = 0;
    return 1;
    }

  • 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;
    }