DRS Boss Menu

Um tablet completo para as chefias: equipa, recrutamento, finanças, salários pagos pela empresa, cofre e registos, tudo validado no servidor.

v1.8.1 QBCore drs_bossmenu
Ver na loja

Tablet de gestão para as chefias das empresas: equipa, recrutamento, finanças, salários pagos pela empresa, cofre, farda e registos. Todas as ações são validadas no servidor.

#Requisitos

RecursoObrigatório
qb-coreSim
qb-managementSim (vem com o QBCore)
oxmysqlSim
qb-inventory ou ox_inventorySim (cofre da empresa)
qb-target ou ox_targetNão — sem target usa a tecla E

#Instalação

  1. Importa o SQL na base de dados (cria as tabelas de fundos, transações, salários e registos):
drs_bossmenu.sql
-- DRS Boss Menu
CREATE TABLE IF NOT EXISTS `drs_bossmenu_funds` (
  `job` VARCHAR(50) NOT NULL,
  `amount` INT NOT NULL DEFAULT 0,
  PRIMARY KEY (`job`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `drs_bossmenu_transactions` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `job` VARCHAR(50) NOT NULL,
  `type` ENUM('deposit','withdraw') NOT NULL,
  `amount` INT NOT NULL,
  `citizenid` VARCHAR(50) DEFAULT NULL,
  `name` VARCHAR(100) DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `idx_drs_bm_tx_job` (`job`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Salary per grade: overrides QBCore.Shared.Jobs[job].grades[level].payment and is paid from company funds
CREATE TABLE IF NOT EXISTS `drs_bossmenu_salary_overrides` (
  `job` VARCHAR(50) NOT NULL,
  `grade_level` INT NOT NULL,
  `payment` INT NOT NULL,
  PRIMARY KEY (`job`, `grade_level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `drs_bossmenu_activity_log` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `job` VARCHAR(50) NOT NULL,
  `action` ENUM('hire','fire','promote','demote','salary') NOT NULL,
  `actor_name` VARCHAR(100) DEFAULT NULL,
  `target_name` VARCHAR(100) DEFAULT NULL,
  `detail` VARCHAR(255) DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `idx_drs_bm_log_job` (`job`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. Coloca drs_bossmenu em resources.
  2. Adiciona ao server.cfg, depois das dependências:
server.cfg
ensure qb-core
ensure qb-management
ensure oxmysql
ensure drs_bossmenu
  1. Adiciona um ponto por empresa em Config.Locations (ver abaixo).

#Pontos de acesso

Só quem é chefe (isboss) do emprego certo consegue abrir o menu num ponto:

config.lua
Config.Locations = {
    {
        job = 'police',
        coords = vector3(447.16, -974.31, 30.47),
        permissions = { canEmployees = true, canGrades = true, canDeposit = true, canWithdraw = true },
    },
}
PermissãoO que desbloqueia
canEmployeesVer a equipa, contratar e despedir
canGradesPromover, despromover e definir salários
canDepositDepositar no saldo da empresa
canWithdrawLevantar do saldo da empresa

#Funcionalidades

  • Equipa — lista de funcionários online e offline; promover, despromover e despedir. Ninguém mexe em quem tem cargo igual ou superior.
  • Recrutar — jogadores até 10 metros; contratar com um clique.
  • Finanças — saldo, depósitos, levantamentos com valores rápidos (Config.QuickAmounts) e histórico.
  • Salários — define o salário de cada cargo. Os salários passam a sair do saldo da empresa: sem saldo, sem pagamento. Os cargos que não mudares continuam a ser pagos pelo QBCore.
  • Cofre e farda — cofre partilhado boss_<emprego> (tamanho em Config.BossInventory) e acesso ao guarda-roupa.
  • Registos — contratações, despedimentos, promoções e salários, com webhook opcional.

#Opções principais

OpçãoPor defeitoDescrição
Config.Target'auto'auto, qb-target, ox_target ou tecla E
Config.Commanddesligado/bossmenu em qualquer sítio (só chefes)
Config.LoginScreentrueEcrã de login animado ao abrir
Config.TabletAnimtruePersonagem segura um tablet
Config.TransactionHistoryLimit15Movimentos mostrados no histórico
Config.SessionTimeout600Segundos até a sessão expirar
Config.DiscordWebhook''Logs de gestão

#Configuração completa

config.lua
Config = {}

-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'
Config.Currency = '$'

-- Onde os chefes abrem o menu. Adiciona uma entrada por empresa.
-- Where bosses open the menu. Add one entry per business.
-- permissions: o que o chefe pode fazer neste menu / what the boss can do here
Config.Locations = {
    {
        job = 'police',
        coords = vector3(447.16, -974.31, 30.47),
        permissions = { canEmployees = true, canGrades = true, canDeposit = true, canWithdraw = true },
    },
    {
        job = 'ambulance',
        coords = vector3(335.46, -594.52, 43.28),
        permissions = { canEmployees = true, canGrades = true, canDeposit = true, canWithdraw = true },
    },
}

-- 'auto' deteta qb-target/ox_target; sem target usa a tecla E / 'auto' detects qb-target/ox_target, else E key
Config.Target = 'auto'

-- Permitir abrir com /bossmenu em qualquer sítio (só chefes) / Allow /bossmenu anywhere (bosses only)
Config.Command = { enabled = false, name = 'bossmenu' }

-- Valores rápidos de depósito/levantamento / Quick deposit/withdraw amounts
-- Ecrã de login animado ao abrir o tablet (nome e palavra-passe escritos sozinhos, depois carregar em Entrar)
-- Animated login screen when the tablet opens (name and password type themselves, then press Log in)
Config.LoginScreen = true

-- Animação de segurar um tablet enquanto o menu está aberto / Hold-a-tablet animation while the menu is open
Config.TabletAnim = true

Config.QuickAmounts = { 100, 1000, 10000 }

-- Inventário da empresa (um por empresa: 'boss_' .. job) / Company stash (one per job)
Config.BossInventory = { slots = 50, maxweight = 4000000 }

-- Histórico de transações mostrado / Transactions shown in the history
Config.TransactionHistoryLimit = 15

-- Validade da sessão aberta (segundos) / Open session lifetime (seconds)
Config.SessionTimeout = 600

-- Webhook do Discord para logs de gestão (vazio = desligado) / Discord webhook for management logs (empty = off)
Config.DiscordWebhook = ''

#Para programadores

Abrir o menu a partir de outro script (ex.: um criador de empregos), no servidor:

server
exports.drs_bossmenu:OpenForPlayer(source, 'mechanic', {
    canEmployees = true, canGrades = true, canDeposit = true, canWithdraw = true,
})

#Resolução de problemas

O ponto não aparece — confirma que és chefe (isboss = true no cargo do qb-core/shared/jobs.lua) e que estás no emprego definido em job.

Os salários não são pagos — o saldo da empresa está a zero. Deposita dinheiro ou remove o salário personalizado desse cargo.