Beiträge von Nasenbär Jürgen

    Das Möglichkeit deine Scripte in C++ als Plugins zu entwickeln erlaubt es dir effizienter zu arbeiten und serverseitige Dinge wie MySQL zu realisieren. Ohne Client-Plugins wirst du mit C++ nicht mehr erreichen können als mit PAWN, was das GUI usw. betrifft. (Das auf dem Bild ist nur die normale Spielerliste von jemandem, der die sampgui.png gelöscht hat)

    Der Client-Uploade dürfte doch aber nur dann mit 0,36 KB/s belastet werden, wenn wirklich 128 Tasten gleichzeitig gedrückt werden.

    Wenn man wirklich mit einer Bitmaske arbeiten will, wie es zur Zeit auch funktioniert, dann müssen diese 16 Bytes wirklich immer übertragen werden. Wenn ich nur 1 Byte (8 Bits => 8 mögliche Tasten) übertrage, wie soll der Server wissen welche Tasten damit gemeint sind? (Ja, es gibt unschöne Möglichkeiten)

    Zitat

    Man könnte ansonsten ja einfach ein Packet mit dem Key dessen Status sich geändert hat an den Server senden.
    Ne wirkliche Belastung für den Clienten und Server dürfte dabei nicht entstehen.

    Unnötig, da es aktuell schon so ist, dass bei jedem neuen Tastendruck der Client ein neues Update mit allen Informationen wie Position, Fahrzeug oder gedrückte Tasten an den Server schickt. Da können dann einfach diese 16 Bytes (nur als beispiel, 8 Bytes (64 Tasten) oder so würden auch schon ausreichen) drangehängt werden.


    Mag sein, aber viele Spieler nutzen auch alle Tasten und es gibt überhaupt kein Problem (MTA glaub ich auch)

    1. 0,31 kB/s ist nicht unbedingt viel, machbar wäre es und sonderliche Latenzen sollten auch nicht auftreten.
    2. Die Funktion GetKeyState() von MTA gibt es nur für clientseitige Scripte, die SA:MP nicht unterstützt.

    Was hat das bitte mit Traffic zu tun?

    Irgendwie muss der Server schließlich auch mitbekommen, welche Taste welchen Status (gedrückt/nicht gedrückt) besitzt. Diese Information wird bei jedem OnPlayerUpdate() aktualisiert. So funktioniert es zur Zeit auch, bloß nur mit den Steuerungstasten.


    Möchte man beispielsweiße den Status von 128 Tasten wissen, so bräuchte man 16 Bytes, die man dann mit einer Bitmaske (wie bisher) auslesen könnte.
    Sendet ein Spieler im Durchschnitt 20 mal pro Sekunde ein Update, so ergäbe dies einen Traffic von ~0,31 kB/s (Upload).


    (Für jede Taste einzeln eine Anfrage an den Clienten zu schicken wäre wirklich unsinnig)

    Der Server muss ständig anfragen gegenüber dem Clienten machen wie der User denn jetzt heißt.
    Meinst du das macht ernsthaft Sinn, den Traffic und die CPU dadurch zu belasten?

    Warum sollte der Server bei jedem GetPlayerName() erst eine Anfrage an den Clienten des Spielers schicken?
    Spielername und restliche Informationen wie IP werden bereits beim Verbindungsaufbau definiert. Wo kämen wir denn hin, wenn der Client mitten im Spiel einfach solche Informationen ändern könnte und diese dann auch mit dem Server synchronisiert werden würden?

    Warum sollte man nicht direkt auf den RAM zugreifen, der dort viel schneller agieren kann?

    Durch den Funktionsaufruf GetPlayerName() wird auch ausschließlich auf den RAM zugegriffen, das einzige was die ganze Sache marginal langsamer macht (ich rede nicht von Benchmarks, sondern vom normalen Serverbetrieb), ist der durch den Funktionsaufruf (stock GetSpielerName()) und dem damit verbundenen Aufruf der AmxNative entstehende Overhead.


    btw: Trotzdem bin ich der Meinung, dass man den Spielernamen in einem Enum speichern sollte :D


    //edit: Da war d0. wohl schneller :(