Wie gesagt, das Geld wird vom Server gemanaged. Und da kannst du nichts daran ausrichten.
Der Server hat intern eine Liste und weiss immer genau wieviel Geld jeder Spieler hat.
Der Server ist sogar so nett und schreibt dir eine Nachricht und teilt dir mit wieviel du hast.
Das sind die sogenannten UserMessages der Half-Life Egine.
Die 'Money' Message sieht so aus:
'Money'
int32 money;
int8 unknown1;
Man kann sich das ungefähr so vorstellen:
Die Bank sendet dir Kontoauszüge auf denen steht, wieviel Geld du noch auf der Bank hast. Zuhause nimmst du dann einen Kugelschreiber und überschreibt den Wert mit der gewünschten Summe. Klappt das? Nicht wirklich oder?
Also, was kann man denn noch manipulieren? Man macht auf dem Client ja seine Spielzüge und schickt das Ergebnis zum Server. Gleichzeitig kann man alle Informationen, die einen der Server schickt zu seinem Vorteil auswerten.
Nun muss man herausfinden, welche Daten man als Client an den Server schicken kann und was der Server noch annimmt.
Angenommen der Client verwertet das Töten der Gegner und das abziehen von Healthpoints der Gegner. Dann könnte man als Client allen möglichen Mist schicken, von wegen man hat alle Gegner getötet. Damit das nicht funktioniert, werden nur primitive Daten geschickt.
Daten wie:
In welche Richtung laufe ich?
Wohin gucke ich?
Schiesse ich?
Der Server nimmt diese Daten, z.B "Schiesse Ich?" und "Wohin gucke Ich?" und berechnet mit der Engine auf der Serverseite einen Schuss und entscheidet dann ob der Gegner tot ist oder nicht. Wenn das der Fall ist, sendet er wieder eine Nachricht an alle Spieler, nämlich, dass der Spieler gestorben ist. Diese Nachricht kann man wie im Geldbeispiel nicht verändern, bzw. es würde keinen Unterschied machen.
Gleichzeitig wird auf dem Client aber auch ein Schuss berechnet. Aber diese Berechnung dient ALLEIN der Animation des Schusses und das Anzeigen des Einschussloches. Diese Berechnung hat keinen wirklichen Einfluss auf den Spielverlauf.
Es kann also sein, dass der Client einen Schuss berechnet, der theoretisch den Gegner töten würde, der Server jedoch berechnet, dass der Schuss daneben geht.
Wie kann das sein? Das liegt zum einen an der schwierigen Aufgabe der Synchronisation des Spiels. Jede Engine macht das da ein bisschen anders. Denn man muss bedenken die Daten wandern mit Verzögerung über das Internet. (Latency auch "Ping" genannt).
Aber nicht immer ist der Server so vorsichtig. Die sogenannten "Speedhacks" machen es in sehr vielen Engines möglich sich mit ungeahnten Geschwindigkeiten zu bewegen ohne, dass der Server meckert.
Was könnn wird aber darüber hinaus noch manipulieren? Damit unsere Grafikkarte die gegnerischen Spieler rendern kann, müssen wir Informationen vom Server bekommen, wo sich die Spieler gerade befinden. Oder wenn gegnerische Spieler Geräusche machen, dann muss der Client wissen von wo der Sound kommt, damit die Soundengine möglichst real eine räumliche Geräuschkullisse erzeugen kann.
Das verrät uns wo sich die Gegner in der Spielewelt befinden und können diese durch die Wand markieren. Wir können auch unseren Blickwinkel genau auf die Gegner ausrichten und automatisch Zielen und dann auch Schiessen.
Denn diese Tätigkeiten hätten wir theoretisch genauso auch ohne Hilfsmittel tun können. Wir schicken nun unsere Daten zum Server "Wo gucke ich hin?" und "Schiesse ich?" und der Server berechnet den Schuss und wenn unsere Latenz (Ping) nicht zu hoch ist bzw. die clientseitige Interpolation der Spielerpositionen gut funktioniert haben wir sicherlich einen Treffer gelandet.
