Installation
Resource-specific setup for nx_employeemanagement. Dependencies, SQL import, tablet item, and server.cfg order.
For server-wide prerequisites (artifacts, oxmysql, ox_lib), work
through the generic install guide
first. This page only lists what is specific to nx_employeemanagement.
Dependencies
Framework is set explicitly through Config.Framework.
Pick ESX, QB, or QBX to match
your core.
Renders the tablet prop, DUI screen, and animation pipeline. Must start before nx_employeemanagement.
Default inventory backend for the tablet item. Use qb-inventory by setting Config.Inventory = "QB".
Only needed if you want to run the panel as an app inside LB Tablet rather than as its own tablet. Set Config.LBTablet.Enabled = true.
Database import
Import the SQL file that matches your framework:
# ESX Legacy
mysql -u <user> -p <database> < sql_esx.sql
# QBCore
mysql -u <user> -p <database> < sql_qb.sql
# QBox
mysql -u <user> -p <database> < sql_qbx.sqlThe import adds three tracking columns to your users / players
table (workingtime, trackedjob, last_work_timestamp) and creates
these tables:
employee_work_history. Daily minutes-worked records per identifier and job.employee_job_changes. Hire, fire, and grade-change audit log.employee_payroll_rules. Per-job, per-grade payment configuration.employee_invoices. Invoice records with status, amounts, and approval metadata.payroll_transactions. Salary, commission, bonus, invoice, and deduction ledger.employee_society_transactions. Deposit and withdraw audit log for the society account.
Tablet item
The tablet is an inventory item. The item key is jobtablet by
default. Change it through Config.Tablet.access.item.
ox_inventory
Set Config.Inventory = "OX" and add this to
ox_inventory/data/items.lua:
['jobtablet'] = {
label = 'Company Tablet',
weight = 50,
stack = false,
close = true,
client = {
export = 'nx_employeemanagement.useJobTablet'
}
}qb-inventory
Set Config.Inventory = "QB". The resource registers the usable item
through QBCore.Functions.CreateUseableItem on start, and attempts to
register it with QBCore.Shared.Items via
exports['qb-core']:AddItem if missing. To define it manually in
qb-core/shared/items.lua:
['jobtablet'] = {
name = 'jobtablet',
label = 'Company Tablet',
weight = 50,
type = 'item',
image = 'jobtablet.png',
unique = true,
useable = true,
shouldClose = true,
combinable = nil,
description = 'Access company management tools'
}server.cfg order
ensure oxmysql
ensure ox_lib
ensure ox_inventory # or qb-inventory
ensure nx-3d
ensure nx_employeemanagementnx-3d must start before nx_employeemanagement. The tablet prop,
screen, and animation pipeline depend on it.
If you run the LB Tablet app mode, ensure lb-tablet before
nx_employeemanagement as well, so the app is registered against a
host that is already running.
LB Tablet app mode
Optional. Runs the whole panel as an app inside your server's existing
LB Tablet instead of giving every
boss a second tablet. In shared/config.lua:
Config.LBTablet = {
Enabled = true,
Resource = "lb-tablet", -- your LB Tablet resource folder name
App = {
identifier = "nx_employeemanagement",
name = "Employees",
icon = "inventory-images/jobtablet.png",
defaultApp = true -- pre-installed on every tablet
},
HideWhenNoAccess = true -- hide the icon while the player has nothing to manage
}Two things to know before you switch:
- Enabling this turns off every other entry point. The handheld
prop, the tablet item, the
Config.UIKeykeybind, thetabletcamcommand, andConfig.Zonesall stand down. LB Tablet exposes no export for opening a specific app from Lua, so there is nothing for those triggers to route to. The app is the only way in. - Remove the
jobtabletitem from your inventory config. The item is inert in this mode rather than broken, but leaving it in place gives players something that does nothing when used.
nx-3d is still a hard dependency and must still start first, even
though the prop is not used in this mode. The resource will not start
without it.
Custom job providers
Optional. Brings standalone job scripts (SouF UwU Cafe, BurgerShot, any
self-contained job resource) into the tablet alongside your framework
jobs. These jobs do not need to exist in jobs.lua or job_grades.
Set Config.CustomJobs.Enabled = true and add one entry per business
under Config.CustomJobs.Jobs. Each entry declares the grade table, how
an online member and grade are detected (through the external script's
public exports or a statebag), where the roster comes from, and whether
hiring, payroll, and society are enabled for that job.
Hiring, firing, and promotion are read-only by default: keep staffing in the external script's own boss menu, or opt in per job with a write adapter. Payroll and Society are off by default so you do not double-handle the external economy.
The shipped INSTALLATION.md, section "Custom Job Providers", carries
the full field guide and the limits (live grade is read only while the
player is online, the roster comes from this resource's own hour
tracking unless you point it at a table, and writes are opt-in). See
Configuration for every field.
Optional core_multijob integration
Let employees hold multiple jobs without conflict. In
shared/config.lua:
Config.Integrations.MultiJob = "core_multijob"
Config.Integrations.MultiJobTable = "user_jobs"
Config.Integrations.MultiJobFallbackJob = "unemployed"The integration reads and writes the existing core_multijob
user_jobs table only. It does not create new tables and does not
modify schema.
Config location
All settings live in shared/config.lua. The file is in
escrow_ignore so it remains editable after install. UI translations
live in locales/<lang>.lua, one file per language, also unescrowed.
To add a language, copy locales/en.lua, rename the table key, and
translate the strings. See Configuration for every
option.