Skip to content

Anti-Cheat

Anti-cheat

Jede Geld- und Bestandsentscheidung wird auf dem Server getroffen. Der Client zeichnet die Zapfsäule und meldet, was passiert ist; er entscheidet niemals, was etwas kostet oder wie viel eingefüllt wurde.

Was der Server erzwingt

  • Zapfsäulen-Sitzungen. Das Öffnen einer Zapfsäule fordert einen Sitzungs-Token vom Server an. Das Bezahlen erfordert dieses Token, und die in Rechnung gestellten Liter werden dadurch begrenzt, wie lange die Sitzung bei der konfigurierten Durchflussrate tatsächlich geöffnet war. Ein Client, der mehr beansprucht, als die Zapfsäule physisch hätte liefern können, wird auf das gekürzt, was die Uhr erlaubt.
  • Sitzungsablauf. Token sind einmalig verwendbar, an den Spieler gebunden, der sie geöffnet hat, und werden nach PumpSessionTimeout verworfen. Eine abgelaufene Sitzung stellt nichts in Rechnung.
  • Entfernungsprüfungen. Das Kaufen, Betanken, Laden, Auswechseln einer Batterie, Befüllen eines Kanisters, Bestellen von Ware und jede Dashboard-Aktion überprüfen serverseitig erneut, ob sich der Spieler wirklich an dieser Tankstelle befindet, mit DistanceSlack Metern Toleranz für die Verzögerung der Ped-Position.
  • Ratenbegrenzung (Rate Limiting). Jedes Event und jeder Callback kostet ein Token aus einem spielerspezifischen Eimer (Bucket), der sich mit PerSecond auffüllt und niemals über Burst hinaus anstaut. Eine festhängende Tastenkombination funktioniert weiterhin; eine Spam-Schleife läuft fast sofort gegen eine Wand.
  • Werte-Clamping (Value Clamping). Preise, Löhne, Bestellungen, Auszahlungen und Einzahlungen werden alle serverseitig auf Grenzen und Typen geprüft. Nichts über MaxAmount wird überhaupt akzeptiert, und die Preise werden innerhalb von Config.Refuel.PriceLimits gehalten.
  • Berechtigungsprüfungen bei jeder Aktion. Admin- bzw. Personalberechtigungen werden pro Anfrage serverseitig neu verifiziert, niemals der Benutzeroberfläche vertraut. Das Einstellen, Entlassen und Bearbeiten von Personen, die die employees Berechtigung besitzen, ist dem Besitzer vorbehalten, sodass sich kein Angestellter selbst befördern kann. Übertragung und Rückkauf sind dem Besitzer vorbehalten und erfordern die erneute Eingabe des Tankstellennamens.
  • Bestand und Bank sind Server-Status. Ein Verkauf findet nur statt, wenn die Tankstelle tatsächlich über die Liter verfügt und der Kunde tatsächlich das Geld hat; beide Seiten bewegen sich im selben serverseitigen Schritt.
config.lua
Config.AntiCheat = {
    RateLimit = { Burst = 14, PerSecond = 6 },
    MaxLitresPerPay = 200.0,
    LitreGrace = 3.0,
    PumpSessionTimeout = 900,
    DistanceSlack = 15.0,
    MaxAmount = 100000000,
    MaxWage = 25000,
    JerryPourTimeout = 600,
}
Einstellung Zweck
RateLimit Burst-Größe und Auffüllrate des spielerspezifischen Event-Eimers
MaxLitresPerPay Feste Obergrenze für eine einzelne Zapfsäulen- oder Ladesäulen-Sitzung, ungeachtet der Zeitmessung
LitreGrace Toleranz bei der Zeitprüfung in Litern. Deckt einen laggy Tick ab
PumpSessionTimeout Sekunden, die eine Sitzung gültig bleibt
DistanceSlack Zusätzliche Meter, die über den Radius einer Tankstelle hinaus erlaubt sind
MaxAmount Obergrenze für jeden von einem Client akzeptierten Geldwert
MaxWage Höchster Lohn, den ein Besitzer für einen Angestellten festlegen kann
JerryPourTimeout Sekunden, die ein unvollendeter Gassi- bzw. Gießvorgang gespeichert wird, bevor der restliche Inhalt nicht mehr eingefordert werden kann

Feinabstimmung (Tuning)

Die Standardwerte passen für einen normalen Server. Die zwei, bei denen sich eine Anpassung lohnt:

  • LitreGrace — erhöhen Sie diesen Wert um ein oder zwei Liter, falls Spieler mit schlechten Verbindungen an der Zapfsäule benachteiligt werden. Halten Sie ihn klein; es ist geschenkter Kraftstoff.
  • RateLimit.Burst — erhöhen Sie ihn, wenn ein stark frequentierter Vorplatz beginnt, Aktionen abzulehnen. Senken Sie ihn ab, wenn Sie die Zügel enger anziehen möchten.

Das starke Lockern von MaxLitresPerPay oder DistanceSlack hebt die Obergrenze auf, für deren Existenz diese Prüfungen da sind. Ändern Sie diese nur, wenn ehrliche Spieler offensichtlich blockiert werden.