Schönen Guten Abend / Morgen,
heute möchte ich euch mal zeigen & erklären wie man so ein Anti High Ping system bastelt.
Was ist ein Anti High Ping system ?
Es sorgt dafür das Spieler die zu stark Laggen bzw. einen zu Hohen Ping haben vom Server gekickt werden.
Man kann den Wert Dynamisch oder vom Script aus einstellen. Je nach dem mit was man Speichert oder wie
man es haben will.
Also als erstes brauchen wir einen Timer, der jede Sekunde den Spieler Updatet. Da wir ja nicht
mit OnPlayerUpdate Arbeiten wollen, da dies zu viel Recourcen frisst & zu laggs des Servers führen kann.
Also packen wir unter OnGameModeInit
SetTimer("PingCheck",1000,true);
- Das SetTimer steht für den Timer, damit der Server genau weiß was es machen muss.
- PingCheck steht für den Namen des Timers, kann beliebig geändert werden. Ist nur ein Beispiel.
- Die 1000 stehen für 1000 Millisekunden, 1000 Millisekunden entsprechen 1 Sekunde.
- Das true steht für die Wiederholung des Timers. True = Wahr, bedeutet das der Timer jede Sekunde wiederholt wird.
Danach erstellen wir das Public für den Timer, dazu gehen wir aber vorerst über OnGameModeInit aber unter die Includen und schreiben dort
folgendes hin.
forward PingCheck();
Warum wir das ganze forwarden ? Naja ganz Simple, es ist so wie ein Gesetz von PAWN das alle Öffentlichen ( Publics ) Funktionen geforwarded
werden müssen.
So nun erstellen wir irgendwo zwischen den Publics die Funktion des Timers.
public PingCheck()
{
for(new i; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
new ping = GetPlayerPing(i),name[MAX_PLAYER_NAME],string[128];
GetPlayerName(i,name,sizeof(name));
if(ping > 300)
{
format(string,sizeof(string),"[ANTI HIGH PING] Spieler %s wurde wegen seinem Ping von %d vom Server gekickt."name,ping);
SendClientMessageToAll(DEINE FARBE,string);
Kick(i);
}
}
return 1;
}
Erklärung:
new ping = GetPlayerPing(playerid);
Da zwar jetzt der ping erstellt wurde, aber noch keinen Wert hat, weisen wir ihm den Wert des Spieler Pings zu.
Hätte der Spieler einen Ping von 50 so ist ping nun auch 50.
name[MAX_PLAYER_NAME];
der Wert name ist hier noch nicht gesetzt, aber er kann den Namen aller Spieler annehmen, die auf dem Server sind.
string[128];
Steht für die Zeichenlänge die die Nachricht Maximal haben kann.
GetPlayerName(playerid,name,sizeof(name);
Diese Funktion ist dazu da, um den Namen des Spielers dem array name zu zu weisen.
Heißen wir nun Mark so ist name auch Markus
if(ping > 300)
Wenn nun der Ping des Spielers über 300 steigt so wird das ausgeführt was in den geschweiften Klammern passieren soll.
format(string,sizeof(string),"[ANTI HIGH PING] Spieler %s wurde wegen seinem Ping von %d vom Server gekickt."name,ping);
Natürlich müssen wir auch hier den string mit unserer Nachricht überschreiben. Der zweite Wert von hinten steht für den ersten Parameter
den wir in der Message angeben, in dem Fall unseren Namen.
Der Letzte wert steht für unseren Aktuellen Ping.
Das war es auch schon, ich hoffe ich konnte euch mit diesem kleinen Tutorial ein wenig erklären & auch zeigen wozu was dient.
Greetz
Edit: Fehler behoben
Edit: 2 Klammer hinzugefügt
Edit: Abfrage hinzugefügt