In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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 Community :)!
    Hiermit zeige ich euch wie man ein Warn system erstellt, bin noch Anfänger aber ich denke das klappt schon :)
    Ich werde euch zeigen wie ihr spieler verwarnen könnt b.z.w bei 3Warns Gleich bannen tut.
    Und wie ihr den User wieder die Warns entziehen könnt.
    Ich Arbeite mit PVar´s..


    Fangen wir an.
    Für den befehel braucht ihr ocmd b.z.w ich arbeite hier im Tutorialmit ocmd


    #include <ocmd>


    if(IsPlayerAnAdmin(playerid,3))//IsPlayerAnAdmin ist die Abfrage ob der Spieler admin ist playerid ist der Spieler der den Befehl ausführt und die 3 welcher Adminrang er sein soll um den befehl auszuführen.
    new pID,text[128],text2[128],string[128]//pID = playerid, text/2[128]=Das er ein Text von 128Zeichen erhalten darf string= Wird an den User, Usern ausgegeben
    if(sscanf(params,"us",pID,text))return SendClientMessage(playerid,GRAU,"Verwendung: /warn [playerid][Grund]");//if = Eine Abfrage.. us.. u=Der Spieler.. s = text.. GRAU die Farbe
    format(string,sizeof(string),"%s wurde von %s gewarnt Grund: %s",SpielerName(pID),SpielerName(playerid),text);
    format = er formatiert den text sobald der Befehl ausgeführt wird! string = wie oben genannt er gibt den Text an den usern aus. sizeof = länge %s = Der Spieler b.z.w den Text und hinter den Komma dann sind SpielerName das ist ein stock da werden wir gleich zu kommen.
    Hinter den Komma entscheidet ihr was er macht soll er als %s ein Spieler oder ein Text nehmen deswegen SpielerName(playerid) e.t.c
    SendClientMessageToAll(ROT,string);//SendClientMessageToAll = Sollte klar sein er gibt eine Nachricht an alle User auf dem Server aus. string = was wir oben gemacht haben und dass was ich 2x erklärt habe :)
    SendClientMessage(pID,ROT,"[Server]: Wenn du 3Warnungen hast wirst du automatisch gebannt! Pass Auf!");
    Diesmal soll er nur ein Text an pID = an den spieler schicken.
    SetPVarInt(pID,"Warns",GetPVarInt(pID,"Warns")+1);// SetPVarInt = er setzt in seiner Account datei ein Warn höhrer "Warns" ist das wo wir noch zu kommen.
    pID = der spieler von dem der Warn erhöht werden soll GetPVarInt = er wird den warn erhalten +1 = 1Warn höhrer
    if(GetPVarInt(pID,"Warns")==3)// Er fragt ab was er machen soll wenn der Spieler ==3 ( 3Warns ) hat.
    {
    format(text2,sizeof(text2),"%s wurde von %s gebannt. Grund: 3Warnungen",SpielerName(pID),SpielerName(playerid),text);
    SendClientMessageToAll(ROT,string);
    SetPVarInt(pID,"Banned",1);
    Kick(pID);
    return 1;
    }
    format habe ich bereits erklärt.. SendClientMessage auch %s auch.
    SetPVarInt = er setzt in der Account datei den Banned auf 1 = er wird/wurde gebannt und kann dann nicht mehr auf dem Server connnecten.
    Kick(pID); er kickt den Spieler dannn das er nicht weiter spielen kann und Gebannt ist.


    Am ende sieht es so aus :)
    ocmd:warn(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,DROT,"Du bist nicht befugt diesen befehel zu nutzen!");
    new pID, text[128], string[128], text2[128];
    if(sscanf(params,"us",pID,text))return SendClientMessage(playerid,GRAU,"Verwendung: /warn [playerid][Grund]");
    format(string,sizeof(string),"%s wurde von %s gewarnt Grund: %s",SpielerName(pID),SpielerName(playerid),text);
    SendClientMessageToAll(ROT,string);
    SendClientMessage(pID,ROT,"[Server]: Wenn du 3Warnungen hast wirst du automatisch gebannt! Pass Auf!");
    SetPVarInt(pID,"Warns",GetPVarInt(pID,"Warns")+1);
    if(GetPVarInt(pID,"Warns")==3)
    {
    format(text2,sizeof(text2),"%s wurde von %s gebannt. Grund: 3Warnungen",SpielerName(pID),SpielerName(playerid),text);
    SendClientMessageToAll(ROT,string);
    SetPVarInt(pID,"Banned",1);
    Kick(pID);
    return 1;
    }
    return 1;
    }


    ocmd:dwarn(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,DROT,"Du bist nicht befugt diesen befehel zu nutzen!");
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,GRAU,"Verwendung: /dwarn [playerid]");
    SendClientMessage(pID,GRAU,"[Server]: Ein Admin hat dir ein Warn entzogen!");
    SetPVarInt(pID,"Warns",GetPVarInt(pID,"Warns")-1);
    return 1;
    }
    SetPVarInt und -1 er setzt den Spieler 1Warn runter!


    nun gehen wir zu
    stock Spielerladen // oder wie ihr das genannt habt.
    SetPVarInt(playerid,"Warns",dini_Int(Spielerdatei,"Warns"));// er soll den Spieler mit seine Warns laden.


    dan gehen wir zu SpielerSpeichern
    dini_IntSet(Spielerdatei,"Warns",GetPVarInt(playerid,"Warns")); // er speichert in der Dini datei seine Warns


    der stock SpielerName unten im script wo die anderen stock´s sind
    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME]; // er erstellt ein name und den Max. player auf dem Server damit er jeden meinen kann
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    So ich hoffe das Tutorial war verständlich und ich hoffe es hat euch gefallen.
    Wenn fragen oder Probleme sind gerne hier rein schreiben oder per PN schreiben.
    Ich bin Anfänger sry wenn fehler sind wenn ich was falsch erklärt habe ihr dürft es gerne rein schreiben :)


    Mit Freundlichen Grüßen
    Pascal :)

    Einmal editiert, zuletzt von Pascal1998 ()

  • text[128], string[128], text2[128];


    Es reicht auch eine String Deklarierung...
    Warum verballert ihr immer Sinnlos Heap space?


    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME]; // er erstellt ein name und den Max. player auf dem Server damit er jeden meinen kann
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }
    Schwachsinn sowas


    Der rest auch da einfach C & P
    0 Punkte

    All in all it's just another brick in the wall

  • Krass wie man hier mit Anfängern umgeht.
    Ich finde sowas echt erbärmlich.

  • Ich finde es so erbärmlich wie manche Leute mit unerfahrerenen Leuten umgehen.


    Auch als Anfänger sollte man sich erkundigen was sinnlos ist und wie man reccourcen spart
    Selbst ich hab so einiges an sprüchen miterlebt gegen anfängern aber daraus lernt man...


    Ich habe gesagt was nutzlos ist und ein Tutorial sollte nicht einfach C&P sein denn der Lerneffeckt ist 0 dabei

    All in all it's just another brick in the wall

  • Für mich sollte ein Tutorial nicht unbedingt die Lösung mit enthalten sein, sondern der Weg zur Lösung bzw. nur Dinge erklärt. Die Lösung sollte jeder der das Tutorial versteht (wenn es denn verständlich erklärt wurde), selber sich solche eine Funktion bzw. System schreiben können.