Hébergement FiveM

Apprendre à créer un script FiveM est la compétence fondamentale pour transformer votre serveur GTA V en une expérience unique et immersive. En 2025, les outils de développement FiveM offrent une flexibilité incomparable pour personnaliser vos serveurs, que vous souhaitiez créer des systèmes de jobs, des scripts de véhicules ou des mécaniques de roleplay avancées. Ce guide complet vous accompagne pas à pas dans la création de scripts performants et optimisés.

Les fondamentaux pour créer un script FiveM en 2025

Avant de plonger dans le code, il est essentiel de comprendre l’architecture de FiveM et les langages utilisés. La plateforme repose principalement sur Lua, un langage de script léger et performant, ainsi que sur JavaScript pour les développeurs préférant une approche moderne. Les scripts FiveM s’organisent en ressources, chaque ressource étant un dossier contenant les fichiers nécessaires au bon fonctionnement de votre script.

Structure d’une ressource FiveM

Une ressource FiveM standard suit une structure précise qui garantit son bon fonctionnement. Chaque script doit contenir au minimum un fichier fxmanifest.lua qui définit les métadonnées et les fichiers à charger. Cette organisation permet au serveur de comprendre comment exécuter votre script.

fx_version 'cerulean'
game 'gta5'

author 'Votre Nom'
description 'Mon premier script FiveM'
version '1.0.0'

client_scripts {
    'client.lua'
}

server_scripts {
    'server.lua'
}

Le fichier client.lua contient le code exécuté côté client (sur l’ordinateur du joueur), tandis que server.lua gère la logique serveur. Cette séparation est cruciale pour la sécurité et les performances de votre serveur hébergé sur une infrastructure robuste comme celle proposée par Nexus Games.

Environnement de développement recommandé

Pour créer un script FiveM efficacement, vous aurez besoin d’un éditeur de code adapté. Visual Studio Code est le choix privilégié de la communauté grâce à ses extensions dédiées. Installez l’extension FiveM Natives pour bénéficier de l’autocomplétion des fonctions natives et gagner un temps précieux lors du développement.

  • Visual Studio Code avec extensions FiveM et Lua
  • Git pour la gestion de versions
  • Accès à un serveur de test FiveM
  • Documentation officielle FiveM Docs à portée de main

Un serveur de test local ou hébergé est indispensable. Les offres Nexus Games permettent de déployer rapidement un environnement FiveM optimisé avec un AMD Ryzen 9 7950X3D et de la RAM DDR5 ECC, garantissant des performances stables même lors de tests intensifs.

Créer votre premier script FiveM étape par étape

Passons maintenant à la pratique en créant un script simple mais fonctionnel. Nous allons développer un système de message de bienvenue qui s’affiche lorsqu’un joueur rejoint le serveur. Cet exemple couvre les concepts essentiels que vous réutiliserez dans tous vos futurs projets.

Création du manifeste

Commencez par créer un dossier nommé welcome-script dans le répertoire resources de votre serveur FiveM. À l’intérieur, créez le fichier fxmanifest.lua avec le contenu suivant :

fx_version 'cerulean'
game 'gta5'

author 'Votre Pseudo'
description 'Script de bienvenue personnalisé'
version '1.0.0'

client_script 'client.lua'

Développement du script client

Créez maintenant le fichier client.lua dans le même dossier. Ce fichier contiendra la logique d’affichage du message :

-- Event déclenché à la connexion du joueur
AddEventHandler('playerSpawned', function()
    -- Récupération du nom du joueur
    local playerName = GetPlayerName(PlayerId())
    
    -- Affichage du message de bienvenue
    TriggerEvent('chat:addMessage', {
        color = {255, 0, 0},
        multiline = true,
        args = {"Serveur", "Bienvenue " .. playerName .. " sur notre serveur FiveM!"}
    })
end)

-- Commande personnalisée /heure
RegisterCommand('heure', function()
    local hours = GetClockHours()
    local minutes = GetClockMinutes()
    TriggerEvent('chat:addMessage', {
        args = {"Info", string.format("Il est %02d:%02d", hours, minutes)}
    })
end, false)

Ce script démontre deux mécaniques fondamentales : l’utilisation des events et l’enregistrement de commandes. Les natives GetPlayerName() et GetClockHours() sont des fonctions GTA V accessibles via FiveM. Consultez la documentation officielle des natives pour découvrir les milliers de fonctions disponibles.

Activation et test du script

Pour activer votre script, éditez le fichier server.cfg de votre serveur et ajoutez la ligne suivante :

ensure welcome-script

Redémarrez votre serveur FiveM et connectez-vous. Vous devriez voir le message de bienvenue s’afficher automatiquement. Testez également la commande /heure dans le chat pour vérifier que tout fonctionne correctement.

Scripts avancés : communication client-serveur

Les scripts FiveM les plus puissants utilisent une architecture client-serveur permettant de sécuriser les données sensibles et de synchroniser les actions entre joueurs. Apprenons à créer un script FiveM avec cette approche en développant un système de points d’expérience.

Architecture sécurisée

Le principe fondamental : ne jamais faire confiance au client. Toutes les opérations critiques (attribution de points, modifications de données, transactions) doivent être validées côté serveur. Le client ne fait qu’envoyer des demandes que le serveur accepte ou refuse.

Côté Client Côté Serveur
Envoie des demandes Valide et traite les demandes
Affiche les interfaces Stocke les données persistantes
Détecte les actions du joueur Synchronise entre les joueurs
Exécute les effets visuels Gère la logique métier

Exemple de script serveur

Modifions notre script pour inclure une partie serveur. Mettez à jour le fxmanifest.lua :

fx_version 'cerulean'
game 'gta5'

author 'Votre Pseudo'
description 'Système de points d\'expérience'
version '2.0.0'

client_script 'client.lua'
server_script 'server.lua'

Créez le fichier server.lua :

-- Table pour stocker l'XP des joueurs (en mémoire)
local playerXP = {}

-- Event pour ajouter de l'XP
RegisterNetEvent('xp:addExperience')
AddEventHandler('xp:addExperience', function(amount)
    local source = source
    local identifier = GetPlayerIdentifier(source, 0)
    
    -- Initialisation si nouveau joueur
    if not playerXP[identifier] then
        playerXP[identifier] = 0
    end
    
    -- Validation de la quantité (sécurité)
    if amount > 0 and amount <= 100 then
        playerXP[identifier] = playerXP[identifier] + amount
        TriggerClientEvent('xp:updateDisplay', source, playerXP[identifier])
        print(string.format("Joueur %s a gagné %d XP (total: %d)", 
            GetPlayerName(source), amount, playerXP[identifier]))
    end
end)

-- Commande admin pour consulter l'XP
RegisterCommand('getxp', function(source, args)
    if source == 0 then -- Console serveur uniquement
        local identifier = args[1]
        print(string.format("XP du joueur %s: %d", identifier, playerXP[identifier] or 0))
    end
end, true)

Et modifiez le client.lua pour communiquer avec le serveur :

local currentXP = 0

-- Event pour mettre à jour l'affichage
RegisterNetEvent('xp:updateDisplay')
AddEventHandler('xp:updateDisplay', function(newXP)
    currentXP = newXP
    TriggerEvent('chat:addMessage', {
        color = {0, 255, 0},
        args = {"XP", "Votre XP total: " .. currentXP}
    })
end)

-- Commande pour gagner de l'XP (action joueur)
RegisterCommand('gagnerxp', function()
    -- Demande au serveur d'ajouter 10 XP
    TriggerServerEvent('xp:addExperience', 10)
end, false)

-- Affichage permanent de l'XP à l'écran
Citizen.CreateThread(function()
    while true do
        Citizen.Wait(0)
        DrawAdvancedText(0.900, 0.970, 0.005, 0.0028, 0.5, 
            "XP: " .. currentXP, 255, 255, 255, 255, 4, 0)
    end
end)

function DrawAdvancedText(x, y, w, h, sc, text, r, g, b, a, font, jus)
    SetTextFont(font)
    SetTextScale(sc, sc)
    SetTextColour(r, g, b, a)
    SetTextJustification(jus)
    SetTextEntry("STRING")
    AddTextComponentString(text)
    DrawText(x - 0.1 + w, y - 0.02 + h)
end

Optimisation des performances

Les performances sont cruciales pour créer un script FiveM de qualité professionnelle. Voici les bonnes pratiques à respecter en 2025 :

  • Utilisez Citizen.Wait() : Ne jamais créer de boucle infinie sans délai. Un Wait(0) minimum est requis
  • Évitez les calculs inutiles : Mettez en cache les valeurs fréquemment utilisées
  • Natives optimisées : Préférez les natives performantes documentées comme telles
  • Events ciblés : Utilisez TriggerClientEvent avec un joueur spécifique plutôt que -1 (broadcast)
  • Nettoyage mémoire : Supprimez les entités, blips et objets créés quand ils ne sont plus nécessaires

Un serveur performant nécessite également une infrastructure adaptée. Les serveurs Nexus Games équipés de processeurs AMD Ryzen 9 7950X3D avec 16 cœurs et de stockage NVMe SSD garantissent une exécution fluide même avec des dizaines de scripts complexes actifs simultanément.

Intégration de bases de données et persistance

Pour créer des scripts FiveM professionnels, la persistance des données est indispensable. Les joueurs attendent que leur progression, leurs véhicules et leurs possessions soient sauvegardés entre les sessions.

Choix de la base de données

FiveM supporte nativement MySQL via le framework mysql-async ou son successeur moderne oxmysql. Cette dernière solution offre des performances supérieures et une syntaxe plus simple :

-- Installation dans fxmanifest.lua
dependencies {
    'oxmysql'
}

server_scripts {
    '@oxmysql/lib/MySQL.lua',
    'server.lua'
}

Exemple de script avec base de données

Améliorons notre système d’XP pour le rendre persistant. Dans server.lua :

-- Chargement de l'XP au spawn
RegisterNetEvent('xp:playerConnected')
AddEventHandler('xp:playerConnected', function()
    local source = source
    local identifier = GetPlayerIdentifier(source, 0)
    
    MySQL.Async.fetchScalar('SELECT xp FROM users WHERE identifier = @identifier', {
        ['@identifier'] = identifier
    }, function(xp)
        if xp then
            TriggerClientEvent('xp:updateDisplay', source, xp)
        else
            -- Création du joueur dans la base
            MySQL.Async.execute('INSERT INTO users (identifier, xp) VALUES (@identifier, 0)', {
                ['@identifier'] = identifier
            })
            TriggerClientEvent('xp:updateDisplay', source, 0)
        end
    end)
end)

-- Sauvegarde de l'XP
RegisterNetEvent('xp:saveExperience')
AddEventHandler('xp:saveExperience', function(amount)
    local source = source
    local identifier = GetPlayerIdentifier(source, 0)
    
    if amount > 0 and amount  0 then
                MySQL.Async.fetchScalar('SELECT xp FROM users WHERE identifier = @identifier', {
                    ['@identifier'] = identifier
                }, function(newXP)
                    TriggerClientEvent('xp:updateDisplay', source, newXP)
                end)
            end
        end)
    end
end)

Configuration MySQL

Pour héberger votre base de données, les solutions VPS Linux Nexus Games offrent la flexibilité nécessaire avec des ressources suffisantes (32 Go de RAM DDR5 ECC minimum recommandés pour les serveurs de production). Configurez MySQL dans le fichier server.cfg :

set mysql_connection_string "mysql://user:password@localhost/fivem?charset=utf8mb4"

Pour la structure de table, exécutez ce SQL :

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    identifier VARCHAR(50) UNIQUE NOT NULL,
    xp INT DEFAULT 0,
    last_connection TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Frameworks et outils pour accélérer le développement

Créer un script FiveM from scratch est formateur, mais les frameworks modernes permettent de gagner un temps considérable sur les fonctionnalités communes.

Les frameworks populaires en 2025

ESX Legacy reste le framework le plus répandu pour les serveurs roleplay. Il fournit une base complète avec gestion des jobs, inventaire, économie et entreprises. QBCore gagne en popularité grâce à sa structure modulaire plus moderne et ses performances optimisées.

Framework Avantages Cas d’usage
ESX Legacy Écosystème riche, nombreux scripts compatibles Serveurs RP traditionnels
QBCore Performances supérieures, code moderne Nouveaux projets RP
vRP Très personnalisable, communauté BR forte Serveurs nécessitant une personnalisation poussée
Standalone Contrôle total, performances maximales Projets non-RP ou très spécifiques

Créer un script compatible framework

Pour créer un script FiveM compatible ESX, respectez la structure attendue :

ESX = exports['es_extended']:getSharedObject()

RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(xPlayer)
    -- Le joueur est chargé, accès aux fonctions ESX
    local job = xPlayer.getJob()
    print("Job du joueur: " .. job.name)
end)

-- Utilisation des fonctions ESX côté serveur
RegisterCommand('donnerargent', function(source, args)
    local xPlayer = ESX.GetPlayerFromId(source)
    local amount = tonumber(args[1])
    
    if amount and amount > 0 then
        xPlayer.addMoney(amount)
        xPlayer.showNotification("Vous avez reçu $" .. amount)
    end
end)

Outils de développement et debugging

Le debugging est une étape cruciale lors de la création de scripts FiveM. Utilisez ces techniques pour identifier et corriger les erreurs rapidement :

  • Console F8 : Console de développement intégrée à FiveM côté client
  • Print statements : Affichage de variables dans la console serveur et client
  • txAdmin : Interface d’administration avec logs en temps réel
  • restart nomressource : Commande pour recharger un script sans redémarrer le serveur
  • resmon : Moniteur de ressources pour identifier les scripts gourmands

La commande resmon est particulièrement utile pour optimiser vos scripts. Elle affiche l’utilisation CPU et mémoire de chaque ressource, vous permettant d’identifier les goulets d’étranglement. Sur un serveur hébergé avec une bande passante de 1 Gbps et un stockage NVMe comme chez Nexus Games, les performances réseau et disque ne sont généralement pas limitantes, mais l’optimisation du code reste primordiale.

Publication et sécurisation de vos scripts

Une fois votre script FiveM développé et testé, il est temps de le déployer en production ou de le partager avec la communauté. La sécurisation de votre code est une étape souvent négligée mais cruciale.

Obfuscation et protection

Si vous commercialisez vos scripts, l’obfuscation peut protéger votre propriété intellectuelle. Des outils comme luac compilent votre code Lua en bytecode, le rendant difficile à lire. Cependant, aucune protection n’est infaillible. La meilleure sécurité reste de maintenir une logique critique côté serveur.

Configuration sécurisée

Utilisez des fichiers de configuration séparés pour les données sensibles :

-- config.lua
Config = {}
Config.APIKey = "VOTRE_CLE_API_ICI"
Config.DatabaseName = "fivem_production"

-- Ajoutez config.lua au .gitignore pour ne pas le publier

Déploiement avec Git

Utilisez Git pour versionner vos scripts et faciliter les déploiements. Structure recommandée :

mon-script-fivem/
├── .gitignore
├── README.md
├── fxmanifest.lua
├── config.lua
├── client/
│   └── main.lua
├── server/
│   └── main.lua
└── shared/
    └── functions.lua

Le fichier .gitignore doit inclure les fichiers sensibles et les caches :

config.lua
*.cache
node_modules/
.vscode/

Testing et qualité du code

Avant chaque publication, testez votre script dans différents scénarios. Un serveur de test dédié est idéal. Les offres de serveurs FiveM via le Panel Nexus permettent de déployer rapidement des environnements de test isolés sans impact sur votre serveur de production.

Pour un code de qualité professionnelle, suivez ces standards :

  • Nommage cohérent : camelCase pour les variables locales, PascalCase pour les fonctions globales
  • Commentaires : Documentez les fonctions complexes et la logique métier
  • Indentation : 4 espaces ou 1 tab, soyez constant dans tout le projet
  • Gestion d’erreurs : Utilisez pcall() pour capturer les erreurs et éviter les crashs
  • Validation des entrées : Vérifiez toujours les données reçues du client

En conclusion, créer un script FiveM en 2025 est une compétence accessible avec de la pratique et les bonnes ressources. Que vous développiez des scripts standalone ou dans un framework, les principes fondamentaux restent identiques : architecture client-serveur sécurisée, optimisation des performances et code maintenable. Un hébergement performant constitue la base d’un serveur réussi, et les infrastructures modernes avec processeurs AMD Ryzen dernière génération et stockage NVMe offrent l’environnement idéal pour faire tourner vos créations.

FAQ

Quel langage choisir entre Lua et JavaScript pour créer un script FiveM ?

Lua reste le choix privilégié pour créer un script FiveM en raison de sa légèreté, ses performances supérieures et sa compatibilité native avec tous les frameworks existants. JavaScript est une alternative valide si vous venez du développement web, mais l’écosystème de ressources et scripts existants est majoritairement en Lua. Pour débuter, Lua offre une courbe d’apprentissage plus douce et une documentation plus fournie spécifique à FiveM.

Comment débugger efficacement un script FiveM qui ne fonctionne pas ?

Commencez par vérifier la console F8 côté client et la console serveur pour identifier les erreurs. Ajoutez des instructions print() à différents endroits de votre code pour tracer l’exécution. Vérifiez que le fxmanifest.lua déclare correctement tous les fichiers et que la syntaxe est valide. Utilisez la commande ‘restart nomressource’ pour recharger le script après modifications. Si le script ne se charge pas du tout, vérifiez qu’il est bien activé dans le server.cfg avec ‘ensure nomressource’.

Combien de ressources RAM consomme un script FiveM typique ?

Un script FiveM bien optimisé consomme généralement entre 1 et 10 Mo de RAM. Les scripts mal optimisés avec des boucles infinies sans Wait() ou des fuites mémoire peuvent consommer plusieurs centaines de Mo. Utilisez la commande ‘resmon’ pour surveiller la consommation en temps réel. Pour un serveur de production avec 32 à 64 joueurs et une vingtaine de scripts actifs, comptez 4 à 8 Go de RAM totale nécessaire, d’où l’importance de choisir un hébergement avec suffisamment de mémoire DDR5 ECC comme les serveurs optimisés pour FiveM.

Hébergeur FiveM