Basi di anticheat FiveM: cosa fare e cosa nessun anticheat può fare

Basi di anticheat per FiveM: convalida sul server prima, limiti di entità OneSync, annullamento esplosioni, log Discord webhook, ban txAdmin e cosa nessun anticheat può fare.

I cheater fanno parte della gestione di un server pubblico. Generano veicoli, fanno saltare la mappa, si danno soldi e armi, e allontanano i tuoi giocatori onesti. Una singola risorsa "anticheat" non risolverà questo. Quello che funziona è alcuni strati, iniziando da quello più importante: non fidarti del client.

Strato 1: convalida sul server

La maggior parte dei cheat su un server di roleplay non sono hack del motore. Sono qualcuno che attiva i tuoi stessi eventi con valori che hanno scelto. Correggilo prima, e gran parte del problema scompare.

  • Calcola prezzi, ricompense e importi sul server.
  • Usa source, mai un id giocatore inviato dal client.
  • Controlla lavoro, distanza e cooldown prima di agire.

Il metodo completo con il codice è in protezione degli eventi del server. Se fai solo una cosa da questo articolo, fai quella.

Strato 2: controllo delle entità con OneSync

Con OneSync, il server conosce le entità (veicoli, ped, oggetti) e può controllare chi le crea. Questo ti consente di fermare i cheater dalla generazione di cose.

  • Entity lockdown. OneSync ha una modalità di blocco delle entità in cui le entità create dal client vengono bloccate o limitate. È forte, ma rompe qualsiasi script che genera veicoli o oggetti dal client. Leggi la documentazione di OneSync per l'impostazione esatta nella tua build prima di attivarla, e sposta prima la generazione al server. Vedi generazione di veicoli lato server.
  • Evento entityCreating. Il server può ispezionare le entità mentre vengono create e annullare quelle che non vuoi.
lua
AddEventHandler('entityCreating', function(entity)
    local model = GetEntityModel(entity)
    if model == `jet` then
        CancelEvent()
    end
end)

Questo esempio rifiuta di creare un jet da qualunque luogo. Costruisci il tuo elenco di modelli che nessuno sul tuo server dovrebbe creare, e fai attenzione: una regola troppo ampia annulla le entità dei tuoi script.

OneSync deve essere abilitato per queste funzionalità. Vedi OneSync e limiti dei giocatori.

Strato 3: gestisci gli eventi del gioco

FiveM invia alcune azioni di gioco al server come eventi, e il server può annullarli. Due comuni:

Esplosioni

lua
AddEventHandler('explosionEvent', function(sender, ev)
    -- sender is the player who caused the explosion
    -- ev holds the explosion type and position
    CancelEvent()
end)

L'annullamento di ogni esplosione fermerebbe anche le granate e le tue esplosioni scritte. Restringi con i dati in ev. Ad esempio, guarda ev.explosionType e annulla solo i tipi che non dovrebbero mai accadere sul tuo server, o registrali prima per vedere cosa produce il normale gameplay.

lua
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)

Armi

Il server riceve anche eventi per dare, rimuovere e sparare armi, come giveWeaponEvent. I cheater che si danno armi triggerano questi. Se il tuo inventario gestisce le armi, confronta quello che l'evento vuole dare con quello che il giocatore possiede, e annullalo quando non corrisponde. Registra prima, applica dopo, così non blocchi i giocatori reali per sbaglio.

Altri eventi del gioco esistono per fuoco, proiettili e danno da arma. Cercali nella documentazione di Cfx prima di usare uno, e prova su un server di sviluppo.

Attenzione: un handler di eventi di gioco troppo rigoroso punisce i giocatori onesti. Inizia in modalità solo log per alcuni giorni, leggi i log, e poi applica.

Strato 4: registra il comportamento sospetto

Non bannare su un singolo segnale. Registra, leggi, poi agisci. Un webhook Discord è un posto facile per inviare log che lo staff può vedere.

lua
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)

Imposta l'URL del webhook in server.cfg con set anticheat_webhook "https://...", non nello script, e mantienilo privato. Chiunque abbia l'URL può postare al tuo canale.

Cosa registrare: controlli lato server non riusciti (importi impossibili, distanza sbagliata), esplosioni bloccate, spawn di entità che hai annullato, spam di eventi ripetuti. Includi il nome del giocatore, l'id del server e un identificatore come la licenza, così puoi bannarli.

Strato 5: agisci con txAdmin

Quando i log mostrano un cheater, rimuovilo. Usa txAdmin per avvertire o bannare, così l'azione è registrata e sopravvive ai riavvii. Vedi moderazione con txAdmin. In uno script, DropPlayer(source, 'reason') espelle un giocatore, ma un ban dovrebbe andare attraverso i tuoi strumenti di moderazione così gli identificatori vengono salvati.

Cosa nessun anticheat può fare

Sii onesto sui limiti.

  • Il client appartiene al cheater. Qualsiasi cosa controllata solo sul client può essere spenta. Solo i controlli del server sono affidabili.
  • Nessuno strumento cattura tutto. Nuovi cheat appaiono, e il rilevamento è sempre un passo indietro.
  • L'offuscamento non è sicurezza. I nomi degli eventi nascosti e i token "segreti" nel codice client possono essere letti.
  • Il codice anticheat gratuito o trapelato è un rischio. Gli sviluppatori di cheat lo leggono troppo, e parte di esso contiene backdoor. Fai attenzione con le risorse da fonti sconosciute.
  • Le persone contano ancora. Lo staff attivo, un sistema di report chiaro e i ban rapidi fanno più di qualsiasi script.

Combina gli strati, mantieni le risorse aggiornate e rivedi i tuoi log. Questo rende il tuo server un bersaglio difficile rispetto ad altri.

Checklist

Sintomo Soluzione
I giocatori ottengono soldi o oggetti gratuiti Convalida gli eventi sul server, vedi la guida degli eventi
I cheater generano veicoli e oggetti Controlli delle entità OneSync e entityCreating; sposta la generazione al server
Esplosioni attraverso la mappa Handler explosionEvent con CancelEvent, ristretto per tipo
Cheat di armamento Controlla gli eventi di armi rispetto al tuo inventario, registra prima
Nessuna idea di cosa facciano i cheater Invia i log a un webhook Discord mantenuto in un convar
Cheater trovato Banna da txAdmin con gli identificatori salvati
La regola blocca i giocatori onesti Passa a solo log e ristrovi la condizione

Risposte rapide

Ho bisogno di una risorsa anticheat?

Innanzitutto proteggi i tuoi script, perché questo ferma l'abuso più comune. Una risorsa anticheat può aggiungere rilevamento in cima, ma non è un sostituto per la convalida sul lato server.

Un anticheat può fermare ogni cheater?

No. I cheater si adattano, e il client del gioco è sulla loro macchina. L'obiettivo è rendere difficile fare cheating, rilevare quello ovvio e rimuovere i contraffattori rapidamente.

È sicuro annullare gli eventi del gioco sul server?

Sì, con attenzione. L'annullamento di un evento lo interrompe per tutti, quindi prova che il normale gameplay come i tuoi script che creano esplosioni funzionino ancora prima di eseguire una regola su un server live.

Script senza questo problema

CCTV Security CamerasTelecamere posizionabili, un tablet multi-vista in diretta e foto stampate come prove.Vedi script →Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →Tebex TemplateUn tema premium senza codice per il tuo negozio Tebex, modificabile interamente dal pannello Tebex.Vedi script →

Continua a leggere