Skip to main content
A página de Gerenciamento do Tablet Policial é onde os oficiais conseguem visualizar os membros do seu departamento, contratar novos oficiais, promover, rebaixar e exonerar. Tudo isso é controlado pelo arquivo hierarchy.lua. Para configurá-lo, abra a pasta do script (heyy_mdt), abra a pasta config e dentro dela, abra o arquivo hierarchy.lua. Logo no topo do arquivo, você deve se deparar com algo parecido com isso:
heyy_mdt/config/hierarchy.lua
Essa tabela é a lista de grupos gerenciáveis pelo tablet. Cada chave é o nome de um grupo da sua base, escrito exatamente como ele está lá, e cada grupo listado aqui vira um departamento selecionável dentro da página de gerenciamento.
Você pode adicionar quantos grupos quiser. É isso que permite que um mesmo tablet gerencie a Police e o Sheriff (por exemplo) de forma separada, cada um com sua própria lista de oficiais e suas próprias patentes.
Um oficial só enxerga um departamento nessa lista se ele fizer parte daquele grupo. Ou seja, quem só possui o grupo Police nunca verá o Sheriff no seletor, mesmo que ambos estejam configurados aqui.

Entendendo as posições

Antes de qualquer coisa, é importante entender como o script enxerga a hierarquia de um grupo. A hierarquia não é definida no tablet — ela é lida diretamente da sua base, através da função Functions.getGroupHierarchy (explicada mais abaixo). Ela retorna a lista de patentes do grupo, onde:
  • A posição 1 é sempre a mais alta (o comandante, por exemplo).
  • A última posição (o tamanho da lista) é sempre a mais baixa (o recruta, por exemplo).
Suponha que o grupo Police da sua base tenha a seguinte hierarquia:Neste caso, um oficial na posição 2 (Capitão) é superior a um oficial na posição 4 (Soldado). Quanto menor o número, maior a patente.
É por isso que uma promoção diminui o número da posição do oficial, e um rebaixamento aumenta.

Permissão de acesso

Diferente da lista de grupos, quem pode abrir a página de gerenciamento e realizar ações é definido no config.lua, dentro do seu departamento, pela permissão manageOfficers:
heyy_mdt/config/config.lua
Quem não possuir essa permissão não verá o botão de gerenciamento na barra de navegação do tablet, e qualquer tentativa de contratar, promover, rebaixar ou exonerar será recusada pelo servidor.
Ter a permissão manageOfficers não libera todas as ações sobre todos os oficiais. O tablet ainda aplica as regras de hierarquia descritas mais abaixo — você nunca conseguirá agir sobre alguém de patente igual ou superior à sua.

Funções

Abaixo da tabela hierarchy, o arquivo contém as funções que conectam o tablet à sua base. Elas já vêm configuradas para bases vRP padrão, mas podem precisar de ajustes dependendo da base que você utiliza.
Assim como no functions.lua, aqui você só precisa alterar as chamadas internas (vRP.DataGroups, vRP.SetPermission, etc.) para as funções equivalentes da sua base. Não altere o nome nem os parâmetros das funções.

getAllUsersInGroup

Deve retornar uma lista com os IDs de todos os jogadores que fazem parte do grupo informado. É essa função que preenche a lista de oficiais na página de gerenciamento.

getGroupHierarchy

Deve retornar a lista de patentes do grupo, em ordem — da mais alta (índice 1) para a mais baixa. É a partir dela que o tablet descobre o nome de cada patente e qual é a menor posição existente.

getUserHierarchy

Deve retornar a posição (número) que aquele jogador ocupa dentro do grupo, ou nil caso ele não faça parte dele.
Se esta função retornar nil para um oficial que está no grupo, ele será ignorado na listagem e um aviso aparecerá no console do servidor. Quase sempre isso indica que getAllUsersInGroup e getUserHierarchy estão lendo fontes de dados diferentes — as duas precisam enxergar exatamente os mesmos membros.

promoteUser e demoteUser

Responsáveis por mover o oficial na hierarquia. Como a posição 1 é a mais alta, promover significa subtrair 1 da posição atual, e rebaixar significa somar 1. Ambas devem retornar true em caso de sucesso. Você também pode retornar false seguido de uma mensagem, que será exibida como notificação para quem realizou a ação:

addUser e removeUser

Responsáveis por contratar e exonerar. Repare que todo novo oficial é contratado na última posição da hierarquia (#hierarchy), ou seja, sempre na patente mais baixa do grupo.

Como o gerenciamento funciona

Com o arquivo configurado, o funcionamento dentro do tablet acontece assim:
1

Seleção do departamento

Ao abrir a página de gerenciamento, o tablet monta a lista de departamentos disponíveis com todos os grupos da tabela hierarchy dos quais o oficial faz parte.
2

Listagem dos oficiais

Selecionado o departamento, o tablet busca todos os membros do grupo e exibe, para cada um: nome, patente, posição e status (offline, online ou em serviço), além da última vez que ele bateu o ponto.
3

Ações disponíveis

Os botões de promover, rebaixar e exonerar são liberados individualmente, de acordo com as regras da tabela abaixo.

Regras das ações

Mesmo tendo a permissão manageOfficers, o tablet ainda aplica regras de hierarquia para cada ação. Considere você como quem está realizando a ação e alvo como o oficial selecionado:
Nenhuma ação pode ser realizada sobre si mesmo, e nenhum oficial consegue agir sobre alguém de patente igual ou superior à sua. Isso é validado no servidor, e não apenas na interface.

Contratação

A contratação funciona de forma um pouco diferente das demais ações, porque envolve o jogador que está sendo contratado:
  1. O oficial informa o ID do jogador que deseja contratar.
  2. O jogador precisa estar na cidade. Caso contrário, a ação é cancelada com a mensagem “O alvo não está na cidade!”.
  3. Uma confirmação é enviada para o jogador, que tem 15 segundos para aceitar.
  4. Aceitando, ele é adicionado ao grupo na patente mais baixa e um webhook de contratação é disparado.
Caso você não queira que oficiais consigam contratar pelo tablet, basta definir disableAddButton = true dentro de config.extras, no arquivo config.lua.

Webhooks

Todas as ações de gerenciamento disparam webhooks, permitindo que você acompanhe pelo Discord quem contratou, promoveu, rebaixou ou exonerou cada oficial. Você pode configurá-los no arquivo webhooks.lua, como explicado na página de Webhooks.

Cache

Para evitar consultas desnecessárias à sua base, o tablet mantém em cache a hierarquia dos oficiais e a lista de membros de cada grupo. Esse cache é limpo automaticamente sempre que uma ação é feita pelo tablet. Porém, se você promover, rebaixar ou exonerar um jogador por fora do tablet (por um comando administrativo ou outro script, por exemplo), o tablet pode continuar exibindo a informação antiga por alguns minutos. Nesses casos, utilize os exports abaixo para limpar o cache manualmente: