Beiträge von Scene-Sector

    Derzeit sitze ich daran die IP Adresse zu ermitteln und zu speichern, aber ich glaube ich mache da etwas falsch!


    Zitat

    [17:35:13] [ERROR] cache_get_field_content_int - invalid datatype


    SQL
    new query[512];
    	mysql_format(handle, query, sizeof(query), "UPDATE users SET IP = '%s', Admin = '%d', level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
    		PlayerInfo[playerid][pIP], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);

    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    return 1;
    }


    Kommt da nicht eigentlich statt ID der Name rein, da ich keine feste PlayerID vergebe sondern einen namen !



    Ernsthaft, ich sagte jetzt 5x das keine Registrierung erfolgt, das er diese skipped und du willst nach wie vor Wissen was in der DB steht ?! Na NICHTS ! Was soll bei einem Skip stehen wenn die Login = Nichts ist !? Diese Frage ! Schau dir den Code an den ich mehrmals gepostet habe,

    Da steht nichts im Debug, zumindest sehe ich keinen Fehler, er Skipped den Usernamen beim Login, ich will mich mit verschidenen Namen einloggen aber er geht immer auf Login und nicht Register ! Hier nochmal der Code !


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    if(!response) return Kick(playerid);
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], buf);
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);


    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], buf);
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }



    P.S Whirlpool hat mehr als 256 Zeichen wenn man pech hat, eventuell den Query Cache erweitern ?

    Poste den Code von deinem OnPlayerRequestClass (dort wo du den Dialog anzeigst).


    Zum OnDialogResponse:
    Beim mysql_format musst du ganz hinten "inputtext" mit "buf" ersetzen.


    Der Fehler liegt bei Dir Jeffry ;


    public OnPlayerRequestClass(playerid)
    {
    //Wenn der Spieler die Class-Selection betritt prüfe, ob er bereits eingeloggt ist
    if(!PlayerInfo[playerid][pLoggedIn])
    {
    //Wenn nicht, dann prüfe ob der Spieler ein Konto hat
    //Dazu wird ein Query gesendet und ein neues Callback aufgerufen
    //%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);

    //Das Query wird abgesendet und die playerid an OnUserCheck übergeben
    mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
    }
    return 1;
    }


    Seit wann fragt man einen Existierenden Spieler an der ID und nicht am Namen ab ?


    Hast du da geschlafen zu dem Zeitpunkt :D


    SQL
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'"


    Besser wäre doch :


    PHP
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e'"


    Oder ?

    Nope, da skippt er die Registrierung mit neuen Benutzern, tut es leider nicht !


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);

    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], inputtext);

    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);


    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], inputtext);


    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }

    Hab da eine kleine Frage,


    ich würde gerne das Whirlpool Verfahren benutzen und kein MD5 Code. Dazu bräuchte ich mal bitte einige Informationen wie genau ich das umsetzen kann.


    Login / Register System basierend auf dem MySQL R39-3 CentOS System und dem Tutorial von Jeffry.


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);

    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);

    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);


    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);


    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }



    Vielen Dank im Voraus !

    Wir von Invision-Virus ( Mehr nenne ich dazu nicht, könnte heißen ich verbreite hier Warez oder was auch immer ) haben einen User im Team der derzeitig mit einem anderen Team zusammen arbeitet und bereits Fortschritte zum MP Emulator für GTA V entwickelt.


    Bisher gefällt mir der SA MP so gut, da man dort seine Kenntnisse in C erweitern kann und es gibt wie bereits geschrieben wurde eine Vielzahl / unbegrenzte Möglichkeiten was man mit dem Emulator alles anstellen kann.

    Ich habe dir den kompletten Fix und die Lösung für andere per PM zukommen lassen, einfach dein Tutorial aktualisieren ! :D


    Hier eine Problemlösung für die OS Version : CentOS 7.1 , 6.X



    Dann folgendes :


    stock MySQL_SetupConnection(ttl = 3)
    {
    print("[MySQL] Verbindungsaufbau...");
    mysql_log(LOG_ALL); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren

    //Prüfen und gegebenenfalls wiederholen
    if(mysql_errno(handle) != 0)
    {
    //Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
    if(ttl > 1)
    {
    //Versuche erneut eine Verbindung aufzubauen
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
    return MySQL_SetupConnection(ttl-1);
    }
    else
    {
    //Abbrechen und Server schließen
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
    print("[MySQL] Der Server wird heruntergefahren.");
    return SendRconCommand("exit");
    }
    }
    printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", handle);
    return 1;
    }


    handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DBSE, MYSQL_PASS);


    Der handler für den Datenbankaufbau kommt unter OnGameModeInit und nicht in den Stock ! Denn sonst passiert das hier :


    Zitat

    [02:26:40] [ERROR] mysql_pquery - invalid connection handle (id: 0)
    [02:28:41] [ERROR] mysql_close - invalid connection handle (id: 0)

    Failed (libz.so.1: cannot open shared object file: No such file or directory)


    Nächster Fehler ... Ohmann !


    Fixxed :