Anti-cheat
Anti-cheat
Każda decyzja dotycząca pieniędzy i zapasów podejmowana jest po stronie serwera. Klient renderuje dystrybutor i zgłasza, co się stało; nigdy nie decyduje o tym, ile coś kosztuje ani ile paliwa zostało wlane.
Co egzekwuje serwer
- Sesje dystrybutora. Otwarcie dystrybutora wymaga pobrania z serwera tokenu sesji. Płatność wymaga tego tokenu, a naliczone litry są ograniczone czasem, przez jaki sesja była faktycznie otwarta przy skonfigurowanym przepływie. Klient zgłaszający więcej, niż dystrybutor fizycznie mógł dostarczyć, zostaje ograniczony do tego, na co pozwala zegar.
- Wygasanie sesji. Tokeny są jednorazowe, powiązane z graczem, który je otworzył, i są usuwane po upływie
PumpSessionTimeout. Wygasła sesja nie nalicza żadnych opłat. - Kontrole odległości. Zakupy, tankowanie, ładowanie, wymiana akumulatora, napełnianie kanistra, zamawianie zapasów oraz każda akcja w panelu sprawdzają ponownie po stronie serwera, czy gracz faktycznie znajduje się na tej stacji, z marginesem
DistanceSlackmetrów na opóźnienie pozycji postała (ped). - Ograniczanie częstotliwości żądań (Rate limiting). Każde zdarzenie i wywołanie zwrotne (callback) kosztuje token z puli gracza, która odnawia się w tempie
PerSecondi nigdy nie kumuluje się powyżejBurst. Zacięty klawisz nadal działa; pętla spamująca natychmiast trafia na ścianę. - Blokowanie wartości (Value clamping). Ceny, płace, zamówienia, wypłaty i wpłaty przechodzą weryfikację granic oraz typów po stronie serwera. Nic powyżej
MaxAmountnie jest akceptowane, a ceny mieszczą się wConfig.Refuel.PriceLimits. - Kontrola uprawnień przy każdej akcji. Uprawnienia staffu są weryfikowane ponownie po stronie serwera dla każdego żądania, nigdy nie są ufane z poziomu UI. Zatrudnianie, zwalnianie i edycja kogokolwiek posiadającego uprawnienie
employeessą dostępne tylko dla właściciela, dzięki czemu pracownik nie może awansować samego siebie. Przeniesienie własności i odsprzedaż są dostępne tylko dla właściciela i wymagają ponownego wpisania nazwy stacji. - Zapasy i stan konta to stan serwera. Sprzedaż dochodzi do skutku tylko wtedy, gdy stacja faktycznie posiada odpowiednią liczbę litrów, a klient ma wystarczająco dużo pieniędzy; oba te aspekty zmieniają się w tym samym kroku po stronie serwera.
Config.AntiCheat = {
RateLimit = { Burst = 14, PerSecond = 6 },
MaxLitresPerPay = 200.0,
LitreGrace = 3.0,
PumpSessionTimeout = 900,
DistanceSlack = 15.0,
MaxAmount = 100000000,
MaxWage = 25000,
JerryPourTimeout = 600,
}| Ustawienie | Przeznaczenie |
|---|---|
RateLimit |
Rozmiar nagłego zrywu (burst) oraz tempo odnawiania puli zdarzeń dla każdego gracza |
MaxLitresPerPay |
Bezwzględny limit dla pojedynczej sesji dystrybutora lub ładowarki, niezależnie od czasu trwania |
LitreGrace |
Margines błędu weryfikacji czasu, w litrach. Pokrywa tick z opóźnieniem (lagiem) |
PumpSessionTimeout |
Liczba sekund, przez którą sesja pozostaje ważna |
DistanceSlack |
Dodatkowe metry dopuszczone ponad promień stacji |
MaxAmount |
Limit dla każdej wartości pieniężnej akceptowanej od klienta |
MaxWage |
Najwyższa stawka płacy, jaką właściciel może ustawić pracownikowi |
JerryPourTimeout |
Liczba sekund, przez którą niedokończone nalewanie jest pamiętane, zanim resztki nie będą mogły zostać odebrane |
Dostrajanie
Domyślne ustawienia pasują do normalnego serwera. Dwa parametry, którymi warto się zająć:
LitreGrace— zwiększ o jeden lub dwa litry, jeśli gracze ze słabym połączeniem są oszukiwani przy dystrybutorze. Utrzymuj tę wartość na niskim poziomie; to darmowe paliwo.RateLimit.Burst— zwiększ, jeśli faktycznie zatłoczony podjazd zaczyna odrzucać akcje. Zmniejsz, jeśli chcesz ostrzejszej smyczy.
⚠
Znaczące zwiększenie MaxLitresPerPay lub DistanceSlack usuwa limit, dla którego te zabezpieczenia zostały stworzone. Zmieniaj je tylko wtedy, gdy uczciwi gracze są ewidentnie blokowani.