Ban Nachricht kommt 3x

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,


    wenn man wegen dem Anti Waffen Cheat-System gebannt wird kommt diese Ban-Nachricht 3x...


    Code:
    new w = GetPlayerWeapon(i);
    if(w == 38 || w == 37 || w == 36 || w == 35 || w == 39 || w == 40 || w == 18 || w == 9 || w == 8)
    {
    new query[1000], string[300];
    format(string,sizeof(string),"Server | %s wurde vom Anti-Cheatsystem gebannt. Grund: Waffenhack",PlayerName[i]);
    SendClientMessageToAll(COLOR_BLASSRED,string);
    SetTimerEx("BanTimer",2000,false,"i",i);
    format(query, sizeof(query), "INSERT INTO BanLog (Benutzer, Grund, Admin) VALUES ('%s', 'Waffenhack', 'Anticheat')", PlayerName[i]);
    mysql_query(query);
    mysql_free_result();
    }


    Fehler bekomme ich nicht..
    BanTimer: 2 Sekunden
    ServerTime: 1 Sekunde



    Komplett Code:
    public ServerTimer()
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(GetPlayerPing(i) >= 300)
    {
    new string[200];
    format(string,sizeof(string),"Server | %s wurde vom Server gekickt. Grund: High-Ping (>300)",PlayerName[i]);
    SendClientMessageToAll(COLOR_BLASSRED,string);
    SetTimerEx("KickTimer",2000,false,"i",i);
    }
    new w = GetPlayerWeapon(i);
    if(w == 38 || w == 37 || w == 36 || w == 35 || w == 39 || w == 40 || w == 18 || w == 9 || w == 8)
    {
    new query[1000], string[300];
    format(string,sizeof(string),"Server | %s wurde vom Anti-Cheatsystem gebannt. Grund: Waffenhack",PlayerName[i]);
    SendClientMessageToAll(COLOR_BLASSRED,string);
    SetTimerEx("BanTimer",2000,false,"i",i);
    format(query, sizeof(query), "INSERT INTO BanLog (Benutzer, Grund, Admin) VALUES ('%s', 'Waffenhack', 'Anticheat')", PlayerName[i]);
    mysql_query(query);
    mysql_free_result();
    }
    return 1;
    }
    return 1;
    }


    BanTimer:
    forward BanTimer(pID);
    public BanTimer(pID)
    {
    Ban(pID);
    }


    Mfg, Markus

  • Erstelle eine Spielervariable und frage ab ob sie 0 ist, wenn ja und er gebannt wird setze sie auf 1.


    Da dadurch dass der ServerTimer 1 Sekunde hat und der Bantimer 2 Sekunden es so gesehen 3 mal auch detected wird.


    1 mal durchgelaufen = Cheater gefunden, setze Timer auf 2 Sekunden
    während der Bantimer die erste Sekunde durchläuft, hat der ServerTimer jedoch schon wieder eine Sekunde weg und da der Spieler noch Online ist, wird er nochmals detected
    Nun ist der BanTimer endlich bei seiner 2ten Sekunde angekommen und kann nun den Spieler kicken, da aber der ServerTimer wie ich mir denke vor deinem BanTimer aufgerufen wird detected ihn es ein drittes mal und es kommt auch ein drittes mal diese Nachricht.


    Zumal ein Timer von 500>250 ms sogar reichen würde um den Spieler zu kicken ^^

  • Okay kann ich auch die schleife dann für das Bannen nur fürs bannen stoppen?
    Also das der Timer für den waffencheck nicht mehr ausgeführt wird?
    Kannst du mir beispiel code geben für den fix :D ?

  • Pseudocode:


    new bool:Banned[MAX_PLAYERS];


    public ServerTimer()
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(GetPlayerPing(i) >= 300)
    {
    new string[128];
    format(string,sizeof(string),"Server | %s wurde vom Server gekickt. Grund: High-Ping (>300)",PlayerName[i]);
    SendClientMessageToAll(COLOR_BLASSRED,string);
    SetTimerEx("KickTimer",500,false,"i",i);
    }
    if(Banned[i]==false)
    {
    new w = GetPlayerWeapon(i);
    if(w == 38 || w == 37 || w == 36 || w == 35 || w == 39 || w == 40 || w == 18 || w == 9 || w == 8)
    {
    new query[128], string[128];
    format(string,sizeof(string),"Server | %s wurde vom Anti-Cheatsystem gebannt. Grund: Waffenhack",PlayerName[i]);
    SendClientMessageToAll(COLOR_BLASSRED,string);
    SetTimerEx("BanTimer",500,false,"i",i);
    format(query, sizeof(query), "INSERT INTO BanLog (Benutzer, Grund, Admin) VALUES ('%s', 'Waffenhack', 'Anticheat')", PlayerName[i]);
    mysql_query(query);
    mysql_free_result();
    Banned[i]=true;
    }
    return 1;
    }
    }
    return 1;
    }


    PS: Deine strings müssen auch nicht so groß sein, kannst maximal nur 128 Zeichen im Chat pro Zeile wiedergeben.