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.
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
| Recurso | Obrigatório |
|---|---|
qb-core | Sim |
qb-management | Sim (vem com o QBCore) |
oxmysql | Sim |
qb-inventory ou ox_inventory | Sim (cofre da empresa) |
qb-target ou ox_target | Não — sem target usa a tecla E |
#Instalação
- 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;- Coloca
drs_bossmenuemresources. - Adiciona ao
server.cfg, depois das dependências:
server.cfg
ensure qb-core
ensure qb-management
ensure oxmysql
ensure drs_bossmenu- 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ão | O que desbloqueia |
|---|---|
canEmployees | Ver a equipa, contratar e despedir |
canGrades | Promover, despromover e definir salários |
canDeposit | Depositar no saldo da empresa |
canWithdraw | Levantar 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 emConfig.BossInventory) e acesso ao guarda-roupa. - Registos — contratações, despedimentos, promoções e salários, com webhook opcional.
#Opções principais
| Opção | Por defeito | Descrição |
|---|---|---|
Config.Target | 'auto' | auto, qb-target, ox_target ou tecla E |
Config.Command | desligado | /bossmenu em qualquer sítio (só chefes) |
Config.LoginScreen | true | Ecrã de login animado ao abrir |
Config.TabletAnim | true | Personagem segura um tablet |
Config.TransactionHistoryLimit | 15 | Movimentos mostrados no histórico |
Config.SessionTimeout | 600 | Segundos 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.