Comment créer un écran de chargement FiveM personnalisé
Ok, plongeons dans la création d'un point d'entrée unique et attrayant pour vos joueurs.
Nous allons construire un Écran de chargement FiveM personnalisé à partir de la base.
Table des matières
Qu'est-ce qu'une ressource d'écran de chargement ?
Un écran de chargement personnalisé est souvent la toute première interaction d'un joueur avec votre serveur FiveM spécifique.
C'est une opportunité fantastique d'établir la marque de votre serveur, de transmettre des informations importantes et de créer une atmosphère immersive dès le début.
Oubliez les visuels génériques de FiveM ; nous voulons que les joueurs se sentent ton l'identité du serveur au moment où ils commencent à se connecter.
Ici à FiveMX, nous croyons qu'il faut donner aux propriétaires de serveurs les outils et les connaissances nécessaires pour créer des expériences vraiment uniques.
Ce guide complet vous guidera à travers chaque étape, de la structure HTML de base au style avec CSS, en passant par l'ajout d'interactivité avec JavaScript et enfin son intégration transparente dans votre serveur FiveM à l'aide de Lua.
Nous expliquerons même comment masquer cette animation de pont FiveM par défaut pour une transition plus nette.
Commençons par faire en sorte que votre serveur se démarque.
Pourquoi s'embêter avec un écran de chargement FiveM personnalisé ?
Vous vous demandez peut-être si cela en vaut la peine.
Absolument!
Considérez-le comme le hall d’entrée ou l’entrée de votre monde virtuel.
Premières impressions : Il donne immédiatement le ton et le professionnalisme de votre serveur.
Image de marque : Renforcez le nom, le logo et le thème général de votre serveur.
Affichage des informations : Partagez des informations cruciales telles que des règles, des liens Discord, des URL de sites Web ou des mises à jour de l'état du serveur avant les joueurs apparaissent même.
Fiançailles: Utilisez de la musique, des messages dynamiques ou même des vidéos pour garder les joueurs engagés pendant le processus de chargement, réduisant ainsi les temps d'attente perçus.
Unicité: Différenciez votre serveur des innombrables autres en utilisant des écrans par défaut ou génériques.
Un écran de chargement bien conçu montre que vous vous souciez des détails et de l'expérience du joueur.
Prérequis
Avant de commencer à coder, assurons-nous que vous disposez des outils nécessaires et des connaissances de base :
- Éditeur de texte : Vous aurez besoin d’un programme pour écrire votre code.
- Visual Studio Code (VS Code) : gratuit, puissant et fortement recommandé, avec de nombreuses extensions utiles.
- Sublime Text : une autre option populaire et légère.
- Notepad++ : un choix gratuit solide pour les utilisateurs de Windows.
- Éviter en utilisant le Bloc-notes ou TextEdit de base, car ils manquent de fonctionnalités utiles pour le codage (comme la coloration syntaxique).
- Connaissances de base en développement Web (utiles, pas essentielles) :
- HTML (langage de balisage hypertexte) : Comprend la structure de base d'une page Web (balises telles que
<div>,<img>,<p>). Nous fournirons le code, mais connaître les bases aide. - CSS (feuilles de style en cascade) : Savoir styliser les éléments HTML (couleurs, tailles, positions). Nous vous guiderons, mais une certaine connaissance est un plus.
- JavaScript (JS) : Comprendre les concepts de base de la programmation pour ajouter de l'interactivité. Nous allons d'abord privilégier un code JavaScript relativement simple.
- HTML (langage de balisage hypertexte) : Comprend la structure de base d'une page Web (balises telles que
- Accès au serveur FiveM : Vous avez besoin d'accéder aux fichiers de votre serveur, en particulier aux
ressourcesdossier, pour installer l'écran de chargement. - Logiciel de retouche d'image (facultatif) : Des outils comme Photoshop, GIMP (gratuit) ou même Canva peuvent être utiles pour créer ou éditer des logos et des images d'arrière-plan.
- Patience et volonté d'apprendre : Le débogage et le réglage font partie du processus !
Ne vous inquiétez pas si vous n’êtes pas un expert en développement Web.
Nous expliquerons clairement chaque étape et fournirons des extraits de code copiables-collables.
Comprendre le fonctionnement des écrans de chargement de FiveM (NUI)
FiveM utilise un système appelé NUI (interface utilisateur native) pour afficher des pages Web à l'intérieur le jeu.
Essentiellement, votre écran de chargement personnalisé n'est qu'une page Web standard (construite avec HTML, CSS et JavaScript) que le système NUI de FiveM restitue pendant que les ressources du jeu se chargent en arrière-plan.
Cela signifie que nous pouvons exploiter les technologies Web standard pour créer des expériences visuellement riches et interactives.
Le cœur les composants sont :
index.html: Le fichier principal définissant la structure et le contenu de votre écran de chargement.style.css: Le fichier qui définit l'apparence visuelle (mise en page, couleurs, polices, etc.).script.js: Le fichier qui ajoute un comportement dynamique (comme la modification du texte, des animations, la lecture de musique).fxmanifest.lua(ou__ressource.lua): Un fichier FiveM spécial qui indique au serveur qu'il s'agit d'une ressource, spécifie qu'il s'agit d'un écran de chargement et répertorie tous les fichiers nécessaires.
Maintenant, commençons à construire.
Étape 1 : Création de la structure HTML de base (index.html)
Commencez par créer un nouveau dossier pour votre ressource d'écran de chargement. Appelons-le mon-écran-de-chargement.
Dans ce dossier, créez un fichier nommé index.html.
Ce fichier contiendra le squelette de notre écran de chargement.
Nous avons besoin de conteneurs pour différents éléments : l'arrière-plan, un logo, une indication de progression du chargement et des zones pour les messages texte.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nom du serveur - Chargement...</title>
<!-- Link to your CSS file -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- Main container for the entire screen -->
<div class="loading-container">
<!-- Background Element (handled by CSS) -->
<div class="background"></div>
<!-- Content Wrapper -->
<div class="content">
<!-- Logo Area -->
<div class="logo-area">
<img src="images/logo.png" alt="Logo du serveur" id="server-logo">
<!-- You can replace img with text if you prefer -->
<!-- <h1>My Awesome Server</h1> -->
</div>
<!-- Message Area -->
<div class="message-area">
<p id="loading-message">Initialisation de la connexion...</p>
<p id="dynamic-message">Bienvenue ! Chargement des ressources du serveur…</p>
</div>
<!-- Progress Bar Area -->
<div class="progress-bar-container">
<div class="progress-bar">
<div class="progress-bar-inner" id="progress-bar-inner"></div>
</div>
<p id="progress-text">0%</p>
</div>
<!-- Music Control (Optional) -->
<div class="music-control">
<button id="play-pause-button">Pause Musique</button>
<input type="range" id="volume-slider" min="0" max="1" step="0.01" value="0.5">
</div>
</div> <!-- End Content Wrapper -->
</div> <!-- End Loading Container -->
<!-- Link to your JavaScript file (place at the end of body) -->
<script src="script.js"></script>
</body>
</html>
Explication:
<!DOCTYPE html>&<html>: Modèle HTML5 standard.<head>: Contient des méta-informations et des liens vers des ressources externes.charset="UTF-8": Assure un affichage correct des caractères.fenêtre d'affichage:Important pour la conception réactive (s'adaptant à différentes tailles d'écran), bien que moins critique pour les écrans de chargement de jeux à résolution fixe.: Définit le texte qui peut apparaître dans un onglet de navigateur (moins pertinent dans FiveM NUI mais bonne pratique).<link rel="stylesheet" href="style.css">:Connecte notre HTML à notre fichier CSS pour le style.
<body>: Contient le contenu visible de la page.<div class="loading-container">: L'enveloppe principale pour tout. Nous l'utiliserons pour la mise en page générale.<div class="background">: Un div vide que nous styliserons avec CSS pour contenir notre image d'arrière-plan ou notre vidéo.<div class="content">: Enveloppe le contenu réel (logo, texte, barre de progression) pour faciliter le centrage et le positionnement.<div class="logo-area">: Un conteneur pour le logo de votre serveur.<img src="images/logo.png" ...>:Une balise d'image. Important: Vous devrez créer unimagesdossier à l'intérieurmon-écran-de-chargementet placez votrelogo.pngfichier là-bas. Assurez-vous que le nom du fichier correspond !
<div class="message-area">: Contient des messages texte.- Nous donnons des identifiants aux paragraphes (
message de chargement,message dynamique) afin que nous puissions facilement les cibler avec JavaScript plus tard.
- Nous donnons des identifiants aux paragraphes (
<div class="progress-bar-container">: Contient les éléments de la barre de progression..barre de progression:Le contenant extérieur de la barre..barre de progression intérieure: La partie intérieure qui va se remplir. On lui donne un identifiant (barre de progression intérieure) pour le contrôle JS.<p id="progress-text">: Affiche le texte en pourcentage, également avec un ID.
<div class="music-control">: (Facultatif) Contrôles de base pour la musique de fond. Les identifiants permettent l'interaction JS.<script src="script.js">: Relie notre HTML à notre fichier JavaScript. En le plaçant à la fin du<body>garantit que les éléments HTML existent avant que le script tente d'interagir avec eux.
Enregistrer ce fichier sous index.html dans ton mon-écran-de-chargement dossier. Créer un images sous-dossier et ajouter un espace réservé logo.png pour l'instant.
Étape 2 : Style de l’écran de chargement (CSS – style.css)
Maintenant, faisons en sorte que ça soit beau !
Créez un fichier nommé style.css dans le même mon-écran-de-chargement dossier.
Ce fichier contrôle la présentation visuelle.
/* Réinitialisation de base et style du corps */ * { margin: 0; padding: 0; box-sizing: border-box; /* Inclut le remplissage et la bordure dans la largeur/hauteur */ } body, html { height: 100%; width: 100%; overflow: hidden; /* Masquer les barres de défilement */ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Exemple de police */ color: #ffffff; /* Couleur de texte par défaut (blanc) */ } /* Conteneur principal */ .loading-container { position: relative; /* Nécessaire pour le positionnement absolu des enfants */ width: 100%; height: 100%; display: flex; /* Utiliser flexbox pour centrer le contenu */ justify-content: center; align-items: center; text-align: center; } /* Style d'arrière-plan */ .background { position: absolute; /* Occuper tout l'écran derrière le contenu */ top: 0; left: 0; width: 100%; height: 100%; background-image: url('images/background.jpg'); /* CHANGER CECI pour votre image */ background-size: cover; /* Mettre l'image à l'échelle pour couvrir le conteneur */ background-position: center center; /* Centrer l'image */ background-repeat: no-repeat; z-index: -1; /* La placer derrière un autre contenu */ filter: brightness(0.6); /* Facultatif : Assombrir légèrement l'arrière-plan */ } /* --- OU Utiliser un arrière-plan de couleur unie --- */ /* .background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #1a1a1a; z-index: -1; } */ /* Enveloppe de contenu */ .content { z-index: 1; /* S'assurer que le contenu est au-dessus de l'arrière-plan */ padding: 20px; background-color: rgba(0, 0, 0, 0.5); /* Arrière-plan noir semi-transparent */ border-radius: 10px; max-width: 600px; /* Limiter la largeur du contenu */ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4); } /* Zone du logo */ .logo-area { margin-bottom: 30px; } #server-logo { max-width: 200px; /* Ajuster la largeur maximale du logo */ height: auto; /* Conserver les proportions */ display: block; /* Autorise la marge auto au centre */ margin-left: auto; margin-right: auto; } /* Zone de message */ .message-area { margin-bottom: 30px; } #loading-message { font-size: 1.2em; font-weight: bold; margin-bottom: 10px; color: #cccccc; } #dynamic-message { font-size: 1em; min-height: 40px; /* Empêcher les décalages de mise en page lorsque le message change */ } /* Zone de barre de progression */ .progress-bar-container { width: 80%; /* Largeur relative au conteneur de contenu */ margin: 0 auto; /* Centrer le conteneur */ margin-bottom: 20px; } .progress-bar { width: 100%; background-color: #555555; /* Arrière-plan gris foncé */ border-radius: 5px; overflow: hidden; /* Masquer la barre intérieure qui déborde */ height: 25px; /* Hauteur de la barre */ border: 1px solid #333; } .progress-bar-inner { height: 100%; width: 0%; /* Commencer à la largeur 0% */ background-color: #4CAF50; /* Couleur de progression verte */ border-radius: 5px 0 0 5px; /* Conserver le rayon gauche */ transition: width 0.5s ease-in-out; /* Transition fluide pour les changements de largeur */ text-align: center; line-height: 25px; /* Centrer verticalement le texte si nécessaire à l'intérieur */ color: white; } #progress-text { margin-top: 5px; font-size: 0.9em; } /* Contrôle de la musique (facultatif) */ .music-control { margin-top: 25px; display: flex; /* Disposer le bouton et le curseur côte à côte */ justify-content: center; align-items: center; gap: 15px; /* Espace entre les éléments */ } #play-pause-button { padding: 8px 15px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 0.9em; transition: background-color 0.3s ease; } #play-pause-button:hover { background-color: #45a049; } #volume-slider { cursor: pointer; width: 150px; /* Ajuster la largeur du curseur */ } /* Ajouter une réactivité de base si nécessaire, bien que moins critique dans NUI */ @media (max-width: 600px) { .content { max-width: 90%; } .progress-bar-container { width: 90%; } }
Explication:
* { taille-de-la-boîte : boîte-de-bordure ; }:Une réinitialisation commune pour rendre les éléments de dimensionnement plus prévisibles.corps, html: Définit la hauteur/largeur de base et masque les éventuelles barres de défilement. Définit une police et une couleur de texte par défaut..conteneur de chargement: Utilisationsaffichage : flexpour centrer facilement le.contenudiv les deux horizontalement (justifier le contenu) et verticalement (aligner-les-éléments).position : relativeest crucial pour positionner l'arrière-plan absolu..arrière-plan:position : absolue:Sort l'élément du flux normal et le positionne par rapport à l'ancêtre positionné le plus proche (.conteneur de chargement).haut : 0 ; gauche : 0 ; largeur : 100% ; hauteur : 100% ;: Il recouvre l'intégralité du conteneur.image d'arrière-plan : url(...): Le changement est crucial'images/background.jpg'au chemin réel de votre image d'arrière-plan. Assurez-vous que l'image est dans leimagesdossier.taille de l'arrière-plan : couverture:Met l'image à l'échelle.z-index: -1:Le pousse derrière d'autres éléments.filtre : luminosité (0,6): Un effet optionnel pour assombrir l'arrière-plan et rendre le texte plus lisible. Ajustez ou supprimez-le selon vos besoins.- Alternative: Une section commentée montre comment utiliser une simple couleur d'arrière-plan unie au lieu d'une image.
.contenu:z-index: 1:Assure qu'il se trouve au-dessus de l'arrière-plan.couleur d'arrière-plan : rgba(0, 0, 0, 0,5): Un fond noir semi-transparent pour la zone de contenu, permettant au texte de se démarquer sur des arrière-plans complexes. Réglez la dernière valeur (alpha) de 0 (transparent) à 1 (opaque).rayon de bordure,largeur maximale,boîte-ombre:Ajoutez une touche de finition visuelle.
.zone-logo,Logo du serveur #: Stylise le conteneur du logo et l'image du logo elle-même (définition de la largeur maximale, centrage)..zone de message,#chargement-message,#message dynamique: Stylise les éléments de texte (taille de police, couleur, marges).hauteur minimaleempêche la mise en page de sauter lorsque le contenu du message dynamique change de longueur..conteneur de barre de progression,.barre de progression,.barre de progression intérieure: Stylise la barre de progression.- Le récipient extérieur (
.barre de progression) définit la couleur et la forme de l'arrière-plan. - La barre intérieure (
.barre de progression intérieure) est ce qui grandit. Cela commence àlargeur : 0%Nous allons modifier cette largeur en utilisant JavaScript.transition : largeur 0,5 s entrée-sortie en douceur ;rend le changement de largeur fluide.
- Le récipient extérieur (
.contrôle de la musique,#bouton lecture-pause,Curseur de volume #: Stylise les commandes musicales facultatives à l'aide de flexbox pour la mise en page et ajoute un style de bouton de base.@media (largeur maximale : 600 px): Exemple simple de requête média pour la réactivité. Elle ajuste la largeur du contenu sur les écrans plus petits (moins critique pour FiveM, mais bonne pratique).
Enregistrer sous style.css. N'oubliez pas de créer le images dossier et ajoutez votre fond.jpg (ou quel que soit le nom que vous lui avez donné) et logo.png.
À ce stade, vous pourriez techniquement ouvrir le index.html fichier directement dans votre navigateur Web (comme Chrome ou Firefox) pour prévisualiser son apparence statique !
Étape 3 : Ajout d’interactivité et de contenu dynamique (JavaScript – script.js)
Donnons maintenant vie à notre page statique en utilisant JavaScript.
Créez un fichier nommé script.js dans ton mon-écran-de-chargement dossier.
Nous ajouterons des fonctionnalités pour :
- Simulation de la progression du chargement.
- Affichage de messages dynamiques/changeants.
- Ajout de musique de fond avec des commandes.
- Gestion des événements FiveM NUI (la bonne façon d'obtenir la progression du chargement).
// Attendez que le DOM (Document Object Model - la structure HTML) soit entièrement chargé document.addEventListener('DOMContentLoaded', () => { // --- Obtenir les références aux éléments HTML --- const progressBarInner = document.getElementById('progress-bar-inner'); const progressText = document.getElementById('progress-text'); const dynamicMessage = document.getElementById('dynamic-message'); const loadingMessage = document.getElementById('loading-message'); // Pour mettre à jour les étapes // --- Configuration --- const messages = [ "Chargement des systèmes principaux...", "Établissement de la connexion réseau...", "Téléchargement des dernières ressources du serveur...", "Synchronisation des données des joueurs...", "Analyse des détails de la carte...", "Presque terminé, préparation du monde...", "Conseil : Visitez notre Discord à l'adresse discord.gg/yourinvite", "Conseil : Consultez les règles sur notre site Web yourwebsite.com", "Bienvenue sur notre serveur génial !" ]; let currentMessageIndex = 0; const messageChangeInterval = 5000; // Changer le message toutes les 5 secondes (5000 ms) // Musique de fond (facultatif) const backgroundMusic = new Audio('audio/background_music.ogg'); // IMPORTANT : utilisez .ogg pour la compatibilité FiveM backgroundMusic.volume = 0.5; // Définir le volume initial (0.0 à 1.0) backgroundMusic.loop = true; // Boucler la musique const playPauseButton = document.getElementById('play-pause-button'); const volumeSlider = document.getElementById('volume-slider'); let isPlaying = false; // Suivre l'état de la musique // --- Fonctions --- // Fonction pour mettre à jour la barre de progression et le texte function updateProgress(percentage) { percentage = Math.min(100, Math.max(0, percentage)); // Pince entre 0 et 100 progressBarInner.style.width = `${percentage}%`; progressText.textContent = `${Math.round(percentage)}%`; } // Fonction pour modifier le message dynamique function changeDynamicMessage() { dynamicMessage.style.opacity = 0; // Fondu en sortie setTimeout(() => { currentMessageIndex = (currentMessageIndex + 1) % messages.length; dynamicMessage.textContent = messages[currentMessageIndex]; dynamicMessage.style.opacity = 1; // Fondu en entrée }, 500); // Attendre la transition de fondu (0,5 s) } // Fonction pour tenter de lire de la musique (gère les restrictions de lecture automatique du navigateur) function playMusic() { backgroundMusic.play().then(() => { isPlaying = true; playPauseButton.textContent = 'Pause Music'; console.log("La lecture de la musique a commencé."); }).catch(error => { // La lecture automatique a été empêchée, ce qui est courant dans les navigateurs jusqu'à l'interaction de l'utilisateur console.log("La lecture automatique de la musique a échoué. En attente d'une interaction de l'utilisateur.", error); isPlaying = false; playPauseButton.textContent = 'Play Music'; // Nous pourrions avoir besoin d'un écouteur de clic sur le corps ou le bouton pour lancer la lecture }); } // --- Configuration initiale --- // Définir le message de chargement initial loadingMessage.textContent = "Initializing..."; updateProgress(0); // Démarrer la progression à 0% // Commencer à modifier les messages dynamiques dynamicMessage.textContent = messages[0]; // Afficher le premier message immédiatement setInterval(changeDynamicMessage, messageChangeInterval); // Essayer de lire la musique automatiquement playMusic(); // Tenter la lecture de la musique de fond // --- Écouteurs d'événements --- // Contrôles de musique Écouteurs d'événements playPauseButton.addEventListener('click', () => { if (isPlaying) { backgroundMusic.pause(); isPlaying = false; playPauseButton.textContent = 'Play Music'; } else { // Important : Redéclencher la fonction de lecture qui gère les échecs initiaux potentiels playMusic(); } }); volumeSlider.addEventListener('input', (event) => { backgroundMusic.volume = event.target.value; }); // --- Gestion des événements FiveM NUI --- // Il s'agit du CŒUR de l'interaction avec le processus de chargement de FiveM /* Les messages FiveM NUI sont envoyés via des événements JavaScript. Nous écoutons les événements 'message' sur l'objet window. La propriété d'événement « data » contient les informations envoyées depuis Lua. */ window.addEventListener('message', function(event) { const data = event.data; // Vérifie le type de message NUI spécifique utilisé par FiveM pour la progression du chargement // L'événement 'loadstatus' fournit un texte de progression global. if (data.type === 'loadstatus') { if(data.status) { loadingMessage.textContent = data.status; } } // L'événement 'progress' fournit une progression détaillée du composant (utilisez ceci pour la barre) else if (data.eventName === 'progress') { // data.loadFraction donne une valeur entre 0,0 et 1,0 const progressPercentage = data.loadFraction * 100; updateProgress(progressPercentage); } // Un événement personnalisé que nous pourrions envoyer depuis Lua lorsque le chargement est presque terminé else if (data.type === 'loadingComplete') { updateProgress(100); loadingMessage.textContent = "Chargement terminé ! Rejoindre serveur..."; // Vous pouvez ajouter des effets de fondu ici avant que l'écran ne disparaisse } }); // --- Progression de secours/simulée (si les événements NUI ne sont pas reçus ou à des fins de test) --- // Commentez ceci ou supprimez-le si vous comptez uniquement sur les événements FiveM NUI /* let simulatedProgress = 0; const interval = setInterval(() => { simulatedProgress += Math.random() * 5; // Incrémenter d'une petite quantité aléatoire if (simulatedProgress >= 100) { simulatedProgress = 100; clearInterval(interval); // Arrêter la simulation lorsque 100% est atteint loadingMessage.textContent = "Chargement terminé ! Rejoindre le serveur..."; // Mettre à jour le message final } updateProgress(simulatedProgress); }, 300); // Mettre à jour toutes les 300 ms */ // Ajouter un petit effet de fondu pour tout l'écran au chargement document.body.style.opacity = 0; setTimeout(() => { document.body.style.transition = 'opacity 1s ease-in-out'; document.body.style.opacity = 1; }, 100); // Début du fondu légèrement après le chargement }); // Fin du DOMContentLoaded
Explication:
document.addEventListener('DOMContentLoaded', () => { ... });: Cela garantit que le code JavaScript s'exécute uniquement après la structure entière de la page HTML a été chargée et est prête à être manipulée.- Références des éléments : Nous obtenons des références aux éléments HTML avec lesquels nous devons interagir en utilisant
document.getElementById()C'est pourquoi il est important d'avoir des identifiants uniques dans le HTML. - Configuration:
messages: Un tableau contenant les différentes chaînes de texte à parcourir dans la zone de message dynamique. Personnalisez-les !currentMessageIndex: Garde une trace du message actuellement affiché.messageChangeInterval: Définit la fréquence (en millisecondes) à laquelle le message change.
- Configuration de la musique de fond :
nouveau Audio('audio/background_music.ogg'): Crée un objet audio HTML. Fondamentalement :- Créer un
audiodossier à l'intérieurmon-écran-de-chargement. - Placez votre fichier de musique de fond ici.
- Utilisez le
.oggformat! Les formats MP3 et autres peuvent être peu fiables, voire inopérants, dans FiveM NUI. Vous trouverez facilement des convertisseurs en ligne pour convertir des fichiers MP3 en OGG.
- Créer un
backgroundMusic.volume: Définit le volume initial (0,0 = silencieux, 1,0 = plein).backgroundMusic.loop = vrai;:Fait répéter la musique.- Nous obtenons également des références au bouton lecture/pause et au curseur de volume.
updateProgress(pourcentage)fonction: Prend un nombre (0-100), le fixe pour s'assurer qu'il est dans les limites, met à jour lelargeurstyle de l'élément de la barre de progression interne et modifie le contenu du texte de l'affichage du pourcentage.changeDynamicMessage()fonction:- Utilisations
setIntervaldans la phase de configuration pour appeler cette fonction à plusieurs reprises. - Il calcule l'index du message suivant, en l'enroulant autour à l'aide de l'opérateur modulo (
%). - Met à jour le
Contenu du textede laMessage dynamiqueélément. - Prime: Inclut un effet simple de fondu enchaîné/fondu enchaîné utilisant l'opacité CSS et
définirTimeoutpour une transition plus douce. Ajoutertransition : opacité 0,5 s entrée-sortie progressive ;au.zone de message psélecteur dans votre CSS pour que cela fonctionne visuellement.
- Utilisations
jouerMusique()fonction: Tente de jouer la musique en utilisantbackgroundMusic.play(). Le.alors()gère la lecture réussie, tandis que.attraper()Gère les erreurs, souvent liées aux restrictions de lecture automatique du navigateur (nécessitant une intervention préalable de l'utilisateur). Le texte du bouton est mis à jour en conséquence.- Configuration initiale : Définit le texte initial, réinitialise la progression à 0, affiche le premier message dynamique et démarre le minuteur d'intervalle pour les modifications de message. Il appelle également
jouerMusique()pour essayer de démarrer l'audio. - Écouteurs d'événements (commandes musicales) :
- Écoute les clics sur le
Bouton playPauseSi la musique est en cours de lecture, il la met en pause ; sinon, il appellejouerMusique()encore une fois (important pour gérer les cas où la lecture automatique initiale a échoué). - Écoute pour
saisirévénements sur levolumeSlider(se déclenche en continu lorsque le curseur se déplace) et met à jour lebackgroundMusic.volume.
- Écoute les clics sur le
- Gestion des événements FiveM NUI (
window.addEventListener('message', ...)):- C'est la partie la plus importante pour réel intégration. FiveM envoie des messages à la fenêtre NUI (votre page HTML) en utilisant le
postMessageAPI. - Nous écoutons ces messages sur le
fenêtreobjet. données d'événementcontient la charge utile envoyée depuis Scripts Lua de FiveM.- Nous vérifions
événement.data.typeouévénement.données.nom_événement(différentes versions/contextes FiveM peuvent utiliser des structures légèrement différentes) pour voir de quel type de message il s'agit. 'état de chargement': Contient souvent un texte d'état général (par exemple, « Chargement de la carte », « Initialisation des scripts »). Nous mettons à jourchargement du messageparagraphe.'progrès': Ceci est généralement utilisé pour la progression réelle de la barre de chargement.données.loadFractionfournit généralement une valeur comprise entre 0,0 et 1,0, que nous convertissons en pourcentage et introduisons dans notremise à jourProgressfonction.'chargement terminé':Ce n'est pas un événement FiveM standard, mais un exemple de coutume vous envoyer un message pourrait envoyer à partir d'un script Lua (dont nous parlerons plus tard) pour signaler la fin du chargement, vous permettant de définir la progression sur 100% et d'afficher un message final.
- C'est la partie la plus importante pour réel intégration. FiveM envoie des messages à la fenêtre NUI (votre page HTML) en utilisant le
- Repli/Progression simulée :
- La section commentée fournit un simulation de base du progrès. Il utilise
setIntervalpour incrémenter périodiquement la barre de progression d'une petite quantité aléatoire. - Ceci est utile pour tester visuellement votre écran de chargement dans un navigateur sans exécuter FiveM.
- Vous devez SUPPRIMER ou COMMENTER ce code de simulation lorsque vous utilisez les événements FiveM NUI réels, sinon, vous risquez de voir des mises à jour de progression contradictoires.
- La section commentée fournit un simulation de base du progrès. Il utilise
- Effet de fondu entrant : Ajoute un fondu subtil pour l'ensemble du corps lorsque la page se charge pour une apparence plus fluide.
Enregistrer ce fichier sous script.js. N'oubliez pas de créer le audio dossier et ajoutez votre .ogg fichier musical.
Étape 4 : Intégration avec FiveM (Lua – fxmanifest.lua)
Nous devons maintenant informer le serveur FiveM de notre nouvelle ressource et l'identifier comme un écran de chargement.
Créez un fichier nommé fxmanifest.lua à la racine de votre mon-écran-de-chargement dossier.
-- Manifeste de ressource fx_version 'cerulean' -- Utilisez 'cerulean' ou une version plus récente comme 'adamant' ou 'bodacious' jeu 'gta5' auteur 'Votre nom ou le nom du serveur' description 'Écran de chargement personnalisé pour mon serveur génial' version '1.0.0' -- Spécifiez cette ressource comme écran de chargement loadscreen 'index.html' -- Répertoriez tous les fichiers nécessaires à l'interface utilisateur (HTML, CSS, JS, images, audio, polices, etc.) fichiers { 'index.html', 'style.css', 'script.js', 'images/logo.png', 'images/background.jpg', -- Ajoutez toutes vos images ici 'audio/background_music.ogg' -- Ajoutez tous vos fichiers audio ici -- 'fonts/mycustomfont.woff2' -- Ajoutez des polices personnalisées si vous en utilisez } -- Facultatif : script client pour un contrôle avancé (comme masquer les éléments par défaut) client_script 'client.lua' -- Facultatif : Si votre écran de chargement doit récupérer des données DU serveur (plus avancé) -- server_script 'server.lua' -- Facultatif : Définissez les paramètres NUI si nécessaire (rarement requis pour les écrans de chargement de base) -- nui_settings { -- ['scriptFramePolicy'] = "frame-ancestors 'self' https://cfx.re" -- Exemple de politique de sécurité -- }
Explication:
fx_version 'céruléen': Définit la version du manifeste. « cerulean » est une référence courante, mais des versions plus récentes comme « adamant » ou « bodacious » existent. Conservez « cerulean », sauf si vous avez besoin de fonctionnalités de versions plus récentes.jeu 'gta5': Spécifie le jeu pour lequel cette ressource est destinée.auteur,description,versionMétadonnées concernant votre ressource. Renseignez-les correctement.écran de chargement 'index.html': C'est la ligne cruciale. Il indique à FiveM d'utiliser le fichier HTML spécifié (index.html(dans notre cas) comme écran de chargement du jeu.fichiers { ... }: Très important ! Vous devez lister chaque fichier que votre page HTML doit charger, par rapport au dossier racine de la ressource. Cela inclut :- Le fichier HTML lui-même (
index.html) - Le fichier CSS (
style.css) - Le fichier JavaScript (
script.js) - Toutes les images (par exemple,
images/logo.png,images/background.jpg) - Tous les fichiers audio (par exemple,
audio/musique_de_fond.ogg) - Toutes les polices personnalisées que vous pourriez avoir liées dans votre CSS.
- Si vous oubliez un fichier ici, il ne se chargera pas dans le jeu !
- Le fichier HTML lui-même (
script_client 'client.lua':Nous incluons ceci car nous allons créer un petit script client à l'étape suivante pour gérer le masquage des éléments de chargement FiveM par défaut.script_serveur 'server.lua': Uniquement nécessaire pour les scénarios avancés où votre écran de chargement doit communiquer avec le serveur (par exemple, récupérer le nombre de joueurs dynamiques) avant L'environnement de jeu principal se charge, ce qui est complexe. Nous ne l'utiliserons pas pour une configuration de base.nui_settingsPermet de définir des politiques de sécurité spécifiques pour le cadre NUI. Généralement inutile pour les écrans de chargement standard, sauf si vous intégrez du contenu externe ou gérez des interactions complexes.
Enregistrer ce fichier sous fxmanifest.lua.
(Remarque : les serveurs plus anciens peuvent utiliser __ressource.lua au lieu de fxmanifest.lua. La syntaxe est très similaire, mais version_fx est généralement omis ou différent, et les directives peuvent varier légèrement. fxmanifest.lua est la norme moderne).
Étape 5 : Désactivation de l’animation par défaut du pont FiveM (Lua – client.lua)
Par défaut, FiveM affiche son propre texte de chargement et parfois une animation de chargement de « pont » avant Votre écran personnalisé prend entièrement le dessus. Nous pouvons masquer ces éléments pour un rendu plus épuré grâce à un script Lua côté client.
Créez un fichier nommé client.lua dans ton mon-écran-de-chargement dossier.
-- client.lua pour la ressource d'écran de chargement -- Ce code s'exécute dès que la ressource démarre sur le client -- Nous attendons un bref instant pour nous assurer que NUI est probablement prêt Citizen.Wait(100) -- Méthode 1 : Utilisation de ShutdownLoadingScreenNui (recommandé pour un masquage simple) -- Cela tente de masquer immédiatement les éléments de l'interface graphique de chargement FiveM par défaut. -- C'est souvent efficace, mais le timing peut parfois être délicat en fonction de la vitesse de chargement du client. ShutdownLoadingScreenNui() -- Vous pouvez également envoyer un message à votre page NUI si nécessaire, par exemple, -- pour signaler que Lua est prêt ou transmettre des données initiales. -- SendNUIMessage({ -- type = "luaReady", -- message = "Le script client a été chargé !" -- }) -- Méthode 2 : Masquage plus contrôlé à l'aide de CreateThread et AddTextEntry -- Cette méthode remplace en permanence les entrées de texte de chargement par défaut. -- Elle peut être plus fiable pour garantir que le texte par défaut ne clignote pas brièvement. -- Décommentez cette section et commentez ShutdownLoadingScreenNui() si vous préférez cela. --[[ Citizen.CreateThread(function() -- Masquer les composants de texte par défaut « Initialisation... » AddTextEntry('FE_THDR_GTAO', ' ') -- Chargement en ligne AddTextEntry('PM_NAME_APP', ' ') -- Nom de l'application FiveM (peut varier) AddTextEntry('PM_INFO_DET', ' ') -- Informations de build / État de connexion AddTextEntry('LOADING_SPLAYER_L', ' ') -- Chargement du mode histoire (apparaît parfois) AddTextEntry('DLC_ITEM_UNLOCK', ' ') -- Déverrouiller les messages, le cas échéant -- Continuez à les remplacer périodiquement tant que l'écran personnalisé est censé être actif -- Cette boucle peut être excessive ; souvent, une seule définition suffit. -- Ajustez le temps d'attente ou supprimez la boucle si les performances sont affectées. while true do Citizen.Wait(500) -- Vérifier/remplacer toutes les 500 ms -- Vérifier si l'écran de chargement est toujours actif (pseudo-code, nécessite une logique réelle) -- local isLoading = GetIsLoadingScreenActive() -- Ce natif pourrait ne pas fonctionner assez tôt -- si ce n'est pas isLoading alors s'arrête end -- Quitter la boucle lorsque le jeu principal se charge (nécessite une meilleure condition) -- Réappliquer les remplacements au cas où AddTextEntry('FE_THDR_GTAO', ' ') AddTextEntry('PM_NAME_APP', ' ') AddTextEntry('PM_INFO_DET', ' ') AddTextEntry('LOADING_SPLAYER_L', ' ') AddTextEntry('DLC_ITEM_UNLOCK', ' ') -- Facultativement, masquer le cercle de chargement rotatif en bas à droite HideHudComponentThisFrame(14) -- HUD_LOADING_SPINNER end end) --]] -- Vous pouvez ajouter plus de logique ici si nécessaire, par exemple, écouter les événements du jeu -- pour envoyer des messages spécifiques à votre écran de chargement NUI. -- Exemple : Envoyer un message lorsque le joueur apparaît (bien que l'écran de chargement ait généralement disparu à ce moment-là) -- AddEventHandler('playerSpawned', function() -- SendNUIMessage({ type = 'playerReady' }) -- end) print('[MyLoadingScreen] Client script loaded.')
Explication:
Citoyen.Attendez(100):Un léger retard. J'essaie parfois d'interagir avec l'interface utilisateur ou des éléments du jeu. immédiatement Le chargement du script peut échouer. Cela laisse le temps à l'initialisation.ShutdownLoadingScreenNui(): Il s'agit d'une fonction native de FiveM spécialement conçue pour masquer les éléments d'interface utilisateur par défaut de l'écran de chargement fournis par le jeu ou FiveM lui-même. C'est généralement la méthode la plus simple et la plus directe.EnvoyerNUIMessage({ ... }):Un exemple montrant comment vous pouvez envoyer des données depuis Lua à votre JavaScript. Le tableau que vous transmettez devient ledonnées d'événementobjet dans votrewindow.addEventListener('message', ...)auditeur dansscript.jsVous pouvez l'utiliser pour déclencher des actions spécifiques ou transmettre des informations sur le serveur.- Méthode 2 (commentée) :
- Fournit une approche alternative en utilisant
Ajouter une entrée de texte. Cette fonction vous permet de remplacer les chaînes de texte de jeu par défaut identifiées par leurs clés (commeFE_THDR_GTAO). En les définissant avec un espace (' '), vous les masquez efficacement. - Le
Citoyen.Créer un fil de discussioncrée un thread séparé pour cette tâche. - Le
bien que vraiboucle (avecCitoyen.Attendez) réapplique continuellement ces remplacements. Cela peut être plus efficace contre les tentatives de réinitialisation du texte par le jeu, mais peut être excessif. Cela inclut égalementMasquerHudComponentThisFrame(14)pour cacher la toupie. - Choisir un méthode. En utilisant
ShutdownLoadingScreenNui()est généralement préféré pour la simplicité, sauf si vous rencontrez des problèmes où les éléments par défaut clignotent encore brièvement.
- Fournit une approche alternative en utilisant
imprimer(...): Enregistre un message sur la console F8 du client, utile pour confirmer le script chargé.
Enregistrer ce fichier sous client.lua.
Étape 6 : Installation et exécution de l'écran de chargement
Maintenant que toutes les pièces sont créées, mettons-les sur le serveur.
- Télécharger la ressource :
- Prenez l'intégralité
mon-écran-de-chargementdossier (qui contient désormaisindex.html,style.css,script.js,fxmanifest.lua,client.lua, et leimagesetaudiosous-dossiers avec leur contenu). - Téléchargez ce dossier complet sur votre serveur FiveM
ressourcesRépertoire. Vous pouvez utiliser un logiciel FTP (comme FileZilla) ou le panneau web de votre hébergeur. La structure devrait ressembler à ceci :[server-data]/resources/mon-écran-de-chargement/.
- Prenez l'intégralité
- Assurer la ressource en
serveur.cfg:- Ouvrez le fichier de configuration principal de votre serveur, généralement nommé
serveur.cfg. - Recherchez la section où les ressources sont démarrées (lignes commençant généralement par
assureroucommencer). - Ajoutez une ligne pour démarrer votre ressource d'écran de chargement :
Écran de chargement personnalisé cfg # - Le placement importe légèrement : Assurez-vous qu'il est répertorié avant Des ressources qui peuvent prendre du temps à charger si vous souhaitez que l'écran apparaisse le plus tôt possible. Cependant, des ressources de base
assurerest généralement suffisant. Faire pas placez-le à l'intérieur de n'importe quel[catégorie]entre parenthèses si vous souhaitez qu'il s'agisse d'une ressource par défaut.
- Ouvrez le fichier de configuration principal de votre serveur, généralement nommé
- Redémarrez votre serveur : Pour les changements dans
serveur.cfget pour que la nouvelle ressource soit reconnue, vous devez redémarrer complètement votre serveur FiveM. - Connectez et testez : Lancez FiveM et connectez-vous à votre serveur. Vous devriez maintenant voir votre écran de chargement personnalisé au lieu de celui par défaut ! Testez la barre de progression (elle devrait réagir au chargement de FiveM), les messages changeants et les commandes musicales. Vérifiez la console F8 en jeu pour détecter d'éventuelles erreurs.
client.luaou des problèmes potentiels liés à l'interface utilisateur NUI. Vérifiez la console du navigateur (souvent accessible via F8 -> Outils NUI, ou en ouvrant directement le code HTML) pour détecter les erreurs JavaScript.
Idées de personnalisation avancées
Une fois que vous maîtrisez les bases, vous pouvez explorer des fonctionnalités plus avancées :
- Vidéos d'arrière-plan : Au lieu d'une image statique, utilisez un code HTML
étiqueter.- Ajouter
à votreindex.html. - Style
#bg-vidéoen CSS similaire au.arrière-plandiv (position absolue, 100% largeur/hauteur,objet-ajustement : couverture,z-index: -1). - Important: Les vidéos augmentent considérablement la taille de l'écran de chargement. Optimisez-les fortement (résolution, débit binaire). Utilisez des formats tels que
.mp4(Codec H.264). N'oubliez pas d'ajouter le fichier vidéo àfxmanifest.luaLa lecture automatique peut nécessiteren sourdineattribut initialement dû aux politiques du navigateur ; vous pourriez avoir besoin de JS pour réactiver le son en fonction de l'interaction de l'utilisateur (comme cliquer sur le contrôle du volume).
- Ajouter
- Récupération dynamique des règles/messages du serveur : Au lieu de coder en dur les messages en JS, utilisez
aller chercherdans tonscript.jspour charger des règles ou des annonces à partir d'un.jsonfichier dans votre ressource ou même depuis un serveur web/API externe. Cela facilite les mises à jour. - Utilisation des frameworks Web : Utilisez des frameworks CSS comme Tailwind CSS ou Bootstrap pour un style plus rapide, ou des frameworks JavaScript comme Vue.js ou React pour une logique d'interface utilisateur plus complexe (bien que cela ajoute une complexité et des étapes de construction importantes).
- Intégrations API : Récupérez des données depuis des API externes (par exemple, affichez le nombre de joueurs en ligne depuis votre serveur Discord à l'aide d'un bot Discord et d'un point de terminaison API simple). Cela nécessite un script côté serveur.
serveur.luadans votre ressource ou un service Web distinct) pour gérer en toute sécurité. - Animations plus sophistiquées : Utiliser des animations CSS (
@keyframes) ou des bibliothèques d'animation JavaScript (comme GSAP) pour des transitions plus fluides, des effets de fondu ou des logos animés.
Dépannage des problèmes courants
- L'écran de chargement n'apparaît pas :
- Vérifier
serveur.cfg: Estassurer mon-écran-de-chargementPrésent et orthographié correctement ? Y a-t-il des erreurs dans la console du serveur au démarrage liées à la ressource ? - Vérifier
fxmanifest.lua: Est-ce que leécran de chargement 'index.html'ligne correcte ? Sont tous fichiers nécessaires (HTML, CSS, JS, images, audio) répertoriés dans lefichiersbloc ? Vérifiez soigneusement les noms de fichiers et les chemins (sensible à la casse sous Linux !). - Vérifier la structure du dossier : est-ce que le
mon-écran-de-chargementdossier directement à l'intérieur duressourcesdossier?
- Vérifier
- Styles CSS non appliqués :
- Vérifier le HTML
<link>tag : Est-ce que lehref="style.css"correct? - Vérifier
fxmanifest.lua: Eststyle.cssrépertorié dans lefichiersbloc? - Vérifiez la syntaxe CSS : y a-t-il des fautes de frappe ou des erreurs dans votre
style.cssfichier ? Utilisez un validateur CSS. - Cache du navigateur : Parfois, le cache NUI de FiveM conserve d'anciennes versions. Videz votre cache FiveM (généralement dans
%localappdata%\FiveM\FiveM.app\cachesous Windows, supprimez des dossiers commenavigateur,db,stockage nui) et redémarrez FiveM.
- Vérifier le HTML
- JavaScript ne fonctionne pas (pas de progression, pas de changement de message, pas de musique) :
- Vérifier le HTML
<script>tag : Est-ce que lesrc="script.js"correcte et placée à la fin de la<body>? - Vérifier
fxmanifest.lua: Estscript.jsrépertorié dans lefichiersbloc? - Vérifiez la console du navigateur : ouvrez la console F8 dans FiveM, accédez à NUI Devtools (si disponible) ou ouvrez le
index.htmldirectement dans un navigateur et vérifiez la console développeur (généralement F12) pour détecter les erreurs JavaScript. Ces erreurs identifient souvent la ligne problématique. - Problèmes audio : le fichier musical est-il dans
.oggformat ? Le chemin est-il dansnouveau Audio(...)Est-ce correct ?audio/votre_musique.oggRépertorié dans le manifeste ? N'oubliez pas les restrictions de lecture automatique du navigateur : la musique peut ne démarrer qu'après avoir cliqué sur le bouton de lecture.
- Vérifier le HTML
- La barre de progression ne se met pas à jour :
- Comptez-vous sur les événements FiveM NUI (
window.addEventListener('message', ...)? Assurez-vous que ce code est actif (non commenté). - Les noms des événements sont-ils (
état de charge,progrès,Fraction de charge) correct ? Ces informations peuvent parfois varier légèrement selon les mises à jour de FiveM ou les versions de jeu spécifiques. Ajouterconsole.log(JSON.stringify(event.data))à l'intérieur de l'écouteur de messages pour voir exactement quelles données FiveM envoie. - L'ID de l'élément est-il (
barre de progression intérieure) correct en HTML et en JS ?
- Comptez-vous sur les événements FiveM NUI (
- Éléments de chargement FiveM par défaut toujours visibles :
- Vérifier
client.lua: Le script est-il en cours d'exécution (vérifiez leimprimermessage dans F8) ? Est-ceShutdownLoadingScreenNui()appelé ? Si vous utilisezAjouter une entrée de texteLes touches sont-elles adaptées à votre configuration de jeu ? Essayez d'augmenter la valeur initiale.Citoyen.Attendre().
- Vérifier
Besoin d'une solution premium ? Découvrez FiveMX !
Créer un écran de chargement à partir de zéro est gratifiant, mais cela peut également prendre du temps, surtout si vous souhaitez des fonctionnalités avancées et une conception très soignée.
Si vous préférez une solution professionnelle prête à l'emploi, nous avons ce qu'il vous faut ici chez FiveMX.
Nous proposons une sélection organisée d'écrans de chargement premium et riches en fonctionnalités, conçus par des développeurs expérimentés.
Avantages des écrans de chargement payants FiveMX :
- Conceptions professionnelles : Esthétique visuellement époustouflante et moderne.
- Fonctionnalités avancées : Incluez souvent des vidéos d'arrière-plan, des lecteurs de musique, plusieurs sections configurables, des aperçus d'intégration Discord, des indicateurs d'état du serveur, etc.
- Configuration facile : Ils sont généralement livrés avec des fichiers de configuration simples pour personnaliser le texte, les logos, les liens et les fonctionnalités sans nécessiter de modifications de code profondes.
- Fiabilité et support : Testé pour la compatibilité et souvent accompagné d'un support développeur si vous rencontrez des problèmes.
- Gagnez du temps et des efforts : Obtenez instantanément un résultat de haute qualité, vous permettant de vous concentrer sur d’autres aspects de votre serveur.
Explorez notre gamme d'interfaces et d'écrans de chargement pour trouver la solution idéale pour l'identité de votre serveur :
- Catégorie Écrans de chargement FiveMX
- Collection de scripts FiveMX (la section Interfaces inclut souvent des écrans de chargement)
Considérez ces options populaires disponibles sur FiveMX :
- Écran de chargement moderne V1:Une option élégante et propre pour vous aider à démarrer.
- Écran de chargement avancé V6:Rempli de fonctionnalités pour une personnalisation ultime.
- Écran de chargement unique V13:Démarquez-vous avec un design distinctif.
- Écran de chargement V16:Un autre excellent choix avec des fonctionnalités modernes.
Investir dans un écran de chargement premium peut considérablement améliorer la qualité perçue de votre serveur et l'expérience du joueur dès le premier clic.
Conclusion
Créer un Écran de chargement FiveM personnalisé est un moyen puissant d'améliorer l'identité de votre serveur et d'offrir une meilleure expérience utilisateur.
Nous avons parcouru la configuration de la structure HTML, son style avec CSS, l'ajout d'un comportement dynamique avec JavaScript et son intégration dans FiveM à l'aide du fxmanifest.lua et un simple client.lua script pour masquer les éléments par défaut.
N'oubliez pas que la clé réside dans une gestion minutieuse des fichiers (en listant tout dans le manifeste), en comprenant comment fonctionnent les événements NUI pour les mises à jour de progression réelles et en utilisant les normes Web (HTML, CSS, JS).
N’ayez pas peur d’expérimenter différents styles, messages et médias.
Testez minutieusement dans votre navigateur et dans le jeu, en utilisant les consoles de développement pour déboguer les problèmes.
Que vous construisiez votre propre chef-d'œuvre en suivant ce guide ou que vous choisissiez une option premium raffinée de FiveMX.com, investir dans votre écran de chargement revient à investir dans la première impression de votre serveur.
Bon codage, et nous espérons que cela vous aidera à créer un point d’entrée incroyable pour vos joueurs !
Foire aux questions (FAQ)
Q1 : Puis-je utiliser des vidéos d’arrière-plan au lieu d’images ?
R : Oui ! Utilisez le code HTML. étiqueter (). Stylisez-le avec CSS pour couvrir l'écran (position : absolue, largeur : 100%, hauteur : 100%, objet-ajustement : couverture, z-index: -1). N'oubliez pas de muet pour que la lecture automatique fonctionne de manière fiable, optimisez considérablement la taille du fichier vidéo, utilisez des formats compatibles comme MP4 (H.264) et répertoriez le fichier vidéo dans votre fxmanifest.lua.
Q2 : Comment puis-je faire en sorte que la barre de progression affiche le réel Progression du chargement de FiveM ?
R : Le moyen le plus fiable est d’utiliser JavaScript window.addEventListener('message', ...) pour écouter les messages NUI envoyés par FiveM. Plus précisément, recherchez un événement comme progrès qui contient souvent un Fraction de charge propriété (une valeur comprise entre 0,0 et 1,0). Multipliez-la par 100 et transmettez-la à votre mise à jourProgress Fonction JavaScript. Évitez de vous fier uniquement à la progression simulée (comme setInterval (exemple) pour la version finale.
Q3 : Où dois-je exactement placer les fichiers d’écran de chargement sur mon serveur ?
A : Créez un dossier dédié à votre ressource (par exemple, mon-écran-de-chargement) à l'intérieur du serveur principal de votre serveur ressources répertoire. Tous les fichiers (index.html, style.css, script.js, fxmanifest.lua, client.lua, et des sous-dossiers comme images, audio) doit être placé dans ce dossier de ressources.
Q4 : Puis-je avoir une musique de fond ? Comment ajouter des commandes ?
R : Oui. Utilisez le code HTML. étiqueter ou créer un Audio objet en JavaScript (nouveau Audio('audio/music.ogg')). Il est crucial d’utiliser le .ogg format audio pour une meilleure compatibilité avec FiveM NUI. Ajoutez des boutons HTML standard () et potentiellement une entrée de plage (<input type="range">) pour le volume dans votre index.html. Utiliser les écouteurs d'événements JavaScript (ajouterEventListener) sur ces éléments pour contrôler l'objet audio .jouer(), .pause(), et .volume propriétés. N'oubliez pas de lister le fichier audio dans votre manifeste.
Q5 : Pourquoi mon écran de chargement n'apparaît-il pas du tout ?
A : Vérifiez deux fois ces coupables courants :
1. La ressource est-elle correctement assurée dans serveur.cfg (assurer resource_folder_name)?
2. Est-ce que le fxmanifest.lua présent dans le dossier de ressources ?
3. Le manifeste a-t-il le écran de chargement 'votre_fichier_html.html' doubler?
4. Sont tous fichiers requis (HTML, CSS, JS, images, audio, polices) répertoriés avec précision sous fichiers { ... } dans le manifeste ? Vérifiez les chemins et les noms de fichiers (sensible à la casse !).
5. Y a-t-il des erreurs dans la console du serveur ou la console F8 du client liées à l'échec du chargement de la ressource ?
6. Avez-vous redémarré le serveur après avoir ajouté la ressource et l'avoir vérifié ?
Q6 : Comment puis-je faire en sorte que l'écran de chargement disparaisse en douceur lorsque le jeu démarre ?
R : Cela nécessite une communication entre votre script Lua et la page NUI. FiveM ne dispose pas d'un événement « Chargement terminé, sur le point d'apparaître » parfaitement fiable et facile à détecter. avant L'interface utilisateur numérique est détruite. Cependant, vous pouvez :
1. Envoyez un message NUI personnalisé (EnvoyerNUIMessage({ type = 'loadingAlmostDone' })) à partir d'un script client Lua basé sur certains événements de jeu ou minuteries juste avant l'apparition.
2. Dans votre JavaScript, écoutez ce message (si (event.data.type === 'loadingAlmostDone')).
3. Une fois reçu, déclenchez une animation de fondu CSS sur votre conteneur principal (.loading-container.fade-out { opacité : 0 ; transition : opacité 1 s ; } et ajoutez le fondu enchaîné classe utilisant JS). Cela crée une transition visuelle, même si l'interface utilisateur graphique (NUI) peut être supprimée brutalement par FiveM par la suite.
Écrans de chargement payants
-
0R-ÉCRAN DE CHARGEMENT V2
Le prix initial était : $23.00.$16.00Le prix actuel est : $16.00. -
Écran de chargement 2NA
Le prix initial était : $33.00.$14.00Le prix actuel est : $14.00. -
Écran de chargement personnalisé
Le prix initial était : $48.99.$24.99Le prix actuel est : $24.99. -
Écran de chargement des yeux
Le prix initial était : $14.99.$9.99Le prix actuel est : $9.99. -
Écran de chargement d'Izzy
Le prix initial était : $33.00.$27.00Le prix actuel est : $27.00. -
Écran de chargement d'Izzy v7
Le prix initial était : $27.00.$15.00Le prix actuel est : $15.00. -
Écran de chargement de Jakrino
Le prix initial était : $13.00.$8.00Le prix actuel est : $8.00. -
Écran de chargement KS
Le prix initial était : $20.99.$13.99Le prix actuel est : $13.99. -
Écran de chargement (DebuX)
Le prix initial était : $15.99.$6.99Le prix actuel est : $6.99.
Écrans de chargement gratuits
Terminé ! Des questions ? Laissez un commentaire.






















