Skip to content

Anti-cheat

Anti-cheat

Varje beslut om pengar och lager tas på servern. Klienten ritar upp pumpen och rapporterar vad som hände; den bestämmer aldrig vad något kostar eller hur mycket som fylldes i.

Vad servern upprätthåller

  • Pumpsessioner. Att öppna en pump begär en sessionstoken från servern. Betalning kräver den token, och de liter som debiteras begränsas av hur länge sessionen faktiskt var öppen vid den konfigurerade flödeshastigheten. En klient som hävdar mer än pumpen fysiskt hade kunnat leverera trimmas till det klockan tillåter.
  • Sessionsutgång. Tokens är engångsugnar, kopplas till spelaren som öppnade dem och kastas efter PumpSessionTimeout. En utgången session debiterar ingenting.
  • Avståndskontroller. Köp, tankning, laddning, batteribyte, fyllning av dunk, beställning av lager och alla instrumentpanelsåtgärder kontrollerar på servern att spelaren verkligen är på den stationen, med DistanceSlack meters marginal för fördröjning av ped-positionen.
  • Rate limiting. Varje händelse och callback kostar en token från en spelarspecifik hink som fylls på med PerSecond och aldrig staplas förbi Burst. En fastnat tangentbordsbindning fungerar fortfarande; en spamslinga träffar en vägg nästan omedelbart.
  • Värdebegränsning (clamping). Priser, löner, beställningar, uttag och insättningar är alla gränskontrollerade och typkontrollerade på serversidan. Ingenting över MaxAmount accepteras över huvud taget, och priser hålls inom Config.Refuel.PriceLimits.
  • Behörighetskontroller vid varje åtgärd. Personalbehörigheter verifieras på nytt på serversidan per förfrågan, och litas aldrig på från UI:t. Att anställa, avskeda och redigera någon som har employees-behörigheten är endast för ägare, så en anställd kan inte befordra sig själv. Överföring och återköp är endast för ägare och kräver att stationsnamnet skrivs in igen.
  • Lager och bank är serverstatus. En försäljning sker bara om stationen faktiskt har litrarna och kunden faktiskt har pengarna; båda sidor flyttas i samma serversidessteg.
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,
}
Inställning Syfte
RateLimit Burst-storlek och påfyllningshastighet för spelarens händelsehink
MaxLitresPerPay Hårt tak för en enskild pump- eller laddarsession, oavsett vad timingen säger
LitreGrace Marginal på tidskontrollen, i liter. Täcker en laggig tick
PumpSessionTimeout Sekunder som en session förblir giltig
DistanceSlack Extra meter som tillåts utöver en stations radie
MaxAmount Tak för alla penningvärden som accepteras från en klient
MaxWage Högsta lön en ägare kan ge en anställd
JerryPourTimeout Sekunder som en ofullbordad hällning minns innan det överblivna inte längre kan krävas tillbaka

Finjustering

Standardvärdena passar en normal server. De två som är värda att röra vid:

  • LitreGrace — höj den med en liter eller två om spelare med dåliga anslutningar blir snuvade vid pumpen. Håll den liten; det är gratis bränsle.
  • RateLimit.Burst — höj den om en legitimt upptagen tankstation börjar neka åtgärder. Sänk den om du vill ha ett tightare koppel.

Att släppa på MaxLitresPerPay eller DistanceSlack mycket tar bort det tak som dessa kontroller finns för att tillhandahålla. Ändra dem bara om ärliga spelare synbart blockeras.