Wert wird vertauscht ?

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
  • Schönen guten Tag,


    ich habe grade ein kleines Problemchen festgestellt, welches ich auch nicht gelöst bekomme. Und zwar verschieben sich die IDs...



    Ich übergebe die ID ..


    ocmd:deltele(playerid,params[])
    {
    new string[64];
    for(new i=0; i<MAX_TELE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,2.0,Telefonzelle[i][x2],Telefonzelle[i][y2],Telefonzelle[i][z2]))
    {
    SetPVarInt(playerid,"Telezelle",i);
    format(string,sizeof(string),"Telefonzelle ID: %d",i);
    ShowPlayerDialog(playerid,DIALOG_ETELE,DIALOG_STYLE_LIST,string,"Telefonzelle Löschen","Auswahl","Abbrechen");
    }
    else { SendClientMessage(playerid,Weiss,"Du bist an keiner Telefonzelle!"); return 1; }
    }
    return 1;
    }


    Im Dialog:
    SendClientMessage(playerid,Weiss,"Telefonzelle erfolgreich gelöscht.");
    DeleteTele(GetPVarInt(playerid,"Telezelle"));
    return 1;


    Hier wird sie gelöscht..
    stock DeleteTele(ttID)
    {
    DestroyObject(telezelle[ttID]);
    Delete3DTextLabel(telelabel[ttID]);
    Telefonzelle[ttID][x2] = 0.0;
    Telefonzelle[ttID][y2] = 0.0;
    Telefonzelle[ttID][z2] = 0.0;
    Telefonzelle[ttID][rx2] = 0.0;
    Telefonzelle[ttID][ry2] = 0.0;
    Telefonzelle[ttID][rz2] = 0.0;
    new query[128];
    format(query, 128, "DELETE FROM `Telefonzellen` WHERE `id` = '%d'", ttID);
    mysql_query(query);
    return 1;
    }



    Hier wird sie erstellt..

    if(Spieler[playerid][ErstelltTele] == 1)
    {
    new tele = GetPVarInt(playerid,"Telezelle");
    Telefonzelle[tele][tID] = tele;
    Telefonzelle[tele][x2] = fX;
    Telefonzelle[tele][y2] = fY;
    Telefonzelle[tele][z2] = fZ;
    Telefonzelle[tele][rx2] = fRotX;
    Telefonzelle[tele][ry2] = fRotY;
    Telefonzelle[tele][rz2] = fRotZ;
    format(query,sizeof(query),"INSERT INTO `Telefonzellen` (`id`, `x2`, `y2`, `z2` , `rx2` , `ry2` , `rz2`) VALUES(%d,%f,%f,%f,%f,%f,%f)",Telefonzelle[tele][tID],fX, fY, fZ,fRotX, fRotY, fRotZ);
    mysql_query(query);
    telelabel[tele] = Create3DTextLabel("Telefonzelle\nbenutze die Taste '{FFA000}N{FEFEFE}'", Weiss, Telefonzelle[tele][x2], Telefonzelle[tele][y2], Telefonzelle[tele][z2], 10.0,0,0);
    Spieler[playerid][ErstelltTele] = 0;
    }


    Wo liegt bitte der Fehler ?

  • lösche doch alles in einem befehl.
    und noch ein tipp, wenn du nur eine sache machst wie else sendclient..
    brauchst du keine {} da reicht else return SendClient..


    Ob ich es nun in einen Befehl packe oder so, kommt aufs gleiche bei raus..


    Wenn ich das so mache mit dem return wie du das sagst, wird die Message gespammt 8)

  • okay jaa denkfehler is ja in ner schleife^^ aber sonst nur zu empfehlen.
    probiere es mal mit ner spieler/globalen variable also ohne pvar


    Bitte was sollte das bringen, der PVar wird nirgendswo vertauscht, also ist Sinn und Zweck das gleiche ^^
    Ich habe mir das ganze schon lange genug angeschaut und rumversucht aber nichts ..

  • okay dernn probiers mal so

    DeleteTele();
    stock DeleteTele()
    {
    DestroyObject(telezelle[GetPVarInt(playerid,"Telezelle")]);
    Delete3DTextLabel(telelabel[GetPVarInt(playerid,"Telezelle")]);
    Telefonzelle[GetPVarInt(playerid,"Telezelle")][x2] = 0.0;
    Telefonzelle[GetPVarInt(playerid,"Telezelle")][y2] = 0.0;
    Telefonzelle[GetPVarInt(playerid,"Telezelle")][z2] = 0.0;
    Telefonzelle[GetPVarInt(playerid,"Telezelle")][rx2] = 0.0;
    Telefonzelle[GetPVarInt(playerid,"Telezelle")][ry2] = 0.0;
    Telefonzelle[GetPVarInt(playerid,"Telezelle")][rz2] = 0.0;
    new query[128];
    format(query, 128, "DELETE FROM `Telefonzellen` WHERE `id` = '%d'", GetPVarInt(playerid,"Telezelle"));
    mysql_query(query);
    return 1;
    }

  • Das liegt ganz einfach daran, dass INSERT INTO eine neue Zeile erstellt, daher eine neue ID.
    Beispiel:
    10 Telefonzellen vorhanden (0..9).


    DELETE 5
    INSERT INTO
    => Neue ID in der Datenbank: 10.
    => 5 existiert nicht mehr.


    Was kannst du machen?
    Mach eine neue Spalte, die "deleted" heißt, in deiner Datenbank. Anstatt die Telefonzelle zu DELETE'n setzt du einfach "deleted" zu 1, und die anderen Werte leer/null.
    Anstatt INSERT INTO beim Erstellen der Telefonzelle anhand der GetPVar nimmst du UPDATE und setzt die Werte, sowie "deleted" wieder zu 0.


    Verstanden?