Install
Need these 3 first. Download them, put them in resources, start them.
| Resource | Download | | --- | --- | | ox_lib | https://github.com/CommunityOx/ox_lib | | community_bridge | https://github.com/TheOrderFivem/community_bridge/releases | | MugShotBase64 | https://github.com/BaziForYou/MugShotBase64 |
Setup
- Put
J0-AdminMenuin your resources folder. - Open
shared/config.lua(see below). - Put your license in
Config.SuperAdmins. - In
server.cfg:
ensure ox_lib
ensure community_bridge
ensure MugShotBase64
ensure J0-AdminMenu
- Restart server.
- Join. Press F6. Menu opens.
If it says you are not admin: license in config is wrong. Copy it again from txAdmin → Players → identifiers (license: and license2:).
Config (shared/config.lua)
Change only these lines.
Line 4 — duty
false = menu works without going on duty. Set true if staff must go on duty first.
Config.RequireDuty = false
Lines 8–12 — who is owner
Replace with YOUR license. Keep both lines if your server has both.
Config.SuperAdmins = {
'license:YOUR_LICENSE_HASH_HERE',
'license2:YOUR_LICENSE_HASH_HERE',
}
Lines 14–19 — keybinds
Change the key name. FiveM names: F6, F2, HOME, LMENU (Left Alt), LSHIFT, etc.
| Line | Setting | Default | What it does |
| --- | --- | --- | --- |
| 15 | Panel | F6 | Open admin menu |
| 16 | Fly | HOME | Fly |
| 17 | QuickBar | F2 | Quick menu |
| 18 | QuickBarMod | LMENU | Hold this + F2 for quick menu (mod) |
Example: menu on F10, quick menu on F3:
Config.Keys = {
Panel = "F10",
Fly = "HOME",
QuickBar = "F3",
QuickBarMod = "LMENU",
}
Line 21 — turn keybinds off
Config.Keybindings = true
Set false if you do not want keyboard binds (commands still work).
After you change keys: restart J0-AdminMenu, then press the new key in-game (FiveM saves the bind on first use).
SQL (optional)
Tables are created automatically when the resource starts. You do not need this for a normal install.
Only run this if you want to create tables by hand first (HeidiSQL / phpMyAdmin). Same as install.sql.
CREATE TABLE IF NOT EXISTS `admin_staff_groups` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`label` VARCHAR(100) NOT NULL,
`permission` VARCHAR(20) NOT NULL DEFAULT 'mod',
`hierarchy` INT NOT NULL DEFAULT 99,
`permissions` LONGTEXT DEFAULT NULL,
`created_at` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_staff_members` (
`id` INT NOT NULL AUTO_INCREMENT,
`license` VARCHAR(80) NOT NULL,
`nickname` VARCHAR(100) NOT NULL,
`group_name` VARCHAR(50) NOT NULL,
`citizenid` VARCHAR(50) DEFAULT NULL,
`created_at` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `license` (`license`),
KEY `group_name` (`group_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_reports` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`reporter_name` VARCHAR(100) NOT NULL,
`reporter_cid` VARCHAR(50) DEFAULT NULL,
`reporter_server_id` INT(11) DEFAULT NULL,
`title` VARCHAR(255) NOT NULL,
`status` VARCHAR(20) NOT NULL DEFAULT 'open',
`claimed_by` VARCHAR(100) DEFAULT NULL,
`claimed_cid` VARCHAR(50) DEFAULT NULL,
`created_at` BIGINT NOT NULL,
`closed_at` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_report_messages` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`report_id` INT(11) NOT NULL,
`author_name` VARCHAR(100) NOT NULL,
`author_cid` VARCHAR(50) DEFAULT NULL,
`is_staff` TINYINT(1) NOT NULL DEFAULT 0,
`message` TEXT NOT NULL,
`created_at` BIGINT NOT NULL,
PRIMARY KEY (`id`),
KEY `report_id` (`report_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_report_staff_notes` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`report_id` INT(11) NOT NULL,
`author_name` VARCHAR(100) NOT NULL,
`author_cid` VARCHAR(50) DEFAULT NULL,
`message` TEXT NOT NULL,
`created_at` BIGINT NOT NULL,
PRIMARY KEY (`id`),
KEY `report_id` (`report_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_player_notes` (
`citizenid` VARCHAR(50) NOT NULL,
`note_text` TEXT NOT NULL,
`updated_by` VARCHAR(100) NOT NULL,
`updated_at` BIGINT NOT NULL,
PRIMARY KEY (`citizenid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_usage_logs` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`staff_name` VARCHAR(100) NOT NULL,
`staff_cid` VARCHAR(50) DEFAULT NULL,
`staff_license` VARCHAR(80) DEFAULT NULL,
`staff_photo` LONGTEXT DEFAULT NULL,
`category` VARCHAR(32) NOT NULL DEFAULT 'action',
`action` VARCHAR(128) NOT NULL,
`target` VARCHAR(128) DEFAULT NULL,
`details` LONGTEXT DEFAULT NULL,
`created_at` BIGINT NOT NULL,
PRIMARY KEY (`id`),
KEY `created_at` (`created_at`),
KEY `category` (`category`),
KEY `staff_name` (`staff_name`),
KEY `staff_cid` (`staff_cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_statistics_snapshots` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`snapshot_day` DATE NOT NULL,
`total_players` INT(11) NOT NULL DEFAULT 0,
`total_characters` INT(11) NOT NULL DEFAULT 0,
`total_bank` BIGINT NOT NULL DEFAULT 0,
`total_cash` BIGINT NOT NULL DEFAULT 0,
`total_vehicles` INT(11) NOT NULL DEFAULT 0,
`active_reports` INT(11) NOT NULL DEFAULT 0,
`created_at` BIGINT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `snapshot_day` (`snapshot_day`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_scenes` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`description` TEXT DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`entities` LONGTEXT NOT NULL,
`created_by` VARCHAR(100) NOT NULL,
`created_cid` VARCHAR(50) DEFAULT NULL,
`created_at` BIGINT NOT NULL,
`updated_at` BIGINT NOT NULL,
PRIMARY KEY (`id`),
KEY `active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_scene_loot` (
`stash_key` VARCHAR(128) NOT NULL,
`citizenid` VARCHAR(64) NOT NULL,
`looted_at` BIGINT NOT NULL,
`emptied` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`stash_key`, `citizenid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `admin_scene_depleted` (
`stash_key` VARCHAR(128) NOT NULL,
`scene_id` INT(11) NOT NULL,
`entity_id` VARCHAR(64) NOT NULL,
`depleted_at` BIGINT NOT NULL,
PRIMARY KEY (`stash_key`),
KEY `scene_id` (`scene_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `player_warns` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`senderIdentifier` VARCHAR(50) DEFAULT NULL,
`targetIdentifier` VARCHAR(50) DEFAULT NULL,
`reason` TEXT DEFAULT NULL,
`warnId` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;