DRS Loading Screen

v1.9.2 drs_loadingscreen
Ver na loja

Ecrã de carregamento moderno:

  • progresso real com as fases (recursos, mapa, mundo, entrada na cidade);
  • boas-vindas com o nome do jogador e quantos estão online;
  • imagem de fundo incluída, diaporama de imagens, vídeo ou o fundo animado da DRS;
  • leitor de música (pausa com ESPAÇO, faixa seguinte, volume);
  • separadores de Novidades, Regras, Teclas e Equipa e dicas que vão rodando;
  • botões para o Discord, site, loja, TikTok, YouTube, Instagram e Twitch;
  • saída suave, e deixa o multicharacter fechá-lo quando existe.

Não depende de framework.

#Requisitos

Nada obrigatório.

#Instalação

  1. Coloca drs_loadingscreen em resources.
  2. Desliga o outro ecrã de carregamento (só pode haver um).
  3. Põe o logótipo, imagens, vídeo e músicas em html/assets/ e edita html/config.js.
  4. Adiciona ensure drs_loadingscreen ao server.cfg.

Dica

Os ficheiros de html/assets/ são descarregados por cada jogador antes de entrar: usa música em mp3 (128 kbps chega) e vídeos curtos para não atrasar a entrada.

#Aspeto (html/config.js)

Tudo o que aparece no ecrã está neste ficheiro:

OpçãoO que faz
serverName, tagline, logoNome, frase e logótipo (vazio = inicial do nome)
accent, accent2Cores
video / backgroundsVídeo ou lista de imagens; lista vazia = fundo animado
dimQuanto escurece o fundo (0 a 0.9)
musicFaixas, volume, ordem aleatória, tocar sozinho
tipsDicas junto à barra
news, rules, keybinds, teamSeparadores (uma lista vazia esconde o separador)
socialsBotões das redes (discord, website, store, tiktok, youtube, instagram, twitch)
localept ou en

#Quem fecha o ecrã (config.lua)

  • 'detect' (por defeito): se houver um multicharacter ligado, é ele que fecha; senão fecha sozinho quando o jogador entra;
  • 'auto': fecha sempre sozinho;
  • 'external': outro script fecha, e fecha à força ao fim de FailsafeSeconds.

#Configuração

config.lua
-- DRS Loading Screen — configuração do lado do jogo / game-side configuration
-- O aspeto (nome, cores, música, notícias, regras...) está em html/config.js.
-- The look (name, colours, music, news, rules...) lives in html/config.js.

Config = {}

-- Quem fecha o ecrã de carregamento / who closes the loading screen:
--   'detect'   : se houver um multicharacter ligado, é ele que fecha; senão fecha sozinho
--                if a multicharacter resource is running it closes it; otherwise it closes by itself
--   'auto'     : fecha sempre sozinho quando o jogador entra / always closes by itself when the player joins
--   'external' : outro script fecha (com segurança ao fim de FailsafeSeconds) / another script closes it (failsafe after FailsafeSeconds)
Config.Shutdown = 'detect'
Config.Multicharacters = {
    'qb-multicharacter', 'um-multicharacter', 'qbx_core', 'esx_multicharacter', 'ps-multicharacter',
    'bl_multicharacter', '0r-multicharacter', 'ak47_multicharacter', 'okokMulticharacter',
}
Config.DelayMs = 1500          -- espera depois de o jogador entrar (modo auto) / wait after joining (auto mode)
Config.FailsafeSeconds = 90    -- fecha à força se ninguém o fechar / force-close if nobody does

-- Mostrar o nome do jogador e quantos estão online no ecrã / show the player name and online count
Config.Handover = true

#html/config.js

config.js
// DRS Loading Screen — configuração / configuration
// Os ficheiros locais (imagens, vídeo, música) vão para html/assets/ e ficam incluídos pelo fxmanifest (html/assets/*).
// Local files (images, video, music) go in html/assets/ and are included by the fxmanifest (html/assets/*).

window.DRS_LOADING = {
    locale: "pt",                         // "pt" | "en"
    serverName: "O Meu Servidor",
    tagline: "Roleplay a sério, desde 2024.",
    logo: "",                             // ex.: "assets/logo.png" (vazio = inicial do nome / empty = name initial)
    accent: "#7c5cff",
    accent2: "#22d3ee",

    // Fundo: vídeo (mp4/webm) OU imagens em diaporama. Lista vazia = fundo animado da DRS.
    // Background: video (mp4/webm) OR image slideshow. Empty list = DRS animated background.
    video: "",                            // ex.: "assets/fundo.mp4"
    backgrounds: ["assets/bg-default.jpg"], // ex.: ["assets/bg1.jpg", "assets/bg2.jpg"]
    slideSeconds: 8,
    dim: 0.55,                            // escurecer o fundo (0 a 0.9) / darken the background

    music: {
        enabled: true,
        autoplay: true,
        volume: 0.3,
        shuffle: true,
        tracks: [
            // { title: "Nome da música", artist: "Artista", file: "assets/musica1.mp3" },
        ],
    },

    // Dicas que vão rodando junto à barra / tips rotating next to the bar
    tips: [
        "Usa /report para falar com a staff a qualquer momento.",
        "Lê as regras antes de entrar: poupam-te avisos e banimentos.",
        "Guarda os veículos na garagem antes de sair do servidor.",
        "Precisas de ajuda? O nosso Discord tem um canal de suporte 24/7.",
    ],
    tipSeconds: 7,

    // Separadores do painel (apaga uma lista para esconder o separador) / panel tabs (empty a list to hide the tab)
    news: [
        { tag: "Atualização", date: "06/10", title: "Nova temporada de Halloween", text: "Abóboras pela cidade, missões diárias e prémios exclusivos até 5 de novembro." },
        { tag: "Evento", date: "04/10", title: "Corrida de rua no sábado", text: "Inscrições no Discord. Prémio de 50 000 $ para o primeiro lugar." },
        { tag: "Servidor", date: "01/10", title: "Novo stand de veículos", text: "Test drives, financiamento e propostas de vendedores." },
    ],
    rules: [
        "Respeita todos os jogadores e a staff, dentro e fora do personagem.",
        "Sem RDM nem VDM: tem sempre um motivo de roleplay.",
        "Metagaming e powergaming dão banimento.",
        "Não uses bugs nem programas externos.",
        "Fica no personagem; para assuntos fora do jogo usa o /report.",
    ],
    keybinds: [
        { key: "F1", label: "Menu do telemóvel" },
        { key: "TAB", label: "Inventário" },
        { key: "HOME", label: "Lista de jogadores" },
        { key: "L", label: "Trancar o veículo" },
        { key: "Z", label: "Menu rápido" },
        { key: "T", label: "Chat" },
    ],
    team: [
        { name: "Fundador", role: "Fundador", avatar: "" },
        { name: "Administrador", role: "Administração", avatar: "" },
        { name: "Moderador", role: "Moderação", avatar: "" },
    ],

    // type: discord | website | tiktok | youtube | instagram | twitch | store
    socials: [
        { type: "discord", label: "Discord", url: "https://discord.gg/" },
        { type: "website", label: "Site", url: "https://" },
        { type: "store", label: "Loja", url: "https://" },
    ],
};