Skip to content

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 DistanceSlack metri 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 PerSecond e non supera mai Burst. 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 MaxAmount viene accettato, e i prezzi sono mantenuti all'interno di Config.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.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,
}
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.