Beiträge von .Kevin

    Ich ahbe den gleichen Fehler wie er.
    Bei mir sind alle Daten richtig eingetragen und trotzdem kann ich mit dem einen Script nicht auf den Server zugreifen, mit einem anderen jedoch schon..


    Les dir bitte meinen Letzen Post nochmal genau durch.


    Mit MySQL Server ist nicht der Gameserver gemeint 8)

    Ich Empfehle dir bei OnPlayerDisconnect das mal einzufügen


    GetPlayerPos(playerid,Spieler[playerid][sX],Spieler[playerid][sY],Spieler[playerid][sZ]);
    GetPlayerFacingAngle(playerid,Spieler[playerid][sA]);


    Warum unnötig den Callback OnPlayerDisconnect zuknallen ?
    Er brauch lediglich bei dem stock SpielerSpeichern die Pos abfragen & setzten 8) !

    Du musst unter OnPlayerDisconnect folgendes Schreibe:
    new Float:x,Float:y,Float:z,
    GetPlayerPos(playerid,x,y,z);
    PlayerInfo[playerid][sX] = X;
    und so weiter


    Dann jetzt fragest du nicht die Aktuelle Psoition ab.


    Muss nicht unter OnPlayerDisconect Passieren.


    Ich persöhnlich würde es einfach in den Stock reinschreiben 8)

    Das hast du doch grade bearbeitet...
    Außerdem ist es doch egal ob er schon eingeloggt ist oder nicht.


    Auch wenn es egal ist. Der Timer ist nun nicht mehr Spielerseitig sondern Serverseitig. Warum soll ich für jeden
    einzelnen Spieler unter OnPlayerConnect einen Timer erstellen ? Hinterher sinds dann mal 50 - 100 Timer...

    Also ich finde das du alles sehr gut erklärt hast, auch wenn es ein einfaches System ist.


    //Aber es sind noch ein paar Fehler drinne...

    Müsste bei OnPlayerConnect und OnPlayerDisconnect gestartet/gestoppt werden.
    Und von SetTimer zu SetTimerEx("PingCheck",1000,true,"d",playerid);


    Nein, der Callback OnPlayerConnect wird nur aufgeführt wenn der Spieler Connectet. & Wenn er noch nicht eingeloggt ist dann
    bringt das auch nicht viel.
    Edit: Und den Timer müssen wir auch nicht Killen, da wir nun mit einer Schleife arbeiten.


    Es wird aber nur für die ID 0 das System verwendet.


    Ja war ein bisschen Müde ^^ .. habe nun den Fehler behoben 8)

    hey,
    Ich habe ein Problem mit dem Anti-Cheat Junkbuster...
    Und zwar wenn einer im Tutorial ist, wird er gekickt. Grund: Teleport hack. Nehme ich Junkbuster raus, wird man nicht gekickt.
    Meine Frage ist: Kann man das im Tutorial i-wie ausschalten?


    Einfach eine Abfrage machen ?

    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 8)



    Edit: Fehler behoben 8)
    Edit: 2 Klammer hinzugefügt
    Edit: Abfrage hinzugefügt