IP Adresse ermitteln und 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
  • 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]);
  • Leider wird die IP Adresse immer noch nicht gespeichert, ich versuche diese mal im Disconnect und Connect mit einzubauen vielleicht hilft das ja !


    Machen wir es einmal im Spawn :D


    public OnPlayerSpawn(playerid)
    {
    new query[512];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET IP = '%s' WHERE name = '%e'", PlayerInfo[playerid][pName]);

    mysql_pquery(handle, query);
    return 1;
    }


    Es soll ja nur einmal die IP Gespeichwert werden !

    Einmal editiert, zuletzt von Scene-Sector () aus folgendem Grund: Code Beispiel!

  • Hier fehlt die IP, das muss so sein:
    public OnPlayerSpawn(playerid)
    {
    new query[128];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET IP = '%s' WHERE name = '%e'", PlayerInfo[playerid][pIP], PlayerInfo[playerid][pName]);
    mysql_pquery(handle, query);
    return 1;
    }

  • Nach wie vor wird keine IP gespeichert, langsam nervt mich das !


    /*======================================================================*\
    || #################################################################### ||
    || # Dieses Script wurde von Scene-Sector gecoded, es ist weder etwas # ||
    || # feriges noch etwas halbes. Alle hier vorkommenden Codeschnipsel # ||
    || # stammen aus dem Breadfish Forum und dienen lediglich der Übung. # ||
    || # # ||
    || # ---------------- PAWN CODE ARE ALL FREE TO USE! ---------------- # ||
    || # http://www.forum.sa-mp.de # ||
    || #################################################################### ||
    \*======================================================================*/


    /*


    Merke :


    - %s = String ( Varchar = Gemischter Text und / oder Namen von Spielern etc ) Bugged ? NE Bullshit
    - %s = String aber es müssen Sonderzeichen escaped werden aka +#-.,
    - %i = Integer ( Wichtig für Zahlen )
    - %d = Könnte das gleiche wie mit dem Integer sein

    Ocmd Hinweis :

    - Da der Host nicht weiter existent ist, habe ich die AutoUpdat Funktion rausgenommen!

    */



    /*======================================================================*\
    || #################################################################### ||
    || # Hier sind die includes definiert !!! # ||
    || #################################################################### ||
    \*======================================================================*/


    #include <a_mysql>
    #include <a_samp>
    #include <sscanf>
    #include <ocmd>


    /*======================================================================*\
    | Placeholder |
    \*======================================================================*/


    //Dialog IDs (gegebenenfalls ändern, falls bereits belegt)
    #define DIALOG_REGISTER 1
    #define DIALOG_LOGIN 2


    /*======================================================================*\
    || #################################################################### ||
    || # Hier sind die Farben definiert !!! # ||
    || #################################################################### ||
    \*======================================================================*/
    #define COLOR_WHITE 0xFFFFFF
    #define COLOR_RED 0xFF0000
    #define COLOR_YELLOW 0xFFFF00
    #define COLOR_GREEN 0xFF00FF00


    /*======================================================================*\
    | Placeholder |
    \*======================================================================*/


    /*======================================================================*\
    || #################################################################### ||
    || # Hier sind die New's definiert !!! # ||
    || #################################################################### ||
    \*======================================================================*/


    #define MYSQL_HOST "127.0.0.1" //IP Adresse des MySQL Servers
    #define MYSQL_USER "eliteund_mysql" //Benutzername der angemeldet wird
    #define MYSQL_PASS "vvvvvvvvvvvvvvvvv..--##++" //Passwort des Benutzers
    #define MYSQL_DBSE "eliteund_samp" //Name der Datenbank


    /*======================================================================*\
    | Placeholder |
    \*======================================================================*/


    enum pDataEnum
    {
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pIP[16],
    pAdmin,
    pLevel,
    pMoney,
    pKills,
    pDeaths
    }
    new PlayerInfo[MAX_PLAYERS][pDataEnum];


    new handle; //Die Connection-Handle, über die wir später auf die Tabellen der Datenbank zugreifen


    native WP_Hash(buffer[], len, const str[]);


    main()
    {
    print("----------------------------------");
    print(" Test Gamemode by Scene-Sector ");
    print("----------------------------------");

    print("//======================================================================\");
    print("|| #################################################################### ||");
    print("|| # Dieses Script wurde von Scene-Sector gecoded, es ist weder etwas # ||");
    print("|| # feriges noch etwas halbes. Alle hier vorkommenden Codeschnipsel # ||");
    print("|| # stammen aus dem Breadfish Forum und dienen lediglich der Übung. # ||");
    print("|| # # ||");
    print("|| # ---------------- PAWN CODE ARE ALL FREE TO USE! ---------------- # ||");
    print("|| # http://www.forum.sa-mp.de # ||");
    print("|| #################################################################### ||");
    print("\\======================================================================//");
    }


    public OnGameModeInit()
    {
    handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DBSE, MYSQL_PASS);
    SetGameModeText("Role Play mal anders!");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    mysql_close(handle);
    return 1;
    }


    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;
    }


    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    GetPlayerIp(playerid, PlayerInfo[playerid][pIP], 16);
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    SaveUserStats(playerid);
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new query[128];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET IP = '%s' WHERE name = '%e'", PlayerInfo[playerid][pIP], PlayerInfo[playerid][pName]);
    mysql_pquery(handle, query);
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killerid != INVALID_PLAYER_ID)
    {
    PlayerInfo[killerid][pKills]++;
    GivePlayerMoney(killerid, 10);
    PlayerInfo[killerid][pMoney] += 10;
    if(PlayerInfo[killerid][pKills] > 3)
    {
    PlayerInfo[killerid][pLevel] = 1;
    }
    }
    PlayerInfo[playerid][pDeaths]++;
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(IsPlayerAdmin(playerid))
    {
    SendClientMessage(playerid, -1, "Use /help to see avaible commands");
    }

    else

    {
    SendClientMessage(playerid, -1, "Noe, ich mag den Befehl jetzt aber nicht!");
    }
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnVehicleMod(playerid, vehicleid, componentid)
    {
    return 1;
    }


    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
    return 1;
    }


    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }


    public OnRconLoginAttempt(ip[], password[], success)
    {
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    return 1;
    }


    public OnPlayerStreamIn(playerid, forplayerid)
    {
    return 1;
    }


    public OnPlayerStreamOut(playerid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
    return 1;
    }


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

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


    if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Das Passwort muss Mindestens 5 Zeichen haben!", "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;
    }


    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    return 1;
    }


    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;
    }


    forward OnUserCheck(playerid);
    public OnUserCheck(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    if(cache_get_row_count() == 0)
    {
    //Der Spieler konnte nicht gefunden werden, er muss sich registrieren
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:", "Ok", "Abbrechen");
    }
    else
    {
    //Es existiert ein Ergebnis, das heißt der Spieler ist registriert und muss sich einloggen
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich ein:", "Ok", "Abbrechen");
    }
    return 1;
    }


    forward OnUserRegister(playerid);
    public OnUserRegister(playerid)
    {
    //Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
    PlayerInfo[playerid][p_id] = cache_insert_id();
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
    return 1;
    }


    forward OnUserLogin(playerid);
    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    if(cache_get_row_count() == 0)
    {
    //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
    //Wir lesen nun die erste Zeile des Caches aus (ID 0)
    PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
    PlayerInfo[playerid][pIP] = cache_get_field_content( 0, "IP", PlayerInfo[playerid][pIP], handle, 16);
    PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "Admin", handle);
    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
    PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
    PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
    PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    }
    return 1;
    }


    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;

    //Ansonsten speichere sie
    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]);

    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }

  • mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, IP) VALUES ('%e', '%e', '%s')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pIP], buf);
    zu:
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, IP) VALUES ('%e', '%e', '%s')", PlayerInfo[playerid][pName], buf, PlayerInfo[playerid][pIP]);




    PlayerInfo[playerid][pIP] = cache_get_field_content( 0, "IP", PlayerInfo[playerid][pIP], handle, 16);
    zu:
    cache_get_field_content( 0, "IP", PlayerInfo[playerid][pIP], handle, 16);

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Jeffry...


    Deine Hilfe in allen Ehren aber schau mal...


    IP Bei der Registrierung
    IP Beim Spawn
    IP Beim Speichern


    Das alles wird nicht gemacht.


    Es sind 3 Querys 3 Einträge an 3 Stellen. Bei der Registrierung beim Spawn und beim Quit, nirgends wird weder eine IP erstellt, Gespeichert noch sonst etwas !

  • Das alles wird nicht gemacht.


    Dann mach doch einfach mal einen print-Debug und schau...wieso es nicht gemacht wird...werden Funktionen nicht aufgerufen, werden Sachen falsch in Variablen gespeichert..sind die Querys falsch...


    prüf es doch einfach mal selbst :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen