Beiträge von Zyankali

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums

    Also ich beschäftige mich erst seit heute mit DIALOG daher versteh ich das grade nicht wirklich, mein Problem sind folgende 2 ERRORS:


    C:\Users\Zyan\Desktop\testzyan.pwn(588) : error 017: undefined symbol "List"
    C:\Users\Zyan\Desktop\testzyan.pwn(592) : error 017: undefined symbol "Spielerdatei"


    im Filterscript welches das Login System beinhaltet funktioniert es einwandfrei



    //----------------------------------------------------------
    //
    // Account System 1.0
    // Hauptdatei des Account Systems,
    // es können eventuell noch zusätzliche Dateien folgen
    //
    //----------------------------------------------------------


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


    #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
    dini_IntSet(Spielerdatei,"Personalausweis",0); //Der Spieler besitzt zu Anfang keinen Personalausweis.
    SetPVarInt(playerid,"loggedin",1); //Hier setzen wir die Variable, ob der Spieler eingeloggt ist auf 1, um Sie später wieder abfragenzukönnen...
    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,"Personalausweis",dini_Int(Spielerdatei,"Personalausweis")); //Genauso den Personalausweis
    SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei,"Banned")); //Genauso mit Banned
    return 1;
    }


    stock Login(playerid,key[])
    {
    new Spielerdatei[128]; //Wieder die Spielerdatei
    new string2[128]; //Benötigen einen String
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid)); //Ab in Accounts damit
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false)) //Hier überprüft er, ob das Passwort, das er zuvor beim registrieren eingegeben hat, mit dem das er jetzt eingegeben hat übereinstimmt....
    {
    SpielerLaden(playerid); //Hier werden die Daten aus der Spielerdatei geladen, den Stock dazu erstellen wir gleich...
    SendClientMessage(playerid,GRÜN,"Du hast dich erfolgreich eingeloggt."); //Nachricht wird gesendet
    format(string2,sizeof(string2),"[Join] %s hat den Server betreten",SpielerName(playerid)); //Join-String wird formatiert
    SendClientMessageToAll(GRÜN,string2); //Join-Message wird an alle gesendet
    }
    else //Falls das Passwort nicht damit übereinstimmt soll folgendes passieren
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang","Das angegebene Passwort war leider falsch!\nBitte gib nun unten dein richtiges Passwort ein! ","LogIn", "Abbrechen"); //Dialog-Style-Passwort und nicht Input.. Hier wird das eingegebene Passwort in Punkte formatiert während man es eingibt ..... Der Dialog wird wieder angezeigt bei Falschem Passwort ..
    }
    return 1;
    }


    stock isPlayerAnAdmin(playerid, rang)
    {
    if(GetPVarInt(playerid,"Adminlevel")>=rang) return 1;"
    return 0;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext,"/kill",true)==0)
    {
    SetPlayerHealth(playerid,0);
    return 1;
    }
    return 0;
    }


    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,"Partytime",dini_Int(Spielerdatei,"Paytime"));
    SetPVarInt(playerid,"Personalausweis",dini_Int(Spielerdatei,"Personalausweis"));
    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,"Personalausweis",GetPVarInt(playerid,"Personalausweis"));
    dini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid,"Banned")); //Banned
    dini_IntSet(Spielerdatei,"Paytime",GetPVarInt(playerid,"Paytime"));
    return 1;
    }
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid))return 1; //Ein NPC soll sich ja nicht registrieren sonst käme er ja nicht auf unseren Server
    new Spielerdatei[128],string[128],string2[128]; //Spielerdatei,sowie 2 Strings
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid)); //Ist klar
    if(dini_Exists(Spielerdatei)) //Hier wird abgefragt ob der User Bereits registriert ist
    { //Wenn ja , dann...
    format(string,sizeof(string),"{FFFFFF}Herzlich Willkommen zurück auf meinem Server {FFFA00}%s.\n{FFFFFF}Gib unten bitte dein Passwort ein!",SpielerName(playerid)); //String1......
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang",string,"Einloggen","Abbrechen"); //Login Dialog mit der Info string
    }
    else
    { //Falls nicht
    format(string2,sizeof(string2),"{FFFFFF}Herzlich willkommen {FFFA00}%s.\n{FFFFFF}Da dies dein erster Besuch hier ist musst du dich erst registrieren.\nBitte gib unten dein gewünschtes Passwort ein!",SpielerName(playerid)); //String 2
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registrierungs Vorgang",string2,"Register","Abbrechen"); //Register-Dialog mit der Info string2
    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    if(GetPVarInt(playerid,"loggedin") == 1) //Falls er eingeloggt war
    {
    SpielerSpeichern(playerid); //Unsere SpielerSpeichern-Funktion wird angewendet......
    }
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid==DIALOG_LOGIN) //Wenn der Dialog-Login aufgerufen wird
    {
    if(response==0) //Falls er auf Abbrechen drückt, dann
    {
    SendClientMessage(playerid,ROT,"Du hast den Login Vorgang abgebrochen und wirst deshalb vom Server gekickt!"); //Nachricht an ihn
    Kick(playerid); //Er wird gekickt
    return 1;
    }
    if(response==1) //Falls er aber auf Login drückt, dann...
    {
    if(!strlen(inputtext)) //Hier prüft man ob er überhaupt was eingegeben hat, sonst müsste er ja nichts eingeben und würde sich einloggen koennen...
    {
    SendClientMessage(playerid,ROT,"Dein angegebenes Passwort war nicht lange genug!"); //Nachricht
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang","Dein Account wurde in unserer Datenbank gefunden!\nBitte gib nun dein Passwort ein! ","Login", "Abbrechen"); //Dialog erneut zeigen
    return 1;
    }
    else
    {
    Login(playerid,MD5_Hash(inputtext)); //Falls es aber was eingegeben wurde wird der Stock Login aufgerufen und ausgeführt.. MD5_Hash bedeutet dass das Passwort nicht wortwörtlich in die Spielerdatei gesetzt wird sondern als String und dann wieder ins richtige umformatiert wird. So schützt man eueren Server vor Hackern, weil Sie dann das PW von diesen nicht wissen...
    return 1;
    }
    }
    }
    if(dialogid==DIALOG_REGISTER) //Falls der DIALOG_REGISTER aufgerufen wird
    {
    if(response==0) //Falls er auf abrrechen drückt..
    {
    SendClientMessage(playerid,ROT,"Du hast den Registrierungs Vorgang abgebrochen und wirst deshalb vom Server gekickt!"); //Nachricht
    Kick(playerid); //WIrd gekickt
    return 1;
    }
    if(response==1)
    {
    if(!strlen(inputtext)) //Überprüft ob was eingegeben wird...
    {
    SendClientMessage(playerid,GRÜN,"Dein eingegebenes Passwort war nicht lang genug!"); //Wenn er wieder nichts eingibt
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registrierung","Willkommen auf meinem Server\n bitte gib nun dein gewünschtes Passwort ein","Register","Abbrechen"); //Dann Dialog erneut anzeigen....
    return 1;
    }
    else //Falls aber was eingegeben wurde , dann....
    {
    Register(playerid,MD5_Hash(inputtext)); //Wir die Funktion Register von Vorhin aufgerufen und ausgeführt und das PW wird erneut gehasht...
    return 1;
    }
    }
    }
    return 1;
    }


    Nicht lachen xD sind meine ersten experimente mit Pawno.

    Wie muss ich das eingeben damit er den Wert in der ini setzt?


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == List)
    {
    if(listitem == 0)
    {
    dini_IntSet(Spielerdatei,"Personalausweis",1); //Wir setzen den Personalausweis auf 1
    }
    if(listitem == 1)
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast auf das 2. Listitem geklickt!");
    }
    if(listitem == 2)
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast auf das 3. Listitem geklickt!");
    }
    }
    return 0;
    }


    Bitte bitte lass es was nicht zu blödes sein.


    Mfg Zyan

    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

    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?

    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.