Ok, vamos revisar a criação de um ponto de entrada único e envolvente para seus jogadores.
Nós vamos construir um Tela de carregamento personalizada do FiveM do zero.
O que é um recurso de tela de carregamento?
Uma tela de carregamento personalizada geralmente é a primeira interação de um jogador com seu servidor FiveM específico.
É uma oportunidade fantástica para estabelecer a marca do seu servidor, transmitir informações importantes e criar uma atmosfera detalhada desde o início.
Esqueça os visuais genéricos do FiveM; queremos que os jogadores sintam seu identidade do servidor no momento em que eles começam a se conectar.
Aqui na FiveMX, acreditamos em capacitar os donos de servidores com as ferramentas e o conhecimento para criar configurações de roleplay verdadeiramente específicas.
Este guia completo irá guiá-lo por cada etapa, desde a estrutura básica de HTML até a estilização com CSS, adicionando interatividade com JavaScript e, finalmente, integrando-o documentadamente ao seu servidor FiveM usando Lua.
Abordaremos até como ocultar a animação padrão da ponte FiveM para uma transição mais limpa.
Vamos começar a fazer seu servidor diferenciar a configuração.
Por que se preocupar com uma tela de carregamento personalizada do FiveM?
Você deve estar se perguntando se vale a pena o esforço.
Absolutamente!
Pense nisso como o saguão ou a entrada para o seu mundo virtual.
Primeiras impressões: Ele define o tom e o profissionalismo do seu servidor imediatamente.
Marca: Reforce o nome, o logotipo e o tema geral do seu servidor.
Exibição de informações: Compartilhe informações cruciais como regras, links do Discord, URLs de sites ou atualizações de status do servidor antes Os jogadores até aparecem.
Noivado: Use música, mensagens dinâmicas ou até mesmo vídeos para manter os jogadores envolvidos durante o processo de carregamento, reduzindo os tempos de espera percebidos.
Singularidade: Diferencie seu servidor dos inúmeros outros usando telas padrão ou genéricas.
Uma tela de carregamento bem projetada mostra que você se importa com os detalhes e com a experiência do jogador.
Pré-requisitos
Antes de começar a codificar, vamos garantir que você tenha as ferramentas necessárias e o conhecimento básico:
- Editor de texto: Você precisará de um programa para escrever seu código.
- Visual Studio Code (VS Code): gratuito, poderoso e altamente recomendado, com muitas extensões úteis.
- Sublime Text: Outra opção popular e leve.
- Notepad++: Uma escolha gratuita sólida para usuários do Windows.
- Evitar usando o Bloco de Notas básico ou o TextEdit, pois não possuem recursos úteis para codificação (como destaque de sintaxe).
- Conhecimento básico de desenvolvimento web (útil, mas não essencial):
- HTML (Linguagem de Marcação de Hipertexto): Compreende a estrutura básica de uma página da web (tags como
<div>,<img>,<p>). Forneceremos o código, mas conhecer o básico ajuda. - CSS (Folhas de Estilo em Cascata): Sabe estilizar elementos HTML (cores, tamanhos, posições). Novamente, nós o guiaremos, mas familiaridade é um diferencial.
- JavaScript (JS): Compreende conceitos básicos de programação para adicionar interatividade. Manteremos o JS relativamente simples inicialmente.
- HTML (Linguagem de Marcação de Hipertexto): Compreende a estrutura básica de uma página da web (tags como
- Acesso ao servidor FiveM: Você precisa acessar os arquivos do seu servidor, especificamente o
recursospasta, para instalar a tela de carregamento. - Software de edição de imagem (opcional): Ferramentas como Photoshop, GIMP (grátis) ou até mesmo Canva podem ser úteis para criar ou editar logotipos e imagens de fundo.
- Paciência e vontade de aprender: Depuração e ajustes fazem parte do processo!
Não se preocupe se você não for um especialista em desenvolvimento web.
Explicaremos cada etapa claramente e forneceremos trechos de código que podem ser copiados e colados.
Compreendendo como funcionam as telas de carregamento do FiveM (NUI)
A FiveM utiliza um sistema chamado NUI (IU nativa) para exibir páginas da web dentro o jogo.
Basicamente, sua tela de carregamento personalizada é apenas uma página da web padrão (criada com HTML, CSS e JavaScript) que o sistema NUI do FiveM renderiza enquanto os recursos do jogo estão sendo carregados em segundo plano.
Isso significa que podemos aproveitar tecnologias web padrão para criar experiências interativas e visualmente ricas.
O essencial os componentes são:
índice.html: O arquivo principal que define a estrutura e o conteúdo da sua tela de carregamento.estilo.css: O arquivo que define a aparência visual (layout, cores, fontes, etc.).script.js: O arquivo que adiciona comportamento dinâmico (como alteração de texto, animações, reprodução de música).fxmanifest.lua(ou__recurso.lua): Um arquivo FiveM especial que informa ao servidor que este é um recurso, especifica que é uma tela de carregamento e lista todos os arquivos necessários.
Agora, vamos começar a construir.
Etapa 1: Criando a estrutura HTML básica (índice.html)
Primeiro, crie uma nova pasta para o seu recurso de tela de carregamento. Vamos chamá-la minha-tela-de-carregamento.
Dentro desta pasta, crie um arquivo chamado índice.html.
Este arquivo conterá o esqueleto da nossa tela de carregamento.
Precisamos de contêineres para diferentes elementos: o plano de fundo, um logotipo, indicação de progresso de carregamento e áreas para mensagens de texto.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Nome do servidor - Carregando...</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="imagens/logo.png" alt="Logotipo do servidor" 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">Inicializando conexão...</p> <p id="dynamic-message">Bem-vindo! Carregando recursos do servidor...</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">Pausar música</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>
Explicação:
&<html>: Modelo HTML5 padrão.: Contém meta-informações e links para recursos externos.conjunto de caracteres="UTF-8": Garante a exibição correta dos caracteres.janela de visualização: Importante para design responsivo (adaptação a diferentes tamanhos de tela), embora menos crítico para telas de carregamento de jogos com resolução fixa.: Define o texto que pode aparecer em uma aba do navegador (menos relevante no FiveM NUI, mas é uma boa prática).: Conecta nosso HTML ao nosso arquivo CSS para estilização.
<body>: Contém o conteúdo visível da página.<div class="loading-container">: O wrapper principal para tudo. Usaremos isso para o layout geral.<div class="background">: Um div vazio que estilizaremos com CSS para armazenar nossa imagem de fundo ou vídeo.<div class="content">: Envolve o conteúdo real (logotipo, texto, barra de progresso) para ajudar na centralização e no posicionamento.<div class="logo-area">: Um contêiner para o logotipo do seu servidor.<img src="imagens/logo.png" ...>: Uma tag de imagem. Importante: Você precisará criar umimagenspasta dentrominha-tela-de-carregamentoe coloque seulogo.pngarquivo lá. Certifique-se de que o nome do arquivo corresponda!
<div class="message-area">: Contém mensagens de texto.- Damos IDs aos parágrafos (
carregando-mensagem,mensagem dinâmica) para que possamos facilmente direcioná-los com JavaScript mais tarde.
- Damos IDs aos parágrafos (
<div class="progress-bar-container">: Contém os elementos da barra de progresso..barra de progresso: O recipiente externo da barra..barra-de-progresso-interna: A parte interna que será preenchida. Damos a ela um ID (barra de progresso interna) para controle JS.<p id="progress-text">: Exibe o texto percentual, também com um ID.
<div class="music-control">: (Opcional) Controles básicos para música de fundo. IDs permitem interação com JS.: Vincula nosso HTML ao nosso arquivo JavaScript. Colocando-o no final do<body>garante que os elementos HTML existam antes que o script tente interagir com eles.
Salvar este arquivo como índice.html em seu minha-tela-de-carregamento pasta. Crie uma imagens subpasta e adicione um espaço reservado logo.png por agora.
Etapa 2: Estilizando a tela de carregamento (CSS – estilo.css)
Agora, vamos fazer com que fique bonito!
Crie um arquivo chamado estilo.css no mesmo minha-tela-de-carregamento pasta.
Este arquivo controla a apresentação visual.
\/* Basic Reset & Body Styling *\/\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box; \/* Makes width\/height include padding and border *\/\n}\n\nbody, html {\n height: 100%;\n width: 100%;\n overflow: hidden; \/* Hide scrollbars *\/\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; \/* Example font *\/\n color: #ffffff; \/* Default text color (white) *\/\n}\n\n\/* Main Container *\/\n.loading-container {\n position: relative; \/* Needed for absolute positioning of children *\/\n width: 100%;\n height: 100%;\n display: flex; \/* Use flexbox for centering content *\/\n justify-content: center;\n align-items: center;\n text-align: center;\n}\n\n\/* Background Styling *\/\n.background {\n position: absolute; \/* Take up full screen behind content *\/\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-image: url('images\/background.jpg'); \/* CHANGE THIS to your image *\/\n background-size: cover; \/* Scale image to cover the container *\/\n background-position: center center; \/* Center the image *\/\n background-repeat: no-repeat;\n z-index: -1; \/* Place it behind other content *\/\n filter: brightness(0.6); \/* Optional: Darken the background slightly *\/\n}\n\n\/* --- OR Use a Solid Color Background --- *\/\n\/*\n.background {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: #1a1a1a;\n z-index: -1;\n}\n*\/\n\n\/* Content Wrapper *\/\n.content {\n z-index: 1; \/* Ensure content is above the background *\/\n padding: 20px;\n background-color: rgba(0, 0, 0, 0.5); \/* Semi-transparent black background *\/\n border-radius: 10px;\n max-width: 600px; \/* Limit content width *\/\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4);\n}\n\n\/* Logo Area *\/\n.logo-area {\n margin-bottom: 30px;\n}\n\n#server-logo {\n max-width: 200px; \/* Adjust max logo width *\/\n height: auto; \/* Maintain aspect ratio *\/\n display: block; \/* Allows margin auto to center *\/\n margin-left: auto;\n margin-right: auto;\n}\n\n\/* Message Area *\/\n.message-area {\n margin-bottom: 30px;\n}\n\n#loading-message {\n font-size: 1.2em;\n font-weight: bold;\n margin-bottom: 10px;\n color: #cccccc;\n}\n\n#dynamic-message {\n font-size: 1em;\n min-height: 40px; \/* Prevent layout shifts when message changes *\/\n}\n\n\/* Progress Bar Area *\/\n.progress-bar-container {\n width: 80%; \/* Width relative to the content container *\/\n margin: 0 auto; \/* Center the container *\/\n margin-bottom: 20px;\n}\n\n.progress-bar {\n width: 100%;\n background-color: #555555; \/* Dark grey background *\/\n border-radius: 5px;\n overflow: hidden; \/* Hide overflowing inner bar *\/\n height: 25px; \/* Bar height *\/\n border: 1px solid #333;\n}\n\n.progress-bar-inner {\n height: 100%;\n width: 0%; \/* Start at 0% width *\/\n background-color: #4CAF50; \/* Green progress color *\/\n border-radius: 5px 0 0 5px; \/* Keep left radius *\/\n transition: width 0.5s ease-in-out; \/* Smooth transition for width changes *\/\n text-align: center;\n line-height: 25px; \/* Vertically center text if needed inside *\/\n color: white;\n}\n\n#progress-text {\n margin-top: 5px;\n font-size: 0.9em;\n}\n\n\n\/* Music Control (Optional) *\/\n.music-control {\n margin-top: 25px;\n display: flex; \/* Arrange button and slider side-by-side *\/\n justify-content: center;\n align-items: center;\n gap: 15px; \/* Space between elements *\/\n}\n\n#play-pause-button {\n padding: 8px 15px;\n background-color: #4CAF50;\n color: white;\n border: none;\n border-radius: 5px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.3s ease;\n}\n\n#play-pause-button:hover {\n background-color: #45a049;\n}\n\n#volume-slider {\n cursor: pointer;\n width: 150px; \/* Adjust slider width *\/\n}\n\n\/* Add some basic responsiveness if needed, though less critical in NUI *\/\n@media (max-width: 600px) {\n .content {\n max-width: 90%;\n }\n .progress-bar-container {\n width: 90%;\n }\n}
Explicação:
* { tamanho da caixa: caixa de borda; }: Uma redefinição comum para tornar os elementos de dimensionamento mais previsíveis.corpo, html: Define a altura/largura da base e oculta possíveis barras de rolagem. Define uma fonte e cor de texto padrão..carregando-contêiner: Usosexibição: flexívelpara centralizar facilmente o.contentediv horizontalmente (justificar-conteúdo) e verticalmente (alinhar-itens).posição: relativaé crucial para posicionar o fundo absoluto..fundo:posição: absoluta: Retira o elemento do fluxo normal e o posiciona em relação ao ancestral posicionado mais próximo (.carregando-contêiner).superior: 0; esquerda: 0; largura: 100%; altura: 100%;: Faz com que cubra todo o recipiente.imagem de fundo: url(...): Fundamentalmente, a mudança'imagens/fundo.jpg'para o caminho real da sua imagem de fundo. Certifique-se de que a imagem esteja noimagenspasta.tamanho do fundo: capa: Dimensiona a imagem de forma agradável.índice z: -1: Empurra-o para trás de outros elementos.filtro: brilho(0,6): Um efeito opcional para escurecer o fundo, tornando o texto mais legível. Ajuste ou remova conforme necessário.- Alternativa: Uma seção comentada mostra como usar uma cor de fundo sólida simples em vez de uma imagem.
.contente:índice z: 1: Garante que ele fique sobre o fundo.cor de fundo: rgba(0, 0, 0, 0.5): Um fundo preto semitransparente para a própria área de conteúdo, ajudando o texto a diferenciar a configuração contra fundos complexos. Ajuste o último valor (alfa) de 0 (totalmente transparente) para 1 (totalmente opaco).raio da borda,largura máxima,caixa-sombra: Adicione um pouco de polimento visual.
.área do logotipo,Logotipo do servidor #: Estiliza o contêiner do logotipo e a própria imagem do logotipo (definindo largura máxima e centralização)..área de mensagem,#carregando mensagem,# mensagem dinâmica: Estiliza os elementos de texto (tamanho da fonte, cor, margens).altura mínimaevita que o layout salte quando o conteúdo da mensagem dinâmica muda de comprimento..contêiner de barra de progresso,.barra de progresso,.barra-de-progresso-interna: Estiliza a barra de progresso.- O recipiente externo (
.barra de progresso) define a cor e a forma do plano de fundo. - A barra interna (
.barra-de-progresso-interna) é o que cresce. Começa emlargura: 0%. Alteraremos essa largura usando JavaScript.transição: largura 0,5s entrada-saída;torna a mudança de largura suave.
- O recipiente externo (
.controle de música,# botão de reprodução-pausa,#controle deslizante de volume: Estiliza os controles de música opcionais usando flexbox para layout e adicionando estilo básico aos botões.@media (largura máxima: 600px): Um exemplo simples de consulta de mídia para responsividade. Ela ajusta a largura do conteúdo em telas menores (menos crítico para FiveM, mas uma boa prática).
Salvar isto como estilo.css. Lembre-se de criar o imagens pasta e adicione seu fundo.jpg (ou qualquer nome que você tenha dado a ele) e logo.png.
Neste ponto, você poderia tecnicamente abrir o índice.html arquivo diretamente no seu navegador (como Chrome ou Firefox) para visualizar sua aparência estática!
Etapa 3: Adicionar interatividade e conteúdo dinâmico (JavaScript – script.js)
Agora vamos dar vida à nossa página estática usando JavaScript.
Crie um arquivo chamado script.js em seu minha-tela-de-carregamento pasta.
Adicionaremos funcionalidades para:
- Simulando o progresso do carregamento.
- Exibindo mensagens dinâmicas/mutáveis.
- Adicionando música de fundo com controles.
- Lidando com eventos FiveM NUI (a maneira correta de obter progresso de carregamento).
// Wait for the DOM (Document Object Model - the HTML structure) to be fully loaded
document.addEventListener('DOMContentLoaded', () => {
// --- Get References to HTML Elements ---
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'); // To update stages
// --- Configuration ---
const messages = [
"Loading core systems...",
"Establishing network connection...",
"Downloading latest server assets...",
"Syncing player data...",
"Parsing map details...",
"Almost there, preparing the world...",
"Tip: Visit our Discord at discord.gg/yourinvite",
"Tip: Check the rules on our website yourwebsite.com",
"Welcome to Our Awesome Server!"
];
let currentMessageIndex = 0;
const messageChangeInterval = 5000; // Change message every 5 seconds (5000ms)
// Background Music (Optional)
const backgroundMusic = new Audio('audio/background_music.ogg'); // IMPORTANT: Use .ogg for FiveM compatibility
backgroundMusic.volume = 0.5; // Set initial volume (0.0 to 1.0)
backgroundMusic.loop = true; // Loop the music
const playPauseButton = document.getElementById('play-pause-button');
const volumeSlider = document.getElementById('volume-slider');
let isPlaying = false; // Track music state
// --- Functions ---
// Function to update the progress bar and text
function updateProgress(percentage) {
percentage = Math.min(100, Math.max(0, percentage)); // Clamp between 0 and 100
progressBarInner.style.width = `${percentage}%`;
progressText.textContent = `${Math.round(percentage)}%`;
}
// Function to change the dynamic message
function changeDynamicMessage() {
dynamicMessage.style.opacity = 0; // Fade out
setTimeout(() => {
currentMessageIndex = (currentMessageIndex + 1) % messages.length;
dynamicMessage.textContent = messages[currentMessageIndex];
dynamicMessage.style.opacity = 1; // Fade in
}, 500); // Wait for fade out transition (0.5s)
}
// Function to attempt playing music (handles browser autoplay restrictions)
function playMusic() {
backgroundMusic.play().then(() => {
isPlaying = true;
playPauseButton.textContent = 'Pause Music';
console.log("Music started playing.");
}).catch(error => {
// Autoplay was prevented, common in browsers until user interaction
console.log("Music autoplay failed. Waiting for user interaction.", error);
isPlaying = false;
playPauseButton.textContent = 'Play Music';
// We might need a click listener on the body or button to initiate playback
});
}
// --- Initial Setup ---
// Set initial loading message
loadingMessage.textContent = "Initializing...";
updateProgress(0); // Start progress at 0%
// Start changing dynamic messages
dynamicMessage.textContent = messages[0]; // Show the first message immediately
setInterval(changeDynamicMessage, messageChangeInterval);
// Try to play music automatically
playMusic(); // Attempt background music playback
// --- Event Listeners ---
// Music Controls Event Listeners
playPauseButton.addEventListener('click', () => {
if (isPlaying) {
backgroundMusic.pause();
isPlaying = false;
playPauseButton.textContent = 'Play Music';
} else {
// Important: Re-trigger play function which handles potential initial failures
playMusic();
}
});
volumeSlider.addEventListener('input', (event) => {
backgroundMusic.volume = event.target.value;
});
// --- FiveM NUI Event Handling ---
// This is the CORE of interacting with the FiveM loading process
/*
FiveM NUI messages are sent via JavaScript events.
We listen for 'message' events on the window object.
The event 'data' property contains the information sent from Lua.
*/
window.addEventListener('message', function(event) {
const data = event.data;
// Check for the specific NUI message type used by FiveM for loading progress
// The 'loadstatus' event provides overall progress text.
if (data.type === 'loadstatus') {
if(data.status) {
loadingMessage.textContent = data.status;
}
}
// The 'progress' event provides detailed component progress (use this for the bar)
else if (data.eventName === 'progress') {
// data.loadFraction gives a value between 0.0 and 1.0
const progressPercentage = data.loadFraction * 100;
updateProgress(progressPercentage);
}
// A custom event we might send from Lua when loading is almost done
else if (data.type === 'loadingComplete') {
updateProgress(100);
loadingMessage.textContent = "Loading Complete! Joining server...";
// You could add fade-out effects here before the screen disappears
}
});
// --- Fallback/Simulated Progress (If NUI events aren't received or for testing) ---
// Comment this out or remove it if you rely solely on FiveM NUI events
/*
let simulatedProgress = 0;
const interval = setInterval(() => {
simulatedProgress += Math.random() * 5; // Increment by a random small amount
if (simulatedProgress >= 100) {
simulatedProgress = 100;
clearInterval(interval); // Stop the simulation when 100% is reached
loadingMessage.textContent = "Loading Complete! Joining server..."; // Update final message
}
updateProgress(simulatedProgress);
}, 300); // Update every 300ms
*/
// Add a small fade-in effect for the whole screen on load
document.body.style.opacity = 0;
setTimeout(() => {
document.body.style.transition = 'opacity 1s ease-in-out';
document.body.style.opacity = 1;
}, 100); // Start fade-in slightly after load
}); // End DOMContentLoaded
Explicação:
documento.addEventListener('DOMContentLoaded', () => { ... });: Isso garante que o código JavaScript seja executado apenas depois toda a estrutura da página HTML foi carregada e está pronta para ser manipulada.- Referências de elementos: Obtemos referências aos elementos HTML com os quais precisamos interagir usando
documento.getElementById(). É por isso que ter IDs exclusivos no HTML é importante. - Configuração:
mensagens: Uma matriz contendo as diferentes sequências de texto que você deseja percorrer na área de mensagens dinâmicas. Personalize-as!Índice de Mensagem atual: Mantém o controle de qual mensagem está sendo exibida no momento.IntervaloDeAlteraçãoDeMensagem: Define com que frequência (em milissegundos) a mensagem muda.
- Configuração de música de fundo:
novo Áudio('audio/background_music.ogg'): Cria um objeto de áudio HTML. Crucialmente:- Criar um
áudiopasta dentrominha-tela-de-carregamento. - Coloque seu arquivo de música de fundo lá.
- Use o
.oggformatar! MP3 e outros formatos podem não ser confiáveis ou até mesmo não funcionar no FiveM NUI. Você pode encontrar facilmente conversores online para converter MP3 para OGG.
- Criar um
backgroundMusic.volume: Define o volume inicial (0,0 = silencioso, 1,0 = máximo).backgroundMusic.loop = verdadeiro;: Faz a música se repetir.- Também temos referências ao botão de reprodução/pausa e ao controle deslizante de volume.
updateProgress(porcentagem)função: Pega um número (0-100), fixa-o para garantir que esteja dentro dos limites e atualiza olarguraestilo do elemento da barra de progresso interna e altera o conteúdo do texto da exibição de porcentagem.alterarMensagemDinâmica()função:- Usos
intervalo de configuraçãona fase de configuração para chamar esta função repetidamente. - Ele calcula o índice da próxima mensagem, envolvendo-a usando o operador de módulo (
%). - Atualiza o
Conteúdo de textodomensagem dinâmicaelemento. - Bônus: Inclui um efeito simples de fade-out/fade-in usando opacidade CSS e
definir tempo limitepara uma transição mais suave. Adicionartransição: opacidade 0,5s entrada/saída;para o.área de mensagem pseletor no seu CSS para que isso funcione visualmente.
- Usos
tocarMúsica()função: Tenta tocar a música usandobackgroundMusic.play(). O.então()lida com a reprodução bem-sucedida, enquanto.pegar()Lida com erros, que frequentemente ocorrem devido a restrições de reprodução automática do navegador (que exigem interação do usuário primeiro). Ele atualiza o texto do botão de acordo.- Configuração inicial: Define o texto inicial, zera o progresso, exibe a primeira mensagem dinâmica e inicia o temporizador de intervalo para alterações de mensagens. Também chama
tocarMúsica()para tentar iniciar o áudio. - Ouvintes de eventos (controles de música):
- Escuta cliques no
Botão de reprodução e pausa. Se a música estiver tocando, ele a pausa; caso contrário, ele chamatocarMúsica()novamente (importante para lidar com casos em que a reprodução automática inicial falhou). - Escuta por
entradaeventos nocontrole deslizante de volume(dispara continuamente conforme o controle deslizante se move) e atualiza obackgroundMusic.volume.
- Escuta cliques no
- Manipulação de eventos FiveM NUI (
window.addEventListener('mensagem', ...)):- Esta é a parte mais importante para real integração. O FiveM envia mensagens para a janela NUI (sua página HTML) usando o
postar mensagemAPI. - Nós ouvimos essas mensagens no
janelaobjeto. dados do eventocontém a carga útil enviada de Scripts Lua do FiveM.- Nós verificamos
evento.dados.tipoouevent.data.eventName(diferentes versões/contextos do FiveM podem usar estruturas ligeiramente diferentes) para ver que tipo de mensagem é. 'status de carga': Geralmente contém texto de status geral (por exemplo, “Carregando mapa”, “Inicializando scripts”). Atualizamos ocarregandoMensagemparágrafo.'progresso': Isso normalmente é usado para o progresso real da barra de carregamento.dados.loadFractiongeralmente fornece um valor de 0,0 a 1,0, que convertemos em uma porcentagem e inserimos em nossoatualizaçãoProgressofunção.'carregamento concluído':Este não é um evento FiveM padrão, mas um exemplo de um personalizado mensagem para você poderia enviar de um script Lua (que discutiremos mais tarde) para sinalizar o fim do carregamento, permitindo que você defina o progresso para 100% e mostre uma mensagem final.
- Esta é a parte mais importante para real integração. O FiveM envia mensagens para a janela NUI (sua página HTML) usando o
- Fallback/Progresso Simulado:
- A seção comentada fornece uma simulação básica de progresso. Ele usa
intervalo de configuraçãopara incrementar a barra de progresso em uma pequena quantidade aleatória periodicamente. - Isso é útil para testar sua tela de carregamento visualmente em um navegador sem executando FiveM.
- Você deve REMOVER ou COMENTAR este código de simulação ao usar os eventos FiveM NUI reais, caso contrário, você poderá ver atualizações de progresso conflitantes.
- A seção comentada fornece uma simulação básica de progresso. Ele usa
- Efeito de fade-in: Adiciona um fade-in sutil em todo o corpo quando a página é carregada para uma aparência mais suave.
Salvar este arquivo como script.js. Lembre-se de criar o áudio pasta e adicione seu .ogg arquivo de música.
Etapa 4: Integração com FiveM (Lua – fxmanifest.lua)
Agora precisamos informar ao servidor FiveM sobre nosso novo recurso e identificá-lo como uma tela de carregamento.
Crie um arquivo chamado fxmanifest.lua na raiz do seu minha-tela-de-carregamento pasta.
-- Resource Manifest\nfx_version 'cerulean' -- Use 'cerulean' or a newer version like 'adamant' or 'bodacious'\ngame 'gta5'\n\nauthor 'Your Name or Server Name'\ndescription 'Custom Loading Screen for My Awesome Server'\nversion '1.0.0'\n\n-- Specify this resource as the loading screen\nloadscreen 'index.html'\n\n-- List all files needed by the UI (HTML, CSS, JS, images, audio, fonts, etc.)\nfiles {\n 'index.html',\n 'style.css',\n 'script.js',\n 'images\/logo.png',\n 'images\/background.jpg', -- Add all your images here\n 'audio\/background_music.ogg' -- Add all your audio files here\n -- 'fonts\/mycustomfont.woff2' -- Add custom fonts if you use any\n}\n\n-- Optional: Client script for advanced control (like hiding default elements)\nclient_script 'client.lua'\n\n-- Optional: If your loading screen needs to fetch data FROM the server (more advanced)\n-- server_script 'server.lua'\n\n-- Optional: Define NUI settings if needed (rarely required for basic loading screens)\n-- nui_settings {\n-- ['scriptFramePolicy'] = "frame-ancestors 'self' https:\/\/cfx.re" -- Example security policy\n-- }
Explicação:
fx_version 'cerúleo': Define a versão do manifesto. "cerulean" é uma linha de base comum, mas existem versões mais recentes, como "adamant" ou "bodacious". Use "cerulean", a menos que precise de recursos de versões mais recentes.jogo 'gta5': Especifica o jogo para o qual este recurso se destina.autor,descrição,versão: Metadados sobre o seu recurso. Preencha-os adequadamente.tela de carregamento 'index.html': Esta é a linha crucial. Ele informa ao FiveM para usar o arquivo HTML especificado (índice.htmlno nosso caso) como tela de carregamento do jogo.arquivos { ... }: Muito importante! Você deve listar cada arquivo que sua página HTML precisa carregar, em relação à pasta raiz do recurso. Isso inclui:- O próprio arquivo HTML (
índice.html) - O arquivo CSS (
estilo.css) - O arquivo JavaScript (
script.js) - Todas as imagens (por exemplo,
imagens/logo.png,imagens/fundo.jpg) - Todos os arquivos de áudio (por exemplo,
áudio/música_de_fundo.ogg) - Quaisquer fontes personalizadas que você possa ter vinculado no seu CSS.
- Se você esquecer um arquivo aqui, ele não será carregado no jogo!
- O próprio arquivo HTML (
client_script 'cliente.lua': Incluímos isso porque criaremos um pequeno script de cliente na próxima etapa para lidar com a ocultação dos elementos de carregamento padrão do FiveM.server_script 'servidor.lua':Necessário apenas para cenários avançados onde sua tela de carregamento precisa se comunicar com o servidor (por exemplo, buscando contagens dinâmicas de jogadores antes o ambiente principal do jogo carrega, o que é complexo). Não usaremos isso para uma configuração básica.configurações nui: Permite definir políticas de segurança específicas para o quadro NUI. Geralmente não é necessário para telas de carregamento padrão, a menos que você esteja incorporando conteúdo externo ou lidando com interações complexas.
Salvar este arquivo como fxmanifest.lua.
(Nota: Servidores mais antigos podem usar __recurso.lua em vez de fxmanifest.lua. A sintaxe é muito semelhante, mas versão_fx geralmente é omitido ou diferente, e as diretivas podem variar ligeiramente. fxmanifest.lua é o padrão moderno).
Etapa 5: Desativando a animação padrão da ponte FiveM (Lua – cliente.lua)
Por padrão, o FiveM mostra seu próprio texto de carregamento e, às vezes, uma animação de carregamento de “ponte” antes Sua tela personalizada assume o controle total. Podemos ocultá-la para uma aparência mais limpa usando um script Lua do lado do cliente.
Crie um arquivo chamado cliente.lua em seu minha-tela-de-carregamento pasta.
-- client.lua for the loading screen resource\n\n-- This code runs as soon as the resource starts on the client\n\n-- We wait a brief moment to ensure NUI is likely ready\nCitizen.Wait(100)\n\n-- Method 1: Using ShutdownLoadingScreenNui (Recommended for simple hiding)\n-- This attempts to immediately hide the default FiveM loading GUI elements.\n-- It's often effective, but timing can sometimes be tricky depending on client load speed.\nShutdownLoadingScreenNui()\n\n-- You can also send a message to your NUI page if needed, for example,\n-- to signal that Lua is ready or pass initial data.\n-- SendNUIMessage({\n-- type = "luaReady",\n-- message = "Client script has loaded!"\n-- })\n\n\n-- Method 2: More controlled hiding using CreateThread and AddTextEntry\n-- This method continuously overrides the default loading text entries.\n-- It can be more reliable in ensuring default text doesn't flicker briefly.\n-- Uncomment this section and comment out ShutdownLoadingScreenNui() if you prefer this.\n--[[\nCitizen.CreateThread(function()\n -- Hide the default "Initializing..." text components\n AddTextEntry('FE_THDR_GTAO', ' ') -- Loading Online\n AddTextEntry('PM_NAME_APP', ' ') -- FiveM Application Name (might vary)\n AddTextEntry('PM_INFO_DET', ' ') -- Build Info \/ Connecting status\n AddTextEntry('LOADING_SPLAYER_L', ' ') -- Loading Story Mode (sometimes appears)\n AddTextEntry('DLC_ITEM_UNLOCK', ' ') -- open messages if any\n\n -- Keep overriding them periodically while the custom screen is expected to be active\n -- This loop might be excessive; often just setting them once is enough.\n -- Adjust the Wait time or remove the loop if performance is impacted.\n while true do\n Citizen.Wait(500) -- Check\/override every 500ms\n\n -- Check if the loading screen is still active (pseudo-code, needs actual logic)\n -- local isLoading = GetIsLoadingScreenActive() -- This native might not work early enough\n -- if not isLoading then break end -- Exit loop when main game loads (needs better condition)\n\n -- Re-apply overrides just in case\n AddTextEntry('FE_THDR_GTAO', ' ')\n AddTextEntry('PM_NAME_APP', ' ')\n AddTextEntry('PM_INFO_DET', ' ')\n AddTextEntry('LOADING_SPLAYER_L', ' ')\n AddTextEntry('DLC_ITEM_UNLOCK', ' ')\n\n -- Optionally, hide the rotating loading circle in the bottom right\n HideHudComponentThisFrame(14) -- HUD_LOADING_SPINNER\n end\nend)\n--]]\n\n-- You can add more logic here if needed, for example, listening for game events\n-- to send specific messages to your NUI loading screen.\n\n-- Example: Send a message when the player spawns (though loading screen is usually gone by then)\n-- AddEventHandler('playerSpawned', function()\n-- SendNUIMessage({ type = 'playerReady' })\n-- end)\n\nprint('[MyLoadingScreen] Client script loaded.')
Explicação:
Cidadão.Espere(100): Um pequeno atraso. Às vezes, tento interagir com a NUI ou elementos do jogo. imediatamente quando o script carrega, pode falhar. Isso dá tempo para as coisas inicializarem.ShutdownLoadingScreenNui(): Esta é uma função nativa do FiveM, projetada especificamente para ocultar os elementos da interface do usuário da tela de carregamento padrão fornecidos pelo jogo/FiveM. Geralmente é a maneira mais simples e direta.EnviarMensagemNUIM({ ... }): Um exemplo mostrando como você pode enviar dados de Lua para seu JavaScript. A tabela que você passa se torna adados do eventoobjeto em seuwindow.addEventListener('mensagem', ...)ouvinte emscript.js. Você pode usar isso para acionar ações específicas ou passar informações do servidor.- Método 2 (Comentado):
- Fornece uma abordagem alternativa usando
AdicionarEntradaDeTexto. Esta função permite que você substitua as sequências de texto do jogo padrão identificadas por suas chaves (comoFE_THDR_GTAO). Ao defini-los em um espaço (' '), você efetivamente os oculta. - O
Cidadão.CriarTópicocria um thread separado para esta tarefa. - O
enquanto verdadeirolaço (comCidadão.Espere) reaplica continuamente essas substituições. Isso pode ser mais confiável contra o jogo tentar redefinir o texto, mas pode ser exagerado. Também incluiHideHudComponentThisFrame(14)para esconder o spinner. - Escolher um método. Usando
ShutdownLoadingScreenNui()é geralmente preferido pela simplicidade, a menos que você encontre problemas em que elementos padrão ainda piscam brevemente.
- Fornece uma abordagem alternativa usando
imprimir(...): Registra uma mensagem no console F8 do cliente, útil para confirmar o script carregado.
Salvar este arquivo como cliente.lua.
Etapa 6: Instalando e executando a tela de carregamento
Agora que todas as peças foram criadas, vamos colocá-las no servidor.
- Carregar o recurso:
- Pegue o todo
minha-tela-de-carregamentopasta (que agora contémíndice.html,estilo.css,script.js,fxmanifest.lua,cliente.lua, e oimagenseáudiosubpastas com seu conteúdo). - Carregue esta pasta completa no seu servidor FiveM
recursosdiretório. Você pode usar um software FTP (como o FileZilla) ou o painel web do seu servidor. A estrutura deve ser semelhante a:[dados-do-servidor]/recursos/minha-tela-de-carregamento/.
- Pegue o todo
- Garantir o Recurso em
servidor.cfg:- Abra o arquivo de configuração principal do seu servidor, geralmente chamado
servidor.cfg. - Encontre a seção onde os recursos são iniciados (linhas geralmente começando com
garantiroucomeçar). - Adicione uma linha para iniciar seu recurso de tela de carregamento:
Tela de carregamento personalizada cfg # garante minha tela de carregamento - O posicionamento importa um pouco: Certifique-se de que está listado antes recursos que podem demorar para carregar se você quiser que a tela apareça o mais cedo possível. No entanto,
garantirgeralmente é suficiente. Faça não coloque-o dentro de qualquer[categoria]colchetes se você quiser que ele seja um recurso padrão.
- Abra o arquivo de configuração principal do seu servidor, geralmente chamado
- Reinicie seu servidor: Para as mudanças em
servidor.cfge para que o novo recurso seja reconhecido, você deve reiniciar completamente o servidor FiveM. - Conectar e testar: Inicie o FiveM e conecte-se ao seu servidor. Agora você deverá ver sua tela de carregamento personalizada em vez da tela padrão! Teste a barra de progresso (ela deve reagir ao carregamento real do FiveM), as mensagens que mudam e os controles de música. Verifique o console F8 no jogo para ver se há algum erro do seu
cliente.luaou potenciais problemas de NUI. Verifique o console do navegador (geralmente acessível via F8 -> Ferramentas NUI ou abrindo o HTML diretamente) para erros de JavaScript.
Ideias avançadas de personalização
Depois de ter o básico funcionando, você pode explorar recursos mais avançados:
- Vídeos de fundo: Em vez de uma imagem estática, use um HTML
marcação.- Adicionar
para o seuíndice.html. - Estilo
#bg-vídeoem CSS semelhante ao.fundodiv (posição absoluta, 100% largura/altura,ajuste de objeto: capa,índice z: -1). - Importante: Os vídeos aumentam significativamente o tamanho da tela de carregamento. Otimize-os bastante (resolução, taxa de bits). Use formatos como
.mp4(codec H.264). Lembre-se de adicionar o arquivo de vídeo afxmanifest.lua. A reprodução automática pode exigirsilenciadoatributo inicialmente devido às políticas do navegador; você pode precisar de JS para ativar o som com base na interação do usuário (como clicar no controle de volume).
- Adicionar
- Buscando regras/mensagens do servidor dinamicamente: Em vez de codificar mensagens em JS, use
buscarem seuscript.jspara carregar regras ou anúncios de um.jsonarquivo dentro do seu recurso ou até mesmo de um servidor web/API externo. Isso facilita as atualizações. - Usando Web Frameworks: Empregue estruturas CSS como Tailwind CSS ou Bootstrap para um estilo mais rápido, ou estruturas JavaScript como Vue.js ou React para uma lógica de UI mais complexa (embora isso adicione complexidade e etapas de construção significativas).
- Integrações de API: Obtenha dados de APIs externas (por exemplo, mostre a contagem de jogadores online do seu servidor do Discord usando um bot do Discord e um endpoint de API simples). Isso requer scripts do lado do servidor (
servidor.luano seu recurso ou em um serviço web separado) para manipular com segurança. - Animações mais sofisticadas: Use animações CSS (
@quadros-chave) ou bibliotecas de animação JavaScript (como GSAP) para transições mais suaves, efeitos de desbotamento ou logotipos animados.
Solução de problemas comuns
- A tela de carregamento não aparece:
- Verificar
servidor.cfg: Égarantir minha tela de carregamentopresente e escrito corretamente? Há algum erro no console do servidor na inicialização relacionado ao recurso? - Verificar
fxmanifest.lua:É otela de carregamento 'index.html'linha correta? São todos arquivos necessários (HTML, CSS, JS, imagens, áudio) listados noarquivosbloco? Verifique os nomes dos arquivos e caminhos com cuidado (no Linux, diferencia maiúsculas de minúsculas!). - Verifique a estrutura da pasta: é a
minha-tela-de-carregamentopasta diretamente dentro dorecursospasta?
- Verificar
- Estilos CSS não aplicados:
- Verifique o HTML
tag: É ohref="estilo.css"correto? - Verificar
fxmanifest.lua: Éestilo.csslistado noarquivosbloquear? - Verifique a sintaxe CSS: há erros de digitação ou erros em seu
estilo.cssarquivo? Use um validador CSS. - Cache do navegador: Às vezes, o cache NUI do FiveM retém versões antigas. Limpe o cache do FiveM (geralmente em
%localappdata%FiveMFiveM.appcacheno Windows, exclua pastas comonavegador,banco de dados,armazenamento nui) e reinicie o FiveM.
- Verifique o HTML
- JavaScript não funciona (sem progresso, sem mensagens mudando, sem música):
- Verifique o HTML
tag: É osrc="script.js"correto e colocado no fim do<body>? - Verificar
fxmanifest.lua: Éscript.jslistado noarquivosbloquear? - Verifique o console do navegador: Abra o console F8 no FiveM, vá para NUI Devtools (se disponível) ou abra o
índice.htmldiretamente em um navegador e verifique o console do desenvolvedor (geralmente F12) em busca de erros de JavaScript. Esses erros geralmente identificam a linha exata do problema. - Problemas de áudio: o arquivo de música está em
.oggformato? O caminho está emnovo Áudio(...)correto? Éáudio/sua_música.ogglistado no manifesto? Lembre-se das restrições de reprodução automática do navegador – a música pode começar somente após clicar no botão de reprodução.
- Verifique o HTML
- Barra de progresso não atualiza:
- Você está confiando nos eventos FiveM NUI (
window.addEventListener('mensagem', ...)? Certifique-se de que este código esteja ativo (não comentado). - Os nomes dos eventos são (
status de carga,progresso,fração de carga) correto? Às vezes, isso pode variar um pouco entre as atualizações do FiveM ou compilações específicas do jogo. Adicionarconsole.log(JSON.stringify(evento.dados))dentro do ouvinte da mensagem para ver exatamente quais dados o FiveM está enviando. - O ID do elemento é (
barra de progresso interna) correto tanto em HTML quanto em JS?
- Você está confiando nos eventos FiveM NUI (
- Elementos de carregamento padrão do FiveM ainda visíveis:
- Verificar
cliente.lua: O script está em execução (verifique se háimprimirmensagem em F8)? ÉShutdownLoadingScreenNui()sendo chamado? Se estiver usandoAdicionarEntradaDeTexto, as chaves estão corretas para a construção do seu jogo? Tente aumentar a inicialCidadão.Esperar().
- Verificar
Precisa de uma solução premium? Confira o FiveMX!
Criar uma tela de carregamento do zero é gratificante, mas também pode levar tempo, principalmente se você quiser recursos avançados e um design bem elaborado.
Se você prefere uma solução profissional e pronta para uso, nós temos o que você precisa aqui na FiveMX.
Oferecemos uma seleção criteriosa de telas de carregamento premium e ricas em recursos, projetadas por desenvolvedores experientes.
Benefícios das telas de carregamento pagas do FiveMX:
- Projetos profissionais: Visualmente deslumbrante e estética moderna.
- Recursos avançados: Geralmente inclui vídeos de fundo, tocadores de música, diversas seções configuráveis, prévias de integração do Discord, indicadores de status do servidor e muito mais.
- Configuração fácil: Geralmente vêm com arquivos de configuração simples para personalizar texto, logotipos, links e recursos sem precisar de alterações profundas no código.
- Confiabilidade e suporte: Testado para compatibilidade e geralmente conta com suporte do desenvolvedor caso você encontre problemas.
- Economize tempo e esforço: Obtenha um resultado detalhado instantaneamente, permitindo que você se concentre em outros aspectos do seu servidor.
Explore nossa variedade de interfaces e telas de carregamento para encontrar a opção perfeita para a identidade do seu servidor:
- Categoria de telas de carregamento FiveMX
- Coleção de scripts FiveMX (a seção Interfaces geralmente inclui telas de carregamento)
Considere estas opções populares disponíveis no FiveMX:
- Tela de carregamento moderna V1: Uma opção elegante e limpa para você começar.
- Tela de carregamento avançada V6: Repleto de recursos para máxima personalização.
- Tela de carregamento exclusiva V13: diferencie a configuração com um design distinto.
- Tela de carregamento V16: Outra excelente escolha com recursos modernos.
Investir em uma tela de carregamento premium pode ajustar significativamente a qualidade percebida do seu servidor e a experiência do jogador desde o primeiro clique.
Conclusão
Criando um Tela de carregamento personalizada do FiveM é uma maneira poderosa de melhorar a identidade do servidor e proporcionar uma melhor experiência do usuário.
Percorremos a configuração da estrutura HTML, estilizando-a com CSS, adicionando comportamento dinâmico com JavaScript e integrando-a ao FiveM usando o fxmanifest.lua e um simples cliente.lua script para ocultar elementos padrões.
Lembre-se de que o segredo é o gerenciamento cuidadoso de arquivos (listar tudo no manifesto), entender como os eventos NUI funcionam para atualizações de progresso reais e usar padrões da web (HTML, CSS, JS).
Não tenha medo de experimentar diferentes estilos, mensagens e mídias.
Teste cuidadosamente no seu navegador e no jogo, usando os consoles do desenvolvedor para depurar problemas.
Quer você crie sua própria obra-prima seguindo este guia ou escolha uma opção premium refinada do FiveMX.com, investir na sua tela de carregamento é investir na primeira impressão do seu servidor.
Boa codificação e esperamos que isso ajude você a criar um ponto de entrada incrível para seus jogadores!
Perguntas Frequentes (FAQ)
P1: Posso usar vídeos de fundo em vez de imagens?
R: Sim! Use o HTML marcação (). Estilize com CSS para cobrir a tela (posição: absoluta, largura: 100%, altura: 100%, ajuste de objeto: capa, índice z: -1). Lembre-se de mudo para que a reprodução automática funcione de forma confiável, otimize bastante o tamanho do arquivo de vídeo, use formatos compatíveis como MP4 (H.264) e liste o arquivo de vídeo em seu fxmanifest.lua.
Q2: Como faço para que a barra de progresso mostre o real Progresso do carregamento do FiveM?
R: A maneira mais confiável é usar o JavaScript window.addEventListener('mensagem', ...) para ouvir mensagens NUI enviadas pelo FiveM. Especificamente, procure um evento como progresso que muitas vezes contém um fração de carga propriedade (um valor de 0,0 a 1,0). Multiplique isso por 100 e passe para seu atualizaçãoProgresso Função JavaScript. Evite depender apenas do progresso simulado (como o intervalo de configuração exemplo) para a versão final.
Q3: Onde exatamente coloco os arquivos da tela de carregamento no meu servidor?
A: Crie uma pasta dedicada para seu recurso (por exemplo, minha-tela-de-carregamento) dentro do servidor principal recursos diretório. Todos os arquivos (índice.html, estilo.css, script.js, fxmanifest.lua, cliente.lua, e subpastas como imagens, áudio) deve ir dentro desta pasta de recursos.
P4: Posso ter música de fundo? Como adiciono controles?
R: Sim. Use o HTML marcar ou criar uma Áudio objeto em JavaScript (novo Áudio('audio/music.ogg')). Fundamentalmente, use o .ogg formato de áudio para melhor compatibilidade no FiveM NUI. Adicione botões HTML padrão () e potencialmente uma entrada de intervalo () para volume em seu índice.html. Use ouvintes de eventos JavaScript (addEventListener) nesses elementos para controlar o objeto de áudio .jogar(), .pausa(), e .volume Propriedades. Lembre-se de listar o arquivo de áudio no seu manifesto.
P5: Por que minha tela de carregamento não aparece?
R: Verifique novamente estes culpados comuns:
1. O recurso está assegurado corretamente em servidor.cfg (garantir nome_da_pasta_de_recurso)?
2. É o fxmanifest.lua presente na pasta de recursos?
3. O manifesto possui a tela de carregamento 'seu_arquivo_html.html' linha?
4. São todos arquivos necessários (HTML, CSS, JS, imagens, áudio, fontes) listados com precisão em arquivos { ... } no manifesto? Verifique caminhos e nomes de arquivos (diferencia maiúsculas de minúsculas!).
5. Há algum erro no console do servidor ou no console F8 do cliente relacionado à falha no carregamento do recurso?
6. Você reiniciou o servidor depois de adicionar o recurso e garantir isso?
P6: Como posso fazer com que a tela de carregamento desapareça suavemente quando o jogo começa?
R: Isso requer comunicação entre o seu script Lua e a página NUI. O FiveM não possui um evento perfeitamente confiável de "carregamento totalmente concluído, prestes a gerar" que seja fácil de capturar. antes A NUI está destruída. No entanto, você pode:
1. Envie uma mensagem NUI personalizada (EnviarMensagemNUIM({ type = 'carregandoQuaseConcluído' })) de um script cliente Lua baseado em certos eventos do jogo ou temporizadores pouco antes do spawn.
2. No seu JavaScript, ouça esta mensagem (se (evento.dados.tipo === 'carregamentoQuaseConcluído')).
3. Quando recebido, acione uma animação de fade-out CSS no seu contêiner principal (.loading-container.fade-out { opacidade: 0; transição: opacidade 1s ease-out; } e adicione o desaparecimento gradual classe usando JS). Isso proporciona uma transição visual, embora o NUI ainda possa ser removido abruptamente pelo FiveM posteriormente.
Telas de carregamento pagas
Nenhum resultado encontrado
Você pode tentar limpar quaisquer filtros ou ir para nossa página inicial da loja
Telas de carregamento gratuitas
Pronto! Alguma dúvida? Deixe um comentário.
Mantenha os ativos da tela de carregamento leves
- Comprima as imagens de fundo e os áudios antes de empacotá-los. Evite um vídeo grande de reprodução automática a menos que seja essencial para o design, pois todo jogador conectado deve carregar o ativo.
- Use caminhos relativos ao recurso e combine o nome do arquivo com a letra maiúscula e minúscula exatamente. Verifique se cada arquivo referenciado por HTML, CSS e JavaScript está incluído no manifesto de recursos.
- Defina dimensões de imagem explícitas para evitar alterações de layout e remova fontes, scripts e mídias não utilizados. Não dependa de um ativo remoto que pode atrasar ou quebrar a tela quando seu host estiver indisponível.
- Teste com um cache de cliente limpo e uma conexão com restrição. Verifique o console do cliente em busca de arquivos ausentes, depois reconecte após um reinício de recurso antes de publicar a alteração.