Hilfe bei Account Daten einlesen

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
  • Hallo liebe Comunity, ich habe vor kurzem angefangen für SA-MP mit Scripts zu arbeiten und stoße dabei leider immer wieder auf allerlei Probleme, jetzt ist es so das ich versuche beim Registrieren bereits bestimmte Werte für die Nutzer festzulegen wie z.B. Geld, Anfangslevel etc. und genau das funktioniert nicht so richtig.


    #include <a_samp>
    #include <Dini>
    #include <MD5>


    #define GRÜN 0x00C000FF
    #define ROT 0xC30000FF


    #define DIALOG_REGISTER 1
    #define DIALOG_LOGIN 2


    //Spieler-Name-Stock
    stock SpielerName(playerid)
    {
    new GetName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,GetName,sizeof(GetName)); //Wir getten den Spielernamen
    return GetName; //Und returnen ihn hier...
    }


    stock Register(playerid,key[])//Wir benötigen die Parameter Playerid, sowie key, wobei key das passwort des Users sein soll.....)
    {
    new Spielerdatei[64];//Wir erstelllen uns eine neue Spielerdatei, in der die Daten des Spielers gespeichert werden sollen
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid)); //Wir formatieren die Spielerdatei um, und sagen so dem Script , dass die Daten in dem Scriptfiles Ordner unseres Servers im Ordner "Accounts" gespeichert werden sollen....(Man kann auch /Accounts/%s.txt nehmen,wobei ich .ini jedoch schöner finde..%s ist der String zum Abfragen des Spielernamens...
    dini_Create(Spielerdatei); //Hier wird die Dini-datei erstellt
    dini_Set(Spielerdatei,"Passwort",key); //In die Spielerdatei soll das Passwort gesetzt werden
    SendClientMessage(playerid,GRÜN,"Erfolgreich registriert."); //Die Message die kommt ,wenn man sich erfolgreich registriert hat.....
    dini_IntSet(Spielerdatei,"Level",1); //Wir setzen in die Datei das Level 1
    dini_IntSet(Spielerdatei,"Geld",2000); //Wir setzen das Geld auf 2000
    dini_IntSet(Spielerdatei,"Fraktion",0); //Wir setzen die Fraktion auf 0 = Zivilisten bzw. keine Fraktion
    dini_IntSet(Spielerdatei,"Banned",0); //Wir setzen Banned auf 0 = Nicht gebannt 1=Gebannt
    dini_IntSet(Spielerdatei,"Adminlevel",1); //Wir setzen das Adminlevel auf 1
    SetPVarInt(playerid,"loggedin",1); //Hier setzen wir die Variable, ob der Spieler eingeloggt ist auf 1, um Sie später wieder abfragenzukönnen...
    GivePlayerMoney(playerid, 5000);
    return 1;
    }


    Die Werte:



    dini_IntSet(Spielerdatei,"Level",1); //Wir setzen in die Datei das Level 1
    dini_IntSet(Spielerdatei,"Geld",2000); //Wir setzen das Geld auf 2000
    dini_IntSet(Spielerdatei,"Fraktion",0); //Wir setzen die Fraktion auf 0 = Zivilisten bzw. keine Fraktion
    dini_IntSet(Spielerdatei,"Banned",0); //Wir setzen Banned auf 0 = Nicht gebannt 1=Gebannt
    dini_IntSet(Spielerdatei,"Adminlevel",1); //Wir setzen das Adminlevel auf 1


    haben keinerlei Wirkung aber mit "GivePlayerMoney(playerid, 5000);" kann ich beim Registrieren Geld einmalig vergeben und dieses wird auch später beim Logout gespeichert daher nehme ich an das sich mir in den obigen Zeilen ein dummer Noob Fehler eingeschlichen hat.


    Über Hilfe würde ich mich sehr freuen.

  • Das mache ich mit
    stock SpielerLaden(playerid)
    {
    new Spielerdatei[128]; //Wie immer
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid));
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level")); //Level wird aus der Userdatei abgefragt und ihm dann gegeben
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld")); //Genauso das Geld
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion")); //Genauso die Fraktion
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel")); //Genauso das Admin-Level
    SetPVarInt(playerid,"loggedin",1); //Loggedin wird wieder auf 1 gesetzt ...
    SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei,"Banned")); //Genauso mit Banned
    if(GetPVarInt(playerid,"Banned")==1) //Falls der User gebannt ist
    {
    SendClientMessage(playerid,ROT,"Du kannst mit diesem Account nicht spielen, da du gebannt bist.\nBei Fragen oder Einwänden melde dich bei einem Admin"); //Nachricht an User
    Kick(playerid); //wird er beim Login vom Server gekickt...
    return 1;
    }
    return 1;
    }
    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1) //Falls er eingeloggt war, um nicht unnötig Ressourcen zu verbrauchen....
    {
    new Spielerdatei[128]; //Spielerdatei
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid));
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid)); //In die Userdatei wird das abgefrage Level gespeichert
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel")); //Das Adminlevel
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion")); //Die Fraktion
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid)); //das Geld
    dini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid,"Banned")); //Banned
    return 1;
    }
    return 1;
    }
    und der betrag von 5000 aus dem Register stock wird ja auch brav gespeichert und beim neu einloggen aus der meinname.ini ausgelesen aber eigentlich sollte dafür ja der "dini_IntSet(Spielerdatei,"Geld"," zuständig sein... oder bin ich einfach übermüdet?


    Macht es einen unterschied ob ich das ganze direkt im gamemode drin habe oder in einem Filterscript?

    2 Mal editiert, zuletzt von Zyankali ()

  • Also ich habe mein Nutzerprofil gelöscht und mich neu registriert um stock Register anzusprechen, Ergebnis:


    Mit ResetPlayerMoney(playerid); = Logischerweise kein Geld zugewiesen bekommen da sich beide Befehle gegenseitig aufheben.
    Ohne ResetPlayerMoney(playerid); = Ich bekomme die 5000 Cash durch "GivePlayerMoney" aber weiter passiert nichts.


    Es wurden sowohl in SAMP als auch in der .ini Datei die 5000 angezeigt, Mit ResetPlayerMoney(playerid); gab es natürlich in SAMP und .ini einen Wert von 0.


    Die übrigen Werte in der .ini wurden absolut alle mit dem Wert 0 gesetzt obwohl ja eigentlich z.B. bei "Level" 1 stehen müsste.


    EDIT: Nach dem ich das Script ein wenig entrümpelt habe also unnötige Code Schnippsel entfernt und alles ordentlich formatiert habe funktioniert es jetzt einwandfrei. Einen großen Dank an alle trotzdem.


    MFG Zyan

    Einmal editiert, zuletzt von Zyankali ()