Zur Server-Theorie von mir:
1. Clients schicken schnellstmöglich immer den Zustand des Spielers an den Server. Dazu gehören
-Position, Blickrichtung, Waffe, laufend/gehend/liegend/(?), Schuss ja/nein und Interaktion wie (waffe aufnehmen, wieviel schuss etc).
2. Server kriegt die Daten und setzt diese Daten zusammen.
Spieler 1 ist zur Zeit t=0 an Koordinaten s(10/10/0), guckt Vektor g(1/1/1), (etc), hat ne SCAR und drückt grade reload.
Spieler 2
s(20/10/0), g(-1/0/0), liegt, feuert FY71 (logischerweise in Blickrichtung)
etc.
Wichtig ist, der Server weiß, welcher Spieler welche Knarre hat und wieviel Muni er hat. Das sind einfach ein paar Zahlen. Die muss man auch nicht ständig verschicken, sondern nur deren Veränderung. Nimmt er Muni auf, so schickt er die Interaktion muni Aufnehmen an den server. Dieser prüft aber, ob da wirklich ne Knarre liegt und wenn ja, summiert er die zu seinem Inventar hinzu. Danach bekommt der Client das OK und gut ist. Cheaten mit Waffen/Muni wird so unmöglich!
Gleiches gilt für Speedhack oder so. v=s/t, simpelste Rechnung. Legt ein Spieler in Zeit t=1s die Strecke s=50m zurück so sind das 180km/h. Wenn der nanosuit nur 100km/h macht und der Kerl nicht im Auto saß, sollte der server direkt den kick einleiten.
etc. etc.
3. Zur Zeit t=Kugellaufzeit, falls sich Spieler 1 nicht bewegt hat, schickt der Server dann an S1 und S2 die Info, dass S2 getroffen hat und zieht die zugehörige Energie von S1 ab und schickt diesem seinen neuen Energiewert. S2 hört seinen Treffer, fertig. Cheaten unmöglich. Egal was der Client macht, der server prüft das. Mit einem Schuss killen mit Pistole geht nicht, der server weiß ja, dass mit Pistole geschossen wurde und würde niemals direkt alle Energie abziehen.
etc etc. ... da kann niemand cheaten!
Im Falle vom schlechten Ping passiert Folgendes: Spieler 1, super Ping. Spieler 2, ping 500ms: Spieler 1 läuft umher und sieht, wie er sich flüssig über die Map bewegt. Spieler 2 läuft umher und sieht auch alles flüssig. Für den server siehts anders aus. Der bekommt in kurzen Abständen Positionsdaten etc. von S1 und aktualisiert die in seinem Vektor-Array der Spieler. Von Spieler 2 bekommt er die genau so oft, aber mit 500ms lag (ping-lahm ist ungleich geringe Bandbreite!). Da er stets Pakete mit Infos zurück an die Spieler schickt, bekommt auch Spieler 1 immer neue Daten von Spieler 2, aber eben ätlere. AAABER: Wenn S1 auf S2 schießt, trifft er ihn, weil sein Schuss ja schnell beim server ankommt und schließlich auch wirklich die beim server "aktuellen koordinaten" von S2 durchkreuzt. Wenn S2 auf S1 schießt, muss er extremst vorhalten, weil seine eigene Leitung die neue Position von S1 halt nicht schnell genug heran bekommt, S1 läuft zwar auch bei ihm flüssig, er bekommt ja auch viele Pakete, aber halt zeitver setzt. So und nicht anders wäre es fair und richtig!!
================================================== ==========
================================================== ==========
Um in einem solchen System mit totaler Server-Kontrolle zu cheaten müsste man den server hacken, es würde also reichen, den Server sicher zu machen und fertig. Zu Beginn des Spiels bzw. beim Spawnen bekommt ein Spieler Positionsdaten, Blickrichtung und Ausrüstung. Von da an werden Client-Interaktionen dem server gemeldet, nur die Veränderungen. Keine Absolut-Daten, nur relativ-Daten. Der server kontrolliert, ob der client überhaupt noch Schuss hat, in Reichweite ist bzw. überhaupt trifft.
Ich verstehe nicht, wieso sowas konzeptionell nicht direkt auf solch logische und sichere Strukturen aufgebaut wird. Auf meinem gedanklichen server würde niemand cheaten, weil es unmöglich wäre!!!!
Warum baut niemand solch ein Server-Modell? Die wirklich kritischen Daten wie: Welche Waffe, Munitionsmenge, Bewegung etc. beziffern sich auf ein paar zig byte, ich sehe den Haken nicht!




Zitieren
