Description
An overhead nameplate system that floats a [id] Name | Job label above nearby players using world-space text. Name and job are pulled from the server on a refresh interval so they can't be spoofed locally, and the draw loop is distance-gated to protect FPS on full servers. Servers buy it as a staff-friendly QoL layer that doubles as light RP immersion.
Prompt Template
You are writing a FiveM resource: overhead player nameplates via DrawText3D.
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/ui/20-player-overhead-nameplates.lua. It draws distance-gated 3D text over GetActivePlayers, maps local player handles to server ids, and refreshes…
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
- Spoofable labels, name/job must come from the server, never local state.
- FPS drain, gate the per-frame draw by
DRAW_DISTANCE. - ID mismatch, map handles with
GetPlayerServerId; don't mixPlayerId()with server ids.
Corrective re-prompt: "Source name and job only from the server: the server builds the roster from GetPlayers()+tonumber and pushes nameplates:sync; the client just renders it. Gate the DrawText3D loop behind #(myPos - pos) < DRAW_DISTANCE and resolve each plate's number with GetPlayerServerId, not PlayerId()."
Framework Integration
- ESX: Replace
getJobwithESX.GetPlayerFromId(src).getJob().labelinside the server request handler. - QBCore: Use
QBCore.Functions.GetPlayer(src).PlayerData.job.labelingetJob. - QBox: Use
exports.qbx_core:GetPlayer(src).PlayerData.job.label, and gate visibility behind an admin ace if it's staff-only.
Profit Potential
$150-$2000/mo on Tebex (expected ~$500), priced within the $50-389 script band against a corpus of comparable Tebex sellers (median ~$11.85K/mo) for a stable RP niche.
Trend Signal
→ stable, inferred: Overhead IDs are common on RP and admin-friendly servers; recurring demand, often toggled by permission.
Sales Angle
Position as staff QoL first, immersion second, permission-gating the plates is the feature serious RP servers pay for. Recommended Tebex price $99.
Difficulty & Ship Time
intermediate · ships in 2-4h.
