Beiträge von Jeffry

    Habe dort schon überall probiert sie zu kürzen bzw. zu schneiden, leider erfolgslos, deswegen so.

    Du kannst zwei Strings so miteinander verbinden, dann hast du nur ein Query, was performanter ist:
    stock SaveUserStats(playerid)
    {
    if(!Spieler[playerid][Eingeloggt]) return 1;
    new query[700];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET registriert = '%d', skin = '%d', money = '%d', adminlevel = '%d', fraktion = '%d', spawnchange = '%d', rang = '%d', wanteds = '%d', wantedgrund = '%e', muted = '%d', mutetime = '%d', level = '%d', spielzeit = '%d', email = '%e',",
    Spieler[playerid][Registriert],
    Spieler[playerid][Skin],
    Spieler[playerid][Money],
    Spieler[playerid][Adminlevel],
    Spieler[playerid][Fraktion],
    Spieler[playerid][Spawnchange],
    Spieler[playerid][Rang],
    Spieler[playerid][Wanteds],
    Spieler[playerid][WantedGrund],
    Spieler[playerid][Muted],
    Spieler[playerid][MuteTime],
    Spieler[playerid][Level],
    Spieler[playerid][Spielzeit],
    Spieler[playerid][Email]);
    mysql_format(handle, query, sizeof(query), "%s jailtime = '%d', jailed = '%d', jailtype = '%d', lottozahl = '%d', klasse = '%d', morde = '%d', tode = '%d', verbrechen = '%d', kh = '%d', ap = '%d', premium = '%d', donator = '%d', contractgeld = '%d' WHERE id = '%d'",
    query,
    Spieler[playerid][JailTime],
    Spieler[playerid][Jailed],
    Spieler[playerid][JailType],
    Spieler[playerid][LottoZahl],
    Spieler[playerid][Klasse],
    Spieler[playerid][Morde],
    Spieler[playerid][Tode],
    Spieler[playerid][Verbrechen],
    Spieler[playerid][KH],
    Spieler[playerid][AP],
    Spieler[playerid][Premium],
    Spieler[playerid][Donator],
    Spieler[playerid][ContractGeld],
    Spieler[playerid][p_id]);
    mysql_pquery(handle, query);
    return 1;
    }

    forward LoadFrakInfo();
    public LoadFrakInfo()
    {
    new rows = cache_get_row_count(), lID;
    if(rows > 0)
    {
    for(new i = 0; i < rows; i++)
    {
    lID = cache_get_field_content_int(i, "fID", dbhandle);
    cache_get_field_content(i, "RangName0", fInfo[lID][f_rang0], dbhandle, 32);
    }
    }
    return 1;
    }


    Der grundsätzliche Fehler war aber, dass du abgefragt hast, ob die ausgelesenen Zeilen 0 sind.

    Ändere den Dialog hierzu ab:
    case DIALOG_TICKET_DEL:
    {
    if(!response) return ShowPlayerDialog(playerid, DIALOG_ADMIN_TICKET_INFO, DIALOG_STYLE_LIST, "Ticket {85BEFF}Informationen", "{85BEFF}1.{FFFFFF} Annehmen\n{85BEFF}2.{FFFFFF} Löschen\n{85BEFF}3.{FFFFFF} Frage anschauen", "Auswählen", "Zurück");
    if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Fehler{FFFFFF}! Ungültige Zahl!");
    new ticketid = strval(inputtext);
    for(new i = 0; i < sizeof(TicketInfo); i++)
    {
    if(TicketInfo[i][t_id] == ticketid)
    {
    new query[56];
    format(query, sizeof(query), "DELETE FROM `supportticket` WHERE `id` = '%i'", ticketid);
    mysql_function_query(handle, query, true, "LoadTickets", "");
    TicketInfo[i][t_id] = 0;
    SendClientMessage(playerid, COLOR_WHITE, "Ticket {A4FF85}erfolgreich{FFFFFF} gelöscht.");
    return 1;
    }
    }
    SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Fehler{FFFFFF}! Ticket ist nicht vorhanden.");
    return 1;
    }
    Der else-Teil musste aus der Schleife, sonst könntest du immer nur das erste Ticket löschen.


    Und das Laden hierzu:
    forward LoadTicketData();
    public LoadTicketData()
    {
    new num_fields, num_rows;
    cache_get_data(num_rows, num_fields, handle);
    if(num_rows > 0)
    {
    for(new i = 0; i < num_rows; i++)
    {
    TicketInfo[i][t_id] = cache_get_field_content_int(i, "id", handle);
    cache_get_field_content(i, "Absender", TicketInfo[i][t_absender], handle, 35);
    cache_get_field_content(i, "Bereich", TicketInfo[i][t_bereich], handle, 35);
    }
    }
    for(new i = num_rows; i < sizeof(TicketInfo); i++) TicketInfo[i][t_id] = 0;
    return 1;
    }
    Dies setzt die Variablen am Ende wieder zu 0, somit kommt kein doppeltes Ticket am Ende vor.

    Zwecks dem Runtime Error, der könnte so umgangen werden:
    format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][g]) - 400]);
    zu:
    new model = GetVehicleModel(HausInfo[i][g_fahrzeug][g]);
    if(model < 400 || model > 611) format(string, sizeof(string), "%d - *?*\n", HausInfo[i][g_fahrzeug][g]);
    else format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[model - 400]);

    Statt if - else if würde ich dir in diesem Fall ne switch-case Konstruktion empfehlen

    Das geht bei Textdraws nicht, da deren ID erst zur Laufzeit vergeben wird, anders als bei Dialogen. ;)



    Mir fällt nichts mehr ein was ich machen könnte, ich vermtue stark das es am Public liegt...

    Versuche zu dem was @Alf21 sagte noch, das Textdraw mal so wie es ist, in einen komplett leeren Gamemode zu setzen, geht es dort?

    Hast du es mal versucht, ob der print aufgerufen wird, wenn du das +493.5 nutzt?



    in mir jetzt nicht sicher ob ich "else if" verwenden soll :3

    Sofern du in den if-Abschnitten am Ende jeweils ein return 1 nutzt spielt es keine Rolle, welche Variante du nutzt.
    Lässt du diese weg, ist es besser else-if zu nutzen, da die unteren Abschnitte dann nicht mehr abgefragt werden, sobald ein Treffer vorhanden ist.

    Du musst alles mit den Sekunden rechnen, sprich, wenn du jemand für eine Stunde sperren willst, würde das so aussehen:
    gesperrtBis[playerid] = gettime() + (60 * 60); //60 Sekunden * 60 Minuten


    Und die Abfrage:
    if(gesperrtBis[playerid] > gettime()) //noch gesperrt



    Beachte, dass der Wert natürlich in einer Datenbank oder ähnlichem gespeichert werden müssen und beim Login geladen werden müssen.


    Siehe auch: http://forum.sa-mp.com/showthread.php?t=254915%5D