Kleiner Bug beim Reportsystem

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
  • Hallo, ich habe einen Fehler beim Reportsystem, das ich selbst entworfen habe, zumindest Teilweise, doch leider leider leider leider, klappt es mal wieder nicht wie
    ich es mir vorgestellt habe, das finde ich ziemlich doof, naja was soll ich machen Sponsoring4all ist eh down :( da dachte ich mir mein Reportsystem zu verbessern und eigene Sachen einzubringen. Das Reportsystem ist so ähnlicht wie das Reportsystem von einen Goodfather Script, nur ein wenig editiert.
    Nun zum Befehl, oder mein Problem, was ich haben möchte.


    Also ich möchte, das wenn man /or eingibt, das dann eine Liste kommt, von allen offenen Reports.
    In diese Liste soll der SpielerName drin stehen, der einen Report geschrieben hat und auch was er geschrieben hat.
    Das heisst ich will den Inputtext den er im Reportfenster eingab, das er auch dann in der /or liste drin steht, doch es klappt nicht.
    der Text ist dann automatisch immer (I)
    mehr kommt dann da nicht.
    Ich brauche hilfe. So am Anhang habe ich auch noch ein Bild gepostet.
    Aber hier erstmal der schriftliche Code.


    ocmd:or(playerid)
    {
    new longstr[1024];
    if(PlayerInfo[playerid][pAdmin]==0&&PlayerInfo[playerid][pSupporter]==0)return ErrorMsg(playerid,"Du kannst diesen Befehl nicht benutzen.");
    format(longstr,sizeof(longstr),"Folgende Spieler haben einen Report geschrieben:\n");
    for(new i = 0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(Spielerwillreport[i]==0)continue;
    format(longstr,sizeof(longstr),"%s\n%s (%s)",longstr,SpielerName(i),washatspielergeschrieben[i]);
    }
    ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,"SWAT-Dienst",longstr,"OK","");
    return 1;
    }


    Oben im Script
    new washatspielergeschrieben[MAX_PLAYERS];


    OnPlayerConnect
    washatspielergeschrieben[playerid]=0;


    Bei Report annahme
    washatspielergeschrieben[playerid]=0;


    Bei Report ablehnen / löschen
    washatspielergeschrieben[playerid]=0;


    Bei Report abbrechen
    washatspielergeschrieben[playerid]=0;


    Bei den Reporttext des Spielers soll der Text in dem falle inputtext in die Variable washatspielergeschrieben gespeichert werden.
    Und das soll im normalfall so passieren
    washatspielergeschrieben[playerid]=inputtext[playerid];


    So das war, hier noch im Anhang der Screen.

  • Du musst das, was der Reporter geschrieben hat, erstmal in ne Variable reinschmeißen. Das mit der Schleife und den addieren in den string ist schon gut. Gut wäre es, wenn du den den Text wie folgt einstellst:


    #ReportID, Uhrzeit wann geschrieben von User XYZ | ID: xx


    Dann kannst du unter dem Aufrufen des Dialoges den string analyisieren und die ID vom User raussuchen. Als Beispiel:


    #1234, 19.05.2013 von ThomasTailor93 | ID: 5


    Wäre im Script


    #%d, %d.%d.%d von %s | ID: %d


    Also könntest du nun wie folgt die ID herausfinden:



    case DIALOG_REPORT:
    {
    new reporter_id = strval(inputtext[28]); //Abgezählt bis zum %d der ID sind es 28 Zeichen, reporter_id müsste nun die ID herausfinden
    ShowPlayerDialog(playerid,DIALOG_SHOW_REPORT,"Überschrift","Text","Annehmen","Abbrechen");
    }


    Zumindestens würde ich das so lösen.


    Was noch einfacher wäre: Report in die MySQL Datenbank speichern, dann bei Annahme alles aus der DB ziehen und fertig. Ist definitiv einfacher, als die obere Variante.