ORYNTDOCS
StoreSupport
Docs/Staff tools

Admin Menu

v1.0.0Coming soon

A complete admin menu that works on its own. Manage players, ban and warn, handle reports, give community service, talk in staff chat, spawn and fix vehicles and build with the dev tools, all from one window (F10). ESX, QBCore and Qbox are picked up automatically for character names, jobs, money, items, inventories and garages.

Features

  • Players: search, nearby and staff filters, a profile per player with playtime, first join, identifiers, history and staff notes. Go to, bring, spectate (with a live info panel), heal, revive, armor, feed, freeze, kill, screenshot, open or clear their inventory, open their clothing menu. Right-click anyone for quick actions.
  • Punishments: private messages, warnings (a popup they have to click away), kicks, bans with preset lengths and one-click reasons, offline bans (recently left players or any identifier), community service. Staff can never punish staff of the same or a higher rank.
  • Ban screen: banned players see a clean card with the reason, who banned them, when it ends, the ban ID and an appeal button.
  • Reports: players type /report, staff get a sound and a banner, claim it, talk to the player in the report and close it. Go to / bring / spectate the player straight from the report.
  • Community service (built in, can be turned off): players are sent to the prison yard in a prison outfit and dig holes at marked spots until their tasks are done, with a tasks-left panel. Leaving the area sends them back with extra tasks. It carries on after reconnects and restarts.
  • Item picker: every item on the server with its picture and a search box. Pick one, set the amount, give.
  • Economy (with a framework): give money to any account, set jobs and grades from a list, give vehicles straight to a player's garage.
  • Self: noclip, god mode, invisible, IDs above heads, super jump, fast run, teleport to waypoint. In noclip and invisible nobody sees you, but you see yourself as a see-through hologram (Config.SelfHologram).
  • Ranks page (owners): ranks, who gets them and every rank's permissions, set in game.
  • Vehicles: spawn (with one-click presets), repair, flip, refuel, max tune, change plates, delete one or all vehicles in a radius.
  • Server: announcements, restart countdown, weather and time, revive or heal everyone, vehicle cleanup, clear area, players / staff online, uptime, characters and money in the economy.
  • Staff chat: in the menu or /sc, with banners for staff who don't have the menu open.
  • Dev tools: coords laser (aim at anything, copy a vector3 or vector4), copy your position or heading, teleport to coordinates or saved locations.
  • Logs: every staff action in the Logs page, the database and (optional) Discord, per category.
  • Ranks from ace permissions, framework admin groups and/or Discord roles. Fully translatable, colors in the config, seamless updates.

Requirements

orynt_bridge Required (free, from Orynt Development): finds your framework, inventory and more. Nothing else is
oxmysql Optional: saves everything in your MySQL database (HeidiSQL etc.) instead of the server's own storage
ESX / QBCore / Qbox Optional: character names, jobs, money, items, inventories, garages
An inventory (ox, qs, codem, tgiann, origen, core, qb, ps, lj) Optional: give items, view and clear inventories, item pictures
screenshot-basic Optional: player screenshots
Badger_Discord_API or a bot token Optional: ranks from Discord roles

Files

orynt_adminmenu/
├── config.lua            Ranks, menu contents, reports, community service, look
├── locales/en.lua        Every text (copy it to translate)
├── server/
│   ├── sv_config.lua     Discord webhooks (server only)
│   ├── bridge.lua        ESX / QBCore / Qbox / inventories / garages (open, adapt it to custom setups)
│   ├── discord.lua       Discord roles (open)
│   ├── db.lua            Storage: MySQL or the server's KVP
│   ├── main.lua          Ranks, bans, players, actions
│   ├── reports.lua       Reports
│   └── comserv.lua       Community service
├── client/
│   ├── bridge.lua        Clothing menus, fuel scripts, vehicle properties (open)
│   ├── main.lua          The menu, toggles, spectate, vehicles
│   └── comserv.lua       Community service (the player's side)
└── html/                 The menu

Installation

  1. Put orynt_adminmenu in your resources folder and add ensure orynt_bridge and then ensure orynt_adminmenu to server.cfg (after your framework, oxmysql and inventory if you use them).
  2. Give your staff a rank (see below). The quickest way, in server.cfg: add_ace group.admin orynt_adminmenu.owner allow add_principal identifier.license:YOUR_LICENSE group.admin
  3. Set Config.BanScreen to your server's name and appeal link.
  4. Restart the server and press F10.

No SQL to import: with oxmysql the tables are created on start.

Ranks and permissions

Ranks are set in game on the Ranks page (owners only, permission ranks): add, rename and delete ranks, set their level, who gets them and tick their permissions, then Save ranks. Online staff get the new permissions straight away. Until someone saves there, Config.Ranks in config.lua is used; Use config.lua goes back to the file. You can't save ranks that would take the Ranks page away from yourself. Locked out anyway? Type orynt_adminmenu:resetranks in the server console to go back to config.lua.

A player gets a rank when any of its ace, groups or role match:

  • ace: add_ace group.mod orynt_adminmenu.moderator allow in server.cfg (works everywhere)
  • groups: the framework's admin groups (ESX: the player's group, QBCore / Qbox: permissions like admin or god)
  • role: a Discord role id. Put your bot token in server.cfg (set orynt_adminmenu_bot_token "TOKEN") and your server id in Config.Discord.guildId, or just run Badger_Discord_API

level decides who outranks who: staff can't kick, ban, warn, freeze, kill, screenshot or give coms to staff of the same or a higher level. With "Higher ranks also get every lower rank's permissions" (Config.InheritLowerRanks) every rank also gets the permissions of the ranks below it. After changing someone's rank, /adminrefresh checks it again without a restart.

Every permission:

Permission
menu Open the menu (Players and Server pages)
noclip, godmode, invisible, names, superjump, fastrun The Self toggles
tpm, tpcoords, coords Teleport to waypoint / to coordinates, the dev tools
heal, revive, needs, reviveall Heal / revive players, armor and food, everyone at once
goto, bring, spectate Teleport to, bring, spectate
freeze, kill, message, clothing Freeze, kill, private messages, clothing menu
identifiers, history, notes See identifiers, history (warnings, kicks, bans, coms), staff notes
screenshot, viewinventory, clearinventory Screenshots, open / clear inventories
warn, kick, ban, offlineban, unban Punishments and the Bans page
comserv, comservrelease Give community service / release early
reports The Reports page
staffchat, logs, announce, restart, weather Staff chat, Logs page, announcements, restart countdown, weather and time
cleararea, cleanup Clear the area, vehicle cleanup
spawnvehicle, fixvehicle, deletevehicle, tunevehicle, plate The Vehicles page
giveitem, givemoney, givevehicle, setjob Items, money, garage vehicles, jobs (with a framework)
ranks The Ranks page: change the ranks and their permissions (give it to owners only)

'*' gives everything. Permissions for things the server can't do (money without a framework, coms when it's off) are never given, so their buttons don't show.

Storage (MySQL or no database)

With oxmysql running, everything is saved in your database: orynt_adminmenu_bans, _records (warnings, kicks, bans, coms), _notes, _logs, _players (playtime and first join), _reports, _comserv and _settings (the ranks saved on the Ranks page). Open them in HeidiSQL or any MySQL tool. Without a database (Config.Database = 'auto' and no oxmysql, or 'kvp') the same data is kept in the server's own storage.

  • Coming from CarrotAdmin? Its bans, history, notes, logs and playtime are copied into the new tables on the first start.
  • Added oxmysql later? What was saved without it is moved into the database on the first start with it.

Reports

Players type /report (Config.Reports.command) or /report <what happened>. A window opens where they write the report and then talk with staff. Staff with the reports permission hear a sound and see a banner; the Reports page lists open, their own (Mine) and closed reports. Claim one so others know you're on it, reply, go to / bring / spectate the player, and close it with a note for the log. Open reports stay open through restarts and follow the player when they reconnect. Config.Reports.cooldown stops spam.

Community service

Config.Comserv: the area (area + radius, by default the yard of Bolingbroke Penitentiary), the spots where holes are dug (spots), how long one takes, the digging animation and shovel (dig), the prison outfit (outfit, male and female), where players are let go (release, outside the prison gate) and the penalty for leaving. Staff give coms from a player's profile (Manage > Coms) with a number of tasks; the player is sent to the area in a prison outfit and digs a hole at the marked spot, then the next one. Their own clothes come back when they're done (also after a reconnect). The server checks they are at the spot and that each task took the time it should. The Coms page lists everyone serving, with +5 / -5 and release.

Use your own coms resource instead? Set Config.Comserv.enabled = false: the Coms page, the Coms tab and the permissions disappear.

Configuration (config.lua)

The file explains every option. In short:

Section
1. Opening the menu Key, command, rank refresh
2. Ranks and permissions Config.Ranks, inherit, Discord roles
3. Framework, inventory, database Detection, storage, item pictures, money accounts, garage, clothing
4. Bans Ban screen, ban lengths, preset reasons, new-player tag
5. Reports On / off, command, cooldown, sound
6. Community service On / off, area, spots, penalty, release point
7. Menu contents Vehicle presets, teleport locations, noclip speeds, staff chat command, auto announcements, restart warnings, weather
8. Look Colors, fonts, corners

Discord logs (server/sv_config.lua)

One webhook per category: general, punishments, economy, screenshots (with the picture), staffchat, notes, reports. Empty categories go to general (staff chat and reports only to their own). SvConfig.ConsoleLogs = true prints every action in the server console too.

Commands and keys

F10 / /admin Open the menu (rebind in Settings > Key Bindings > FiveM)
/adminrefresh Check your rank again
/sc <message> Staff chat
/report Make a report (everyone)
adminnoclip, adminlaser Key bindings for noclip and the coords laser without the menu (unbound by default)

Exports and Discord commands

exports.orynt_adminmenu:HasPermission(source, 'ban')     -- true / false
exports.orynt_adminmenu:GetStaff(source)                 -- { label, level, perms } or nil
exports.orynt_adminmenu:GetConnectBanState(source)       -- 'checking' / 'banned' / 'clear' (for queue scripts)
exports.orynt_adminmenu:Sentence(source, tasks, reason, adminName)  -- community service
exports.orynt_adminmenu:AddTasks(source, amount, adminName)
exports.orynt_adminmenu:Release(source, adminName)
exports.orynt_adminmenu:GetAllServing()
exports.orynt_adminmenu:IsServing(source)

A Discord bot resource can forward slash commands (players, ban, unban, bans, kick, warn, history, announce, comserv, comservadd, comservrelease) with the server event TriggerEvent('orynt_adminmenu:discordRequest', requestId, { command, options, member = { name, roles }, replyEvent }). Only ranks at Config.DiscordMinLevel or higher (by Discord role) may use them.

Translating

Copy locales/en.lua to e.g. locales/de.lua, change Locales.en to Locales.de, translate the text and set Config.Locale = 'de'. The ui part is the menu itself. Anything you leave out stays English.

Updating

Replace the resource folder with the new version and start it (refresh, then ensure orynt_adminmenu, or restart the server). Nothing to copy over:

  • Your settings come back by themselves. Every start, config.lua, server/sv_config.lua and your own translation are copied to the server (its KVP, outside the resource folder). When the new version starts with the files from the download, yours are put back and the resource restarts once to load them.
  • New options your config doesn't have yet use their defaults, and the console lists them once.
  • Bans, history, notes, reports, coms and logs are in the database (or the server's storage): they stay.
  • Changed server/bridge.lua, client/bridge.lua or server/discord.lua? The new version's file is used, and yours is saved next to it as <file>.before-update so you can move your changes over. The console says so.
  • Keep the resource's name (orynt_adminmenu): the saved settings belong to it.

To let it restart itself after putting your settings back, add add_ace resource.orynt_adminmenu command.ensure allow to server.cfg. To go back to the default settings on purpose: orynt_adminmenu:resetsettings in the server console, put the files from the download back and restart.

  • 1.0.0: first release.

Troubleshooting

Problem Fix
F10 does nothing You have no rank: check the ace / group / role, then /adminrefresh. The console prints "has rank ..." for staff
Money / Job / Vehicle tabs missing No framework was found (they need ESX, QBCore or Qbox). The console start-up line shows what was found
Item list empty No inventory with an item list: an inventory orynt_bridge supports, or a framework
Screenshots say no resource Install screenshot-basic
"Database error" in the console oxmysql can't reach your database: check its connection string. The menu keeps working on the server's storage if oxmysql isn't running at all
Discord ranks don't work Check the bot token / guildId, or that Badger_Discord_API runs; then /adminrefresh

Escrow and license

When escrowed, config.lua, server/sv_config.lua, locales/, server/bridge.lua, client/bridge.lua and server/discord.lua stay readable so you can configure, translate and adapt it. See LICENSE.md for the terms of use. In short: use it on your own servers; don't resell, share or leak it; keep the Orynt Development branding.

© Orynt Development

Orynt Development© Orynt Development. Docs for every Orynt FiveM script.