Report sytsmen mit Dialoge

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 liebe Community!
    Ich mache nun ein Report system mit Dialoge.
    Ich hoffe es gefällt euch ich scripte es auf meine art und weise und möchte keine dumme Kommentare hören
    das ich dass falsch scripte etc..
    Weil sowas könnt ihr euch Sparen weil ich gebe 1000% drauf das dass Report system klappen wird. ( Jeden falls bei mir )
    Nun Viel Spaß =)


    Als erstes brauchen wir das inlucde ocmd. Ihr könnt es gerne bei OnPlayerCommandText machen aber ich mache es mit ocmd.
    oben im script wo #include <a_samp> steht machen wir eine zeile darunter #include <ocmd> //#include = er inluciert ein include :D ocmd = Command-Prrozessor ein include was man sich Downlaoden muss


    Was ist OCMD?
    Ocmd ist ein Command-Prozessor womit man größere Befehle scripten kann und auch leichter ist.

    Nun gehen wir paar zeilen runter bei den includes und machen die Dialoge

    #define DIALOG_REPORT 1 // #define -->Definiert etwas -->DIALOG_REPORT--> Ist der
    name ihr könnt es auch anders nennen --> 1 = Der 1Dialog. Wenn ihr
    mehrere Dialoge habt dan müsst ihr die Zahl anpassen
    #define DIALOG_BESCHWERDE 2
    #define DIALOG_FRAGE 3
    #define DIALOG_HILFE 4


    Wenn ihr nun das include ocmd includiert habt macht ihr bei einer beliebigen stelle die ocmd Command am besten ihr macht ein Kommentar.
    //OCMD-Commands
    Wenn ihr eine Stelle gefunden habt, macht am besten über OnPlayerCommandText.. Dann macht ihr das so


    ocmd:report(playerid,params[])
    {
    return 1;

    //ocmd = der command-prozessor.. report = der name könnt ihr auch anders nennen... playerid = der player der den befehl ausführt.
    params[] = parameter die wir hier nicht brauchen


    Dann macht ihr über return 1; das hier
    ShowPlayerDialog(playerid,DIALOG_REPORT,DIALOG_STYLE_LIST,"Report","Beschwerde gegen ein User\nFrage an die Admins\nHilfe","Wählen","Abbrechen");// ShowPlayerDialog = Er zeigt den Spieler den Spieler ein Dialog an = DIALOG_REPORT Den wir definiert haben.. DIALOG_STYLE_LIST = Der Dialog style ist eine Liste und "Report" ist die Überschrift.
    "Was da drinne steht Beschwerde gegen user" etc ist der Text wasim Dialog drinne steht und Wählen und Abbrechen sind die 2Buttons


    Nun gehen wir zu OnDialogResponse


    dann machen wir..
    if(dialogid == DIALOG_REPORT)
    {
    return 1;
    }


    if ist eine anfrage er fragt hier ab was wir für ein Dialog verwenden möchten. In unseren fall DIALOG_REPORT und dialogid ist der dialog den wir definiert haben.


    Da drinne machen wir nun
    if(response == 0)
    {
    SendClientMessage(playerid,ROT,"Sie haben das --/report-- Menü verlassen.");
    }


    Er fragt nun hier ab was er mit den Button machen soll response = Der Button 0 = Der rechte Button in useren fall Abbrechen!


    Nun fragen wir den Link Button gleich darunter ab was der machen soll..
    Er soll die liste aufzählen das werde ich schnell machen..


    if(response==1)
    {
    if(listitem==0)
    {
    ShowPlayerDialog(playerid,DIALOG_BESCHWERDE,DIALOG_STYLE_INPUT,"Report ( Beschwerde über ein User )","Bitte geben sie ihre Beschwerde ein.\nSchreiben sie anschließend den Name + ID.\nBeispiel: Pascal ID:14","Report","Abbrechen");
    return 1;
    }
    if(listitem==1)
    {
    ShowPlayerDialog(playerid,DIALOG_FRAGE,DIALOG_STYLE_INPUT,"Report ( Frage an Admins )","Bitte stellen sie ihr Frage und schreiben sie es hier rein","Report","Abbrechen");
    return 1;
    }
    if(listitem==2)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_INPUT,"Report ( Hilfe )","Sie benötigen Hilfe? Schreiben sie es hier rein für was sie Hilfe benötigen!","Report","Abbrechen");
    return 1;
    }
    return 1;
    }
    Das ist nun alles habe eig nun alles erklärt außer listitem.
    listitem ist die Liste in welcher reinfolge er es auflistet es fängt mit 0 an das ist sozusagen das 1 was angezeigt wird.


    Und darunter erstellen wir die nächsten Teile.
    Wir fragen nun ein neuen Dialog ab. ( DIALOG_BESCHWERDE )


    if(dialogid == DIALOG_BESCHWERDE)
    {
    return 1;
    }


    Dann da rein wieder
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    return 1;
    }
    nun erstellen wir bei response == 1 das hier
    new string[128],string2[128];//new = Erstellt eiene neue variable string/2 = Das er die nachricht ausgibt denn die strings werden wir formatieren
    und [128] = Eine Array größe, die, die länge des textes bestimmt!
    Nun erstellen wir das format
    format(string,sizeof(string),"%s hat ein Report abgeschickt. Katogorie: Beschwerde über ein User",SpielerName(playerid));
    Nun formatieren wir den text der an die Admins geschickt wird. format = formatierung, string = die variable.. sizeof = er bestimmt die länge der Array größe, %s ein Text bzw name bsp: Pascal hat ein Report abgeschickt.. SpielerName(playerid) = SpielerName ist ein stock playerid sagte ich bereits


    SendAdminMessage(DROT,string);
    format(string2,sizeof(string2),"Report-Text: %s",inputtext);
    SendAdminMessage(DROT,string2);
    SendClientMessage(playerid,Gelb,"Ihr Report wird gerade überprüft, haben Sie ein wenig Geduld.");
    Und hier schickt er alles an die Admin und string2 wird da auch formatiert
    Dann wird eine Message an den player geschickt das sein Report bearbeitet wird.


    Und dass machen wir mit alle dialoge.


    if(dialogid == DIALOG_FRAGE)
    {
    if(response==0)
    {
    return 1;
    }
    if(response==1)
    {
    new string[128],string2[128];
    format(string,sizeof(string),"%s hat ein Report abgeschickt. Katogorie: Frage an die Admins",SpielerName(playerid));
    SendAdminMessage(DROT,string);
    format(string2,sizeof(string2),"Report-Text: %s",inputtext);
    SendAdminMessage(DROT,string2);
    SendClientMessage(playerid,Gelb,"Ihr Report wird gerade überprüft, haben Sie ein wenig Geduld.");
    return 1;
    }
    return 1;
    }
    if(dialogid == DIALOG_HILFE)
    {
    if(response==0)
    {
    return 1;
    }
    if(response==1)
    {
    new string[128],string2[128];
    format(string,sizeof(string),"%s hat ein Report abgeschickt. Katogorie: Hilfe",SpielerName(playerid));
    SendAdminMessage(DROT,string);
    format(string2,sizeof(string2),"Report-Text: %s",inputtext);
    SendAdminMessage(DROT,string2);
    SendClientMessage(playerid,Gelb,"Ihr Report wird gerade überprüft, haben Sie ein wenig Geduld.");
    return 1;
    }
    return 1;
    }


    Unten im Script kommt das rein


    die stocks werde ich nun nicht erklären
    stock SendAdminMessage(color,const message[])
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && IsPlayerAnAdmin(i,1))
    {
    SendClientMessage(i,color,message);
    }
    }
    return 1;
    }


    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    Ich hoffe es hat euch Gefallen wenn ich was flasch erklärt habe dann dürft ihr das gerne sagen.
    Ich bin selber noch Anfänger und versuche alles =)
    Es hat nun 7150Zeichen verbraucht das Tutorial.


    Mit Freundlichen Grüßen Pascal

    Einmal editiert, zuletzt von Pascal1998 ()

  • Naja, die Rechtschreibung bzw. Grammatik ist jetzt nicht soooo Ok.
    Ein paar Sachen hast du falsch bzw. garnicht erklärt.


    Zudem kann es bei anderen nicht funktionieren, da du die Funktion IsPlayerAnAdmin nicht erklärt hast.
    Bei den Dialogen hättest du außerdem mit switch & case arbeiten sollen / können.


    Trotzdem, für dein erstes Tutorial nicht ALLZU schlecht.


    Ich enthalte mich jeglicher Bewertung (das war konstruktive Kritik, yoooooo)

  • Ich habe mir jetzt nicht wirklich viel durch gelesen, mich Interessiert dein Code mehr ^^ Der verät mir ob du ein sauberer oder unsauberer Scripter bist ;)




    if(response == 0)
    {
    SendClientMessage(playerid,ROT,"Sie haben das --/report-- Menü verlassen.");
    }


    Hier kannst du schonmal 3 Zeilen sparen ^^ Genaus brauchst du nicht abfragen ob der Wert null ist .. einfach ein ! davor ist das selbe ^^


    if(!response)return SendClientMessage(playerid,ROT,"Sie haben das --/report-- Menü verlassen.");




    Naja gut.. du solltest bei so etwas lieber mit switch & case arbeiten 8)
    Es ist schneller und greift direkt auf den Wert zu und geht nicht noch alle durch..
    switch(listitem)
    {
    case 0:{}
    case 1:{}
    }


    if(response==0)
    {
    return 1;
    }


    Kannst du weglassen, ist totaler schwachsinn..

    new string[128],string2[128];
    format(string,sizeof(string),"%s hat ein Report abgeschickt. Katogorie: Hilfe",SpielerName(playerid));
    SendAdminMessage(DROT,string);
    format(string2,sizeof(string2),"Report-Text: %s",inputtext);
    SendAdminMessage(DROT,string2);
    SendClientMessage(playerid,Gelb,"Ihr Report wird gerade überprüft, haben Sie ein wenig Geduld.");


    Dein ernst ? Du willst doch nicht ehrlich in jedem Dialog wo du einen string brauchst, einen neuen erstellen ? ..
    Merke dir ein String ist ein Array den solltest du dann auch so nutzen !
    Ganz oben unter public OnDialogResponse... einmal den string deklariert und gut.
    Erstellst du zu viele Strings schmiert der Server wahrscheinlich irgendwann ab ^^ ..



    EDIT: COde in Pawn eingefügt

  • Beitrag von [KoSoVa] ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Alles schön und gut und auch verständlich aber was zum Himmel meinst du mit dem DROT Pawno versteht das bei mir nicht



    Code
    new string[128];
    			format(string,sizeof(string),"%s hat Hilfe angefordert! Kategorie:Beschwerde über einen User!",getPlayerName(playerid));
    			SendAdminMessage(DROT,string);
    			format(string,sizeof(string),"Report-Text: %s",inputtext);
    			SendAdminMessage(DROR,string);
    			SendClientMessage(playerid,Color_Green,"Deine Beschwerde über einen User wird nun überprüft ein Admin wird sich für weiter Fragen eventuell bei dir melden");
  • Lasset die Leichen sterben.

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern