Anti-cheat
Anti-cheat
Ogni decisione su denaro e scorte viene presa sul server. Il client disegna la pompa e segnala cosa è successo; non decide mai quanto costa qualcosa o quanta benzina è entrata.
Cosa applica il server
- Sessioni della pompa. Aprire una pompa richiede al server un token di sessione. Il pagamento richiede quel token, e i litri fatturati sono limitati dal tempo in cui la sessione è rimasta effettivamente aperta alla portata configurata. Un client che dichiara più di quanto la pompa avrebbe potuto fisicamente erogare viene ridotto a ciò che il tempo consente.
- Scadenza della sessione. I token sono monouso, vincolati al giocatore che li ha aperti e scartati dopo
PumpSessionTimeout. Una sessione scaduta non fattura nulla. - Controlli di distanza. L'acquisto, il rifornimento, la ricarica, la sostituzione di una batteria, il riempimento di una tanica, l'ordinazione di scorte e ogni azione del pannello di controllo riverificano sul server che il giocatore si trovi realmente in quella stazione, con un margine di
DistanceSlackmetri per il ritardo della posizione del ped. - Limitazione della frequenza (Rate limiting). Ogni evento e callback costa un token da un bucket specifico per giocatore che si ricarica a
PerSeconde non supera maiBurst. Un tasto bloccato continua a funzionare; un ciclo di spam incontra un blocco quasi immediatamente. - Limitazione dei valori (Value clamping). Prezzi, stipendi, ordini, prelievi e depositi subiscono tutti controlli sui limiti e sul tipo lato server. Nulla che superi
MaxAmountviene accettato, e i prezzi sono mantenuti all'interno diConfig.Refuel.PriceLimits. - Controlli dei permessi su ogni azione. I permessi dello staff vengono riverificati lato server per ogni richiesta, senza mai fidarsi della UI. Assumere, licenziare e modificare chiunque possieda il permesso
employeesè riservato esclusivamente al proprietario, in modo che un dipendente non possa promuoversi da solo. Il trasferimento e la rivendita sono riservati al proprietario e richiedono che venga riscritto il nome della stazione. - Le scorte e la banca sono nello stato del server. Una vendita avviene solo se la stazione ha effettivamente i litri e il cliente ha effettivamente i soldi; entrambe le parti si muovono nello stesso passaggio lato server.
Config.AntiCheat = {
RateLimit = { Burst = 14, PerSecond = 6 },
MaxLitresPerPay = 200.0,
LitreGrace = 3.0,
PumpSessionTimeout = 900,
DistanceSlack = 15.0,
MaxAmount = 100000000,
MaxWage = 25000,
JerryPourTimeout = 600,
}| Impostazione | Scopo |
|---|---|
RateLimit |
Dimensione del burst e velocità di ricarica del bucket di eventi per giocatore |
MaxLitresPerPay |
Limite massimo assoluto su una singola sessione di pompa o ricarica, indipendentemente dai tempi |
LitreGrace |
Margine sul controllo dei tempi, in litri. Copre un tick con lag |
PumpSessionTimeout |
Secondi in cui una sessione rimane valida |
DistanceSlack |
Metri extra consentiti oltre al raggio di una stazione |
MaxAmount |
Limite massimo su qualsiasi valore di denaro accettato da un client |
MaxWage |
Stipendio più alto che un proprietario può assegnare a un dipendente |
JerryPourTimeout |
Secondi in cui un versamento non terminato viene memorizzato prima che il residuo non possa più essere richiesto |
Ottimizzazione
I valori predefiniti si adattano a un server normale. I due su cui vale la pena intervenire:
LitreGrace— aumentalo di uno o due litri se i giocatori con connessioni scarse vengono penalizzati alla pompa. Tienilo basso; è carburante gratuito.RateLimit.Burst— aumentalo se un piazzale legittimamente affollato inizia a rifiutare azioni. Abbassalo se desideri un controllo più rigido.
⚠
Allargare notevolmente MaxLitresPerPay o DistanceSlack rimuove il limite per cui questi controlli esistono. Modificali solo se i giocatori onesti vengono visibilmente bloccati.