Problem bei Report system mit Dialogen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Guten Tag,

    ich habe vor kurzen mal wieder angefangen ein bisschen zu Scripten und bin gerade über einem Report system mit Dialogen. Ich habe es jetzt so gemacht das ich mit dini Dateien speicher mit dem Report.

    Code
    public Report(playerid,inputtext[])
    {
        new Reportdatei[64];
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid,name,sizeof(name));
        format(Reportdatei,sizeof(Reportdatei),"/Reports/%s.txt",name);
        dini_Create(Reportdatei);
        dini_Set(Reportdatei,"Report",inputtext);
        return 1;
    }

    Jetzt möchte ich aber mit /showreport alle Daten von den Spielern auslesen un in einem DIALOG_STYLE_LIST anzeigen lassen aber es zeigt mir immer nur einen an. Ich weis das da in dem folgenden Code noch was fehlt aber ich weis leider nicht was das es mir mehrere Zeilen anzeigt.

    Code
    ocmd:showreport(playerid,params[])
    {
        new string[128],name[MAX_PLAYER_NAME];
        GetPlayerName(playerid,name,sizeof(name));
        if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
        if(PlayerInfo[playerid][pAdminlevel] < 1)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
        format(string,sizeof(string),"%s",name);
        ShowPlayerDialog(playerid,DIALOG_SHOWREPORT,DIALOG_STYLE_LIST,"Reportsystem",string,"Schließen");
        return 1;
    }

    nun meine frage was fehlt da dass es mir alle nahmen anzeigt.

    und was muss ich machen das ich diese "Reportdatei" auslesen kann und wenn ich auf den Namen drück mir der Inhalt von der .txt Datei angezeigt wird.


    ich hoffe mir kann jemand helfen

  • Ist nicht so leicht, da du das versuchst über das Dateisystem zu machen, anstatt über ein Datenbanksystem, wie MySQL.


    Aber trotzdem habe ich noch Fragen, wie du dir das vorstellst.

    • Sollen dem Admin alle Reports angezeigt werden, die jemals erstellt wurden?
    • Sollen ihm nur die angezeigt werden von Spielern, die gerade online sind?
    • Sollen ihm nur offene Reports angezeigt werden? Willst du da einen Ordner mit Opened/Closed Reports haben?

    PS: Denk ggfs über ein Anti-Spam System nach (sowas wie man kann nur jede Stunde einen Report machen o.ä.). Denn mit einem Keybinder, könnte man deinen Server binnen Stunden so zuspammen, dass da gar nichts mehr geht xD Und ja, so Trolle gibts leider wirklich 🤡

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    Einmal editiert, zuletzt von Kaliber () aus folgendem Grund: Keybinder, nicht Keylogger, lol 😂

  • Danke erstmal für die Antwort

    ich hab mir das so gedacht das wenn Spieler 1 einen Report schreibt das eine 1.txt erstellt wird und das selbe bei Spieler 2 und 3 diese werden dann ingame angezeigt. Wenn Spieler 2 z.B. einen zweiten Report schreibt soll der erste von ihm „überschrieben“ werden. Mit /closereport [playerid/PartOfName] soll diese Datei dann gelöscht werden. Ich hoffe das konnte deine Fragen beantworten.


    Wo vllt auch noch ein Problem ist was mir grade einfällt, ich habe aktuell 2 Reports in dem Reports Ordner es wird mir ingame aber immer nur einer angezeigt.

    Wie kann man variablen in Dialogen anzeigen lassen?

  • ich hab mir das so gedacht das wenn Spieler 1 einen Report schreibt das eine 1.txt erstellt wird und das selbe bei Spieler 2 und 3 diese werden dann ingame angezeigt. Wenn Spieler 2 z.B. einen zweiten Report schreibt soll der erste von ihm „überschrieben“ werden.

    Dann wäre es logischer, die Datei nach dem Spieler zu benennen, so weißt du direkt, von wem sie ist, und ob bereits ein Report von dem Spieler existiert.


    Das Dumme ist nur, dass nativ in SAMP keine Schleife durch das Dateisystem möglich ist. Dafür bräuchtest du ein Plugin, wie https://github.com/JaTochNietDan/SA-MP-FileManager


    Aber grundsätzlich ist eher davon abzuraten, da das sehr ineffizient ist.


    Das zeigt dir z.B. die ersten 15 reports. Ein Seitensystem ist hier auch bissl kniffliger. Am Besten wäre es wohl das in eine Funktion auszulagern und n Start Parameter festzulegen.


    Wenn jetzt eine Datei ausgewählt wird, dann steht im "inputtext" der Dateiname. Dann kannst du einfach mit fread diese auslesen und anzeigen :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Sry für die doofe frage aber könntest du mir des nochmal erklären da steh ich grad voll aufm Schlauch :P

    - Wie installiere ich dieses Plugin?

    - Wie genau meinst du das mit einer Funktion auslagern?


    Die Dateien werden ja schon mit den Spielernamen gespeichert.

    Hier mal alles was ich zu dem Report System bis jetzt habe:

    Code
    ocmd:report(playerid,params[])
    {
        ShowPlayerDialog(playerid,DIALOG_REPORT,DIALOG_STYLE_INPUT,"Reportsystem","Bitte geb deinen Report ein \n Dein Report wird umgehend an \n einen Admin weitergeleitet!","Absenden","Abbrechen");
        return 1;
    }
  • Sollen ihm nur die angezeigt werden von Spielern, die gerade online sind?

    Nochmal zu dieser Frage, soll das so sein?


    Denn dein aktuelles System funktioniert nur so.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S