In Spielerdatei 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
  • moin,


    Ich habe das Problem das mein Register befehl und warscheinlich auch Speichern und Login nicht gehen da in der spieler.ini nur das Passwort eingetragen wirt aber nicht das was so hier steht.
    ocmd:register(playerid,params[])
    {
    new pass[200],s[128],accFormat[128];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /register [Passwort]");
    format(s,sizeof(s),Player_Folder,SpielerName[playerid]);
    if(!dini_Exists(s))
    {
    dini_Create(s);
    dini_Set(s,"Passwort",pass);
    dini_IntSet(accFormat,"Score",0);
    dini_IntSet(accFormat,"Admin",0);
    dini_IntSet(accFormat,"Geld",0);
    dini_IntSet(accFormat,"Kills",0);
    dini_IntSet(accFormat,"Tode",0);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich registriert.");
    Eingeloggt[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Du bist bereits registriert!");
    }
    return 1;
    }
    Login:
    ocmd:login(playerid,params[])
    {
    new pass[128],s[128],pw[128],accFormat[128];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /login [Passwort]");
    format(s,sizeof(s),Player_Folder,SpielerName[playerid]);
    if(!dini_Exists(s)) return SendClientMessage(playerid,Rot,"Du musst dich erst registrieren!");
    format(pw,sizeof(pw),"%s",dini_Get(s,"Passwort"));
    if(strcmp(pass,pw) == 0)
    {
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    Spieler[playerid][Admin] = dini_Int(accFormat,"Admin");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld")-GetPlayerMoney(playerid));
    Spieler[playerid][Kills] = dini_Int(accFormat,"Kills");
    Spieler[playerid][Tode] = dini_Int(accFormat,"Tode");
    Eingeloggt[playerid] = 1;
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich eingeloggt.");
    }
    else
    {
    SendClientMessage(playerid,Rot,"Falsches Passwort angegeben!");
    }
    return 1;
    }
    Spieler Speichern:
    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,Player_Folder,pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }
    Ich hoffe mir kann einer helfen ich weis nicht was da falsch ist.

  • Im Grunde ganz leicht!


    Du hast die Variablen vertauscht!
    Bei register hast du blos beim Passwort "s" stehen, sonst überall "accFormat"
    Da accFormat nicht formatiert ist, kann auch nichts in die Datei geschrieben werden da kein Pfad existiert.


    Änder also accFormat in s um und es sollte klappen. ;)


    Und zeig mal bitte die Definition von Player_Folder



    Greetz
    #else

  • Alles klar.


    Dann versuch es mal so:



    ocmd:register(playerid,params[])
    {
    new pass[200],s[128],accFormat[128];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /register [Passwort]");
    format(accFormat,sizeof(accFormat),Player_Folder,SpielerName[playerid]);
    if(!dini_Exists(accFormat))
    {
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",pass);
    dini_IntSet(accFormat,"Score",0);
    dini_IntSet(accFormat,"Admin",0);
    dini_IntSet(accFormat,"Geld",0);
    dini_IntSet(accFormat,"Kills",0);
    dini_IntSet(accFormat,"Tode",0);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich registriert.");
    Eingeloggt[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Du bist bereits registriert!");
    }
    return 1;
    }


    ocmd:login(playerid,params[])
    {
    new pass[128],s[128],pw[128],accFormat[128];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /login [Passwort]");
    format(accFormat,sizeof(accFormat),Player_Folder,SpielerName[playerid]);
    if(!dini_Exists(accFormat)) return SendClientMessage(playerid,Rot,"Du musst dich erst registrieren!");
    format(pw,sizeof(pw),"%s",dini_Get(s,"Passwort"));
    if(strcmp(pass,pw) == 0)
    {
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    Spieler[playerid][Admin] = dini_Int(accFormat,"Admin");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld")-GetPlayerMoney(playerid));
    Spieler[playerid][Kills] = dini_Int(accFormat,"Kills");
    Spieler[playerid][Tode] = dini_Int(accFormat,"Tode");
    Eingeloggt[playerid] = 1;
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich eingeloggt.");
    }
    else return SendClientMessage(playerid,Rot,"Falsches Passwort angegeben!");
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[24],accFormat[128];
    GetPlayerName(playerid,pname,sizeof(pname);
    format(accFormat,sizeof(accFormat),Player_Folder,pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }


    Sollte funktionieren denke ich.



    Greetz
    #else


    #e 2 Kleine Fehler im Code entfernt

  • habe accFormat durch s ausgetauscht und alles geht, danke für die hilfe.
    #else
    wenn ich jetzt Copile mit deinem Code kommt das:

    PHP
    C:\Users\Mike\Desktop\Pawno Sachen\gamemodes\Germany.pwn(90) : error 001: expected token: ",", but found ";"
    C:\Users\Mike\Desktop\Pawno Sachen\gamemodes\Germany.pwn(280) : warning 204: symbol is assigned a value that is never used: "s"
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.
  • Ich würde es umgekehrt machen.
    s durch accFOrmat tauschen.


    Mit s definierst Du nämlich Dein Passwort...
    Und hast in manchen Abfragen auch s verwendet..
    Da wird es sicherlich noch Fehler geben da wie gesagt Du "Passwort" mit "s" definierst und auch das Eingegebene = s ist...


    Z.b im Register Befehl fragst Du ab:


    if(!dini_Exists(s))


    Gibst "s" aber vorher den Wert vom Passwort...
    Heist er fragt ab ob z.B die Datei "Passwort123.ini" vorhanden ist..
    Das solltest Du Dir nochmal genauer anschauen!




    Greetz
    #else

  • jo dann kommt das raus

    PHP
    C:\Users\Mike\Desktop\Pawno Sachen\gamemodes\Germany.pwn(90) : error 001: expected token: ",", but found ";"
    C:\Users\Mike\Desktop\Pawno Sachen\gamemodes\Germany.pwn(280) : warning 204: symbol is assigned a value that is never used: "s"
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.


    Zeile 90:
    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[24],accFormat[128];
    GetPlayerName(playerid,pname,sizeof(pname); // 90
    format(accFormat,sizeof(accFormat),Player_Folder,pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }
    Zeile 280:
    ocmd:register(playerid,params[])
    {
    new pass[200],s[128],accFormat[128]; // 280
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /register [Passwort]");
    format(accFormat,sizeof(accFormat),Player_Folder,SpielerName[playerid]);
    if(!dini_Exists(accFormat))
    {
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",pass);
    dini_IntSet(accFormat,"Score",0);
    dini_IntSet(accFormat,"Admin",0);
    dini_IntSet(accFormat,"Geld",0);
    dini_IntSet(accFormat,"Kills",0);
    dini_IntSet(accFormat,"Tode",0);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich registriert.");
    Eingeloggt[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Du bist bereits registriert!");
    }
    return 1;
    }

  • public OnPlayerDisconnect(playerid, reason)
    {
    new pname[24],accFormat[128];
    GetPlayerName(playerid,pname,sizeof(pname)); // 90
    format(accFormat,sizeof(accFormat),Player_Folder,pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }


    ocmd:register(playerid,params[])
    {
    new pass[200],accFormat[128]; // 280
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /register [Passwort]");
    format(accFormat,sizeof(accFormat),Player_Folder,SpielerName[playerid]);
    if(!dini_Exists(accFormat))
    {
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",pass);
    dini_IntSet(accFormat,"Score",0);
    dini_IntSet(accFormat,"Admin",0);
    dini_IntSet(accFormat,"Geld",0);
    dini_IntSet(accFormat,"Kills",0);
    dini_IntSet(accFormat,"Tode",0);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich registriert.");
    Eingeloggt[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Du bist bereits registriert!");
    }
    return 1;
    }


    Bittesehr. ;)



    Greetz
    #else

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Speichern tut er es immer noch nicht und den Score läd er auch nciht

    Dann schau mal ob das mit dem Code funktioniert:





    ocmd:register(playerid,params[])
    {
    new pass[200],accFormat[128],name[24];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /register [Passwort]");
    GetPlayerName(playerid,name,24);
    format(accFormat,128,"/Accounts/%s.ini",name);
    if(!dini_Exists(accFormat))
    {
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",pass);
    dini_IntSet(accFormat,"Score",0);
    dini_IntSet(accFormat,"Admin",0);
    dini_IntSet(accFormat,"Geld",0);
    dini_IntSet(accFormat,"Kills",0);
    dini_IntSet(accFormat,"Tode",0);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich registriert.");
    Eingeloggt[playerid] = 1;
    }
    else return SendClientMessage(playerid,Rot,"Du bist bereits registriert!");
    return 1;
    }


    ocmd:login(playerid,params[])
    {
    new pass[128],pw[128],accFormat[128],name[24];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /login [Passwort]");
    GetPlayerName(playerid,name,24);
    format(accFormat,128,"/Accounts/%s.ini",name);
    if(!dini_Exists(accFormat)) return SendClientMessage(playerid,Rot,"Du musst dich erst registrieren!");
    format(pw,sizeof(pw),"%s",dini_Get(s,"Passwort"));
    if(strcmp(pass,pw) == 0)
    {
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    Spieler[playerid][Admin] = dini_Int(accFormat,"Admin");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld")-GetPlayerMoney(playerid));
    Spieler[playerid][Kills] = dini_Int(accFormat,"Kills");
    Spieler[playerid][Tode] = dini_Int(accFormat,"Tode");
    Eingeloggt[playerid] = 1;
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich eingeloggt.");
    }
    else return SendClientMessage(playerid,Rot,"Falsches Passwort angegeben!");
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[24],accFormat[128];
    GetPlayerName(playerid,pname,24);
    format(accFormat,sizeof(accFormat),"/Accounts/%s.ini",pname);
    if(dini_Exists(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }

  • Bestimmt im Login Command, oder?
    Ist mir nämlich auch gerade aufgefallen.. :D



    ocmd:login(playerid,params[])
    {
    new pass[128],pw[128],accFormat[128],name[24];
    if(sscanf(params,"s",pass)) return SendClientMessage(playerid,Orange,"TIPP: /login [Passwort]");
    GetPlayerName(playerid,name,24);
    format(accFormat,128,"/Accounts/%s.ini",name);
    if(!dini_Exists(accFormat)) return SendClientMessage(playerid,Rot,"Du musst dich erst registrieren!");
    format(pw,sizeof(pw),"%s",dini_Get(accFormat,"Passwort"));
    if(strcmp(pass,pw) == 0)
    {
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    Spieler[playerid][Admin] = dini_Int(accFormat,"Admin");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld")-GetPlayerMoney(playerid));
    Spieler[playerid][Kills] = dini_Int(accFormat,"Kills");
    Spieler[playerid][Tode] = dini_Int(accFormat,"Tode");
    Eingeloggt[playerid] = 1;
    SpawnPlayer(playerid);
    SendClientMessage(playerid,Gruen2,"Du hast dich erfolgreich eingeloggt.");
    }
    else return SendClientMessage(playerid,Rot,"Falsches Passwort angegeben!");
    return 1;
    }

  • also komisch ich habe ein cmd eingebaut mit dem ich 200$ abgezogen bekomme aber wenn ich disconncete und in die Playerdatei gucken steht da immer noch 10000


    Dann machste es so:



    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[24],accFormat[128];
    GetPlayerName(playerid,pname,24);
    format(accFormat,sizeof(accFormat),"/Accounts/%s.ini",pname);
    if(dini_Exists(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }



    Greetz
    #else

  • Dann schau doch einfach mal mit nem print nach ob die Datei überhaupt gefunden wird?


    Dazu einfach bei z.b OnPlayerDisconnect:

    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[24],accFormat[128];
    GetPlayerName(playerid,pname,24);
    format(accFormat,sizeof(accFormat),"/Accounts/%s.ini",pname);
    if(dini_Exists(accFormat) && Spieler[playerid][eingeloggt])
    {
    print("Datei gefunden");
    dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"Kills",Spieler[playerid][Kills]);
    dini_IntSet(accFormat,"Tode",Spieler[playerid][Tode]);
    }
    Eingeloggt[playerid] = 0;
    return 1;
    }


    So, compilern, server restarten, einloggen, ausloggen (/q) und in die server_log.txt schauen ob da irgendwo "Datei gefunden" steht.