G-Phone est la ressource téléphone de G-Core, compatible ESX Legacy et standalone. Cette section couvre l'installation, la configuration, chaque application et l'API pour les développeurs.
Premier démarrage : redémarrez une foisLes objets phone, phone_rooted et sim sont ajoutés à votre inventaire au premier lancement. Votre inventaire ne les voit qu'après un redémarrage du serveur.
ox_inventory (SIM et numéro en métadonnées), inventaire ESX par défaut, aucun
Base de données
oxmysql (obligatoire)
Optionnel
ox_lib (menus et dialogues), ox_target ou qb-target (regarder le téléphone d'un joueur), pma-voice ou saltychat (voix des appels, micro coupé, haut-parleur, cabines)
Installation
L'installation est automatique : tables SQL et objets sont créés au premier démarrage.
Pour gérer les objets vous-même, désactivez l'auto-installation :
lua
Config.AutoInstallItems = false
Puis importez install/esx_items.sql (ESX) ou copiez le contenu de install/ox_inventory_items.lua dans les objets d'ox_inventory.
Standalone sans inventaireMettez Config.RequirePhoneItem = false : tous les joueurs ont alors un téléphone.
Notes de version
Version actuelle : 1.0.2. Les changements les plus récents sont en haut.
1.0.2
Dernière version
ModificationHaut-parleur dans les deux sens : les joueurs à moins de 5 m entendent ton correspondant, et lui les entend aussi (pma-voice).
CorrectionDeux personnes en appel qui se tiennent côte à côte s'entendent de vive voix, sans le filtre téléphone.
1.0.1
CorrectionLe bouton micro coupé fonctionne : l'autre personne ne t'entend plus, les joueurs à côté de toi si.
CorrectionLe haut-parleur fonctionne : les joueurs à moins de 5 m entendent ton correspondant.
CorrectionSaltyChat est pris en charge pour les appels et le haut-parleur, en plus de pma-voice.
CorrectionApplication Hacker : l'espion qui écoute un appel n'est plus entendu, sauf s'il active le chuchotement.
1.0.0
AjoutPremière version publique de G-Phone : 37 applications, ESX Legacy et standalone.
AjoutInstallation automatique des tables SQL et des objets phone, phone_rooted et sim.
Premiers pas en jeu
Ce que voit un joueur la première fois qu'il sort son téléphone.
Obtenir un téléphone. Achetez ou recevez l'objet phone. Un admin peut en donner un avec gphone:give <id>.
Ouvrir le téléphone avec K ou /phone.
Configurer l'appareil. L'assistant de démarrage se lance au premier allumage. Avec Config.AutoSim = true, une SIM et un numéro au format 555XXXX sont attribués automatiquement.
Installer des apps. Les apps de base sont déjà sur l'écran d'accueil. Les autres (réseaux sociaux, jeux, Ryde…) s'installent depuis l'AppStore.
Activer le curseur avec Alt gauche pour cliquer dans le téléphone tout en vous déplaçant.
Téléphone bloqué ?Par défaut, le téléphone ne s'ouvre pas si le joueur est mort ou menotté. Voir Config.IsPhoneBlocked dans Configuration.
Configuration
Tout se règle dans config.lua, partagé entre le client et le serveur.
Config.IsPhoneBlocked est appelé côté client avant chaque ouverture. Retournez true pour bloquer.
lua
Config.IsPhoneBlocked = function()
local ped = PlayerPedId()
ifIsEntityDead(ped) orIsPedCuffed(ped) thenreturntrueendif LocalPlayer.state.isDead or LocalPlayer.state.handcuffed thenreturntrueendreturnfalseend
Config.SetHudHidden(hidden) est appelé quand le téléphone passe en mode caméra. Par défaut il masque la minimap et déclenche l'événement g-phone:hudHidden pour votre HUD.
Touches
Chaque joueur peut changer ces touches dans Paramètres > Raccourcis clavier > FiveM.
Action
Touche par défaut
Ouvrir le téléphone
K (Config.OpenKey)
Activer le curseur
Alt gauche
Accepter un appel
Entrée
Refuser / raccrocher
Retour arrière
Prendre une photo / vidéo
Entrée
Retourner la caméra
Flèche haut
Activer le flash
E
Changer de mode caméra
←→
Autoriser le mouvement (caméra)
Espace
Mode avion
Non attribuée
Applications
37 applications sont intégrées. Celles marquées AppStore sont désinstallables et s'installent depuis l'AppStore.
Téléphone
Appels, contacts, favoris, numéros bloqués, messagerie vocale et appels vidéo.
Messages
SMS individuels et de groupe, photos et messages vocaux.
Mail
Boîte mail en @mail.gphone. Vos scripts envoient via l'export sendMail.
Notes
Notes personnelles enregistrées sur le téléphone.
Calendrier
Événements et rappels.
Dictaphone
Mémos vocaux.
Photos
Galerie des photos et vidéos, albums et partage AirShare.
Caméra
Photo, vidéo, selfie et flash.
Options
Fond d'écran, mode avion, éjection de la SIM et réglages du téléphone.
Météo
Météo de la ville.
Calculatrice
Calculatrice.
Horloge
Horloge et alarmes.
Maps
Carte de Los Santos.
AppStore
Installer et désinstaller les apps.
Buckme
Compte bancaire, IBAN et virements. Voir Banque et Wallet.
Maison
Vos logements et leurs portes. À brancher sur votre script.
Garage
Vos véhicules et leur vente.
Services
Appeler et écrire aux entreprises de Config.Companies.
MarketPlaceAppStore
Petites annonces d'achat et de vente.
Ryde meAppStore
VTC : le client fixe son prix, les chauffeurs enchérissent en direct.
MusiqueAppStore
Artistes, albums et morceaux. L'artiste gagne de l'argent par écoute.
NewsAppStore
Articles d'actualité de la ville.
BirdyAppStore
Réseau de messages courts : publications, likes, abonnements.
InstaPicAppStore
Réseau de photos et stories.
SnapmaticAppStore
Photos éphémères, stories et carte des amis.
TrendyAppStore
Rencontres par swipe, réservé aux 18 ans et plus.
DarkChatAppStore
Salons de discussion anonymes.
h4x.appAppStore
Piratage de véhicules et outils. Nécessite un téléphone phone_rooted.
BoostingAppStore
Contrats de véhicules. À brancher sur votre script.
2048AppStore
Fusionnez les tuiles jusqu'à 2048.
SerpentoAppStore
Snake.
PiouAppStore
Volez entre les obstacles.
BlokzAppStore
Placez les blocs, complétez les lignes.
BrikkoAppStore
Casse-briques.
DémineAppStore
Démineur.
EmpiloAppStore
Empilez les blocs le plus haut possible.
MorpionAppStore
Morpion.
Apps personnaliséesLes admins peuvent ajouter leurs propres apps (une URL affichée dans le téléphone) depuis /phoneadmin. Les URL listées dans Config.BlacklistUrls sont refusées.
Téléphone et carte SIM
Le fonctionnement dépend de votre inventaire : avec ox_inventory, les données suivent l'objet ; sinon, elles suivent le personnage.
ox_inventory
ESX / sans métadonnées
Téléphone
Chaque objet phone a son identifiant
Un téléphone virtuel par personnage
Numéro
Stocké dans les métadonnées (SIM)
Stocké en base de données
Données (messages, contacts, réglages)
Suivent le téléphone et la SIM
Suivent le personnage
Donner / voler un téléphone
Oui
Non
Changer de SIM
Éjecter dans les réglages, puis utiliser l'objet sim
Dans une zone de Config.NoPhoneZones, le téléphone ne capte plus. L'événement client gphone:phone:setNoPhoneZone est déclenché à l'entrée et à la sortie.
Avec provider = "custom", le serveur envoie le fichier à votre API, qui doit renvoyer l'URL du fichier.
lua
Config.Upload = {
provider = "local", -- "local" ou "custom"
publicUrl = "", -- vide = automatique via cfx.re
maxSizeMB = 8, -- taille max d'un fichier
maxPerMinute = 20, -- envois max par joueur et par minute
url = "", -- "custom" uniquement
headers = {},
}
Banque et Wallet
L'application bancaire Buckme s'appuie sur la banque d'ESX ou sur une banque interne.
Config.UseFrameworkBank
Comportement
true
Le compte courant est l'argent bank du joueur ESX
false
Le téléphone gère sa propre banque, avec un solde de départ Config.StartingBalance
Chaque compte reçoit un IBAN préfixé par Config.IbanPrefix (GP par défaut). Récupérez-le avec l'export getIban.
Entreprises (Services)
L'app Services liste vos entreprises : les joueurs peuvent les appeler et leur écrire, les employés répondent.
lua
Config.Companies = {
{ job = "police", label = "LSPD", number = "911", description = "Police de Los Santos" },
{ job = "ambulance", label = "EMS", number = "912", description = "Services médicaux d'urgence" },
{ job = "mechanic", label = "Mécano", number = "913", description = "Dépannage et réparations" },
{ job = "taxi", label = "Taxi", number = "914", description = "Transport de personnes" },
}
Champ
Description
job
Nom du job ESX
label
Nom affiché
icon
Icône (URL, facultatif)
number
Numéro appelable depuis l'app (facultatif)
description
Texte sous le nom
Pour fermer une entreprise temporairement depuis un autre script :
Accès par défautUn joueur sans rang mais avec l'ACE command est traité comme admin.
Architecture
Trois couches : l'interface React, les scripts Lua client et serveur, et un pont (bridge/) qui isole tout ce qui dépend du framework, de l'inventaire ou de la base.
Exemple avec l'app Notes : l'interface appelle fetchNui, le client relaie au serveur via GPhone.TriggerServerCallback, le serveur répond par le même chemin.
Pensez à recompilerFiveM charge uniquement web/dist/. Après un build, utilisez /restartphone ou redémarrez la ressource.
Disponiblev1.0.0ESX Legacy · Standalone
G-Pad, la tablette repensée
G-Pad est la tablette de G-Core, compatible ESX Legacy et standalone. Écran 13 pouces en verre dépoli, fenêtres libres, écran partagé, dossiers, notifications et appareil photo. Ressource indépendante : elle n'a pas besoin de G-Phone.
Prêt dès le premier démarrageAvec l'inventaire ESX, l'objet tablet est ajouté à la base et rechargé automatiquement : pas besoin de redémarrer ni de taper /refreshitems.
Copiez la ressource. Placez le dossier dans resources/ et nommez-le exactement g-pad.
Ajoutez-la au server.cfg, après ses dépendances :
cfg
ensure oxmysql
ensure es_extended # si ESXensure ox_inventory # si ox_inventoryensure screenshot-basic # optionnel : appareil photoensure g-pad
Démarrez le serveur. Les tables gpad_settings, gpad_notes, gpad_events et gpad_photos sont créées. Avec l'inventaire ESX, l'objet tablet est ajouté dans la table items et rechargé tout de suite.
Donnez-vous une tablette : /giveitem <id> tablet 1, puis utilisez-la depuis l'inventaire.
Le nom du dossier compteL'objet ox_inventory et les exports utilisent le nom de la ressource. Gardez g-pad, en minuscules.
Pour gérer l'objet vous-même, désactivez l'auto-installation puis importez install/esx_items.sql :
lua
Config.AutoInstallItems = false
Standalone sans inventaireMettez Config.RequireItem = false : tous les joueurs ont alors une tablette.
Premiers pas en jeu
Ce que voit un joueur la première fois qu'il sort sa tablette.
Obtenir une tablette. Achetez ou recevez l'objet tablet.
Sortir la tablette en utilisant l'objet, avec F2 ou /tablet. Le personnage la prend en main avec une animation. Utiliser l'objet à nouveau la range.
Déverrouiller. Glissez vers le haut, ou cliquez. Un code à 4 chiffres se règle dans Réglages.
Personnaliser. Fond d'écran, apparence claire ou sombre, coloris de l'appareil, taille du texte et langue se règlent dans l'app Réglages, pour chaque joueur.
Ranger la tablette avec Échap ou le bouton Ranger du Centre de contrôle.
Tablette bloquée ?Par défaut, la tablette ne s'ouvre pas si le joueur est mort ou dans l'eau. Voir Config.BlockWhenDead et Config.BlockInWater dans Configuration.
Configuration
Tout se règle dans config.lua, partagé entre le client et le serveur.
Config.Camera règle l'envoi des photos (voir Appareil photo) et Config.PropTextures les textures de l'objet tenu en main (voir Objet en main).
Applications
11 applications intégrées, et 5 widgets pour l'écran d'accueil : Calendrier, Météo, Notes, Horloge et Photos. Les apps marquées Système ne peuvent pas être supprimées.
RéglagesSystème
Wi-Fi, Bluetooth, mode Avion, apparence, luminosité, 12 fonds d'écran, coloris, code d'accès, Ne pas déranger, langue.
Notes
Notes enregistrées en base : recherche, épinglées, suppression.
Calendrier
Vues jour, semaine et mois. Événements avec lieu, couleur et notes.
Horloge
Horloges mondiales, alarmes, chronomètre avec tours et minuteur.
Météo
Calée sur la météo du jeu : prévisions par heure et sur 10 jours.
PhotosSystème
Photothèque par mois, favoris, ajout par lien https, fond d'écran.
Appareil photoSystème
Caméra du jeu à travers l'écran : zoom 0,5× à 5×, selfie, grille.
Plans
Carte GTA (satellite, jeu, atlas), position du joueur, itinéraire vers le GPS.
NavigateurSystème
Onglets, recherche Google, favoris du serveur et signets du joueur.
Calculette
Standard, et scientifique quand la fenêtre est large.
G-StoreSystème
À la une, recherche, fiches détaillées : installer et supprimer les apps.
Gestes et multitâche
La tablette se pilote à la souris comme un écran tactile : clic = toucher, maintenir = appui long, glisser = balayer.
Bouton ••• en haut d'une app > Écran partagé, puis choisir la 2e app. Glisser la barre centrale : 1/3, 1/2 ou 2/3 ; jusqu'au bord pour revenir en plein écran
Fenêtres libres
Bouton ••• > Fenêtre, ou Réglages > Écran d'accueil et multitâche. Déplacer par le haut, redimensionner par le coin bas-droit, boutons rouge / jaune / vert
Notifications
Les notifications restent sur l'écran verrouillé jusqu'à ce que le joueur les efface, même si elles arrivent tablette rangée.
Où
Comportement
Écran verrouillé
Groupées par app en piles (cliquer pour déplier). Glisser vers la gauche : bouton Effacer ; glisser loin : effacée. Cliquer : déverrouille (code si activé) et ouvre l'app
Tablette déverrouillée
Bannière en haut de l'écran ; glisser vers le haut pour la ranger, cliquer pour ouvrir l'app
Icônes
Pastille rouge avec le nombre de notifications non effacées
Ne pas déranger
Pas de bannière ni de son ; les notifications restent dans le centre
Vos autres scripts peuvent envoyer des notifications : voir Exports.
Appareil photo
La caméra du jeu s'affiche à travers l'écran de la tablette. Visée à la souris, zoom de 0,5× à 5×, selfie et grille. Les photos arrivent dans l'app Photos.
Config.Camera = {
upload = {
url = "https://api.fivemanage.com/api/image", -- vide = pas d'enregistrement
field = "image", -- champ du fichier
headers = { Authorization = "VOTRE_CLE_API" },
responsePath = "url", -- lien dans la réponse JSON
},
encoding = "jpg",
quality = 0.9,
sensitivity = 0.12, -- vitesse de visée
}
Clé visible par les joueursL'envoi se fait depuis le jeu du joueur : utilisez une clé réservée à l'envoi d'images. Si Config.PhotoDomains est rempli, ajoutez-y le domaine de l'hébergeur.
Objet en main
Pendant l'utilisation, le personnage tient la tablette avec une animation. Ses textures peuvent être remplacées par le logo G-Core au dos et l'écran de G-Pad en façade.
Trouvez les textures d'origine. Ouvrez prop_cs_tablet dans CodeWalker ou OpenIV, onglet Textures.
Testez-les en jeu : /gpadtexture <dictionnaire> <texture> <back|screen>.
État de la tablette, ouverture des apps, notifications, écran partagé
web/public/assets/img/
Icônes et fonds d'écran (clairs et sombres)
client/, server/, bridge/
Lua : ouverture, caméra, base de données, framework et inventaire
Pensez à recompilerAprès npm run build, redémarrez la ressource avec ensure g-pad.
Disponiblev1.0.0ESX Legacy · Standalone
G-Watch Ultra, la montre connectée
G-Watch est la montre connectée de G-Core, inspirée des montres d'aventure : boîtier titane 49 mm, bouton Action orange, couronne crantée. Cadrans personnalisables, Smart Stack, activité, entraînements, boussole, profondimètre, SOS et sirène. Elle se jumelle au G-Phone, et à n'importe quel autre téléphone.
Fonctionne avec votre téléphoneG-Phone est détecté automatiquement. Pour un autre téléphone, deux exports suffisent pour les notifications et les appels : voir Utiliser un autre téléphone.
Copiez la ressource. Placez le dossier dans resources/ et nommez-le exactement g-watch.
Ajoutez-la au server.cfg, après ses dépendances et votre téléphone :
cfg
ensure oxmysql
ensure es_extended # si ESXensure ox_inventory # si ox_inventoryensure g-phone # ou votre téléphone (optionnel)ensure g-watch
Démarrez le serveur. Les tables gwatch_settings, gwatch_activity et gwatch_workouts sont créées. Avec l'inventaire ESX, l'objet gwatch est ajouté dans la table items et rechargé tout de suite.
Donnez-vous une montre : /giveitem <id> gwatch 1, puis regardez-la avec F3.
Le nom du dossier compteL'objet ox_inventory et les exports utilisent le nom de la ressource. Gardez g-watch, en minuscules.
Pour gérer l'objet vous-même, désactivez l'auto-installation puis importez install/esx_items.sql :
lua
Config.AutoInstallItems = false
Standalone sans inventaireMettez Config.RequireItem = false : tous les joueurs portent alors une montre.
Premiers pas en jeu
Ce que voit un joueur la première fois qu'il regarde sa montre.
Obtenir une montre. Achetez ou recevez l'objet gwatch.
Regarder la montre avec F3, /watch ou en utilisant l'objet. Le personnage lève le poignet et la montre s'affiche en bas à droite de l'écran.
Naviguer. Un clic sur la couronne passe du cadran aux apps. La molette sur la couronne fait défiler. Échap revient en arrière puis range la montre.
Personnaliser. Appui long sur le cadran, puis Modifier : couleur, fond d'écran, complications. Boîtier, bracelet, bouton Action et mode nuit se règlent dans l'app Réglages.
Montre fermée, les notifications, appels, alarmes et la plongée s'affichent quelques secondes dans un coin de l'écran, sans prendre la souris.
Les capteurs tournent en permanenceTant que le joueur porte la montre, la fréquence cardiaque, l'activité du jour et les entraînements sont mesurés, même montre fermée.
Configuration
Tout se règle dans config.lua, partagé entre le client et le serveur.
Date, météo, fréquence cardiaque, activité, pas, altitude, boussole, lever et coucher du soleil, phase de la lune, alarme, chronomètre, minuteur, exercice, messages et profondeur. Toucher une complication ouvre son app.
Déposez vos images .jpg (format portrait, environ 615 × 753) dans web/public/wallpapers/, ajoutez leur nom dans WALLPAPERS (web/src/system/faces/Faces.tsx) puis recompilez. Les joueurs peuvent aussi coller un lien https dans l'éditeur du cadran.
Mode nuitL'écran passe en rouge pour préserver la vision dans le noir : automatiquement la nuit dans le jeu, ou toujours (Réglages, Centre de contrôle).
Boutons et gestes
La montre se manipule comme une vraie : couronne, bouton latéral et bouton Action sont cliquables.
Action
Comment
Couronne (Digital Crown)
Clic : cadran ⇄ apps. Molette : fait défiler. Sur le cadran : ouvre le Smart Stack
Bouton latéral
Clic : Centre de contrôle. Maintenir : SOS d'urgence, sirène, ranger la montre
Silence, Ne pas déranger, lampe torche (éclaire réellement devant le joueur), verrou eau (tourner la couronne pour éjecter l'eau), mode nuit, sirène, luminosité et bouton Ranger.
Bouton latéral maintenu, puis faire glisser « SOS d'urgence ». Les joueurs dont le job est dans Config.SOS.jobs (ESX) ou qui ont l'ACE gwatch.sos (standalone) reçoivent l'alerte et un point GPS clignotant.
cfg
# standalone : désigner les secoursadd_ace group.ems gwatch.sos allow
Après une chute violente (Config.FallDetection.minHealthLoss), la montre sonne et propose « Je vais bien » ou SOS. Sans réponse au bout du compte à rebours, le SOS part tout seul.
Son très aigu à deux tons. Les joueurs proches l'entendent plus ou moins fort selon la distance (Config.Siren.range). Elle s'arrête au bout de Config.Siren.maxDuration secondes.
Téléphone jumelé
La montre affiche les notifications, les appels et les messages du téléphone du joueur. Le téléphone se choisit dans config.lua.
lua
Config.Phone = {
provider = "auto", -- "auto", "g-phone", "custom" ou "none"
gphoneResource = "g-phone", -- si vous avez renommé G-Phone
ignoredApps = {}, -- apps dont les notifications ne vont pas sur la montre
}
En "auto", la montre passe aussi en "custom" quand G-Phone n'est pas installé. Mettez "custom" explicitement pour que le téléphone apparaisse comme « Jumelé » même sans l'étape 3.
Dans le script de votre téléphone, à l'endroit où il affiche une notification ou un appel, ajoutez l'appel à la montre. Côté serveur, le premier argument est le joueur qui reçoit.
lua
-- Serveur
exports["g-watch"]:phoneNotify(source, { app = "Messages", title = "Franklin", body = "T'es où ?" })
exports["g-watch"]:phoneIncomingCall(source, { callId = 12, number = "5551234", name = "Franklin" })
exports["g-watch"]:phoneCallStarted(source, 12) -- appel décroché (entrant ou sortant)
exports["g-watch"]:phoneCallEnded(source, 12) -- appel terminé, refusé ou manqué-- Client : mêmes exports, sans source
exports["g-watch"]:phoneNotify({ app = "Messages", title = "Franklin", body = "T'es où ?" })
Export
Données
phoneNotify
app (nom de l'app du téléphone), title, body, facultatif : channelId (ouvre la conversation au toucher)
Remplissez answerCall et declineCall dans bridge/client/phone/custom.lua. Par défaut, la montre envoie des événements que votre téléphone peut écouter :
Remplissez les fonctions de bridge/server/phone/custom.lua avec les requêtes SQL de votre téléphone. Chacune reçoit d'abord src, l'id serveur du joueur. Une fonction laissée vide est simplement absente de la montre : l'app affiche « Non disponible avec votre téléphone ».
Fonction
Renvoie
Utilisée par
getNumber(src)
Numéro du joueur, ou nil
Statut « Jumelé »
getContactName(src, number)
{ name, avatar }
Écran d'appel
getConversations(src)
Liste { id, name, number, isGroup, avatar, lastMessage, time, unread }
Messages
getMessages(src, id)
Liste { id, me, sender, name, content, time }, du plus ancien au plus récent
Messages
sendMessage(src, msg)
{ channelId, messageId }, ou nil en cas d'échec. msg = { channelId, number, content }
Répondre
getContacts(src)
Liste { number, name, avatar }
Nouveau message
getRecents(src)
Liste { id, number, name, outgoing, answered, hidden, duration, time }
Téléphone
getNotifications(src)
Liste { id, app, title, body, time }
Messages, onglet « Toutes les apps »
Les heures (time) sont en millisecondes. Exemple pour un téléphone qui garde le numéro dans la table users d'ESX :
lua
function Adapter.getNumber(src)
local xPlayer = GWatch.Framework.player(src)
ifnot xPlayer thenreturnnilendreturn MySQL.scalar.await("SELECT phone_number FROM users WHERE identifier = ?", { xPlayer.identifier })
end
Modèle completL'adaptateur G-Phone (bridge/server/phone/gphone.lua) implémente toutes ces fonctions : servez-vous-en comme exemple.
Exports et événements
Ouvrez la montre, envoyez des notifications et lisez l'activité depuis vos autres ressources. Exports du téléphone : voir Utiliser un autre téléphone.
L'interface est dans web/ (React, Vite et TypeScript). FiveM charge uniquement le build compilé dans web/dist/.
bash
cd web
npminstallnpmrundev# aperçu dans le navigateur avec des données de démonpmrunbuild# recompile web/dist
En mode dev, l'URL ouvre un état précis : #face=wayfinder&route=compass&accent=green&band=trail&caseColor=black. La console expose gwatch.call(), gwatch.fall() et gwatch.notify().
Boîtier, écran, grille des apps, Smart Stack, centres, appels, SOS
web/src/system/faces/
Cadrans, complications et liste des fonds d'écran
web/public/wallpapers/
Fonds d'écran
bridge/server/phone/, bridge/client/phone/
Adaptateurs de téléphone (G-Phone, autre téléphone)
client/, server/, bridge/
Lua : capteurs, SOS, sirène, base de données, framework et inventaire
Pensez à recompilerAprès npm run build, redémarrez la ressource avec ensure g-watch.
Bientôt disponiblev1.0.0OneSync · Standalone
G-AntiCheat, l'anti-cheat Sentinel
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Sentinel protège votre serveur FiveM contre les tricheurs et donne à votre staff les outils pour agir : détections côté client et côté serveur, validation OneSync, preuves par capture d'écran, bans difficiles à contourner, panel en jeu et panel web avec connexion Discord.
Téléportation, vie, godmode, silent aim et « kill all » vérifiés côté serveur (OneSync) : impossible à contourner depuis le client. Voir Heartbeat et validation serveur.
Audit de sécurité
Au démarrage, les réglages de sécurité de votre server.cfg sont vérifiés, avec la ligne à ajouter pour chacun. Voir Audit de sécurité.
Preuves automatiques
Capture d'écran du joueur à chaque détection, conservée dans le panel et envoyée sur Discord.
Ban multi-couches
Identifiants (license, Discord, Steam, FiveM…), tokens matériels FiveM et empreinte de l'appareil. Un banni qui revient avec un autre compte est reconnu.
Score de risque
Sanctions par paliers : avertissement, kick, ban (désactivé par défaut).
Panel en jeu et web
Joueurs, alertes, preuves, bans, réglages des détections et listes noires, en direct, sans redémarrage. Aussi accessible depuis un navigateur, avec connexion Discord.
Live view
Voir l'écran d'un suspect à la demande, sans aucun service externe.
Tout se configure dans config.lua, sauf les secrets (webhook, token du bot, connexion Discord du panel web) qui vont dans config_server.lua. La plupart des réglages se modifient aussi en direct depuis le panel, en jeu ou depuis un navigateur.
Ne mettez jamais un secret dans config.luaFiveM envoie config.lua à chaque joueur : un secret placé dedans serait lisible par n'importe qui. config_server.lua reste sur le serveur.
Copiez la ressource. Placez le dossier dans resources/ et nommez-le exactement g-anticheat.
Ajoutez-la au server.cfg, après screenshot-basic :
cfg
ensure screenshot-basic
ensure g-anticheat
Donnez les permissions au staff (détails dans Permissions) :
cfg
add_ace group.admin gcore.anticheat allowadd_ace group.superadmin gcore.anticheat.founder allowadd_ace group.admin gcore.anticheat.bypass allow# jamais analysé ni sanctionné
Redémarrez le serveur, puis ouvrez le panel en jeu avec /acpanel. Consultez l'audit de sécurité affiché dans la console.
Testez avant de durcirPassez en mode maintenance pour observer sans sanctionner, puis ajustez les seuils dans le panel. Les détections heuristiques ne bannissent jamais automatiquement : voir Détections.
Réglages généraux
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Tout se règle dans config.lua (et config_server.lua pour les secrets). La plupart des réglages se modifient aussi en direct depuis le panel.
settings.json est prioritaireLes réglages modifiés depuis le panel sont enregistrés dans settings.json et remplacent ceux de config.lua au démarrage. Supprimez ce fichier pour revenir à config.lua.
Permissions
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Deux niveaux d'accès : le staff utilise le panel au quotidien, les fondateurs gardent la main sur les actions sensibles.
Ouvrir le panel, bannir, expulser, voir les preuves, lancer un live view, régler les détections.
Fondateur
Tout ce que fait le staff, plus les actions sensibles : débannir tout le monde, modifier la whitelist et la liste des développeurs, changer le webhook Discord, modifier les options critiques, passer en mode maintenance ou debug, couper toutes les détections.
Dans server.cfg :
cfg
add_ace group.admin gcore.anticheat allowadd_ace group.superadmin gcore.anticheat.founder allowadd_ace group.admin gcore.anticheat.bypass allow# jamais analysé ni sanctionné
URL du webhook qui reçoit les alertes et les captures. Modifiable aussi depuis le panel, mais seulement par un fondateur.
BotToken
Créez un bot sur discord.com/developers et collez son token. Le bot n'a pas besoin d'être sur votre serveur Discord pour les avatars. Sans token, le panel affiche les initiales des joueurs.
GuildId
ID de votre serveur Discord. Avec BotToken, il permet de whitelister des rôles Discord. Le bot doit alors être sur votre serveur, avec l'intent « Server Members » activé.
Gardez le token secretBotToken va uniquement dans config_server.lua, jamais dans config.lua.
Détections
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
52 détections, chacune avec un réglage enabled et une action. Tout se règle aussi dans le panel, onglet Détections : activation, action et seuils.
Les détections dites heuristiques ne peuvent jamais bannir automatiquement, même réglées sur ban. Elles restent plafonnées au kick, parce qu'un lag ou un script légitime peut les déclencher :
Taux de headshots anormal ou série de headshots d'affilée.
ratio, minHits, minVictims, streak, window
aimLock
kick
Visée collée à la tête d'une cible en mouvement.
maxAngle, sustainMs, targetMinSpeed
noclip
kick
Le joueur traverse les murs ou vole.
sustainMs
teleport
kick
Plusieurs sauts instantanés.
impliedSpeed, minDist, minJumps, window
godMode
kick
Invincibilité qui dure.
sustainMs
healthHack
ban, plafonné au kick
Vie ou armure au-dessus du maximum.
—
speedHack
kick
Vitesse à pied impossible.
maxSpeed, sustainMs
vehicleSpeedHack
kick
Véhicule plus rapide que possible.
factor, absoluteMax, sustainMs
superJump
kick
Saut surpuissant.
maxJumpVelZ
invisibility
log
Joueur rendu invisible.
minAlpha, sustainMs
vehicleFly
log
Véhicule qui vole (avions, hélicos, bateaux et trains exclus).
minHeight, minSpeed, sustainMs
invincibleFlag
log
Drapeau d'invincibilité posé sur le joueur.
sustainMs
freecam
log
Caméra libre : la caméra reste très loin du personnage.
maxDist, sustainMs
Détection aimbotHeadshot en jeu, avec capture automatique.
Score de risque
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Avec C.Risk, chaque détection ajoute des points au joueur. Quand un palier est franchi, la sanction correspondante peut s'appliquer. Le score redescend tout seul quand le joueur se comporte normalement.
La sanction finale est la plus sévère entre l'action de la détection et celle du palier atteint.
false : chaque détection applique directement son action.
decayPerMin
5
Points perdus par minute de comportement normal.
default
15
Points ajoutés par une détection absente de weights.
thresholds
50 → avertissement, 75 → kick, 95 → ban
Paliers de sanction.
weights
voir config.lua
Points ajoutés par chaque détection.
De la détection à la sanction : score, preuve, alerte au staff.
Bans, ban matériel et anti-évasion
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
À chaque ban, l'anti-cheat enregistre tous les identifiants du joueur (license, Discord, Steam, FiveM…), ses tokens matériels FiveM et l'empreinte de son appareil. Pour revenir, le joueur devrait tout changer en même temps.
Un identifiant est caché sur le PC du joueur. Si un banni revient sur le même PC avec un autre compte, il est éjecté dès son arrivée en jeu, et ses nouveaux identifiants sont ajoutés à son ban.
Les identités des joueurs sont gardées 90 jours dans identities.json. Un ban par identifiant depuis le panel, même sur un joueur hors ligne, bannit donc aussi ses tokens et son appareil.
Onglet Bans du panel.
Audit de sécurité du serveur
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Au démarrage, l'anti-cheat vérifie les réglages de sécurité de FiveM dans votre server.cfg. Le résultat s'affiche dans la console et dans le panel (onglet Paramètres), avec la ligne à ajouter pour chaque réglage manquant.
Les joueurs ne peuvent plus créer eux-mêmes de véhicules, PNJ ou objets : la plupart des menus de spawn ne marchent plus. Vos scripts doivent créer leurs entités côté serveur.
set sv_filterRequestControl 2
Empêche de prendre le contrôle des entités des autres joueurs.
set sv_enableNetworkedPhoneExplosions false
Explosions de téléphone forcées chez les autres.
set sv_enableNetworkedSounds false
Sons forcés chez les autres.
sv_pureLevel 1
Refuse les fichiers du jeu modifiés.
set sv_scriptHookAllowed 0
Interdit ScriptHook.
cfg
# server.cfg : configuration recommandéeset onesync on
set sv_entityLockdown strict
set sv_filterRequestControl 2set sv_enableNetworkedPhoneExplosions false
set sv_enableNetworkedSounds false
sv_pureLevel 1set sv_scriptHookAllowed 0
Testez d'abord sur un serveur de testsv_entityLockdown strict et sv_filterRequestControl peuvent casser d'anciens scripts qui créent des véhicules côté client.
Heartbeat et validation serveur
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Le heartbeat vérifie que l'anti-cheat tourne toujours chez le joueur ; la validation serveur lit l'état du joueur directement côté serveur.
C.Heartbeat : le serveur envoie un défi au client à intervalle régulier, et le client doit y répondre. S'il ne répond plus, la détection resourceStop se déclenche. Les délais de grâce sont larges pour ne jamais sanctionner un joueur dont le chargement est lent.
Champ
Défaut
Rôle
pingInterval / checkInterval
5000 / 5000
Délai entre deux défis, et entre deux vérifications (ms).
graceStart
90000
Délai de grâce après un démarrage de la ressource (ms).
graceJoin
90000
Délai de grâce après l'arrivée d'un joueur (ms).
cutoff
45000
Durée sans réponse au-delà de laquelle le joueur est signalé (ms).
C.ServerValidation : ces vérifications lisent l'état du joueur côté serveur, toutes les interval ms.
Champ
Défaut
Rôle
enabled
true
Active ou désactive la validation serveur.
interval
1500
Délai entre deux vérifications (ms).
tpImpliedSpeed
180
Vitesse (m/s) au-delà de laquelle un déplacement compte comme un saut.
tpMinDist
60
Distance minimale d'un saut (m).
tpMinJumps / tpWindow
3 / 15000
Nombre de sauts nécessaires dans cette fenêtre (ms).
maxHealth
210
Vie maximale autorisée.
godModeServer : vérifié par le serveur grâce à OneSync.
Listes noires
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Toutes les listes se modifient en direct dans le panel, onglet Listes.
Option
Contenu
C.BlacklistedWeaponNames
Armes interdites, par nom (WEAPON_XXX). Retirez celles que votre serveur utilise, par exemple si un job a un lance-roquettes.
C.BlacklistedModelNames
Modèles interdits : peds, véhicules ou objets « troll ».
C.BlacklistedCommands
Commandes de menus de triche connus.
C.CheatGlobals
Variables laissées en mémoire par des menus de triche. N'ajoutez que des noms sûrs, jamais des noms génériques.
C.BlacklistedResources
Noms de ressources de triche.
C.CheatEvents
Events de menus de triche (DFWM, Lynx, HCheat, mellotrainer…).
C.BlacklistedExplosions
Types d'explosion interdits, sous la forme [58] = true.
C.ExplosionProtection
Limites de l'« explosion impossible » : types valides (minValidType / maxValidType), limites de la map (worldBound) et dégâts maximum (maxDamageScaleHard).
N'ajoutez jamais un event légitimeUn event de C.CheatEvents utilisé par une ressource légitime de votre serveur ferait bannir des joueurs innocents.
Filtre /me et /do
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
C.ChatFilter modère le contenu des commandes RP /me et /do.
La détection se fait par mot entier et ignore la casse, les accents et le « leet speak » : B1TE est détecté, mais pas habite.
La sanction se règle avec la détection inappropriateChat.
Vos autres scripts de chat peuvent utiliser le même filtre avec l'export serveur CheckMessage : voir Exports.
Panel, commandes et exports
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Le panel s'ouvre en jeu avec /acpanel, ou une touche à choisir dans Paramètres › Raccourcis clavier › FiveM. Il est aussi accessible depuis un navigateur : voir Panel web.
-- client
exports['g-anticheat']:OpenPanel() -- ouvre le panel (false si accès refusé)
exports['g-anticheat']:ClosePanel()
exports['g-anticheat']:IsPanelOpen()
exports['g-anticheat']:IsFounder()
-- serveur
exports['g-anticheat']:GetConnectionBan(src) -- carte de ban si le joueur qui se connecte est banni, sinon nil
exports['g-anticheat']:CheckMessage(src, text, channel) -- passe un texte au filtre ; true = message à bloquer
Panel web
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Le panel est aussi accessible depuis un navigateur, sans être en jeu. Même design, mêmes fonctions, connexion avec Discord. C'est votre serveur FiveM qui l'héberge : rien à installer ni à payer en plus.
Chaque action passe par les mêmes contrôles que le panel en jeu : permissions, actions réservées aux fondateurs, limite de débit, journal admin (noté web:<pseudo>).
La session est stockée dans un cookie protégé, et une connexion dure SessionHours heures.
Les connexions refusées s'affichent dans la console.
Utilisez l'adresse httpsPréférez l'adresse cfx.re en https à http://ip:port : en http, le cookie de session circule en clair.
Preuves : captures et live view
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Chaque détection est accompagnée d'une capture d'écran, et le staff peut regarder l'écran d'un suspect à la demande. Aucun service externe n'est utilisé.
C.LiveView : le staff peut voir l'écran d'un joueur à la demande, avec /acview <id> [nb] ou le bouton du panel. Les captures arrivent sur Discord et dans l'onglet Preuves.
Champ
Défaut
Rôle
enabled
true
Active ou désactive le live view.
frames
8
Nombre de captures par session.
interval
1500
Délai entre deux captures, en ms (minimum environ 1000).
maxFrames
30
Plafond de captures par session.
Onglet Preuves : captures par joueur et journal des détections.
Écran de bannissement
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
C.BanScreen règle ce que voit le joueur banni, au moment du ban et quand il essaie de se reconnecter. Tout est modifiable en direct dans le panel (onglet Écran de ban, avec aperçu).
Champ
Rôle
customTop
Bandeau tout en haut de l'écran. Vide = masqué.
serverName
Nom du serveur affiché.
headline
Titre. Vide = « Vous ne pouvez pas jouer sur serverName. »
message
Message principal affiché au joueur.
reasonLabel
Libellé affiché pour un ban automatique (par défaut « Anti-cheat ») : le tricheur ne sait pas quelle détection l'a attrapé. Les bans manuels affichent la vraie raison.
permanentText
Texte sur la durée du ban.
discord / appealText
Lien et texte pour faire appel. Vide = masqué.
logo
URL d'un logo. Vide = logo intégré à la ressource.
Écran de bannissement vu par le joueur.
Fichiers de données
Bientôt disponibleG-AntiCheat n'est pas encore en vente. Cette documentation vous donne un aperçu de ce qui arrive.
Ces fichiers sont créés et mis à jour automatiquement, à la racine de la ressource.
Fichier
Contenu
settings.json
Réglages modifiés depuis le panel. Au démarrage, ils remplacent ceux de config.lua. Supprimez ce fichier pour revenir à config.lua.
bans.json
Bans.
identities.json
Identités connues des joueurs (identifiants, tokens, appareils), gardées 90 jours.
intel.json
Historique des détections par joueur.
watchlist.json
Joueurs sous surveillance.
captures.json
Preuves (captures d'écran).
adminlog.json
Journal des actions du staff.
SauvegardesCes fichiers contiennent tout l'historique de l'anti-cheat : incluez-les dans les sauvegardes de votre serveur.