Beiträge von SoulMan

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

    Wie wäre es mal mit einer anderen Tonlage?
    Bleib mal höflich, ich habe dich nirgends angegriffen o.Ä.
    Wenn dir der Code nicht passt, behalte es einfach für dich.

    new FALSE = false;
    #define SendFormattedMessage(%0,%1,%2) do{new _str[128]; format(_str,128,%2); SendClientMessage(%0,%1,_str);}while(FALSE)

    SendFormattedMessage(playerid,color,"Du hast %s SkinID %d zugewiesen",SpielerName[pID],sID);


    Spart das lästige erstellen von Strings und Formatierungen.


    */Edit: Funktion ist nicht von mir. Stammt, soviel ich weiß aus dem Englischen SA:MP Forum.

    Guten Abend, liebe Scripter!


    Ich habe mich mal dazu entschieden, ein Login/Register System zu erstellen, dass jedoch über CMD's funktioniert.


    Benötigt wird die dini Include, zcmd Include und die sscanf Include.
    Download im Anhang oder hier Includes Download


    Vorraussetzungen:


    Ihr solltet Zeit haben und Aufmerksamkeit besitzen.
    Keine Besonderen Scriptkentnisse erforderlich.


    Los geht's!


    Zuerst geht es an unsere Includes & Defines.


    #include <a_samp>
    #include <zcmd>
    #include <sscanf>
    #include <dini>

    #define PLAYER_FOLDER "/Spieler/%s.ini"//Dient einer einfacheren Handhabung


    Jetzt die new's


    new SpielerName[MAX_PLAYERS][MAX_PLAYER_NAME];//Damit können wir später den Namen leichter ermitteln. Bsp.: SpielerName[pID];
    new Eingeloggt[MAX_PLAYERS];//Eine einfache Variable, welche für jeden Spieler verfügbar ist ([MAX_PLAYERS] )


    public OnPlayerConnect(playerid)
    {
    GetPlayerName(playerid, SpielerName[playerid], MAX_PLAYER_NAME); //Hier kommt das new SpielerName erstmal's zum Einsatz. Der Name jedes sich einloggenden Spielers wird ausgelsen
    new s[128];//Variable zum Ermitteln der Spielerdatei
    format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
    if(!dini_Exists(s)) { //Wenn die Spielerdatei nicht vorhanden ist
    SendClientMessage(playerid,0xF0F0F0FF,"Bitte registriere dich!");
    SendClientMessage(playerid,0xF0F0F0FF,"/register [Passwort]"); }
    else { //Falls sie vorhanden ist
    SendClientMessage(playerid,0xF0F0F0FF,"Bitte logge dich ein!");
    SendClientMessage(playerid,0xF0F0F0FF,"/login [Passwort]"); }
    return 1;
    }


    Unsere Cmd's


    CMD:register(playerid,params[])
    {
    new pass[200],s[128]; //Variablen für den Befehl (s könnte auch path o.Ä. heißen, dient zur Formatierung)
    if(sscanf(params, "s",pass))return SendClientMessage(playerid,0xF0F0F0FF,"TIPP: /register [Passwort]"); //Falls ihr sscanf nicht kennt, schaut euch den Link am Ende des Themas an. Einfache Erklärung: sscanf ermittelt die Parameter aus der Eingabe des Spielers
    format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
    if(!dini_Exists(s)) //Falls die Spielerdatei noch nicht existiert
    {
    dini_Create(s); //Spieler Datei wird im Ornder "Spieler" erstellt
    dini_Set(s, "Passwort", pass); //Passwort wird eingetragen
    SendClientMessage(playerid,0xF0F0F0FF,"Du hast dich erfolgreich registriert!");
    Eingeloggt[playerid] = 1; //Setzt die Variable Eingeloggt auf 1
    } else { SendClientMessage(playerid,0xF0F0F0FF,"Du bist bereits registriert!"); } //Falls doch, erscheint diese Nachricht [ kann auch else return heißen]
    return 1;
    }


    CMD:login(playerid,params[])
    {
    new pass[128],s[128],pw[200];
    if(sscanf(params, "s",pass))return SendClientMessage(playerid,0xF0F0F0FF,"TIPP: /login [Passwort]");
    if(pInfo[playerid][Eingeloggt] == 1)return SendClientMessage(playerid,0xF0F0F0FF,"Du bist bereits eingeloggt!"); //Falls Eingeloggt auf 1 steht, wird diese Nachricht returnt
    format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
    if(!dini_Exists(s))return SendClientMessage(playerid,0xF0F0F0FF,"Du musst dich erst registrieren!"); //Das Selbe Schema wie oben
    format(pw, sizeof(pw), "%s", dini_Get(s, "Passwort"));//Passwort wird ermittelt
    if(strcmp(pass, pw) == 0) //Falls das Passwort stimmt
    {
    Eingeloggt[playerid] = 1;//Variable wird auf 1 gesetzt
    SpawnPlayer(playerid); //Spawnt den Spieler direkt, um die Skinauswahl zu überspringen
    SendClientMessage(playerid,0xF0F0F0FF,"Du hast dich erfolgreich eingeloggt!");
    } else { SendClientMessage(playerid,0xF0F0F0FF,"Falsches Passwort angegeben!"); }//Falls nicht, erscheint wieder eine Nachricht [auch hier würde else return gehen]
    return 1;
    }


    CMD:changepass(playerid,params[]) {
    new pass[128],s[128,str[128];
    if(sscanf(params, "s",pass))return SendClientMessage(playerid,0xF0F0F0FF,"TIPP: /changepass [Passwort]");
    if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid,0xF0F0F0FF,"Du musst dich erst einloggen");
    format(s, sizeof(s),PLAYER_FOLDER,SpielerName[playerid]);
    dini_Set(s, "Passwort", pass); //Neues Passwort wird eingetragen 'pass' ist die oben definierte Variable.
    format(str,sizeof(str),"Passwort erfolgreich geändert [%s]",pass);
    SendClientMessage(playerid,0xF0F0F0FF,str);
    return 1; }


    Falls ihr jetzt Eingeloggt nutzen wollt, hier ein Beispiel.


    public OnPlayerRequestSpawn(playerid)
    {
    if(Eingeloggt[playerid]== 0){ SendClientMessage(playerid, 0xF0F0F0FF, "Du musst dich vorher einloggen!"); return 0;}
    return 1;
    }


    Beim Disconnect solltet ihr Eingeloggt wieder auf 0 setzen, damit sich kein Anderer mit eurem Account vergnügen kann.


    public OnPlayerDisconnect(playerid, reason)
    {
    Eingeloggt[playerid] = 0;
    return 1;
    }


    Im Anhang gibt es die .pwn + die Includes zum Downloaden.
    Falls ihr noch Fragen habt, stellt sie hier im Thread, ich helfe gerne weiter.


    Hier noch die Erklärung zu sscanf klick


    Hoffe, ihr habt alles verstanden und ich hab nicht allzu umständlich erklärt.</a_samp>

    Ich bezweifle zwar, dass du es diesmal richtig hinbekommst, aber hier..
    if(!IsPlayerInRangeOfPoint(playerid,2.0,2118.5999,-1155.5908,24.1581))return SendClientMessage(playerid,rot,"Du bist nicht am Autohaus!");
    ShowMenuForPlayer(Carmenu,playerid);
    return 1;

    Wenn du 10 Befehle so scriptest, dann hast du 140 Zeilen verbraucht, es ginge aber auch in 60 Zeilen.
    Versuch es doch einfach mal und SendClientMessage bekommste ja bestimmt noch hin. ;)


    Füg es doch einfach mal ein und sag uns dann welche Errors kommen.

    if (strcmp("/lspd", cmdtext, true, 10) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)else return SendClientMessage(playerid, COLOR_WHITE, "Du bist {ff0000}kein {ffffff}Administrator!");
    SetPlayerPos(playerid,x,y,z);
    return 1;
    }
    Versuchs so.

    Welches Genie kam denn auf sowas?
    format(string, sizeof(string), "Neues Haus \nHaus bearbeiten");
    ShowPlayerDialog(playerid, 13, DIALOG_STYLE_LIST, "Hauskonfigurator", string, "Auswählen", "Abbrechen");