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
DistanceSlackmeters 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
PerSecondoch aldrig staplas förbiBurst. 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
MaxAmountaccepteras över huvud taget, och priser hålls inomConfig.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.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.