Warn System

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Inhalt:

      • Warn System
      • Dini
      • ocmd
      • sscanf



      Um was geht es in diesem Tutorial?


      Ich erkläre euch Heute mal wie ihr ein, Warn System erstellen könnt.
      Falls einige nicht wissen was damit gemeint ist, erkläre ich es mal.
      Ein warn System ist dazu da um andere Spieler eine Verwarnungen zu geben,
      bei einer bestimmten anzahl an Verwarnungen könnt ihr den Spieler vom Server bannen lassen, oder was auch immer ihr mit ihm anstellen wollt ^^


      Was benötigen wir?

      • Dini ( Zum Speichern/Laden der Warns )
      • OCMD ( Zum erstellen der Befehle )
      • sscanf ( Für die einzelnen Parameter für die Befehle. Für mehr Infos dazu hier KLICKEN )




      Die Erstellung der einzelnen Befehle:


      Befehl zum verteilen der Verwarnungen:



      PAWN-Quellcode

      1. ocmd:setwarn(playerid, params[])
      2. {
      3. if(IsPlayerAdmin(playerid))return SendClientMessage(playerid, WEIS, " Du bist kein Rcon Admin!"); // Hier wird jetzt abgefragt ob der Spieler Rcon Admin ist. Natürlich könnt ihr diese Abfrage mit eure ersetzen.
      4. new warnid, warnanzahl, warngrund[60];
      5. if(sscanf(params,"uds",warnid, warnanzahl, warngrund))return SendClientMessage(playerid, WEIS,"Verwendung: /setwarn [Name/ID] [Warn-Anzahl] [Warn-Grund]"); // Sollte sich eigentlich von selbst erklären. wenn nicht KLICK
      6. if(!IsPlayerConnected(warnid))return SendClientMessage(playerid, WEIS, " Dieser Spieler ist nicht Online!"); // Falls der Spieler (Warnid) sich nicht auf den Server befindet erhält man eine Fehlermeldung.
      7. if(strlen(warngrund) > 60)return SendClientMessage(playerid,0xC34600FF,"Benutzung: [Warn-Grund darf Maximal nur 60 Zeichen beinhalten!]"); // die 60 steht für die anzahl der Zeichen die Verwendet werden dürfen.
      8. {
      9. new string[150]; // Hier erstellen wir den Array für die Nachrichten die wir nun mit der 'format' Funktion formatieren werden.
      10. format(string,sizeof(string), "Du hast an den Spieler %s %d Warns verteilt, Grund: %s", SpielerName(warnid), warnanzahl, warngrund);SendClientMessage(playerid, WEIS, string);
      11. SendClientMessage(warnid, WEIS, string);format(string,sizeof(string),"%s vergibt dir %d Warns, sein Grund: %s",SpielerName(playerid), warnanzahl, warngrund);
      12. SetPVarInt(playerid,"Warns",GetPVarInt(playerid,"Warns")+warnanzahl);
      13. if(GetPVarInt(warnid, "Warns") >= 3) // Falls der Spieler nun 3 Warns oder mehr hat soll was passieren?. Ich sage er soll eine Nachricht erhalten und im Anschluss gebannt werden.
      14. {
      15. SendClientMessage(warnid, WEIS, "Du hast die Maximale Warn anzahl erreicht und wirst nun gebannt!"); // eine Nachricht an den Spieler wird ausgegeben.
      16. Ban(warnid); // hier durch wird der Spieler gebannt und vom Server gekickt
      17. }
      18. }
      19. return 1;
      20. }
      Alles anzeigen


      Befehl zum löschen der Verwarnungen:


      PAWN-Quellcode

      1. ocmd:delwarn(playerid, params[])
      2. {
      3. if(IsPlayerAdmin(playerid))return SendClientMessage(playerid, WEIS, " Du bist kein Rcon Admin!"); // Hier wird jetzt abgefragt ob der Spieler Rcon Admin ist. Natürlich könnt ihr diese Abfrage mit eure ersetzen.
      4. new warnid, warnanzahl, warngrund[60];
      5. if(sscanf(params,"uds",warnid, warnanzahl, warngrund))return SendClientMessage(playerid, WEIS,"Verwendung: /givewarn [Name/ID] [Warn-Anzahl] [Warn-Grund]"); // Sollte sich eigentlich von selbst erklären. wenn nicht KLICK
      6. if(strlen(warngrund) > 60)return SendClientMessage(playerid,0xC34600FF,"Benutzung: [Warn-Grund darf Maximal nur 60 Zeichen beinhalten!]"); // die 60 steht für die anzahl der Zeichen die Verwendet werden dürfen.
      7. if(!IsPlayerConnected(warnid))return SendClientMessage(playerid, WEIS, " Dieser Spieler ist nicht Online!"); // Falls der Spieler (Warnid) sich nicht auf den Server befindet erhält man eine Fehlermeldung.
      8. if(GetPVarInt(warnid,"Warns") - warnanzahl >= 0)return SendClientMessage(playerid,GRUN," Der Spieler hat entweder 0 Warns oder die Warn-Anzahl ist zu groß!"); //Wenn der Spieler 0 Warns hat erhält der Admin diese Fehlermeldung. Oder wählt der Admin mehr Warns aus als der Spieler eigentlich hat erhält er diese Nachricht.
      9. {
      10. new string[128]; // Hier erstellen wir wieder den Array für die Nachrichten die wir nun mit der 'format' Funktion formatieren werden.
      11. format(string,sizeof(string), "Du hast vom Spieler %s %d Warns gelöscht, Grund: %s", SpielerName(warnid), warnanzahl, warngrund);
      12. SendClientMessage(playerid, WEIS, string);format(string,sizeof(string),"%s löscht dir %d Warns, sein Grund: %s",SpielerName(playerid), warnanzahl, warngrund);
      13. SendClientMessage(warnid, WEIS, string);
      14. SetPVarInt(playerid,"Warns",GetPVarInt(playerid,"Warns")-warnanzahl);
      15. }
      16. return 1;
      17. }
      Alles anzeigen


      Jetzt müsst ihr nur noch den stock SpielerName erstellen:


      PAWN-Quellcode

      1. stock SpielerName(playerid)
      2. {
      3. new name[MAX_PLAYER_NAME];
      4. GetPlayerName(playerid,name,sizeof(name));
      5. return name;
      6. }


      Bei eurem stock Laden muss es so aussehen:

      PAWN-Quellcode

      1. SetPVarInt(playerid,"Warns",dini_Int(Spielerdatei,"Warns"));


      Bei eurem stock SpielerSpeichern muss es so aussehen:

      PAWN-Quellcode

      1. dini_IntSet(Spielerdatei,"Warns",GetPVarInt(playerid,"Warns"));





      So das war nun das kleine Tutorial wie man sich ein Warn-System erstellt.
      Ich werde es so gut es geht noch weiter ausbessern, falls ihr Fehler im Code findet bitte Posten sie mir doch hier im Thread damit ich diese ausbessern kann.
      Über Positives Feedback würde ich mich freuen :D

      Hoffe euch hat das Tut gefallen. Klein aber Fein :P


      Edit: einige Fehler ausgebessert. Danke @west123


      Grüße

      Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von Equ ()

      Beitrag von TheBorN ()

      Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
    • ich würd die string größen noch anpassen 128 braucht man auch nicht
      dafür das es ein warn system ist bin ich immerwieder beeindruckt wieviel code man dafür verbraucht

      werds gleich mal testen obs funktioniert und melde mich dann

      //EDIT wo deklarierst du Spielername? bitte zufügen oder entsprechend umändern
      //EDIT#2 deine IstSpielerVerbunden abfrage ist falsch wenn der spieler verbunden ist wird dir Spieler nicht online gesendet
      da fehlt das

      PAWN-Quellcode

      1. if(!IsPlayerConnected(warnid))

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von west123 ()

    • west123 schrieb:

      ich würd die string größen noch anpassen 128 braucht man auch nicht
      dafür das es ein warn system ist bin ich immerwieder beeindruckt wieviel code man dafür verbraucht

      werds gleich mal testen obs funktioniert und melde mich dann

      //EDIT wo deklarierst du Spielername? bitte zufügen oder entsprechend umändern
      //EDIT#2 deine IstSpielerVerbunden abfrage ist falsch wenn der spieler verbunden ist wird dir Spieler nicht online gesendet
      da fehlt das

      PAWN-Quellcode

      1. if(!IsPlayerConnected(warnid))
      Danke für die Fehlerhinweise hab sie mal ausgebessert ^^


      Mich würde es dennoch freuen, wenn du ein kleines Feedback zum Tutorial abgeben könntest.



      Grüße
    • Equ schrieb:

      new string[148], string2[148]; // Hier erstellen wir den Array für die Nachrichten die wir nun mit der 'format' Funktion formatieren werden.

      Wozu 2 wenn einer vollkommen reicht?

      Deseiteren nutz nicht die Funktion "SpielerName" sondern lass es direkt per GetPlayerName auslesen

      Sonst gebe ich dir nur 3 Punkte da man einfach zu viel kopieren kann
      All in all it's just another brick in the wall
    • Feedback naja find das system nicht so toll meine persönliche meinung
      vom script her wiegesagt viele fehler
      und da mein sscanf nicht geht weiß ich gar nicht ob das funktioniert aber hab sonnst erstmal nichts bemerkt beim drüber lesen 4/10 punkten

      Fehlerhinweis:
      if
      (GetPVarInt(warnid, "Warns") < 3) wenn warns kleiner als 3 ist wird man gebannt^^ oder seh ich das jetzt falsch? ansonnsten umdrehen bzw und andersrum müsstest du dann warns >=3 machen sonnst würde man mit // EDIT meinte natürlich 3 warns und nicht 4 wegen ban und so



      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von west123 ()

    • Beavis schrieb:

      Equ schrieb:

      new string[148], string2[148]; // Hier erstellen wir den Array für die Nachrichten die wir nun mit der 'format' Funktion formatieren werden.

      Wozu 2 wenn einer vollkommen reicht?

      Deseiteren nutz nicht die Funktion "SpielerName" sondern lass es direkt per GetPlayerName auslesen

      Sonst gebe ich dir nur 3 Punkte da man einfach zu viel kopieren kann

      Danke erstmal für dein Feedback.

      Dann sage mir doch mal wie du das meinst?
      wenn man dies so erstellen würde:

      PAWN-Quellcode

      1. new string[256];
      2. format(string,sizeof(string)," dies ist ein Text");
      3. format(string,sizeof(string)," dies ist ein zweiter Text");
      4. SendClientMessage(playerid, -1, string);
      5. SendClientMessage(pID, -1, string);


      Dann würden doch beide Spieler die Texte bekommen und das will man doch nicht?

      west123 schrieb:

      Feedback naja find das system nicht so toll meine persönliche meinung
      vom script her wiegesagt viele fehler
      und da mein sscanf nicht geht weiß ich gar nicht ob das funktioniert aber hab sonnst erstmal nichts bemerkt beim drüber lesen 4/10 punkten

      Fehlerhinweis:
      if
      (GetPVarInt(warnid, "Warns") < 3) wenn warns kleiner als 3 ist wird man gebannt^^ oder seh ich das jetzt falsch? ansonnsten umdrehen bzw und andersrum müsstest du dann warns >=3 machen sonnst würde man mit // EDIT meinte natürlich 3 warns und nicht 4 wegen ban und so



      Danke für dein Feedback.

      So wenn du dir das mal hier durch Lesen würdest fällt dir eine Zeile auf die nennt sich "sscanf dort erhälst du den sscanf Code auch ..

      Was benötigen wir?

      • Dini ( Zum Speichern/Laden der Warns )
      • OCMD ( Zum erstellen der Befehle )
      • sscanf ( Für die einzelnen Parameter für die Befehle. Für mehr Infos dazu hier KLICKEN )

    • Equ schrieb:

      west123 schrieb:

      was hat den jetzt der code von sscanf damit zutun das der spieler mit 0 1 und 2 warn punkten gebannt wird?
      Nein. Du hast geschrieben gehabt das dein sscanf Code irgendwie nicht Funktioniert,
      und daher hab ich dir einfach mal einen Link zu den Sscanf Code gepostet ..


      Grüße
      aso^^ ja ich hatte 5 versionen von sscanf da ging nur 1 und die include datei hat mir nen runtime error ausgespuckt das meinte ich das mein sscanf nicht funktioniert ich werd den link von dir mal testen
      wobei es bei mir jetzt durch das plugin und den sscanf stock funktioniert

      mfg
    • Manniac schrieb:

      Ist ja ein C&P Code. Nichts Schritt für Schritt erklärt.

      Ich hab das erklärt. Was ich meine erklärt haben zu müssen damit man weiß was die und die Funktion einen bringt ..
      Keiner hätte lust 10.000 Zeilen voll zu klatschen mit Codes und später würde sich keiner das Tutorial anschauen weil es einfach zu viel zum Lesen wäre ..

      Und falls du meinst das ich es Kopiert & eingefügt habe, nein. Ich habe alles im Forum Editor geschrieben.
      Meinst du aber das jeder es einfach so Kopieren und Einfügen kann, Ja das stimmt ..


      Grüße
    • Ich finde dieses TUTO nicht schlecht allerdings gibt es hier einen kleinen Bug denn man ausnutzen könnte und zwar könnte der Spieler mit einem niedrigen Adminlevel ein höheren Admin einfach die Anzahl an Warns geben und Ihn damit bannen.

      Klar wenn man ein Team hat sollte man darauf vertrauen da so etwas nicht passiert allerdings wird es bestimmt leute geben die dies versuchen.

      Daher kurze Frage ob Ihr eine Abfrage kennt die rausfindet ob ein Adminlevel größer oder kleiner als des Spielers ist der diesen Befehl ausführt.
    • ChrisJewels schrieb:

      Ich finde dieses TUTO nicht schlecht allerdings gibt es hier einen kleinen Bug denn man ausnutzen könnte und zwar könnte der Spieler mit einem niedrigen Adminlevel ein höheren Admin einfach die Anzahl an Warns geben und Ihn damit bannen.

      Klar wenn man ein Team hat sollte man darauf vertrauen da so etwas nicht passiert allerdings wird es bestimmt leute geben die dies versuchen.

      Daher kurze Frage ob Ihr eine Abfrage kennt die rausfindet ob ein Adminlevel größer oder kleiner als des Spielers ist der diesen Befehl ausführt.
      Hast du den Codeabschnitt an dein eigenem Admin System angepasst oder ist der Befehl weiterhin nur für RCON Admins verfügbar?
      Du kannst für beides eine Abfrage schreiben, aber für letzteres gibt es nur ein "Level", deswegen könntest du eine Abfrage schreiben wo verhindert wird das sich Admins gegenseitig warnen können.

      PAWN-Quellcode

      1. if(IsPlayerAdmin(warnid)) return SendClientMessage(playerid, -1, "Du kannst ein Admin nicht verwarnen!");


      einfach über die Zeile "Der Spieler ist nicht online" einfügen :)

      //Handy

      Mit freundlichen Grüßen
      M760Li 8)
    • JustMe.77 schrieb:

      Du kannst für beides eine Abfrage schreiben, aber für letzteres gibt es nur ein "Level", deswegen könntest du eine Abfrage schreiben wo verhindert wird das sich Admins gegenseitig warnen können.
      Danke erstmal für die Schnelle Hilfe.


      JustMe.77 schrieb:

      Hast du den Codeabschnitt an dein eigenem Admin System angepasst oder ist der Befehl weiterhin nur für RCON Admins verfügbar?
      Anbei habe ich meine Abfrage eingefügt mit dem ich das Level eines Admins überprüfe



      Quellcode

      1. isAdmin(playerid,a_level) //Hiermit überprüfen wir das Adminlevel der Spieler!
      2. {
      3. if(sInfo[playerid][alevel]>=a_level)return 1;
      4. return 0;
      5. }
      6. ocmd:setwarn(playerid,params[])//Warns Verteilen
      7. {
      8. if(!isAdmin(playerid,2))return SendClientMessage(playerid,Color_Red,"Du bist kein GJ Teammitglied oder dein Admin Level ist zu niedrig");
      9. if(!Adminlevel
      10. new warnid,warnanzahl,warngrund[60];
      11. if(sscanf(params,"uds",warnid,warnanzahl,warngrund))return SendClientMessage(playerid, Color_Orange,"INFO: /setwarn[Name/ID][Warn-Anzahl][Warn-Grund]");
      12. if(IsPlayerAdmin(warnid)) return SendClientMessage(playerid, -1, "Du kannst ein Admin nicht verwarnen!");
      13. if(!IsPlayerConnected(warnid))return SendClientMessage(playerid,Color_Red,"FEHLER:Der angegebene Spieler ist nicht online");
      14. if(strlen(warngrund)<=5)return SendClientMessage(playerid,Color_Red,"FEHLER:Warngrund zu kurz[Mindestens 5 Zeichen]");
      15. if(strlen(warngrund)>=60)return SendClientMessage(playerid,Color_Red,"FEHLER:Warngrund zu lang[MAX. 60 Zeichen]");
      Alles anzeigen