Beiträge von Jeffry

    Das funktioniert unter bestimmten Bedingungen korrekt, ja. Allerdings nicht immer, und zwar dann, wenn der Spieler sowohl einen Report bei [0] hat, als auch bei [2] und die Listitems eine unterschiedliche Anzahl an anderen Listitems davor haben.


    Ändere es deshalb wie oben geschrieben zu:
    new counter;
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i) && GetPVarInt(i,"Eingeloggt") == 1)
    {
    if(ReportListitem[i][rID][clickedlistitem] != -1)
    {
    if(counter == listitem)
    {
    listitem = i;
    break;
    }
    counter++;
    }
    }
    }


    Dann sollte er, so wie du dein System aufgebaut hast, direkt die richtige Nummer (0 oder 2, oder eben andere) nehmen.

    Nein, aber versuche es so, da du - wie ich sehe - alle über einen Dialog ansprichst:
    if(ReportListitem[i][rID][0] != -1)
    zu:
    if(ReportListitem[i][rID][clickedlistitem] != -1)


    Nur in dem Code ändern, den ich dir gegeben habe (Zeile 17).


    Die neue Schleife die du hinzugefügt hast kannst du wieder weg machen.

    Nein, das ist keine Speicherfunktion.
    Du musst das Fahrzeug mit einem UPDATE-Query speichern. Falls du sowas nicht hast, musst du es bei deinem Parken Befehl einbauen.

    Ändere:


    case DIALOG_REPORTANNAHME:
    {
    new clickedlistitem = Spieler[playerid][pReportSelect],string[1000],headerstring[64];
    if(response == 0)
    {
    Spieler[playerid][pReportSelect] = 0;
    CancelSelectTextDraw(playerid);
    return 1;
    }
    else
    {
    if(!IsPlayerConnected(ReportListitem[listitem][rID][clickedlistitem]) || ReportListitem[listitem][rID][clickedlistitem] == -1)
    zu:
    case DIALOG_REPORTANNAHME:
    {
    new clickedlistitem = Spieler[playerid][pReportSelect],string[1000],headerstring[64];
    if(response == 0)
    {
    Spieler[playerid][pReportSelect] = 0;
    CancelSelectTextDraw(playerid);
    return 1;
    }
    else
    {
    new counter;
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i) && GetPVarInt(i,"Eingeloggt") == 1)
    {
    if(ReportListitem[i][rID][0] != -1)
    {
    if(counter == listitem)
    {
    listitem = i;
    break;
    }
    counter++;
    }
    }
    }
    if(!IsPlayerConnected(ReportListitem[listitem][rID][clickedlistitem]) || ReportListitem[listitem][rID][clickedlistitem] == -1)

    So wird das listitem zu dem eigentlichen "i" gesetzt, denn dort steht ja die ID drin.
    Wenn nämlich erst der Spieler mit der ID 5 eine Frage geschrieben hat, dann steht dessen Frage bei listitem 0. Wenn du dann direkt mit listitem auf das Array zugreifst, dann wird der Wert von Spieler ID 0 ausgelesen, und nicht der von der ID 5.



    Diese Anpassung musst du bei den anderen Reports auch machen.

    Beende bitte deinen Server, lösche dann den MySQL Log, starte den Server wieder und führe das aus, was die Warnung generiert hat.
    Dann poste den kompletten MySQL Log.

    Ändere mal:
    new string[350],
    hstate[5] = "Nein",
    hrentstate[5] = "Nein",
    str[50] = "",
    str1[50] = "";
    zu:
    new string[350],
    hstate[5],
    hrentstate[5],
    str[50],
    str1[50];
    hstate = "Nein";
    hrentstate = "Nein";

    Suche nach UpdateHaus, dazu müsste es eine extra Funktion (ssteht extra, nicht in einem Befehl oder so) geben (gegebenenfalls stock oder public), poste diese bitte.

    Könntest du uns bitte mitteilen, was du gemacht hast, um den Fehler zu beheben, bzw. was das Problem war, falls mal wieder jemand ein ähnliches Problem hat, und auf diesen Thread stößt? Wäre super! :)

    if(diewaffe == messer)||diewaffe == Messer)
    zu:
    if(!strcmp(diewaffe, "messer", true))


    Gleich bei den anderen Abfragen.


    Das true bedeutet, dass die Groß-/Kleinschreibung nicht beachtet wird.

    Prüfe deine MySQL Login Daten. Sollten die zu 100% korrekt sein, dann kontaktiere den Support deines Hosters, möglicherweise fehlen dir dann entsprechende Berechtigungen.

    Bin grade auf der Arbeit aber ich bin mir sicher, dass es listitem 0 ist weil das bisher das einzigste im Navigationssystem ist.

    Was wird dir so im Server Log ausgegeben?
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    printf("dialogid: %d", dialogid);
    if(dialogid == DIALOG_NAVI)
    {
    printf("response: %d", response);
    if(response)
    {
    printf("listitem: %d", listitem);
    if(listitem == 0)
    {
    printf("in");
    new tankid;
    tankid = GetClosestFuelstation(playerid);
    printf("tankid: %d", tankid);
    printf("Size: %d", sizeof(nextTanke));
    SetPlayerCheckpoint(playerid, nextTanke[tankid][Navi_X], nextTanke[tankid][Navi_Y], nextTanke[tankid][Navi_Z], 5);
    SendClientMessage(playerid, GELB, "[NAVI] {FFFFFF}Die Route wird berechnet...");
    printf("durch");
    }
    }
    return 1;
    }

    Das bedeutet, dass du eine "möglicherweise ungewollte Zuweisung" hast. Eine Zuweisung ist eine Wertzuweisung wie diese:
    tmp = 1;


    In deinen if-Abfragen ist jeweils nur ein "=", das wäre eine Wertzuweisung wie oben. Du willst aber einen Wert prüfen, daher musst du zwei "=" setzen, also:
    "=" zu "==" ändern.