Vous voulez créer votre premier script FiveM mais vous ne savez pas par où commencer ? Ce guide complet va vous accompagner pas à pas dans la création de votre première ressource FiveM.
Prérequis
Avant de commencer, assurez-vous d'avoir :
- Un serveur FiveM fonctionnel (local ou distant)
- Un éditeur de code (VS Code recommandé)
- Des connaissances de base en programmation (pas obligatoire mais utile)
Structure d'un script FiveM
Chaque script FiveM (appelé "ressource") a une structure de base :
mon-script/
├── fxmanifest.lua # Fichier de configuration
├── client.lua # Code côté client (joueur)
└── server.lua # Code côté serveur (optionnel)
Créer le fxmanifest.lua
Le fxmanifest.lua est le fichier de configuration de votre ressource. C'est lui qui indique à FiveM comment charger votre script.
fx_version 'cerulean'
game 'gta5'
author 'Votre Nom'
description 'Mon premier script FiveM'
version '1.0.0'
-- Fichiers côté client
client_scripts {
'client.lua'
}
-- Fichiers côté serveur (si nécessaire)
server_scripts {
'server.lua'
}
Comprendre les paramètres
- fx_version : Version du framework FiveM (utilisez toujours 'cerulean' pour les nouveaux scripts)
- game : Le jeu cible (toujours 'gta5' pour FiveM)
- client_scripts : Fichiers exécutés côté client (chez le joueur)
- server_scripts : Fichiers exécutés côté serveur
Créer votre premier script client
Créons un script simple qui affiche un message de bienvenue quand un joueur se connecte.
-- client.lua
print("^2[Mon Script]^0 Script chargé avec succès !")
-- Event déclenché quand le joueur spawne
AddEventHandler('playerSpawned', function()
print("Le joueur a spawn !")
-- Afficher un message dans le chat
TriggerEvent('chat:addMessage', {
color = {255, 0, 0},
multiline = true,
args = {"Système", "Bienvenue sur le serveur !"}
})
end)
-- Créer un thread (boucle) pour vérifier une touche
Citizen.CreateThread(function()
while true do
Citizen.Wait(0) -- Important : ne jamais oublier le Wait !
-- Si le joueur appuie sur E
if IsControlJustReleased(0, 38) then -- 38 = touche E
print("Vous avez appuyé sur E !")
-- Afficher une notification
BeginTextCommandThefeedPost("STRING")
AddTextComponentSubstringPlayerName("Vous avez appuyé sur E !")
EndTextCommandThefeedPostTicker(false, true)
end
end
end)
Explication du code
- print() : Affiche un message dans la console (F8)
- AddEventHandler : Écoute un événement (ici, quand le joueur spawne)
- TriggerEvent : Déclenche un événement
- Citizen.CreateThread : Crée une boucle asynchrone
- Citizen.Wait(0) : Pause la boucle pour éviter de freezer le jeu
Les événements en FiveM
Les événements sont la base de la communication en FiveM.
Événements client → serveur
-- client.lua
TriggerServerEvent('monScript:direBonjour', "Salut serveur !")
-- server.lua
RegisterServerEvent('monScript:direBonjour')
AddEventHandler('monScript:direBonjour', function(message)
print("Message reçu : " .. message)
-- Répondre au client
TriggerClientEvent('monScript:reponse', source, "Salut client !")
end)
Événements serveur → client
-- server.lua
TriggerClientEvent('monScript:notification', -1, "Message à tous les joueurs")
-- client.lua
RegisterNetEvent('monScript:notification')
AddEventHandler('monScript:notification', function(message)
print(message)
end)
Note : -1 envoie l'événement à tous les joueurs. Utilisez l'ID du joueur pour cibler un joueur spécifique.
Exemple complet : Script de téléportation
Créons un script qui téléporte le joueur quand il appuie sur une touche.
-- client.lua
local teleportLocations = {
{x = 1000.0, y = 2000.0, z = 50.0, label = "Aéroport"},
{x = -500.0, y = -300.0, z = 30.0, label = "Centre-ville"},
}
local currentLocation = 1
-- Commande pour se téléporter
RegisterCommand('tp', function()
local ped = PlayerPedId()
local coords = teleportLocations[currentLocation]
-- Téléporter le joueur
SetEntityCoords(ped, coords.x, coords.y, coords.z, false, false, false, true)
-- Afficher un message
TriggerEvent('chat:addMessage', {
args = {"Téléportation", "Vous avez été téléporté à " .. coords.label}
})
-- Passer à la location suivante
currentLocation = currentLocation + 1
if currentLocation > #teleportLocations then
currentLocation = 1
end
end)
Utilisation
Dans le jeu, tapez /tp dans le chat pour vous téléporter !
Les natives FiveM
Les natives sont des fonctions intégrées à FiveM qui permettent d'interagir avec le jeu.
Quelques natives utiles :
-- Obtenir le ped (personnage) du joueur
local ped = PlayerPedId()
-- Obtenir les coordonnées du joueur
local coords = GetEntityCoords(ped)
-- Obtenir le véhicule du joueur
local vehicle = GetVehiclePedIsIn(ped, false)
-- Vérifier si le joueur est dans un véhicule
local isInVehicle = IsPedInAnyVehicle(ped, false)
-- Donner une arme au joueur
GiveWeaponToPed(ped, GetHashKey("WEAPON_PISTOL"), 100, false, true)
-- Soigner le joueur
SetEntityHealth(ped, 200)
Documentation natives : https://docs.fivem.net/natives/
Bonnes pratiques
1. Optimiser vos threads
Ne mettez jamais Citizen.Wait(0) dans une boucle qui n'a pas besoin de tourner 60 fois par seconde :
-- ❌ Mauvais
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
-- Code qui vérifie quelque chose
end
end)
-- ✅ Bon
Citizen.CreateThread(function()
while true do
Citizen.Wait(1000) -- 1 seconde
-- Code qui vérifie quelque chose
end
end)
2. Nommer vos événements correctement
Utilisez toujours un préfixe pour éviter les conflits :
-- ❌ Mauvais
RegisterServerEvent('teleport')
-- ✅ Bon
RegisterServerEvent('monScript:teleport')
3. Valider les données côté serveur
Ne faites JAMAIS confiance aux données envoyées par le client :
-- server.lua
RegisterServerEvent('monScript:donnerArgent')
AddEventHandler('monScript:donnerArgent', function(amount)
-- ❌ MAUVAIS : pas de validation
-- GivePlayerMoney(source, amount)
-- ✅ BON : validation
if type(amount) == "number" and amount > 0 and amount <= 1000 then
GivePlayerMoney(source, amount)
else
print("Tentative de triche détectée !")
end
end)
Débugger votre script
Console F8
Appuyez sur F8 dans le jeu pour ouvrir la console et voir vos print().
Commande resmon
Tapez resmon dans la console pour voir les performances de vos ressources.
Logs serveur
Les erreurs côté serveur apparaissent dans les logs du serveur.
Installer et tester votre script
- Copiez votre dossier dans
resources/[local]/ - Ajoutez
ensure mon-scriptdans votreserver.cfg - Redémarrez votre serveur
- Testez dans le jeu !
Ressources pour aller plus loin
- Documentation FiveM : https://docs.fivem.net/
- Forum FiveM : https://forum.cfx.re/
- Natives Database : https://docs.fivem.net/natives/
Conclusion
Félicitations ! Vous venez de créer votre premier script FiveM. Ce n'est que le début de votre aventure dans le développement FiveM. Continuez à pratiquer, explorez les natives, et n'hésitez pas à regarder le code d'autres ressources pour apprendre.
Besoin d'aide pour vos scripts ? Rejoignez notre Discord et posez vos questions à notre communauté !
Articles similaires

Débugger les erreurs Lua dans FiveM : Méthodes et outils essentiels
Guide complet pour identifier et corriger les erreurs Lua dans vos scripts FiveM. Techniques de debugging, outils recommandés, et solutions aux erreurs les plus courantes.

Comment optimiser les performances de votre serveur FiveM en 2025
Découvrez les meilleures techniques pour améliorer les performances de votre serveur FiveM : optimisation des ressources, configuration serveur, et astuces d'experts pour éliminer les lags.