Pular para o conteúdo principal

Resolva problemas comuns

Hero Dark

Sobre o sistema

O Groups System é um sistema completo de gestão de grupos/organizações para servidores MTA:SA. Com ele, jogadores podem criar grupos, convidar membros, gerenciar cargos, finanças, calendário de eventos, chat interno, registros de ponto e muito mais — tudo através de uma interface visual intuitiva.

Visão Geral

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

Antes de Começar

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

config/main.lua — Banco de Dados

O arquivo config/main.lua é onde você define a conexão com o banco de dados.

serverConfig.connect

OpçãoO que muda
databaseTipo de banco de dados: 'sqlite' ou 'mysql'
sqlite_archiveCaminho do arquivo SQLite (usado apenas quando database = 'sqlite')
Configuração com SQLite (padrão)
serverConfig = {
    connect = {
        database = 'sqlite',
        sqlite_archive = 'assets/database/Database.db'
    }
}
Configuração com MySQL
serverConfig = {
    connect = {
        database = 'mysql',
        mysqlparameters = {
            hostname = "127.0.0.1",  -- IP do servidor MySQL
            username = "root",       -- Usuário com permissões admin
            password = "suasenha",   -- Senha do usuário
            database = "resources"   -- Nome da database
        }
    }
}

config/settings.lua


1) license

Sua licença de uso do produto.
license = {
    ["Email"] = "[email protected]",
    ["Key"]   = "SQUASH-xxxx-xxxx",
}
CampoDescrição
EmailE-mail cadastrado na compra
KeyChave de licença fornecida

2) integrations

Integrações opcionais com outros sistemas.
Opçãotruefalse
sqh_accountsAtiva integração com o sistema sqh_accountsDesativa (padrão)

3) config.panel

Controla como os painéis do sistema são abertos.
OpçãoO que muda
openTypeComo o painel principal abre: 'bind' (tecla) ou 'command' (comando)
keyOpenTecla ou nome do comando para abrir o painel principal
openTypeStaffComo o painel staff abre: 'bind' ou 'command'
keyOpenStaffTecla ou nome do comando para abrir o painel staff
permissionToOpenStaffPaneltrue exige permissão para abrir o painel staff
permissionTypeComo verificar a permissão: 'ACL', 'elementData' ou 'Function'
typeValueElementData key (usado somente com permissionType = 'elementData')
DataValueValor/ACL a ser verificado
typeFunctionFunção customizada de verificação (usado somente com permissionType = 'Function')
Exemplo: painel principal com tecla, painel staff requer ACL
["panel"] = {
    openType = 'bind',
    keyOpen = "F4",
    openTypeStaff = 'bind',
    keyOpenStaff = "F6",
    ['permissionToOpenStaffPanel'] = true,
    ['permissionType'] = 'ACL',
    ['DataValue'] = 'Console', -- grupo ACL que pode acessar o painel staff
}

4) config.notify

Define as funções de notificação do sistema. Você precisa apontar o exports de infobox/notify do seu servidor.
FunçãoSideDescrição
serverServerChamada pelo server para notificar um jogador
clientClientChamada pelo client para exibir uma notificação local
["notify"] = {
    ['server'] = function(source, type, message)
        exports["s_infobox"]:addInsInfobox(source, message, type)
    end,
    ['client'] = function(type, message, source)
        exports["s_infobox"]:addIncInfobox(message, type)
    end,
},
Substitua os exports pelo sistema de notificação do seu servidor.

5) config.avatars

Integração com sistema de avatares. Se você não utiliza o sqh_avatars, pode ignorar ou deixar como está.
OpçãoDescrição
resourceNome do resource de avatares
getAvatarFunção que retorna o caminho da imagem de um avatar pelo ID
loadAvatarsFunção que retorna todos os avatares disponíveis

6) config.configurations

Seção principal de configurações do sistema de grupos.

6.1) protectedGroups

Lista de nomes de grupos que não podem ser criados pelos jogadores via painel.
['protectedGroups'] = {
    'STAFF',
    'Console',
},
Use isso para proteger nomes de grupos reservados para uso interno do servidor.

6.2) aclConfigurations

Configurações do sistema de ACL automático.
Opçãotruefalse
systemAclActiveCria uma ACL automaticamente quando um grupo é criadoDesativa a criação automática de ACLs
receiveACLDefault Permite que um grupo específico receba automaticamente uma ACL específica quando um membro entra.
['receiveACLDefault'] = {
    [1] = 'Policia', -- Grupo com ID 1 receberá a ACL 'Policia' ao entrar
}

6.3) defaultConfigurations

⚠️ ATENÇÃO — LEIA COM ATENÇÃO: As configurações dentro de defaultConfigurations são aplicadas somente na primeira inicialização do sistema (quando a database ainda não existe ou foi apagada). Após a criação da database, estas opções não têm mais efeito — as configurações passam a ser gerenciadas diretamente pelo painel admin (tecla F6). Se você quiser alterar qualquer uma dessas opções depois que o sistema já foi iniciado, faça isso pelo painel staff, não por aqui.
OpçãoTipoDescrição
createGroupsMembersbooleantrue permite que membros comuns criem grupos
createPublicGroupsbooleantrue permite a criação de grupos públicos
maxMembersLimitnumberLimite máximo de membros que o líder pode definir no grupo
maxDefaultMembersnumberQuantidade padrão de membros ao criar um grupo
maxValueSalarynumberMaior salário possível para um cargo
taxPercentagenumberPorcentagem de imposto cobrado sobre a folha salarial
limitGroupsCreatenumberQuantidade máxima de grupos que uma pessoa pode criar
maxGroupsJoinnumberQuantidade máxima de grupos que uma pessoa pode participar

6.4) memberPermissionToCreateGroup

Define como verificar se um membro tem permissão para criar grupos (utilizado somente quando createGroupsMembers = false).
OpçãoDescrição
typeVerificationMétodo de verificação: 'elementData', 'ACL' ou 'Function'
typeValueChave da ElementData (usado somente com typeVerification = 'elementData')
DataValueValor a comparar / grupo ACL a verificar
typeFunctionFunção customizada de verificação (usado somente com typeVerification = 'Function')
Exemplo com Function:
['memberPermissionToCreateGroup'] = {
    ['typeVerification'] = 'Function',
    ['typeFunction'] = function(playerElement)
        local hasPermission = exports['sqh_permissions']:hasPermission(playerElement, 'createGroup')
        return hasPermission
    end,
},
paymentToCreate — cobrança para criar o grupo Dentro de memberPermissionToCreateGroup, você pode configurar uma cobrança obrigatória para que o jogador pague um valor ao criar um grupo. Quando ativo, ao clicar em “Criar grupo”, um modal de confirmação é exibido com o custo. O grupo só é criado após o jogador confirmar e o valor ser descontado pelo servidor.
OpçãoTipoDescrição
payToCreatebooleantrue ativa a cobrança ao criar um grupo
moneyNamestringNome da moeda/recurso exibido no modal de confirmação
paymentValuenumberValor cobrado para criar o grupo
verifyMoneyfunction(player)Função que retorna o saldo atual do jogador
takeMoneyfunction(player, value)Função que desconta o valor do jogador
['memberPermissionToCreateGroup'] = {
    ['typeVerification'] = 'elementData',
    ['paymentToCreate'] = {
        ['payToCreate'] = true,
        ['moneyName'] = 'coins',
        ['paymentValue'] = 4000,
        ['verifyMoney'] = function(player)
            return getPlayerMoney(player)
        end,
        ['takeMoney'] = function(player, value)
            return takePlayerMoney(player, value)
        end
    }
},
Se payToCreate = false, nenhuma cobrança é feita e o modal não aparece.

6.5) defaultRoles

Define os cargos que serão criados automaticamente em cada novo grupo. Cada cargo aceita:
CampoDescrição
roleNameNome do cargo
hierarchyHierarquia: 1 = mais alto (líder), números maiores = cargos inferiores
defaultPermissionsValuesTabela de permissões padrão do cargo ao ser criado
['defaultRoles'] = {
    {roleName = 'Líder', hierarchy = 1, defaultPermissionsValues = {
        administrator = true, -- Com administrator = true, o cargo tem acesso total
        -- Todas as outras permissões podem ser false pois administrator sobrescreve
    }},
    {roleName = 'Membro', hierarchy = 2, defaultPermissionsValues = {
        accessChat = true,
        punchCard = true,
        administrator = false,
    }},
},
A lista completa de permissões disponíveis está na seção Permissões disponíveis do guia de exports.

6.6) defaultPermissionsValues

Permissões padrão que um novo cargo criado dentro do painel receberá no momento da criação.
['defaultPermissionsValues'] = {
    accessCalendar = false, accessChat = false, administrator = false,
    -- ... todas as permissões começam como false por padrão
},

6.7) Limites de caracteres e eventos

OpçãoDescrição
maxCharactersNameProfileMáximo de caracteres para o nome de perfil do jogador
maxCharactersGroupNameMáximo de caracteres para o nome de um grupo
maxShowEventsQuantidade máxima de próximos eventos exibidos na dashboard

6.8) widthdrawConfigurations

Define para onde vai o valor quando um jogador retira seu salário ou deposita no cofre.
OpçãoDescrição
withdrawType'Account' (dinheiro MTA) ou 'ElementData' (dado de elemento)
elementDataMoneyChave da ElementData onde será somado o valor (usado somente com 'ElementData')
['widthdrawConfigurations'] = {
    ['withdrawType'] = 'Account', -- Usa givePlayerMoney diretamente
    ["elementDataMoney"] = '',
},

7) config.accounts

Define como o sistema identifica e armazena a conta de cada jogador.

Como pegar o nome do membro

OpçãoValorDescrição
getNameMember'Account'Usa o nome da conta MTA
getNameMember'ElementData'Usa uma ElementData
getNameMember'Function'Usa uma função customizada
getNameElementDatastringChave da ElementData do nome (usado com 'ElementData')
getNameFunctionfunctionFunção que retorna o nome (usado com 'Function')

Como salvar a conta do jogador

OpçãoValorDescrição
accountype'Account'Usa a conta padrão do MTA
accountype'ElementData'Usa um ID por ElementData
accountype'Function'Usa uma função customizada
idelementdatastringChave da ElementData de ID (usado com 'ElementData')
externalfunctionfunctionFunção que retorna o identificador (usado com 'Function')

8) config.colors

Personalização completa das cores da interface.

colors.default

Paleta de cores base da interface.
OpçãoDescrição
defaultCor de destaque principal
background_1Camada de fundo 1 (mais escura)
background_2Camada de fundo 2
background_3Camada de fundo 3
background_create_subpanelsFundo dos subpainéis de criação
default_element_1/2/3Cor de elementos por camada
default_element_subpanelsCor de elementos nos subpainéis
alternative_element_2/3Cores alternativas de elementos
stroke_highBorda em destaque
stroke_alternative_element_3Borda do elemento alternativo camada 3
stroke_default_element_3Borda do elemento padrão camada 3
text_default_titleCor dos títulos
text_default_subtitleCor dos subtítulos
text_default_descriptionCor das descrições
line_1/2/3Cor das linhas separadoras por camada
Todos os valores são strings hexadecimais sem o # (ex: "5865F2").

colors.extra

Cores de status e elementos especiais.
OpçãoDescrição
status_greenCor de status positivo/online
status_yellowCor de status de aviso
status_redCor de status negativo
verified_blueCor do ícone de grupo verificado
delete_buttonCor do botão de deletar
light_buttonCor de botão claro
event_offCor de evento desativado
black_card_exploreCor do card preto na exploração
orangeCor laranja
rank_1/2/3Cores de ranking 1º/2º/3º
highlightCor de destaque especial

colors.exploreCards

Array de cores usadas nos cards da aba “Explorar”. Você pode adicionar ou remover cores conforme preferência.
exploreCards = {"05ADCA", "73B243", "000000", "EA3C3C", ...}

9) translate

Sistema de tradução do interface.
OpçãoDescrição
languageCódigo do idioma ativo (ex: "PT", "EN")
currencySímbolo da moeda exibida (ex: "R$", "$")

Como adicionar um novo idioma

  1. Crie uma nova chave dentro de translate.texts com o código do seu idioma.
  2. Altere translate.language para o código do novo idioma.
translate = {
    ["language"] = "EN",
    ["texts"] = {
        ["EN"] = {
            ["global"] = {
                ["close"] = "Close",
                ["back"] = "Back",
                -- ...
            },
            -- ...
        }
    }
}
O sistema já vem com "PT" (Português) e "EN" (English) disponíveis.

Boas Práticas

  • Altere uma seção por vez e teste no jogo.
  • Em opções booleanas, lembre:
    • true ativa
    • false desativa
  • Depois de salvar: restart sqh_groups
  • defaultConfigurations só tem efeito na primeira inicialização (ou quando a database é apagada). Após isso, use o painel admin (F6) para alterar as configurações do sistema.