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
PumpSessionTimeoutverworfen. 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
DistanceSlackMetern 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
PerSecondauffüllt und niemals überBursthinaus 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
MaxAmountwird überhaupt akzeptiert, und die Preise werden innerhalb vonConfig.Refuel.PriceLimitsgehalten. - 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
employeesBerechtigung 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.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.