Hilfe bei Report-System

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 Brotfische,


    Ich bräuchte mal eure Hilfe da ich bei den Temparaturen nicht mehr klar denken kann ;)


    Ich möchte ein Reportsystem machen, wenn jetzt jemand "/report" oder so eintippt soll ein Dialog kommen wo man sein Report eintippen kann. (Bis hierhin kein Problem ;) )
    Dieser soll dann in einer Variable gespeichert werden... (Report "string" und der User)
    Dannach soll das Admin Textdraw auf +1 gestezt werden also das dann da z.B steht "Report: 1" [Das sollte ich auch hinbekommen] ...


    (So jetzt finde ich wird es etwas schwieriger) Wenn jetzt ein Admin eintippt "/showreports" dann soll ein Dialog geöffnet werden, wo dann alle Reports drinne stehn.. (Der Report + Spieler) Bsp. "Spieler | Ich habe ein Probelm mit dem Fahrzeug".
    Wenn man dann ein Doppelklick drauf macht wird dann der "/sup" Chat aktiviert zum Spieler aktiviert.


    Ich hoffe es kann mir jemand helfen :)


    Edit: Hab was vergessen.


    mfg :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Hier, ich habe dir einen kleinen Ansatz geschrieben.


    if (strcmp("/showreports", cmdtext, true, 12) == 0)
    {
    //Adminabfrage
    new string[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(playerid))continue;
    if(IsPlayerNPC(playerid))continue;
    //Spieler eingelogt abfrage
    //Abfrage ob spieler einen Report offen hat
    format(str, sizeof(str), "%s%s | %s\n", string, /*Report von*/, /*Reporttext*/);
    }
    ShowPlayerDialog(playerid, /*dialogid*/, DIALOG_STYLE_LIST, /*Überschrift*/, string, /*button1*/, /*button2*/);
    }


  • Danke erstmal :)


    aber gehört das nicht so? :whistling:


    if (strcmp("/showreports", cmdtext, true, 12) == 0)
    {
    //Adminabfrage
    new string[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;// playerid --> i
    if(IsPlayerNPC(i))continue;// playerid --> i
    format(str, sizeof(str), "%s%s | %s\n", string, /*Report von*/, /*Reporttext*/);
    }
    ShowPlayerDialog(playerid, /*dialogid*/, DIALOG_STYLE_LIST, /*Überschrift*/, string, /*button1*/, /*button2*/);
    }


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ich schreibe gerade am Report - System weiter doch leider kommt dieser Error... und ich versteh nicht warum :(


    Error:
    error 033: array must be indexed (variable "string")
    error 033: array must be indexed (variable "string")


    Code:
    new string[149];
    format(string,sizeof(string),"%s",getPlayerName(playerid));
    SupportName[playerid]==string; //Fehler
    format(string,sizeof(string),"%s",inputtext);
    SupportText[playerid]==string;//Fehler


    Mit freundlichen Grüßen
    German_ScripterHD

  • @ Jeffry


    Danke, aber jetzt komm ich langsam an meine Scripting Grenzen .. :(


    ocmd:sup(playerid,params[])
    {
    ShowPlayerDialog(playerid,Support_Dialog,DIALOG_STYLE_INPUT,"[Report System]","Bitte gebe dein Report in das untere Feld.","Absenden","Abbrechen");
    return 1;
    }


    if(dialogid==Support_Dialog)
    {
    if(response)
    {
    if(strlen(inputtext)>8)
    {
    format(SupportName[playerid],MAX_PLAYER_NAME, getPlayerName(playerid));
    format(SupportText[playerid],128,inputtext);
    SendClientMessage(playerid,C_Blau,"Dein Report wurde erfolgreich gespeichert.");
    SendClientMessage(playerid,C_Blau,"Ein Adminisitrator wird sich gleich um dein Report kümmern.");
    }
    else
    {
    SendClientMessage(playerid,C_Error,"Dein Report ist zu kurz!");
    ShowPlayerDialog(playerid,Support_Dialog,DIALOG_STYLE_INPUT,"[Report System]","Bitte gebe dein Report in das untere Feld.","Absenden","Abbrechen");
    }
    }
    }




    ocmd:showreports(playerid,params[])
    {
    if(!isAdmin(playerid,1))return SendClientMessage(playerid,C_Error,"Du hast keine Berechtigung für diesen Befehl!");
    new string[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(IsPlayerNPC(i))continue;
    format(string, sizeof(string), "%s%s | %s\n", string, SupportName[i], SupportText[i]);
    }
    ShowPlayerDialog(playerid, ShowReportDialog, DIALOG_STYLE_LIST, "Aktuelle Reports", string, "Annehmen", "Abbrechen");
    return 1;
    }


    Soweit sogut :)


    Aber ab jetzt komm ich an meine Grenzen..


    if(dialogid==ShowReportDialog)
    {
    if(!response)return 1;
    new tmp;
    switch(listitem)
    {
    case 0..50:
    {


    Undzwar möchte ich wenn der Admin auf den Report drückt das dann die Verbindung zum anderen Spieler hergestellt wird, so das Admin bzw. Supporter mit anderen Spieler im Chat kommunizieren können.


    Ich hoffe es kann mir jemand weiter helfen :)


    MfG German_ScripterHD


    Mit freundlichen Grüßen
    German_ScripterHD

  • Mehr oder weniger so:
    if(dialogid==ShowReportDialog)
    {
    if(!response)return 1;
    new pID = listitem;
    if(!strlen(SupportName[pID]))return 1;
    SendClientMessage(pID, 0xFF0000FF, "Hallo, du hast einen Report gesendet.");
    //...
    return 1;
    }
    Zumindest entnehme ich das dem obigen Befehl so.

  • @ Jeffry


    Danke... :D


    Jetzt noch eine Frage:


    Wie kann man Abfragen ob in einem String weniger als 3 Buchstaben oder Zahlen drinne steht ?


    Weil ich dann bei ocmd:sup Abfragen möchte ob schon was im "SupportText" schon was drinne steht oder nicht... Sollte etwas im String steh dann würde ich einfach return SendClientMessage(playerid,-1,"Du hast bereits ein Support geöffnet!); senden.


    Mit freundlichen Grüßen
    German_ScripterHD

  • @ Jeffry


    Vielen Dank, ich habe heute viel dazu gelernt, nun habe ich noch ein aller letztes Problem :)


    ocmd:delsupport(playerid,params[])
    {
    if(!isAdmin(playerid,1))return SendClientMessage(playerid,-1,"Du bist kein Admin!");
    SendClientMessage(playerid,-1,"Du hast den Report geschlossen!");
    SupAccept[playerid /*Admin*/]=0;
    //...
    SupAccept[/*? Spieler*/]=0;
    SupportText[/*? Spieler*/]=" ";
    return 1;
    }


    Jetzt ist meine letzte Frage :) , wie kann ich den Report der anderen Person schließen (Variablen zurücksetzten) ?


    //Edit: Schreibfehler


    Mit freundlichen Grüßen
    German_ScripterHD

    Einmal editiert, zuletzt von German_ScripterHD ()

  • ocmd:delsupport(playerid,params[])
    {
    if(!isAdmin(playerid,1))return SendClientMessage(playerid,-1,"Du bist kein Admin!");
    new pID;
    if (sscanf(params, "u", pID)) {
    return SendClientMesage(playerid, COLOR_GREY, "Info: /delsupport [playerid/name]");
    }
    if (!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid, COLOR_RED, "Spieler ist Offline.");
    }
    if (SubAccept[playerid] == 0 || SubAccept[pID] == 0) {
    return SendClientMessage(playerid, COLOR_RED, "Du oder der Spieler ist nicht im Support!");
    }
    SendClientMessage(playerid,-1,"Du hast den Report geschlossen!");
    SupAccept[playerid] = 0;
    //...
    SupAccept[pID] = 0;
    SupportText[pID] = " ";
    return 1;
    }

  • @ Pascal. Danke, habe es aber schon selbst gelöst gehabt :)


    Jetzt kommt noch einwas, was mir wirklich seit Tagen Kopfschmerzen bereitet:


    New´s + Define´s
    new SupAccept[MAX_PLAYERS];
    new SupportName[MAX_PLAYERS];
    new SupportText[MAX_PLAYERS];


    #define Support_Dialog 118
    #define ShowReportDialog 119


    Befehle:


    ocmd:sup(playerid,params[])
    {
    if(SupAccept[playerid]==1)
    {
    new string[300],text[150];
    if(sscanf(params,"s",text)) return SendClientMessage(playerid,C_Weiß,"/sup [Text]");
    format(string,sizeof(string),"%s(Sup):%s",getPlayerName(playerid),text);
    SendClientMessage(playerid,C_Weiß,string);
    }
    else
    {
    if(strlen(SupportText[playerid]) >= 5) return SendClientMessage(playerid, C_Error, "Du hast bereits ein Ticket erstellt.");
    ShowPlayerDialog(playerid,Support_Dialog,DIALOG_STYLE_INPUT,"[Report System]","Bitte gebe dein Report in das untere Feld.","Absenden","Abbrechen");
    }
    return 1;
    }
    ocmd:showreports(playerid,params[])
    {
    if(!isAdmin(playerid,1))return SendClientMessage(playerid,C_Error,"Du hast keine Berechtigung für diesen Befehl!");
    new string[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(IsPlayerNPC(i))continue;
    format(string, sizeof(string), "%s%s | %s\n", string, SupportName[i], SupportText[i]);
    }
    ShowPlayerDialog(playerid, ShowReportDialog, DIALOG_STYLE_LIST, "Aktuelle Reports", string, "Annehmen", "Abbrechen");
    return 1;
    }


    Dialoge:
    if(dialogid==Support_Dialog)
    {
    if(response)
    {
    if(strlen(inputtext)>8)
    {
    format(SupportName[playerid],MAX_PLAYER_NAME, getPlayerName(playerid));
    format(SupportText[playerid],128,inputtext);
    SendClientMessage(playerid,C_Blau,"Dein Report wurde erfolgreich gespeichert.");
    SendClientMessage(playerid,C_Blau,"Ein Adminisitrator wird sich gleich um dein Report kümmern.");
    }
    else
    {
    SendClientMessage(playerid,C_Error,"Dein Report ist zu kurz!");
    ShowPlayerDialog(playerid,Support_Dialog,DIALOG_STYLE_INPUT,"[Report System]","Bitte gebe dein Report in das untere Feld.","Absenden","Abbrechen");
    }
    }
    }
    if(dialogid==ShowReportDialog)
    {
    if(!response)return 1;
    new pID = listitem;
    if(!strlen(SupportName[pID]))return 1;
    SendClientMessage(pID, 0xFF0000FF, "Dein Report wurde geöffnet. Du kannst jetzt mit /sup schreiben.");
    SupAccept[pID]=1;
    SupAccept[playerid]=1;
    return 1;
    }


    Nun meine Frage:


    Wie kann ich das mit dem /sup (Nach dem der Report geöffnet wurde) dass Supporter und Spieler zusammen kommunizieren können am besten scripten?


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Wie kann ich das mit dem /sup (Nach dem der Report geöffnet wurde) dass Supporter und Spieler zusammen kommunizieren können am besten scripten?


    Einfach unter OnPlayerText schauen ob der Spieler ein Ticket hat...und ob der Admin online ist...dann dem senden und umgekehrt ;)

    ast2ufdyxkb1.png


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

  • Hmm dein System wird so gar nicht funktionieren...diese Zeile ist sehr falsch:


    new pID = listitem;


    Das stimmt nicht.


    //Edit: Sorry keine Zeit mehr dafür...


    Aber schau dir evtl paar Beispiele an: Ticket System


    http://forum.sa-mp.com/showthread.php?t=158674


    http://gta-sa-mp.de/forum/3-sa…216-problem-ticketsystem/

    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 ()

  • Den Dialog zu:
    if(dialogid==ShowReportDialog)
    {
    if(!response)return 1;
    if(!strlen(SupportName[pID]))return 1;
    new pID = ReturnPlayerID(SupportName[pID]);
    SendClientMessage(pID, 0xFF0000FF, "Dein Report wurde geöffnet. Du kannst jetzt mit /sup schreiben.");
    SupAccept[pID]=playerid;
    SupAccept[playerid]=pID;
    return 1;
    }


    Der Befehl im Ansatz:
    ocmd:sup(playerid,params[])
    {
    if(SupAccept[playerid] == -1)return SendClientMessage(playerid,C_Error,"Du hast keinen offenen Supportchat!");
    if(!params[0])return SendClientMessage(playerid,C_Error,"Info: /sup [Text]");
    new string[145];
    format(string, sizeof(string), "[Sup] %s", params);
    new pID = SupAccept[playerid];
    SendClientMessage(pID, 0xFF0000FF, string);
    SendClientMessage(playerid, 0xFF0000FF, string);
    return 1;
    }


    Und diese Funktion benötigst du:
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i, l_name, MAX_PLAYER_NAME);
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

  • if(!strcmp(l_name,l_PlayerName, true))


    Da sollte der True Parameter raus...weil es gibt viele Spaßvögel die sich ähnlich nennen, wie z.B. ShoXi oder shoXi ...


    Nicht dass man da den falschen auswählt ^^

    ast2ufdyxkb1.png


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


  • geht das auch so ? :




    ocmd:sup(playerid,params[])
    {
    if(strlen(SupportText[playerid]) >= 5)//Er hat schon ein Support Ticket erstellt
    {
    if(SupAccept[playerid] == 1)
    {
    if(!params[0])return SendClientMessage(playerid,C_Error,"Info: /sup [Text]");
    new string[145];
    format(string, sizeof(string), "%s[Sup] %s", getPlayerName(playerid),params);
    new pID = SupAccept[playerid];
    SendClientMessage(pID, 0xFF0000FF, string);
    SendClientMessage(playerid, 0xFF0000FF, string);
    }
    else
    {
    SendClientMessage(playerid,C_Error,"Du hast keinen offenen Supportchat!");
    }
    }
    else //Er hat noch kein Ticket erstell...
    {
    ShowPlayerDialog(playerid,Support_Dialog,DIALOG_STYLE_INPUT,"[Report System]","Bitte gebe dein Report in das untere Feld.","Absenden","Abbrechen");
    }
    return 1;
    }


    //Edit: Rechtschreibfehler


    Mit freundlichen Grüßen
    German_ScripterHD