Mute bei Beleidigung mit Timer

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 habe ein mute system eingebaut leider klappt es noch nicht ich kann immernoch schreiben habe den normalen chat öffentlicher :


    new mute[MAX_PLAYERS];
    new unmutetimer[MAX_PLAYERS];


    new SchimpfWort[3][64]= {
    {"Assi"},
    {"Penner"},
    {"Huso"}
    };




    public OnPlayerText(playerid, text[])
    {
    for(new i=0;i<sizeof(SchimpfWort);i++)
    {
    if(strfind(text,SchimpfWort[i],true) != -1)
    {
    SendClientMessage(playerid,0xAA3333AA,"[Serverguard] Du wurdest vom System für 5 Minuten gemutet");
    mute[playerid] = 1;
    unmutetimer[playerid] = SetTimerEx("unmute", 180000, 0, "d", playerid);
    }
    return 1;
    }
    if(mute[playerid] == 1)
    {
    SendClientMessage(playerid,0xAA3333AA,"* Du bist noch Sekunden gemutet. Grund:Beleidigung");
    return 0;
    }


    public unmute(playerid)
    {
    mute[playerid] = 0;
    SendClientMessage(playerid,0xFF0019FF, "* Du wurdest wieder entmutet!");
    return 1;
    }



    was ist falsch ?

  • Das Problem liegt denke ich mal daran, das du die schleife schon vorzeitig mit dem return 1; beendest, auch wenn sie noch nicht durchgelaufen ist.
    Versuchs mal so:
    public OnPlayerText(playerid, text[])
    {
    if(mute[playerid] == 1)
    {
    SendClientMessage(playerid,0xAA3333AA,"* Du bist noch Sekunden gemutet. Grund:Beleidigung");
    return 0;
    }
    else if(mute[playerid] == 0)
    {
    for(new i=0;i<sizeof(SchimpfWort);i++)
    {
    if(strfind(text,SchimpfWort[i],true) != -1)
    {
    SendClientMessage(playerid,0xAA3333AA,"[Serverguard] Du wurdest vom System für 5 Minuten gemutet");
    mute[playerid] = 1;
    unmutetimer[playerid] = SetTimerEx("unmute", 180000, 0, "d", playerid);
    return 0;
    }
    }
    }
    //rest vom OnPlayerText Code
    return 1;
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Dafür müsstest du die restzeit in einer Variable speichern nud immer wieder Updaten (auch per timer). Ich denke das ist keine Gute Idee, und schonend für den Server ist es denke ich auch nicht. Du kannst dem Spieler allerdings einfach bei der Nachricht "[Serverguard] Du wurdest vom System für 5 Minuten gemutet" dazu schreiben wann er wieder schreiben kann. Also z.b "[Serverguard] Du wurdest vom System für 5 Minuten gemutet. Um XX:YY Uhr kannst du wieder sprechen (oder schreiben oder was auch immer du da lieber sagen willst ^^)."

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • ich hoffe es ist nicht schlimm das ich mir das auch ma genommen habe aber bekomme ein warning bei den Puplic unmute

  • ne habe ich jetzt auch gemerkt hatte nur dein scriptweise nicht mehr so auf den schrim weil ich mit self arbeite und deine befehle musste ich mir auch anders schreiben naja schon ein cooles system

  • Sorry das ich nochmal störe, aber mir ist gerade nochwas eingefallen. Per timestamp könntest du das ganze auch lösen, ohne immer irgendwas zu aktualisieren.
    Du legst einfach eine weitere variable an für jeden spieler, z.b
    new mutetime[MAX_PLAYERS];
    Dann, wenn du jemanden mutest, speicherst du darin den aktuellen timestamp+300. (+300 deshalb, weil du dann den timestamp + 300 sekunden hast. Und das wäre dann der timestamp für den zeitpunkt, an dem der spieler wieder unmutet wird (300 sekunden = 5 Minuten, weil du ja 5 Minuten muten woltlest) )


    Sollte der spieler dann eine nachricht schreiben, fragst du den gespeicherten timestamp ab, und ziehst den aktuellen davon ab. Dann hast du die anzahl der sekunden die der spieler noch gemutet ist. DIe kannst du dann ausgeben, oder in minuten umwandeln oder was auch immer^^


    Mfg.

    The fact is, I am right. And if you think I'm wrong, you are wrong.