Anticheat Docs
Présentation
Kairo Anticheat repose sur une idée simple : tout ce qui compte est vérifié côté serveur. Les détections ne dépendent pas d'un programme caché chez le joueur, elles comparent ce qui arrive au serveur à ce qui est possible dans le jeu.
Il surveille l'apparition d'entités, les armes, les déplacements, les explosions et les événements réseau. Chaque sanction est enregistrée avec sa preuve (règle déclenchée, valeurs mesurées, position) pour que ton équipe puisse vérifier.
Il fonctionne seul, mais s'appuie sur Kairo Core et Kairo Logs quand ils sont présents.
Installation
- Place le dossier kairo-anticheat dans resources/[kairo]/.
- Démarre-le le plus tôt possible dans server.cfg, juste après kairo-core s'il est installé.
- Renseigne le webhook Discord des alertes dans config.lua (facultatif mais recommandé).
- Lance une première session en mode observe = true : rien n'est sanctionné, les détections sont seulement journalisées. Ajuste les seuils, puis passe en mode actif.
# server.cfgensure kairo-coreensure kairo-anticheat
Configuration
Chaque règle a un seuil et une action : warn, kick ou ban. Commence avec des actions douces et durcis après avoir observé ton serveur pendant quelques jours.
-- config/anticheat.luaAnticheat.observe = false -- true : journalise sans sanctionnerAnticheat.webhook = 'https://discord.com/api/webhooks/…'Anticheat.rules = { teleport = { maxDistance = 120, action = 'kick' }, weapons = { whitelist = true, action = 'ban' }, explosions = { ban = true }, entities = { maxPerMinute = 25, action = 'kick' }, events = { validate = true, action = 'ban' },}
API
Les exports s'appellent avec exports['kairo-anticheat']:Nom(...). Les fonctions serveur ne sont jamais accessibles depuis le client.
Ban
serveurexports['kairo-anticheat']:Ban(source, reason, evidence)
Bannit un joueur en enregistrant une preuve.
| Paramètre | Type | Description |
|---|---|---|
source | number | ID serveur |
reason | string | Motif |
evidence | table? | Données associées |
Retour string — identifiant du bannissement
exports['kairo-anticheat']:Ban(source, 'Argent anormal', { amount = amount })IsBanned
serveurexports['kairo-anticheat']:IsBanned(identifier)
Vérifie si un identifiant est banni.
| Paramètre | Type | Description |
|---|---|---|
identifier | string | Licence ou autre identifiant |
Retour boolean, table? — et le détail du bannissement
local banned, info = exports['kairo-anticheat']:IsBanned(license)Whitelist
serveurexports['kairo-anticheat']:Whitelist(identifier, rules)
Exempte un joueur de certaines règles (équipe d'administration, tests).
| Paramètre | Type | Description |
|---|---|---|
identifier | string | Licence |
rules | table | Liste des règles à ignorer |
Retour rien
exports['kairo-anticheat']:Whitelist(license, { 'teleport' })ProtectEvent
serveurexports['kairo-anticheat']:ProtectEvent(name, validator)
Ajoute une validation à un de tes événements réseau. Si le validateur renvoie false, l'événement est bloqué et signalé.
| Paramètre | Type | Description |
|---|---|---|
name | string | Nom de l'événement |
validator | function(source, ...) | Renvoie true si l'appel est légitime |
Retour rien
exports['kairo-anticheat']:ProtectEvent('shop:buy', function(source, item) return Shop.items[item] ~= nilend)
Événements
kairo-anticheat:detection
serveurUne règle a été déclenchée.
AddEventHandler('kairo-anticheat:detection', function(source, rule, data) print(rule, json.encode(data))end)
Commandes
| Commande | Description |
|---|---|
/ac unban <id> | Lève un bannissement à partir de son identifiant. |
/ac info <id> | Affiche la preuve associée à un bannissement. |
FAQ
Y a-t-il des faux positifs ?
Les seuils par défaut sont prudents, mais chaque serveur est différent (scripts de téléportation, courses…). C'est pour cela que le mode observe existe : commence toujours par là.
Est-il compatible avec mes scripts qui téléportent les joueurs ?
Oui : appelle l'export de téléportation autorisée de ta ressource, ou exempte la ressource dans config.lua (allowedResources).