Podstawy antycheata FiveM: co robić i co żaden antycheat nie potrafi
Podstawy antycheata na FiveM: walidacja najpierw na serwerze, limity encji OneSync, anulowanie wybuchów, dzienniki webhook Discorda, bany txAdmin i co żaden antycheat nie potrafi.
Oszuści są częścią prowadzenia publicznego serwera. Spawniają pojazdy, wysadzają mapę, dają sobie pieniądze i broń oraz odbierają twoim uczciwym graczom. Pojedynczy zasób « antycheata » tego nie naprawił. Co działa to kilka warstw, zaczynając od najważniejszej: nie ufaj klientowi.
Warstwa 1: walidacja na serwerze
Większość cheatów na serwerze roleplay to nie hacki silnika. To ktoś wyzwalający twoje własne zdarzenia z wartościami, które wybrał. Napraw to najpierw, a duża część problemu znika.
- Oblicz ceny, nagrody i kwoty na serwerze.
- Używaj
source, nigdy id gracza wysłanego przez klienta. - Sprawdzaj pracę, dystans i cooldowny przed działaniem.
Pełna metoda z kodem znajduje się w securing server events. Jeśli zrobisz tylko jedną rzecz z tego artykułu, zrób to.
Warstwa 2: kontrola encji z OneSync
Z OneSync, serwer wie o encjach (pojazdy, pedy, obiekty) i może kontrolować, kto je tworzy. To pozwala ci zatrzymać oszustów przed spawnieniem rzeczy.
- Blokada encji. OneSync ma tryb blokady encji, w którym encje utworzone przez klienta są blokowane lub ograniczone. Jest silne, ale psuje każdy skrypt, który spawnie pojazdy lub obiekty z klienta. Przeczytaj dokumentację OneSync dla dokładnego ustawienia w twojej kompilacji przed jej włączeniem i najpierw przenieś spawning na serwer. Patrz spawning vehicles server-side.
- Zdarzenie
entityCreating. Serwer może sprawdzać encje podczas ich tworzenia i anulować te, których nie chcesz.
AddEventHandler('entityCreating', function(entity)
local model = GetEntityModel(entity)
if model == `jet` then
CancelEvent()
end
end)Ten przykład odmawia tworzenia odrzutowca skąd kolwiek. Zbuduj własną listę modeli, które nikt na twoim serwerze nie powinien tworzyć, i bądź ostrożny: reguła, która jest zbyt szeroka, anuluje encje twoich własnych skryptów.
OneSync musi być włączony dla tych funkcji. Patrz OneSync and player limits.
Warstwa 3: obsługuj zdarzenia gry
FiveM wysyła niektóre działania gry na serwer jako zdarzenia, i serwer może je anulować. Dwa typowe:
Wybuchy
AddEventHandler('explosionEvent', function(sender, ev)
-- sender is the player who caused the explosion
-- ev holds the explosion type and position
CancelEvent()
end)Anulowanie każdego wybuchu zatrzymałoby również granaty i twoje własne skryptowe wybuchy. Zawęź to danymi w ev. Na przykład, spójrz na ev.explosionType i anuluj tylko typy, które nigdy nie powinny się zdarzyć na twoim serwerze, lub najpierw je zaloguj, aby zobaczyć, co normalny gameplay produkuje.
local blocked = { [1] = true } -- example: replace with the types you decide to block
AddEventHandler('explosionEvent', function(sender, ev)
if blocked[ev.explosionType] then
CancelEvent()
print(('Blocked explosion from player %s'):format(sender))
end
end)Broń
Serwer otrzymuje również zdarzenia dla dania, usuwania i wypalania broni, takie jak giveWeaponEvent. Oszuści, którzy dają sobie broń, wyzwalają te. Jeśli twój ekwipunek obsługuje broń, porównaj to, co zdarzenie chce dać, z tym, co gracz posiada, i anuluj to, gdy to nie pasuje. Najpierw zaloguj, później egzekwuj, aby nie zablokowaliśmy rzeczywistych graczy przez przypadek.
Inne zdarzenia gry istnieją dla ognia, pocisków i obrażeń od broni. Szukaj ich w dokumentacji Cfx przed użyciem i testuj na serwerze deweloperskim.
Ostrzeżenie: obsługiwacz zdarzeń gry, który jest zbyt surowy, karze uczciwych graczy. Zacznij w trybie tylko logu na kilka dni, przeczytaj dzienniki, a potem egzekwuj.
Warstwa 4: rejestruj podejrzane zachowanie
Nie banuj na jednym sygnale. Zaloguj, przeczytaj, potem działaj. Webhook Discord to łatwe miejsce, aby wysłać dzienniki, które personel może zobaczyć.
local WEBHOOK = GetConvar('anticheat_webhook', '')
local function logToDiscord(text)
if WEBHOOK == '' then return end
PerformHttpRequest(WEBHOOK, function() end, 'POST',
json.encode({ username = 'Anticheat', content = text }),
{ ['Content-Type'] = 'application/json' })
end
AddEventHandler('explosionEvent', function(sender, ev)
logToDiscord(('Explosion from %s (%s), type %s'):format(GetPlayerName(sender), sender, ev.explosionType))
end)Ustaw URL webhooku w server.cfg za set anticheat_webhook "https://...", a nie w skrypcie, i trzymaj to w tajemnicy. Każdy, kto ma adres URL, może wysyłać do twojego kanału.
Co zalogować: nie powiodła się walidacja po stronie serwera (niemożliwe kwoty, zły dystans), zablokowane wybuchy, spawny encji, które anulowałeś, powtórzony spam zdarzeń. Uwzględnij imię gracza, id serwera i identyfikator, taki jak licencja, aby móc go zabanować.
Warstwa 5: działaj z txAdmin
Gdy dzienniki pokazują oszusta, usuń go. Użyj txAdmin, aby ostrzec lub zabanować, więc działanie jest rejestrowane i przetrwa restarty. Patrz moderating with txAdmin. W skrypcie, DropPlayer(source, 'reason') kopie gracza, ale ban powinien przejść przez twoje narzędzia moderacyjne, aby identyfikatory były zapisywane.
Co żaden antycheat nie potrafi
Bądź szczery na temat granic.
- Klient należy do oszusta. Coś, co jest sprawdzane tylko na kliencie, można wyłączyć. Tylko sprawdzenia serwerowe są wiarygodne.
- Żadne narzędzie nie łapie wszystkiego. Pojawiają się nowe cheatów, a deteksja jest zawsze krok w tyle.
- Obfuskacja to nie bezpieczeństwo. Ukryte nazwy zdarzeń i « tajne » tokeny w kodzie klienta mogą być przeczytane.
- Wolny lub wyciekły kod antycheata to ryzyko. Twórcy cheatów też to czytają, a niektóre z nich zawierają backdoory. Bądź ostrożny z zasobami z nieznanych źródeł.
- Ludzie wciąż mają znaczenie. Aktywny personel, jasny system raportowania i szybkie bany robią więcej niż każdy skrypt.
Łącz warstwy, trzymaj zasoby zaktualizowane i przejrzyj swoje dzienniki. To sprawia, że twój serwer jest trudnym celem w porównaniu z innymi.
Lista kontrolna
| Objaw | Naprawa |
|---|---|
| Gracze dostaną darmowe pieniądze lub przedmioty | Waliduj zdarzenia na serwerze, patrz przewodnik zdarzeń |
| Oszuści spawniają pojazdy i obiekty | Kontrola encji OneSync i entityCreating; przenieś spawning na serwer |
| Wybuchy na całej mapie | Handler explosionEvent z CancelEvent, zawężony po typie |
| Cheaty z dawaniem broni | Sprawdź zdarzenia broni przed twoim ekwipunkiem, najpierw zaloguj |
| Nie mam pojęcia, co robią oszuści | Wyślij dzienniki na webhook Discord przechowywany w convar |
| Znaleziony oszust | Ban z txAdmin z zachowanymi identyfikatorami |
| Reguła blokuje uczciwych graczy | Przełącz na tylko dziennik i zawęź warunek |
Szybkie odpowiedzi
Czy potrzebuję zasobu antycheata?
Najpierw zabezpiecz własne skrypty, ponieważ to zatrzymuje najczęstsze nadużycie. Zasób antycheata może dodać detekcję na górze, ale nie jest to zastępstwo dla walidacji po stronie serwera.
Czy antycheat może zatrzymać każdego oszusta?
Nie. Oszuści się przystosowują, a klient gry jest na ich maszynie. Celem jest uczynienie oszukiwania trudnym, wykrycie oczywistego i szybkie usunięcie sprawców.
Czy jest bezpiecznie anulować zdarzenia gry na serwerze?
Tak, z ostrożnością. Anulowanie zdarzenia zatrzymuje je dla wszystkich, więc przetestuj, że normalny gameplay, taki jak twoje własne skrypty, które tworzą wybuchy, wciąż działają, zanim uruchomisz regułę na żywym serwerze.
Skrypty bez tego problemu
CCTV Security CamerasKamery do rozstawienia, tablet z podglądem wielu kamer na żywo i drukowane zdjęcia jako dowody.Zobacz skrypt →
Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →
Tebex TemplateMotyw premium dla twojego sklepu Tebex, bez kodu — edytowany w całości z panelu Tebex.Zobacz skrypt →