Pular para o conteúdo principal
Hero Dark

Resolva problemas comuns

Hero Dark

Sobre o sistema

O Whitelist System é um sistema completo de controle de acesso para servidores MTA. Ele bloqueia jogadores que não passaram pelo processo de whitelist, com suporte a aplicação pelo jogo, pelo Discord ou pelos dois combinados.

Visão Geral

Este guia cobre todo o arquivo config/settings.lua. Objetivo:
  • Você entender exatamente o que cada opção muda.
  • Você saber quando usar true ou false.
  • Você configurar a whitelist sem precisar entrar em detalhes técnicos.

Antes de Começar

  • Arquivo de configuração: config/settings.lua
  • Depois de alterar a config: reinicie o resource (restart sqh_whitelist)
  • Regra geral:
    • true = ativa a função
    • false = desativa a função

1) license

Configuração da licença de ativação do sistema.
OpçãoDescrição
license.EmailE-mail da conta na Squash Company utilizado na compra do produto
license.KeyChave de licença do produto
license = {
    ["Email"] = "[email protected]",
    ["Key"] = "SQUASH-xxxx-xxxx",
}

2) config.infobox

Funções de notificação do servidor. Configure aqui o sistema de alert/toast do seu servidor.
CallbackQuando é chamado
serverNotificações enviadas pelo lado server (recebe source, message, type)
clientNotificações enviadas pelo lado client (recebe source, message, type)
type pode ser: 'success', 'error', 'info', 'warning'
config.infobox = {
    ['server'] = function(source, message, type)
        exports["s_infobox"]:addInsInfobox(source, message, type)
    end,
    ['client'] = function(source, message, type)
        exports["s_infobox"]:addIncInfobox(message, type)
    end,
}

3) config.events

onJoinCity

Callbacks executados quando o player é liberado na whitelist (na entrada ou após aprovação).
config.events.onJoinCity = {
    ['server'] = function(player)
        -- ex.: liberar acesso ao servidor, remover freeze, abrir seletor de personagem
        triggerClientEvent(player, 'abrirPersonagens', player)
    end,
    ['client'] = function(player)
        -- ex.: esconder HUD de whitelist, mostrar tela de boas-vindas
    end
}

Verificação automática

Opçãotruefalse
verifyOnJoinVerificar whitelist quando o player entra no servidor (onPlayerJoin)Não verificar na entrada
verifyOnLoginVerificar whitelist quando o player faz login na conta (onPlayerLogin)Não verificar no login
Recomendação: Use verifyOnLogin = true e verifyOnJoin = false em servidores com sistema de login/conta próprio.

4) config.social

Links das redes sociais exibidos na tela de whitelist.
OpçãoDescrição
discordLink de convite do Discord do servidor
youtubeLink do canal do YouTube do servidor
config.social = {
    discord = "https://discord.gg/seuservidor",
    youtube = "https://youtube.com/seucanal",
}

5) config.rules

Link para o documento de regras do servidor, exibido na tela de whitelist.
config.rules = "https://docs.google.com/document/d/..."

6) config.getPlayerID

Função que retorna o ID do jogador no seu sistema. Usada para registrar o playerID na tabela de whitelist.
config.getPlayerID = function(player)
    return getElementData(player, "ID") or math.random(1, 100000)
end
Personalize para retornar o ID correto do seu sistema de contas/personagens.

7) config.whitelistInfos

7.1 Modo de aplicação

OpçãoValorComportamento
whitelistOption1O jogador faz a whitelist somente pelo jogo
whitelistOption2O jogador faz a whitelist pelo Discord + jogo (ambos obrigatórios)
whitelistOption3O jogador faz a whitelist somente pelo Discord

7.2 discordInfos — Configurações do Bot Discord

Configurações usadas quando whitelistOption é 2 ou 3.
OpçãoDescrição
timeStartDiscordTempo em minutos que o usuário tem para começar a responder a whitelist após o canal ser criado
categoryWhitelistsID da categoria no Discord onde os canais de whitelist serão criados
mentionInFormsViewLista de IDs de cargos que serão marcados na criação de um novo formulário
discordChannelIDID do canal onde o bot envia a mensagem de início da whitelist
discordChannelResponsesID do canal fórum onde os formulários respondidos são postados
setRolesApprovedLista de IDs de cargos dados ao jogador quando aprovado
setRolesReprovedLista de IDs de cargos dados ao jogador quando reprovado
removeRolesApprovedLista de IDs de cargos removidos do jogador quando aprovado
removeRolesReprovedLista de IDs de cargos removidos do jogador quando reprovado
discordInfos = {
    timeStartDiscord = 5,
    categoryWhitelists = '000000000000000000',
    mentionInFormsView = {'000000000000000000'},
    discordChannelID = '000000000000000000',
    discordChannelResponses = '000000000000000000',
    setRolesApproved = {'000000000000000000'},
    setRolesReproved = {'000000000000000000'},
    removeRolesApproved = {'000000000000000000'},
    removeRolesReproved = {'000000000000000000'},
}

7.3 Comportamento das perguntas

Opçãotruefalse
shuffleQuestionsAs perguntas aparecem em ordem aleatóriaAs perguntas aparecem na ordem definida
backQuestionO jogador pode voltar à pergunta anteriorO jogador não pode voltar (no Discord nunca é permitido)
timeToAnswerQuestionCada pergunta tem um tempo limite para respostaSem limite de tempo por pergunta
shuffleOptionsAs alternativas das perguntas options são embaralhadasAs alternativas aparecem na ordem definida
automaticCorrectionO sistema corrige automaticamente as respostas (questões options apenas)A correção é feita manualmente pelo staff via Discord

7.4 Chances e cooldown

OpçãoTipoDescrição
chancesToAnswernumberQuantidade de chances que o jogador tem para responder antes de entrar em cooldown
cooldownTimenumberTempo de cooldown em horas após acabar as chances
maximumWrongAnswersnumberQuantidade máxima de respostas erradas permitidas (somente com automaticCorrection = true)
Exemplo: chancesToAnswer = 3, cooldownTime = 24 — o jogador tem 3 tentativas e, ao esgotar, aguarda 24 horas para tentar novamente.

7.5 translates — Textos e mensagens do bot Discord

Textos exibidos pelo bot do Discord durante o processo de whitelist.
OpçãoDescrição
descriptionMainMessageMensagem principal enviada no canal de início da whitelist (suporta Markdown do Discord)
textButtonTexto do botão de início
emojiButtonEmoji exibido no botão
imageMainURL da imagem exibida na mensagem principal
imageFooterURL da imagem do rodapé
textFooterTexto do rodapé da mensagem
startTitleTítulo da tela de início no canal do jogador
startDescriptionDescrição da tela de início
startButtonTexto do botão para iniciar
buttonApproveTexto do botão de aprovar (visível para o staff)
buttonReproveTexto do botão de reprovar (visível para o staff)
question_option_messageFormato da mensagem de perguntas do tipo options. Use $title, $endTime, $options
question_text_messageFormato da mensagem de perguntas do tipo text. Use $title, $endTime

7.6 messages — Mensagens operacionais

Mensagens enviadas em situações específicas do fluxo de whitelist.
ChaveQuando é exibida
confirmInfosAo solicitar confirmação de dados
digitCodeAo pedir o código do jogo
digitNameSurnameAo pedir nome e sobrenome
max6DigitsQuando o código digitado tem mais ou menos de 6 dígitos
sended_solicitationAo enviar a solicitação com sucesso
code_incorrectQuando o código está errado
register_successApós cadastrar a conta com sucesso
name_unavailableQuando o nome escolhido já está em uso
code_failedQuando ocorre falha na confirmação do código
continue_in_gameQuando o jogador deve continuar a whitelist no jogo
continue_in_discordQuando o canal do Discord foi criado. Use $channel e $time
start_minutesContagem regressiva antes de iniciar as perguntas
close_time_messageQuando o tempo para iniciar a whitelist expirou. Use $user
form_sendedQuando o formulário foi enviado para avaliação. Use $user
time_finish_answerQuando o tempo de resposta de uma pergunta esgota
whitelist_existsQuando o jogador já tem uma whitelist em andamento. Use $channel
whitelist_approved_dmMensagem enviada por DM quando o jogador é aprovado
whitelist_reproved_dmMensagem enviada por DM quando o jogador é reprovado

7.7 questions — Perguntas da whitelist

Lista de perguntas exibidas durante o processo. Cada pergunta é uma tabela com os seguintes campos:
CampoTipoDescrição
titlestringTexto da pergunta
typestring'text' (resposta livre) ou 'options' (múltipla escolha)
timeResponsenumberTempo em segundos para responder
optionstableLista de alternativas (somente para type = 'options')
Cada alternativa em options:
CampoTipoDescrição
nameOptionstringTexto da alternativa
isCorrectbooleantrue para a resposta correta, false para incorreta
Atenção: Questões do tipo 'text' não são corrigidas automaticamente, mesmo com automaticCorrection = true. Elas são sempre avaliadas pelo staff.
Exemplo de pergunta options:
{
    title = 'O que é PowerGaming?',
    type = 'options',
    timeResponse = 180,
    options = {
        {nameOption = 'Jogar com muito poder.', isCorrect = false},
        {nameOption = 'Forçar ações irreais em outros jogadores.', isCorrect = true},
        {nameOption = 'Usar cheats no servidor.', isCorrect = false},
    }
}
Exemplo de pergunta text:
{
    title = 'Descreva brevemente a história do seu personagem.',
    type = 'text',
    timeResponse = 120,
}

8) config.musicPlayer

Lista de músicas tocadas na tela de whitelist. Cada item é uma tabela com os campos:
CampoDescrição
nameNome da música
authorNome do artista
urlURL de stream da música
config.musicPlayer = {
    {name = "Mistérios", author = "Kayblack", url = "https://server1.mtabrasil.com.br/play?id=..."},
}

9) config.faq

Lista de perguntas frequentes exibidas na tela de whitelist antes de o jogador iniciar. Cada item é uma tabela com:
CampoDescrição
topicTítulo/pergunta do FAQ
answerResposta exibida ao clicar
config.faq = {
    {
        topic = 'O que é Roleplay (RP)?',
        answer = 'Roleplay é...'
    },
}

10) config.nameMainConfigs

Configuração auxiliar para obter o nome da conta interna do sistema (usado para configuração técnica de HTTP com serial).
OpçãoTipoDescrição
commandActivebooleanAtiva o comando /vernomedaconta no jogo. Deixe true apenas durante a configuração inicial do serial
havePermissionfunction(player)Retorna true se o player tem permissão para usar o comando
Importante: Após usar o comando para configurar o serial, desative esta opção com commandActive = false.
config.nameMainConfigs = {
    commandActive = false,
    havePermission = function(player)
        return isObjectInACLGroup('user.'..getAccountName(getPlayerAccount(player)), aclGetGroup('Admin'))
    end
}

11) interface

Configurações visuais da interface de whitelist.

11.1 Cores

OpçãoDescrição
whiteCor branca base
blackCor preta base
primaryCor principal do servidor (botões, destaques, etc.)
primary_contrastCor de texto sobre a cor primária
primary_2Variação mais clara da cor primária
primary_elementCor de fundo de elementos com baixa opacidade
primary_element_borderCor de borda de elementos com opacidade média
hover_element_borderCor de borda ao passar o mouse
primary_textCor principal de texto
secondary_textCor de texto secundário (40% de opacidade)
tertiary_textCor de texto terciário (30% de opacidade)
question_titleCor do título das perguntas (60% de opacidade)
inactive_textCor de texto inativo (10% de opacidade)
red_wrongCor vermelha para respostas erradas
red_wrong_contrastCor do texto sobre o fundo vermelho
warningCor amarela para avisos
warning_contrastCor do texto sobre o fundo amarelo
modal_bgCor de fundo do modal/painel
Formato das cores: '#RRGGBB XX%' onde XX% é a opacidade.
interface.colors = {
    primary = '#198028 100%',        -- cor principal do servidor
    primary_contrast = '#FFFFFF 100%',
    modal_bg = '#0E0E0E 98%',
}

11.2 Border Radius

OpçãoTipoDescrição
border-radiusnumber (px)Arredondamento dos botões, caixas de texto e elementos da interface
interface['border-radius'] = 30

12) translate

Define o idioma padrão e os textos da interface.

12.1 Idioma padrão

OpçãoValorDescrição
translate.language'PT-BR'Português do Brasil
translate.language'EN'Inglês
translate.language'PT-PT'Português de Portugal
translate.language'ES'Espanhol
translate.language'TR'Turco
translate.language'RU'Russo
translate.language'HU'Húngaro
translate = {
    language = 'PT-BR',
}

12.2 Campos por idioma

Cada bloco de idioma contém:
CampoDescrição
monthsNomes dos meses por extenso
date_formatFormato de data completo (usa string.format do Lua)
hours_formatFormato de horas e minutos (usado no cooldown)
date_format_shortFormato curto de data
question_definitionsLetras usadas para identificar alternativas ({"A", "B", "C", "D", "E", "F"})

Dicas Finais

  • Após qualquer alteração no config/settings.lua, reinicie o resource com restart sqh_whitelist.
  • Ao configurar pela primeira vez, ative nameMainConfigs.commandActive = true, use o comando /vernomedaconta para obter o nome da conta, configure o serial no painel da Squash e depois volte commandActive = false.
  • Para servidores com login próprio, use verifyOnLogin = true e verifyOnJoin = false para evitar verificação prematura antes do login.
  • Configure o config.events.onJoinCity.server para liberar o acesso do player ao servidor após a whitelist ser aprovada — sem isso o jogador será aprovado mas não terá o acesso liberado pelo seu sistema.