6 min readCodocta

Créer votre premier script FiveM : Guide complet pour débutants

Apprenez à créer votre premier script FiveM de A à Z. Tutoriel complet avec exemples de code, bonnes pratiques et explications détaillées pour les débutants en développement FiveM.

FiveMScriptTutorielDébutantLuaDéveloppement
Partager :
Créer votre premier script FiveM : Guide complet pour débutants

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

  1. print() : Affiche un message dans la console (F8)
  2. AddEventHandler : Écoute un événement (ici, quand le joueur spawne)
  3. TriggerEvent : Déclenche un événement
  4. Citizen.CreateThread : Crée une boucle asynchrone
  5. 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

  1. Copiez votre dossier dans resources/[local]/
  2. Ajoutez ensure mon-script dans votre server.cfg
  3. Redémarrez votre serveur
  4. Testez dans le jeu !

Ressources pour aller plus loin

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

Cet article vous a été utile ?

Rejoignez notre communauté Discord pour poser vos questions et échanger avec d'autres développeurs FiveM.

Rejoindre le Discord