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.
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
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.
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.
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 →