Beiträge von Jeffry

    Ja jetzt nach dem printen ja

    Dann hat es sich wohl über Nacht von selbst behoben :fun:


    Hatte ich auch schon, dass etwas was am ersten Tag nicht ging am anderen Tag plötzlich, ohne dass man etwas daran geändert hat, ging. Umso besser!
    Falls nochmals Probleme auftreten sollten, sage einfach Bescheid (am besten du postest dann die Prints gleich dazu).

    Lasse es dir mal so ausgeben, für ein Ticket, bei dem es nicht geht:
    if(dialogid == DIALOG_TICKET_LOESCHEN)
    {
    printf("DIALOG_TICKET_LOESCHEN");
    if(response)
    {
    if(!IsNumeric(inputtext))
    {
    SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}FEHLER{FFFFFF}: Bitte Ticket-ID eingeben um löschen zu können!");
    new str1[100];
    format(str1, sizeof(str1), "{FFFFFF}Möchtest du dieses Ticket löschen?\n{FF7A7A}Hinweis{FFFFFF}: Ticket-ID eingeben um löschen zu können.");
    ShowPlayerDialog(playerid, DIALOG_TICKET_LOESCHEN, DIALOG_STYLE_INPUT, "Support Ticket {6DCCFF}löschen",str1, "Ausführen", "Beenden");
    }
    else
    {
    printf("Eingabe: %s", inputtext);
    new txt = strval(inputtext);
    for(new i = 0; i < sizeof(TicketInfo); i++)
    {
    printf("i: %d / t_id: %d / txt: %d", i, TicketInfo[i][t_id], txt);
    if(TicketInfo[i][t_id] == txt)
    {
    printf("Absender: %s", TicketInfo[i][t_absender]);
    printf("ID: %d", GetPlayerIdFromName(TicketInfo[i][t_absender]));
    PlayerNeedsHelp[GetPlayerIdFromName(TicketInfo[i][t_absender])] = 0;
    //printf("Eingabe: %i", txt);
    //printf("Vor dem löschen: %i", TicketInfo[i][t_id]);
    TicketInfo[i][t_id] = 0;
    //printf("ID löschen: %i", TicketInfo[i][t_id]);
    new query[156];
    format(query, sizeof(query), "DELETE FROM `ingameticket` WHERE id='%i'", txt);
    print(query);
    mysql_function_query(dbhandle, query, true, "LoadTickets", "");
    SendClientMessage(playerid, COLOR_WHITE, "Du hast das Ticket {9FFF92}erfolgreich{FFFFFF} gelöscht!");
    return 1;
    }
    }
    SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}Falsche{FFFFFF} Ticket-ID angabe!"); //Aus der Schleife geholt
    return 1;
    }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}Abgebrochen{FFFFFF}.");
    }


    Was steht dann in Server Log?

    ocmd:makeadmin(playerid, params[])
    {
    new pID, a_level, string[128];


    if(sInfo[playerid][alevel] < 4)return SendClientMessage(playerid,COLOR_RED,"Dein Adminrang ist zu niedrig.");
    if(sscanf(params, "ui", pID, a_level))return SendClientMessage(playerid, COLOR_YELLOW, "INFO: /makeadmin [playerid] [rang]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_RED,"Dieser Spieler ist nicht online.");


    format(string, sizeof(string), "Admin %s hat dein Adminlevel auf %i geändert.", SpielerName(playerid), a_level);
    SendClientMessage(pID, COLOR_LIGHTBLUE, string);


    format(string, sizeof(string), "Du hast %s Adminlevel auf %i geändernt.", SpielerName(pID), a_level);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    sInfo[pID][alevel] = a_level;
    savePlayer(pID);
    return 1;
    }


    Zusammen mit dem Stock SpielerName natürlich.

    printf("ID: %i", TicketInfo[i][t_id]);

    Siehst du diesen Print im Server Log, wenn du den Server startest?


    Es ist mir sonst irgendwie unerklärlich, denn es ist ja ein und derselbe Code, der ausgeführt wird. Kann ja nicht sein, dass er einmal funktioniert, und einmal nicht.


    Kannst du deine GetPlayerIdFromName Funktion noch posten? Möglicherweise liegt es daran.

    Genau, das würde dann so aussehen. Die Schleife mit dem Array Durchlauf durch string sollte daher nur bei Dialogen verwendet werden, da die keine Tilden zur Formatierung nutzen (außer man will Tilden im Text haben, dann muss man sich ein anderes Zeichen suchen).


    Für Textdraws benötigt man keine "Übersetzung", das kann 1:1 aus der Datenbank gelesen werden, daher darf man für einen String der im Textdraw genutzt wird die Schleife nicht voranstellen (in einem Textdraw gibt es keine Formatierung mit Backslash).


    Ich denke das ist was du meinst, dass man die Tilde nicht als Zeilenumbruch Platzhalter nutzen darf, wenn sie anderweitig verwendet werden soll.

    Wobei du bei ~ (Tilde) wegen den Color Codes aufpassen musst, falls du iwann mal vorhast, Text von Textdraws oder ähnliches zu speichern :)

    Das spielt eigentlich keine Rolle, da bei Textdraws mit ~n~ ein Zeilenumbruch gemacht wird, daher darf die obige Routine gar nicht an der Stelle eingefügt werden, wenn der Text für ein Textdraw bestimmt ist. ;)

    Das liegt daran, dass dies als zwei Zeichen erkannt wird.
    Es gibt aber einen Trick:


    In deiner Datenbank:

    Zitat

    Dieser Zeilenumbruch~wird nun beachtet.


    Code:
    for(new i=0; i<strlen(string); i++) if(string[i] == '~') string[i] = '\n';
    ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,"Info",string,"Schließen","");


    string = der Wert aus der Datenbankspalte in der der Text steht.

    Wenn ich den Server restarte und Tickets noch vorhanden sind kann ich die danach nicht mehr löschen, sprich nur die Ticket-ID's die neu hinzugefügt wurden...

    Komisch. Kannst du mal die aktuelle Version des Codes posten, mit dem du die Tickets lädst, sowie den Code, mit dem du ein Ticket erstellst?

    if(!IsPlayerInRangeOfPoint(playerid,5.0,219.4720,-226.6486,1.7786)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist nicht im Hacking Stern!");
    Die playerid und der Range haben gefehlt.

    Ja, nach der Abfrage-Zeile.
    Die Abfrage muss so aussehen:
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 219.4720,-226.6486,1.7786)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist hier falsch.");

    ich kann dir beide Script's mal ltschicken mit den Datenbanken

    Das kannst du machen, ich werde aber erst am Wochenende dazu kommen, das zu testen. Reicht dir das?



    Ich will aber nicht unbedingt eine Ältere Version nutzen

    Hast du es trotzdem mal versucht? Wenn nicht, versuche es einfach mal, vielleicht bringt es was.

    Nein, am besten vor:
    SendClientMessage(playerid, COLOR_ALLDEPT, "Du fängst an zu Hacken, bleib 2 Minuten im Auto.");


    Dort:
    if(!IsPlayerInRangeOfPoint(...)) return ...



    Ich gebe es auch zu das ich nicht so gut bin beim Scripten sorry das ich so viele Fragen stelle

    Das ist absolut kein Problem, dafür ist das Forum ja da! Du darfst gerne so viele Fragen stellen wie du möchtest und wir helfen dir immer gerne!

    Kann das Filterscript auch mit dem Gamemode Daten austauschen bzw. kommunizieren?

    Ja, hiermit: https://wiki.sa-mp.com/wiki/CallRemoteFunction




    Die kann man sozusagen nutzen, um den Gamemode auch in gewisser Weise aufzuräumen und den Code dann in die Includes verlagern und vom Gamemode aus drauf zugreifen?

    Korrekt. Wenn du zum Beispiel 200 Farb-Defines hast, dann kannst du die da rein packen.
    Oder wenn du eben Funktionen hast, die du in mehreren Codes (GM/FS) nutzen willst.