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). [INFERRED] $50-389 script band × est units/mo for a stable niche, against the signal-scraper tebex_snapshot corpus (n=100, median seller $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.