Anti-cheat
Anti-cheat
Každé rozhodnutí týkající se peněz a zásob probíhá na serveru. Klient vykresluje stojan a hlásí, co se stalo; nikdy nerozhoduje o tom, kolik co stojí nebo kolik paliva nateklo.
Co server vynucuje
- Relace stojanů. Otevření stojanu si vyžádá od serveru token relace. Platba vyžaduje tento token a naúčtované litry jsou limitovány tím, jak dlouho byla relace skutečně otevřená při nastaveném průtoku. Klient, který si nárokuje víc, než mohl stojan fyzicky vydat, je zkrácen na to, co hodiny umožňují.
- Vypršení platnosti relace. Tokeny jsou jednorázové, vázané na hráče, který je otevřel, a po uplynutí
PumpSessionTimeoutjsou zahozeny. Vypršená relace nezaúčtuje nic. - Kontroly vzdálenosti. Nákup, tankování, nabíjení, výměna baterie, plnění kanystru, objednávání zásob a každá akce v dashboardu jsou na serveru znovu kontrolovány, aby se ověřilo, že hráč je opravdu u dané stanice, s tolerancí
DistanceSlackmetrů pro zpoždění pozice postavy. - Omezení četnosti (Rate limiting). Každá událost (event) a callback stojí jeden token z hráčova osobního zásobníku, který se doplňuje rychlostí
PerSeconda nikdy se kumuluje nad hodnotuBurst. Zaseknutá klávesová zkratka stále funguje; spamová smyčka narazí na zeď téměř okamžitě. - Omezení hodnot (Value clamping). Ceny, mzdy, objednávky, výběry a vklady mají na serveru kontrolované limity a datové typy. Nic nad
MaxAmountnení vůbec akceptováno a ceny jsou drženy v rámciConfig.Refuel.PriceLimits. - Kontroly oprávnění při každé akci. Oprávnění staffu jsou znovu ověřována na serveru pro každý požadavek, nikdy se jim nedůvěřuje z UI. Najímání, propouštění a úpravy kohokoliv, kdo drží oprávnění
employees, jsou výhradně pro majitele, takže zaměstnanec nemůže povýšit sám sebe. Převod a zpětný odprodej jsou výhradně pro majitele a vyžadují opětovné napsání názvu stanice. - Zásoby a banka jsou stav serveru. Prodej se uskuteční pouze tehdy, pokud má stanice reálně k dispozici litry a zákazník má reálně peníze; obě strany se pohnou ve stejném kroku na straně serveru.
Config.AntiCheat = {
RateLimit = { Burst = 14, PerSecond = 6 },
MaxLitresPerPay = 200.0,
LitreGrace = 3.0,
PumpSessionTimeout = 900,
DistanceSlack = 15.0,
MaxAmount = 100000000,
MaxWage = 25000,
JerryPourTimeout = 600,
}| Nastavení | Účel |
|---|---|
RateLimit |
Velikost dávky (Burst) a rychlost doplňování zásobníku událostí pro každého hráče |
MaxLitresPerPay |
Pevný strop pro jednorázovou relaci stojanu nebo nabíječky, bez ohledu na časování |
LitreGrace |
Rezerva pro kontrolu časování v litrech. Pokrývá tik s lagem |
PumpSessionTimeout |
Počet sekund, po které zůstává relace platná |
DistanceSlack |
Extra metry povolené nad rámec poloměru stanice |
MaxAmount |
Strop pro jakoukoliv peněžní hodnotu přijatou od klienta |
MaxWage |
Nejvyšší mzda, kterou může majitel nastavit zaměstnanci |
JerryPourTimeout |
Počet sekund, po které se nedokončené lití pamatuje, než již zbývající palivo nelze nárokovat zpět |
Ladění
Výchozí hodnoty vyhovují běžnému serveru. Dvě, které stojí za to upravit:
LitreGrace— zvyšte o litr nebo dva, pokud jsou hráči se špatným připojením ochuzováni u stojanu. Udržujte ji malou; je to palivo zdarma.RateLimit.Burst— zvyšte, pokud legitimně vytížené čerpadlo začne odmítat akce. Snižte ji, pokud chcete přísnější řetěz.
⚠
Výrazné uvolnění MaxLitresPerPay nebo DistanceSlack odstraní strop, kvůli kterému tyto kontroly existují. Měňte je pouze tehdy, jsou-li poctiví hráči viditelně blokováni.