Alle Spieler werden überschrieben

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
  • Moin, wenn ich mich auslogge, wird nicht nur mein Account mit meinem Geld usw. überschrieben, sondern alle.


    Hier der Code:


    SpielerSpeichern(playerid)
    { if(sInfo[playerid][eingeloggt]==0) return 1; new query[128]; new Float:X,Float:Y,Float:Z; GetPlayerPos(playerid,X,Y,Z); format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',adminrank='%i',spawnx='%f',spawny='%f',spawnz='%f' WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][adminrank],X,Y,Z,sInfo[playerid][uid]); mysql_function_query(dbhandle,query,false,"",""); return 1;}

  • Hast du noch eine Funktion die z.B. heißt: ResetSpieler(playerid)?
    Wenn nicht, dann erstelle eine und mache das so:
    ResetPlayer(playerid){
    for(new i=0;i<sizeof(ENUMNAME);i++)sInfo[playerid][ENUMNAME:i] = 0;
    return 1;
    }
    So macht man das glaub ich, das alle Variablen im Enum auf 0 gesetzt werden.
    Wenn nicht, dann mach alle einzeln ;)

  • SpielerResetten(playerid){ sInfo[playerid][level] = 0; sInfo[playerid][eingeloggt] = 0; sInfo[playerid][uid] = 0; sInfo[playerid][adminrank] = 0; sInfo[playerid][spawnx] = 0; sInfo[playerid][spawny] = 0; sInfo[playerid][spawnz] = 0; return 1;}


    schon vorhanden, wird bei OnPlayerDisconnect ausgeführt :)

  • if(dialogid==DIALOG_LOGIN) { if(response) { new name[MAX_PLAYER_NAME],query[128],passwort[35]; GetPlayerName(playerid,name,sizeof(name)); if(strlen(inputtext)>0) { mysql_escape_string(inputtext,passwort,dbhandle); format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort); mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid); } else { SendClientMessage(playerid,Rot, "Gib bitte dein Passwort ein!"); ShowPlayerDialog(playerid, DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen"); } } else { Kick(playerid); } return 1; }



    public OnPasswordResponse(playerid){ new num_fields,num_rows; cache_get_data(num_rows,num_fields,dbhandle); if(num_rows==1) { sInfo[playerid][eingeloggt] = 1; sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle); sInfo[playerid][uid] = cache_get_field_content_int(0,"id",dbhandle); sInfo[playerid][adminrank] = cache_get_field_content_int(0,"adminrank",dbhandle); sInfo[playerid][spawnx] = cache_get_field_content_float(0,"spawnx",dbhandle); sInfo[playerid][spawny] = cache_get_field_content_float(0,"spawny",dbhandle); sInfo[playerid][spawnz] = cache_get_field_content_float(0,"spawnz",dbhandle); SendClientMessage(playerid,Dunkelgrün,"Du hast dich erfolgreich eingeloggt!"); TogglePlayerControllable(playerid,1); SetPlayerScore(playerid,sInfo[playerid][level]); SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle)); SetPlayerPos(playerid,sInfo[playerid][spawnx],sInfo[playerid][spawny],sInfo[playerid][spawnz]); LoadPlayerCars(playerid); } else { SendClientMessage(playerid,Rot,"Das eingegebene Passwort ist falsch!"); ShowPlayerDialog(playerid, DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen"); } return 1;}



    Bin jetzt Schule, sry das das immer in einer Zeile steht, krieg das net richtig hin das einfügen, bin später wieder da :)

  • Bekommst du eine mysql.log?
    Heißt die ID in der Datenbank "id" oder "uid"?

  • Kannst du mir das Speichern, Laden und Resetten noch einmal in einem pastebin Code schicken?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Was mir noch einfällt, du könntest es mal so versuchen zu speichern:
    .. WHERE Name='%s'",...,name(playerid));
    Ich hoffe du meinst wie ich meine ;)

  • An deinem geposteten code kann man so kein fehler sehen am Query.


    Hast du den id auf AUTO_INCREMENT gesetzt ?.
    Da ich davon ausgehe das jeder die id 0 besitzt in deiner Datenbank.


    Zum Resetten der spielervariablen für den spieler ist ein for-schleife wesentlich komfortabler

    SpielerResetten(playerid)
    {
    for(new i; i != _:playerInfo; ++i) sInfo[playerid][playerInfo:i]= 0;
    }
    so wäre die for-schleife ebenfalls möglich
    for(new i; playerInfo:i < playerInfo; i++) sInfo[playerid][playerInfo:i] = 0;

  • AUTO_INCREMENT ist an, jeder hat seine eigene ID.

  • Hast Du Dir den MySQL-Query mal ausgeben lassen? - Wenn nein, tu dies mal und führe diesen manuell aus. Was ist das Ergebnis?
    Du solltest aus einem Integer keinen String machen. Die Anführungszeichen bei "Where"-Bedingung sind überflüssig.

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • Hast Du Dir den MySQL-Query mal ausgeben lassen? - Wenn nein, tu dies mal und führe diesen manuell aus. Was ist das Ergebnis?
    Du solltest aus einem Integer keinen String machen. Die Anführungszeichen bei "Where"-Bedingung sind überflüssig.

    Kannst du mir erklären wie das geht, arbeite erst seit kurzem mit MySQL.
    MfG

  • Den MySQL-Query kannst Du folgendermaßen ausgeben lassen.
    printf(variable);



    Deine "Where"-Bedingung sollte folgendermaßen aussehen.
    "WHERE id = %d"

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)