Mouse-based prop placement, full 3D rotation, real-time statebag sync, item integration, and a clean immersive UI.
Built on ox_core · ox_lib · ox_inventory · ox_target · oxmysql
Built by Red Dragon Elite | SerpentsByte
- Overview
- Ecosystem
- Features
- Dependencies
- Installation
- Configuration
- Usage & Controls
- Item Integration
- Developer API
- Admin System
- Commands
- Database
- Performance
- Troubleshooting
- Changelog
- License
RDE Props is a production-grade prop management system for FiveM servers. Raycast-based mouse placement, full X/Y/Z axis rotation with speed modes, real-time statebag synchronization, ox_target interaction, item-based placeable props, persistent MySQL storage, and a clean immersive UI — all in one resource, free forever.
| Feature | Generic Prop Scripts | RDE Props |
|---|---|---|
| Mouse-based placement | ❌ | ✅ Raycast-based |
| 3D rotation (all axes) | ❌ | ✅ X, Y, Z |
| Speed modes | ❌ | ✅ Normal / Fast / Precise |
| Real-time sync | Polling | ✅ Statebag — instant |
| Item-based props | ❌ | ✅ ox_inventory integration |
| ox_target interaction | ❌ | ✅ |
| Admin prop limits | ❌ | ✅ Separate admin limits |
| Collision toggle | ❌ | ✅ Live toggle |
| Database persistent | Sometimes | ✅ Always — auto table |
| Stash & Crafting layer | ❌ | ✅ Via rde_props_interact addon |
rde_props is the foundation of an open prop ecosystem. Use it standalone or extend it with the official addon:
| Resource | Description |
|---|---|
| rde_props | Core placement system — this repo |
| rde_props_interact | Stash, crafting, lock & crack layer |
rde_props_interact turns any placed prop into a lockable stash or crafting station — with ox_inventory integration, passcode/job/owner locks, crack mechanics, skillchecks, and full recipe systems. Zero modifications to rde_props core required.
ensure rde_props
ensure rde_props_interact ← optional addon, drop-in / drop-out
- Raycast-based mouse targeting for intuitive positioning
- Full X, Y, Z axis rotation with smooth controls
- Three speed modes — Normal, Fast (SHIFT), Precise (ALT)
- Mouse scroll height adjustment
- Grid snapping (optional, configurable)
- Placement validation — real-time valid/invalid feedback
- Collision toggle live during placement (G key)
- MySQL auto-table creation on first start
- Statebag-based real-time sync across all clients
- Minimal network overhead — only changes are broadcast
- LOD system and configurable render distance
- ox_lib context menu for management
- ox_target interaction on placed props (info, delete, toggle collision, admin tools)
- Live placement HUD with status, height, and rotation display
- Color-coded placement validation (green = valid, red = invalid)
- ox_inventory item-based placeable props
- Item removed on placement start, returned on cancel
- Item-placed props are pickupable by anyone
- Admin-placed props are permanent
- ACE permission + ox_core group-based admin system
- Anti-spam cooldowns
- Duplicate placement prevention
- Per-player prop limits (separate admin limit)
| Resource | Required | Notes |
|---|---|---|
| oxmysql | ✅ Required | Database layer |
| ox_core | ✅ Required | Player/character framework |
| ox_lib | ✅ Required | UI, callbacks, notifications |
| ox_inventory | ✅ Required | Item-based prop placement |
| ox_target | ✅ Required | Prop interaction |
cd resources
git clone https://github.com/RedDragonElite/rde_props.gitensure oxmysql
ensure ox_core
ensure ox_lib
ensure ox_inventory
ensure ox_target
ensure rde_props
Order matters.
rde_propsmust start after all its dependencies.
The rde_props table is created automatically on first start. No manual SQL import needed.
Edit config.lua to adjust limits, controls, speeds, render distance, and language.
restart rde_props
Test with /props in-game.
Config.Debug = false -- verbose console output
Config.DefaultLanguage = 'en' -- 'en' or 'de'
Config.MaxPropsPerPlayer = 50 -- max props per regular player
Config.AdminPropLimit = 500 -- max props for admins
Config.PickupRange = 2.5 -- interaction range in meters
Config.RenderDistance = 300.0 -- prop render distanceConfig.AdminGroups = {
['admin'] = true,
['superadmin'] = true,
['moderator'] = true,
['owner'] = true,
}Config.Controls = {
confirm = 24, -- Left Mouse — confirm placement
cancel = 25, -- Right Mouse — cancel
rotateLeft = 108, -- Numpad 4 — rotate Z-
rotateRight = 109, -- Numpad 6 — rotate Z+
forward = 172, -- Arrow Up — rotate X+
backward = 173, -- Arrow Down — rotate X-
up = 96, -- Numpad + — height up
down = 97, -- Numpad - — height down
fastMode = 21, -- SHIFT — 3x speed
preciseMode = 19, -- ALT — fine control
toggleCollision = 47, -- G — toggle collision
deleteMode = 178, -- DELETE
}Config.MovementSpeed = { normal = 0.05, fast = 0.15, precise = 0.01 }
Config.RotationSpeed = { normal = 2.0, fast = 5.0, precise = 0.5 }Config.MousePlacement = {
enabled = true,
maxDistance = 20.0,
minDistance = 0.5,
smoothing = 0.2,
gridSnap = false,
gridSize = 0.5,
}Config.Performance = {
enableLOD = true,
lodDistance = 150.0,
maxVisibleProps = 200,
updateTickRate = 1000,
garbageCollectInterval = 60000,
}/props
/propmenu
- Open
/props→ click ➕ Create New Prop - Fill in model name, display name, permanent and collision flags
- Placement mode activates — use controls to position
- Left click to confirm
| Action | Key |
|---|---|
| Confirm placement | Left Mouse / ENTER |
| Cancel | Right Mouse / BACKSPACE |
| Rotate Z axis | ← → / Numpad 4/6 |
| Rotate X axis | ↑ ↓ / Arrow Keys |
| Height adjust | Mouse Scroll / Numpad +/- |
| Fast mode | SHIFT (hold) |
| Precise mode | ALT (hold) |
| Toggle collision | G |
Look at any placed prop and use your interaction key to get:
- 📦 Information
- 💥 Toggle Collision
- 🗑️ Delete Prop
- 👑 Admin Status toggle (admin only)
Add placeable items to ox_inventory/data/items.lua:
['bench_prop'] = {
label = 'Bench',
weight = 1000,
stack = false,
close = true,
description = 'A placeable bench',
client = {
prop = 'prop_bench_01a',
event = 'rde_props:placeItemProp',
name = 'Wooden Bench',
}
},How it works: item is removed when placement starts — returned automatically on cancel. Item-placed props can be picked up by anyone. Admin-placed props are permanent and cannot be picked up by regular players.
-- Reload all props from database
TriggerEvent('rde_props:reloadProps')
-- Delete a specific prop
TriggerEvent('rde_props:deleteProp', propId)-- Trigger item-based placement
TriggerEvent('rde_props:placeItemProp', {
prop = 'prop_bench_01a',
name = 'Wooden Bench',
})
-- Open prop menu
TriggerEvent('rde_props:openMenu')Admin access is verified against ox_core groups defined in Config.AdminGroups. Admins receive:
- Higher prop limit (
Config.AdminPropLimit) - Access to admin-only target options (toggle admin status, force delete any prop)
/reloadpropsand/propstatscommands
# server.cfg
add_ace group.admin rde.props.admin allow
add_principal identifier.steam:110000xxxxxxxx group.admin
| Command | Description |
|---|---|
/props |
Open prop management menu |
/propmenu |
Alias for /props |
| Command | Description |
|---|---|
/reloadprops |
Reload all props from database |
/propstats |
Print prop statistics to console |
Table is auto-created on first start:
CREATE TABLE rde_props (
id VARCHAR(64) PRIMARY KEY,
model VARCHAR(128) NOT NULL,
name VARCHAR(128) NOT NULL,
position JSON NOT NULL,
rotation JSON NOT NULL,
collision TINYINT(1) DEFAULT 1,
permanent TINYINT(1) DEFAULT 1,
created_by VARCHAR(64) NOT NULL,
is_admin TINYINT(1) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_created_by (created_by)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Props are spawned as local client entities (CreateObject with network=false) — no GTA networked entity overhead, no entity limit. Sync is handled exclusively via StateBags, broadcasting only delta changes.
| Props in World | Client FPS Impact | Sync Overhead |
|---|---|---|
| 100 | Negligible | <1ms |
| 500 | <2% | <1ms |
| 2000 | ~3–5% | <2ms |
| Server Size | Max Props |
|---|---|
| ~32 players | 500–1000 |
| ~64 players | 1000–2000 |
| 128+ players | 2000–5000 |
- Keep
enableLOD = true— distant props use lower detail - Lower
maxVisiblePropson weaker hardware - Raise
updateTickRateto reduce sync frequency on large prop counts - Table ships with an index on
created_by— don't remove it
Props not appearing after restart?
Run /reloadprops in console. If still missing, check oxmysql is fully started before rde_props — fix the ensure order in server.cfg.
"Model load failed" error?
Verify the model name is a valid GTA V prop string. Check forge.plebmasters.de/objects for valid names.
Placement mode stuck / can't confirm?
Check that no other resource is consuming the Left Mouse / ENTER keybind. Enable Config.Debug = true and check F8 console for conflicts.
ox_target options not showing?
Make sure ox_target is started before rde_props and the player ped is fully loaded. Check F8 console for export errors.
"No permission" on admin commands?
Verify the player's ox_core group is listed in Config.AdminGroups and the resource has restarted since the config change.
- Fixed
collision = false or truelogic bomb inStartPlacementandplaceFromItem - Fixed double StateBag + TriggerClientEvent in
toggleCollisionandtoggleAdmin(double broadcast) - Fixed
Wait()insiderde_props:requestReloadNetEvent handler (now wrapped in CreateThread) - Clarified
returnItemhandler comment
- Complete rewrite with immersive placement UI
- Mouse-based raycast placement
- Full 3D rotation on all axes
- Speed modes (Fast / Precise)
- ox_target integration
- Statebag sync
- Enhanced security & anti-spam
- Real-time statistics
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit:
git commit -m 'Add your feature' - Push:
git push origin feature/your-feature - Open a Pull Request
Guidelines: follow existing Lua conventions, comment complex logic, test on a live server before PR, update docs if adding features.
###################################################################################
# #
# .:: RED DRAGON ELITE (RDE) - BLACK FLAG SOURCE LICENSE v6.66 ::. #
# #
# PROJECT: RDE_PROPS v1.0.1 (ADVANCED PROP MANAGEMENT SYSTEM FOR FIVEM) #
# ARCHITECT: .:: RDE ⧌ Shin [△ ᛋᛅᚱᛒᛅᚾᛏᛋ ᛒᛁᛏᛅ ▽] ::. | https://rd-elite.com #
# ORIGIN: https://github.com/RedDragonElite #
# #
# WARNING: THIS CODE IS PROTECTED BY DIGITAL VOODOO AND PURE HATRED FOR LEAKERS #
# #
# [ THE RULES OF THE GAME ] #
# #
# 1. // THE "FUCK GREED" PROTOCOL (FREE USE) #
# You are free to use, edit, and abuse this code on your server. #
# Learn from it. Break it. Fix it. That is the hacker way. #
# Cost: 0.00€. If you paid for this, you got scammed by a rat. #
# #
# 2. // THE TEBEX KILL SWITCH (COMMERCIAL SUICIDE) #
# Listen closely, you parasites: #
# If I find this script on Tebex, Patreon, or in a paid "Premium Pack": #
# > I will DMCA your store into oblivion. #
# > I will publicly shame your community. #
# > I hope your server lag spikes to 9999ms every time you blink. #
# SELLING FREE WORK IS THEFT. AND I AM THE JUDGE. #
# #
# 3. // THE CREDIT OATH #
# Keep this header. If you remove my name, you admit you have no skill. #
# You can add "Edited by [YourName]", but never erase the original creator. #
# Don't be a skid. Respect the architecture. #
# #
# 4. // THE CURSE OF THE COPY-PASTE #
# This code uses statebags, raycasting, and a layered sync architecture. #
# If you just copy-paste without reading, it WILL break. #
# Don't come crying to my DMs. RTFM or learn to code. #
# #
# -------------------------------------------------------------------------- #
# "We build the future on the graves of paid resources." #
# "REJECT MODERN MEDIOCRITY. EMBRACE RDE SUPERIORITY." #
# -------------------------------------------------------------------------- #
###################################################################################
TL;DR:
- ✅ Free forever — use it, edit it, learn from it
- ✅ Keep the header — credit where it's due
- ❌ Don't sell it — commercial use = instant DMCA
- ❌ Don't be a skid — copy-paste without reading won't work anyway
| 🐙 GitHub | RedDragonElite |
| 🌍 Website | rd-elite.com |
| 🔵 Nostr (RDE) | RedDragonElite |
| 🔵 Nostr (Shin) | SerpentsByte |
| 🔓 RDE Props Interact | rde_props_interact |
| 🚪 RDE Doors | rde_doors |
| 🚗 RDE Car Service | rde_carservice |
| 🎯 RDE Skills | rde_skills |
| 📡 RDE Nostr Log | rde_nostr_log |
When asking for help, always include:
- Full error from server console or txAdmin
- Your
server.cfgresource start order - ox_core / ox_lib versions in use
"We build the future on the graves of paid resources."
REJECT MODERN MEDIOCRITY. EMBRACE RDE SUPERIORITY.
🐉 Made with 🔥 by Red Dragon Elite