Description
A working ESX rank-gated gang armory: a member presses E at the armory, and only if their gang grade meets the threshold does the server register and open a per-gang ox_inventory stash. The rank gate, checked server-side, is what separates this from a plain shared locker and is the value a roleplay server pays for.
Prompt Template
You are writing a FiveM resource for esextended (stable) with oxinventory.
The full prompt template and its reference Lua are part of a one-time pack. Pick your depth, both are lifetime access, no subscription, ever.
- 60 prompts + syntax-validated reference Lua
- Lifetime access, pay once
- All 510 prompts, the full library
- Per-prompt profit/trend intelligence (CSV + playbook)
- Lifetime free updates, new niches as the market moves
$49 for 60 · $199 for all 510 + intelligence, one-time, no subscription.
Expected Output
The reference Lua lives at content/expected-outputs/gangs/22-shared-armory-stash.lua. It implements the proximity prompt and locker anim on the client, and a server handler that rejects…
The full prompt template and its reference Lua are part of a one-time pack. Pick your depth, both are lifetime access, no subscription, ever.
- 60 prompts + syntax-validated reference Lua
- Lifetime access, pay once
- All 510 prompts, the full library
- Per-prompt profit/trend intelligence (CSV + playbook)
- Lifetime free updates, new niches as the market moves
$49 for 60 · $199 for all 510 + intelligence, one-time, no subscription.
Known Failure Modes & Corrective Prompt
- Client-side rank check, Claude reads the grade and opens the stash locally, so a low-rank member bypasses the gate. Check the grade and register the stash server-side.
- Anim before load, the locker
TaskPlayAnimno-ops if the dict is not loaded; alwaysRequestAnimDict+while not HasAnimDictLoaded(dict) do Wait(0) end. - One-sided net event,
armory:grantdefined on only one side breaks the round-trip; both sides needRegisterNetEvent+AddEventHandler.
Corrective re-prompt: "The rank check is happening on the client. Move it into the armory:open server handler: read xPlayer.getJob().grade, reject with armory:denied if below MinGrade, and only then RegisterStash and TriggerClientEvent('armory:grant', ...). The client must never decide access."
Framework Integration
- ESX:
exports['es_extended']:getSharedObject(); grade viaxPlayer.getJob().grade, gang via.getJob().name; stash viaox_inventory. - QBCore:
exports['qb-core']:GetCoreObject(); grade viaPlayer.PlayerData.gang.grade.level, gang viaPlayer.PlayerData.gang.name. - QBox:
exports.qbx_core:GetPlayer(src); grade viaplayer.PlayerData.gang.grade.level; sameox_inventorystash registration.
Profit Potential
$150-$2000/mo on Tebex (expected ~$500), $50-389 script band × est units/mo for a stable niche, against a corpus of comparable Tebex sellers (median ~$11.85K/mo).
Trend Signal
→ stable, corpus: Shared armory uses the ox_inventory stash primitive (tracked ox_* dependency in corpus); baseline gang storage differentiated by the rank gate vs housing stash.
Sales Angle
A rank-gated gang storage script, the grade gate is the upsell over a plain shared stash, letting leaders lock heavy weapons to senior ranks. Recommended Tebex price $59.
Difficulty & Ship Time
intermediate · ships in 2-4h.
