New releaseRR Gym: real workouts, strength and staminaRR Gym is out

Prop Placer

Place 2,500+ props anywhere in game, keep them through restarts, turn safes into lootable vaults and remove map props you do not want.

v2.1.1Qbox / QBCore$12.99Store page

rr-propplacer lets admins place props anywhere on the map from an in-game dashboard. Every prop is saved to your database, streams in and out by distance and is back after every restart. Props can be made lootable (safes, vaults, cash crates, stashes), and you can hide the map's own props, like a bench or a bin that is in your way.

If you are upgrading from qb-propplacer: the folder was renamed to rr-propplacer; your tables carry over.

1. Requirements

  • ox_lib
  • oxmysql
  • ox_target
  • qbx_core or qb-core
  • ox_inventory or qb-inventory (only needed if you use item loot; cash loot works without)

The framework and inventory are detected on start. You only need to touch Config.Framework and Config.Inventory if you want to force one.

2. Install

  1. Put the rr-propplacer folder in your resources folder. The folder name must be exactly rr-propplacer.
  2. Open your server.cfg and add the line below. It must come after ox_lib, oxmysql, ox_target and your framework (qbx_core or qb-core):
ensure ox_lib
ensure oxmysql
ensure ox_target
ensure qbx_core        # or qb-core
ensure rr-propplacer
  1. Start (or restart) the server.
  2. Connect, and see "First start" below.

3. First start

On the first start the resource creates two tables in your database, placed_props and removed_props. You do not need to import anything.

If you would rather create them yourself, sql/props.sql is included. Import it before the first start.

After the first start, reconnect to the server once. Your client downloads the dashboard files the first time, and the dashboard will not open correctly until you have reconnected.

Then type /propplacer in game. If the dashboard opens, you are done.

4. Permissions

/propplacer is for admins. A player can use it if any of these is true:

  • They have the command ace.
  • They have the ace command.propplacer.
  • They have the framework permission set in Config.RequiredPermission (default admin).

On start the resource adds add_ace group.admin command.propplacer allow, so your admin group works with no extra setup.

To allow another group, add a line to your server.cfg:

add_ace group.moderator command.propplacer allow

To change the framework permission that is required, edit config.lua:

Config.RequiredPermission = 'admin'   -- for example 'god'

To rename the command, change Config.Command.

5. Placing props and controls

  1. Run /propplacer.
  2. Find a prop. Use the category list, the search box, favourites or recently used. About 2,000 props have picture thumbnails, and the selected prop shows in a live 3D preview.
  3. Pick it. For props with a loot type, choose one from the dropdown (or leave it off for a plain prop).
  4. Aim where you want it. A preview of the prop follows your aim.
  5. Place it with the right mouse button.

Controls while placing:

KeyAction
Right mousePlace
Left mouseCancel
ScrollRotate
PgUp / PgDn (hold)Raise / lower. Hold Shift to go faster
Shift + ScrollFine height nudge, one step per notch
Left CtrlToggle ground snap

Ground snap keeps the prop on the floor wherever you aim. Any height input turns it off, which is how you mount a TV or a safe on a wall: aim at the wall, hold PgUp to the height you want, rotate to face out, place. Turning snap back on resets the height offset.

The speeds are in config.lua: Config.RotateStep (degrees per scroll tick), Config.ZStep, Config.ZSpeed and Config.ZFastMultiplier.

Placed props are frozen in place by default (Config.Frozen = true), so players and vehicles cannot bump them.

6. Managing placed props

The Manage tab lists everything you placed. For each prop you can:

  • Teleport to it
  • Move it (you place it again somewhere new)
  • Place a copy
  • Delete it

Deleting removes the prop for every player and removes its row from the database.

7. Loot tables

Any prop can be made lootable. Players see an ox_target eye on it. They pick the option, a progress bar runs, and the server rolls the reward. The payout is decided on the server, with a distance check, and the prop then goes on a cooldown that survives restarts.

Seven tables are included, all editable in config.lua under Config.LootTables:

TableStyleCooldown
vaultLarge cash plus gold bars1 hour
safeMedium cash, small chance of gold30 minutes
registerQuick, low cash10 minutes
stashCash plus gold items30 minutes
jewelryCash plus gold, watches, rings45 minutes
drugstashCash, dirty money, product30 minutes
gunstashCash and ammo (weapons off by default)40 minutes

Each table can have these fields:

FieldMeaning
cooldownSeconds before that prop can be looted again. 0 means no cooldown
durationProgress bar length in milliseconds
labelProgress bar text
animOptional { dict, clip } animation while cracking
cash{ min, max } clean cash
blackMoney{ min, max } of the item named in Config.BlackMoneyItem
itemsWeighted list: { item = 'name', min = 1, max = 3, chance = 70 }, chance is 0 to 100

Example, a table of your own:

['pawnshop'] = {
    cooldown = 1200,
    duration = 6000,
    label    = 'Going through the drawer...',
    cash     = { min = 400, max = 1500 },
    items    = {
        { item = 'goldchain', min = 1, max = 1, chance = 30 },
    },
},

Every item name must exist in your inventory, or the item part of the reward will not be given. Check spelling against your items list.

Notes:

  • The included ammo items are ox_inventory names (ammo-9, ammo-45). On qb-inventory use names like pistol_ammo.
  • Weapons are commented out in gunstash so they do not unbalance your economy. Uncomment them and tune the chance carefully.
  • The loot table the dashboard suggests for a prop comes from the loot field in catalog.lua.
  • Config.DefaultLootTable is the table offered first (default vault).

Dirty money: Config.BlackMoneyItem

Tables with blackMoney pay out the item in Config.BlackMoneyItem. The default is black_money. Most qb-core servers use markedbills instead:

Config.BlackMoneyItem = 'markedbills'

8. Removing and restoring world props

You can hide props that belong to the map, like a bench, a bin or a barrier, for every player.

To remove one:

  1. Open the dashboard and choose Remove World Prop.
  2. Aim at the map prop. It gets a red outline.
  3. Scroll to change the hide radius.
  4. Right mouse to remove it.

Hidden props are saved in removed_props, so they stay gone after restarts and apply to every player who joins.

To bring one back, open the World tab, find it in the list and press Restore (it asks you to confirm). The prop returns the next time that area streams in for a player, so walk away and back, or reconnect, if you do not see it straight away.

Keep the radius small. A hide is based on the model and the radius, so a large radius can hide every copy of that model nearby. The default is Config.RemoveRadius = 1.0, limited to Config.RemoveRadiusMin (0.3) and Config.RemoveRadiusMax (25.0). Props you place yourself, and props from other resources, are not hidden by a removal.

To protect models that must never be removed, list them in Config.RemoveProtected:

Config.RemoveProtected = {
    'prop_atm_01',
    'prop_fire_hydrant_1',
}

The MLO limit

Props that are baked into an MLO's interior geometry are not separate objects, so they cannot be removed at runtime. That needs a ymap edit in a tool such as CodeWalker. If you aim at something and nothing gets picked, this is the usual reason. Everything that is a real map object (benches, bins, dumpsters, signs, most street furniture) works.

9. Configuration reference

All in config.lua:

SettingDefaultWhat it does
Config.CommandpropplacerChat command that opens the placer
Config.UseDashboardtruefalse brings back the classic ox_lib menus
Config.Framework'auto''auto', 'qbx' or 'qb'
Config.Inventory'auto''auto', 'ox' or 'framework'
Config.BlackMoneyItemblack_moneyItem used for dirty money. markedbills on most qb-core servers
Config.RequiredPermissionadminFramework permission needed
Config.RenderDistance150.0How close a player must be for a prop to spawn
Config.StreamCheckInterval1000Milliseconds between distance checks
Config.FrozentruePlaced props are frozen
Config.LootTargetDistance2.0How close the loot eye appears
Config.RemoveRadius1.0Default hide radius when removing world props
Config.RemoveScanDistance30.0How far the aim reaches
Config.RemoveStreamDistance300.0Distance at which hides are applied for a player
Config.RemoveProtectedemptyModels that can never be removed

10. Open files

config.lua, catalog.lua, thumbs.lua, the html folder and the sql folder are open for editing. Client and server logic are protected by Cfx.re asset escrow.

11. FAQ

Can I add my own props? Yes. Open catalog.lua and add a line to any category, or add a whole new category. A line looks like this:

{ label = 'My Crate', model = 'prop_crate_01a', loot = 'stash' },

label is the name shown in the dashboard, model is the model name, and loot is optional (the loot table suggested for it). Custom streamed props work too, as long as the model is loaded on your server. Restart the resource after editing.

Do props survive restarts? Yes. Each prop is a row in placed_props, and it is respawned for players when the server or the resource starts. Loot cooldowns survive too. In 2.1.1 restarting only the resource no longer leaves a second copy of each prop on connected clients.

Does it work on QBCore? Yes, from 2.1.0. Qbox and QBCore are both supported, with ox_inventory or qb-inventory. Framework and inventory are detected on start. On most qb-core servers set Config.BlackMoneyItem = 'markedbills' and use qb-inventory item names in your loot tables. ESX is not supported.

Will hundreds of props hurt performance? Props only exist near players. A prop spawns when someone is within Config.RenderDistance (150 by default) and despawns when they leave, checked once per second by default. So a full map of props costs nothing in areas where nobody is. Lower the distance if you want the cost lower still.

I placed a prop and it does not show. Why? Work down this list:

  1. Distance. Props only spawn within 150 units of you. Walk closer.
  2. Reconnect. After the first start, you must reconnect once. If the dashboard looks empty or broken, this is why.
  3. Model name. If you added a custom prop, check the spelling and that the model streams on your server.
  4. Wrong place. Check the Manage tab. Use Teleport to go to the prop.
  5. Interior changes. A prop that is culled (for example after an interior transition) is recreated on the next streaming pass, usually within a second or two. You never need to reset the resource.
  6. Restore not showing. A restored world prop returns when its area next streams in.

The prop is floating or sunk into the floor. Toggle ground snap with Left Ctrl, or use PgUp, PgDn or Shift + Scroll to adjust the height before you place it. Use Move in the Manage tab to fix one already placed.

A player cannot use /propplacer. Give their group the ace command.propplacer (see Permissions), or set Config.RequiredPermission to a permission they have.

The loot gives cash but not items. The item name in your loot table does not exist in your inventory. Check the spelling against your items list.

I removed a prop and the whole row of them is gone. The hide is by model and radius. Restore it from the World tab and remove it again with a smaller radius.

Why can I not remove a prop inside a building? See "The MLO limit" above.

Can I use the old menus? Yes, set Config.UseDashboard = false.

12. Support

Discord: https://discord.gg/VMXzjgzN7R Web: https://playrosie.com

When you ask for help, send your server.cfg ensure lines, your framework and inventory, and any console errors. It saves a round trip.

Last updated 2026-10-21