
BenzyPrioAOP
A lightweight, standalone FiveM HUD for roleplay servers. It shows the current AOP (Area of Patrol), any number of fully customizable Prios (Priorities), and a server-wide Peacetime toggle on screen, and lets every player drag and resize the HUD to fit their own monitor. Staff actions are gated behind a flexible permission system (framework roles, raw identifiers, ACE, or Discord — via BenzyBridge), and everything important is logged to Discord.
Requires BenzyBridge. BenzyPrioAOP includes the bridge in-process (
shared_script '@BenzyBridge/init.lua') and declaresdependency 'BenzyBridge'. The bridge auto-detects your stack, so this one resource runs the same across ESX / QBCore / QBox / standalone — you don't configure a framework or notify system here.
Made by Samuel Benzy of Benzy Development.
Features
- AOP (Area of Patrol) — a server-wide patrol area set by staff with
/aop, shown on the HUD, announced with a large on-screen banner, and logged to Discord. - Prios (Priorities) — define as many prios as you like in the config
(e.g.
City Prio,County Prio,Highway Prio). Each gets its own HUD element and a full lifecycle: Available → Active → Cooldown → Available.- Start, join, leave, end, and force-cooldown commands.
- Only one active session per prio at a time.
- Configurable join capacity and cooldown length.
- Auto-ends into cooldown when the last person leaves.
- Every action is logged to Discord with a color per action type.
- Peacetime — a staff toggle (
/peacetime) that disables all weapons and makes every player invincible (no damage, no deaths) server-wide, with red/green banners, a HUD indicator, and a Discord log. - Customizable HUD —
/customizehudlets each player drag and resize every element. Layouts are saved locally and survive reconnects and server restarts. A reset button recovers elements that were moved off-screen. - Chat suggestions — every command shows up in the
/autocomplete with a description and the expected argument. - Standalone-first — no framework (ESX/QBCore), inventory, or database required. It uses BenzyBridge for permissions, which itself works fully standalone.
How it works
- The server is the single source of truth for the AOP value and every prio's state. When something changes, the server pushes the new state to all clients, posts to Discord, and shows the on-screen banner.
- The client renders the HUD with NUI (HTML/CSS/JS) and handles the
/customizehudeditor. - Each player's HUD layout is saved locally on their own machine, so it persists across reconnects and restarts and is not affected by clearing the server cache (see Notes).
- Cooldown timers count down live on the HUD.
Installation
- Install BenzyBridge — BenzyPrioAOP uses it for permissions, and declares it as a dependency.
- Place the
BenzyPrioAOPfolder in your server'sresourcesdirectory. - Add both to your
server.cfg, with the bridge before BenzyPrioAOP:BenzyPrioAOP is standalone-first and needs nothing but the bridge. If you do run any of the optional systems the bridge can detect, keep the overall start order: SQL connector → framework → BenzyBridge → provider resources (e.g. a notify provider) → BenzyPrioAOP, so the bridge resolves them before this resource boots.ensure BenzyBridgeensure BenzyPrioAOP - Set up permissions for the staff commands (see Permissions).
- Open
config.luaand add your Discord webhook URL(s) and any prios you want. - Restart the server (or
ensure/restart BenzyPrioAOP).
Configuration
Everything is configured in config.lua, and every option has a comment above it explaining what it does. The highlights:
Features
| Option | What it does |
|---|---|
Config.EnableAOP | Turn the AOP feature on/off. When off, the AOP HUD element is hidden and /aop is disabled. |
Config.EnablePrios | Turn the prio feature on/off. When off, all prio HUD elements are hidden and the prio commands are disabled. |
Config.EnablePeacetime | Turn peacetime on/off. When off, the peacetime HUD element is hidden and /peacetime is disabled. |
AOP
| Option | What it does |
|---|---|
Config.DefaultAOP | The AOP shown when the server starts or the resource restarts (e.g. 'Statewide'). |
Prios
| Option | What it does |
|---|---|
Config.Prios | The list of prios — add, remove, or rename as many as you like. Each name becomes its own HUD element and is what players type in the prio commands (case‑insensitive), e.g. /startprio City Prio. |
Config.CooldownMinutes | How many minutes a prio stays on cooldown after it ends. |
Config.MaxJoin | Most players allowed in a single prio, including the one who started it (so 5 = starter + 4 joiners). |
Webhooks
Config.Webhooks holds one Discord webhook URL per log: AOP (yellow embeds), Prio (green/red/orange/purple/blue embeds), and Peacetime (red = enabled, green = ended). Leave a field empty to disable that log; you can paste the same URL into more than one to send those logs to a single channel.
Debug
| Option | What it does |
|---|---|
Config.Debug | Prints detailed diagnostics to the server + each client's F8 console. Very noisy — leave false on a live server; turn it on only to troubleshoot. |
Commands
| Command | Argument | Who can use it | What it does |
|---|---|---|---|
/aop | [location] | benzy.aop | Sets the Area of Patrol (supports multi-word names). |
/startprio | [prio name] | Everyone | Starts a prio (only if it is Available). |
/joinprio | [prio name] | Everyone | Joins an active prio (if there is room). |
/leaveprio | [prio name] | Everyone | Leaves a prio. If you were the last one, it auto-ends into cooldown. |
/endprio | [prio name] | The starter, or benzy.prio | Ends the prio and starts its cooldown. |
/cooldown | [prio name] | benzy.prio | Forces a prio straight into cooldown. |
/peacetime | — | benzy.peacetime | Toggles server-wide peacetime on/off (see Peacetime). |
/customizehud | — | Everyone | Opens the drag/resize HUD editor. |
Prio names are case-insensitive and support spaces, so /startprio city prio
works for a prio named City Prio.
Prio states (shown on the HUD)
- Available — nobody has started it; it can be started.
- Active (x/max) — someone has started it; shows how many players are in it.
- Cooldown — Xm — recently ended; shows the minutes remaining before it frees up.
Permissions
Access to the staff commands is decided by BenzyBridge's unified access system, configured
in config.lua under Config.Access. Each role (aop, prio, peacetime) has four
independent methods that are OR'd together — a player passes if any enabled one matches:
- Framework — a job/group name from your active framework (ESX / QBCore / QBox). Skipped on a standalone server.
- Identifiers — a raw
license:/fivem:/steam:/discord:identifier. - AcePerms — a
true/falsetoggle for the built-in ACE string for that role. - Discord — a Discord role ID (needs the
Badger_Discord_APIresource).
Out of the box only AcePerms is on, so it behaves exactly like classic ACE-only permissions.
Add the following to your server.cfg to grant them (replace the license with the person/group
you want to allow):
# Allow a group to use the staff commands
add_ace group.admin benzy.aop allow # Can use /aop
add_ace group.admin benzy.prio allow # Can force-cooldown and force-end others' prios
add_ace group.admin benzy.peacetime allow # Can toggle /peacetime
# Put a player into that group (find their license in txAdmin or server console)
add_principal identifier.license:YOUR_LICENSE_HERE group.admin
aop— required to use/aop.prio— staff permission. Lets a player force a cooldown (/cooldown) and end a prio they did not start (/endprio).peacetime— required to use/peacetime.
To use framework roles, identifiers, or Discord instead of (or alongside) ACE, enable those
methods in Config.Access. Players without permission who try a restricted command get an error
and nothing happens.
Customizing the HUD
- Type
/customizehud. Your cursor appears and the HUD elements become editable. - Drag any element to move it. Drag the white corner grip to resize it (the text scales with the box).
- Press ESC to save and close. Your layout is stored on your machine.
- Use the Reset HUD Layout button to snap everything back to the default positions — handy if you moved an element off-screen on a larger monitor.
Layouts are saved locally on each player's own machine, so they survive reconnecting, server restarts, and clearing the server cache.
Peacetime
/peacetime (permission benzy.peacetime) toggles a server-wide peacetime mode on or
off. While peacetime is on, for every connected player:
- All weapons are disabled — no shooting, no melee/stabbing, no throwing, and the weapon wheel is blocked.
- No damage and no deaths — players cannot take any damage at all (bullets, melee, explosions, fire, being run over, etc.) and cannot die.
Turning it on shows a large red "Peacetime Enabled" banner to everyone; turning it off shows a green "Peacetime Ended" banner. Each toggle also sends a Discord log saying who did it, and the HUD's Peacetime element turns red while it is active.
Peacetime is enforced on every client, so it applies the moment it is toggled — and to anyone who joins while it is on.
Discord webhooks
- In your Discord server: Channel Settings → Integrations → Webhooks → New Webhook.
- Copy the webhook URL.
- Paste it into
Config.Webhooks.AOP,Config.Webhooks.Prio, and/orConfig.Webhooks.Peacetimeinconfig.lua.
Embed colors by action: AOP change = yellow, prio start = green, prio end = red, cooldown = orange, join = purple, leave = blue, peacetime enabled = red, peacetime ended = green. Every embed footer shows the date/time and the script name. Leave a webhook field blank to disable that log.
Notes
- Layout is saved per player on their own machine. Each player's HUD layout is stored locally on each player’s machine, so it persists across reconnects and restarts and is unaffected by clearing the server cache. The trade-off: it is per-machine, so a player who switches computers or clears their own FiveM cache starts from the default layout there.
- AOP, prio, and peacetime state reset on resource/server restart. This is
intentional — a restart is treated as a clean slate. The AOP returns to
Config.DefaultAOP, all prios return to Available, and peacetime turns off.
Troubleshooting
- Turn on debug logging first — set
Config.Debug = true, restart the resource, and watch the server console + each client's F8 console. You'll get diagnostics for state loads, saved-layout loads (or first-time creation), command success/failure, cooldown changes, and Discord webhook delivery. - A command says I don't have permission — check your ACE setup and that your
license is in the allowed group (
benzy.aop/benzy.prio). - No Discord messages — make sure the webhook URL is pasted correctly in
config.luaand that the channel/webhook still exists. - The HUD didn't move back after /customizehud — press ESC to save, or use the Reset HUD Layout button.
- Notifications don't appear — messages route through BenzyBridge's notify provider. Make sure BenzyBridge is started and its notify provider is configured.
Support
Need help? Visit support.benzy.lol.
Credits
Made by Samuel Benzy of Benzy Development.
Website: https://benzy.lol