Object Spawner

{:links-list}

This page covers the current project source and supplied resource configuration, whose manifest lists version 2.0.0+. It includes a searchable prop selector, favorites, saved groups, vehicle attachments, and Free Aim, Gizmo, and Keyboard placement modes.

INSTALLATION

  1. Extract the downloaded resource folder into your server's resources folder. Keep the name BigDaddy-ObjectSpawner.
  2. Add your product key from your account to key1 under [licensing] in settings.ini.
  3. Configure mysql_connection_string in server.cfg before starting this resource. The bundled bdsql.js connects directly to MySQL; saved groups use the bd_objectspawner table. Import the supplied CREATETABLE.sql if the table does not already exist.
  4. Configure access using the Permissions section below.
  5. Add ensure BigDaddy-ObjectSpawner to server.cfg.

DO NOT RENAME THE FOLDER.

The resource loads files and calls events using the name BigDaddy-ObjectSpawner.

{:is-danger}

Keep the bundled gizmo, nui, and stream folders and supporting files with the resource. Its prop selector and gizmo are included; it does not use BDMenu for this interface.

COMMANDS

Command Action
/spawner or /spawner w Open the prop selector for world placement.
/spawner v Open the selector for attachment to your current vehicle, or the closest vehicle within 10 metres if you are on foot.
/spawner w <model> Start world placement of a model by its spawn name when allowAnyModel=true. Example: /spawner w prop_couch_lg_06.
/spawner v <model> Start placement of a model on the selected vehicle when allowAnyModel=true.
/objgroup <name> Set the group that newly placed objects will be saved to. Names can contain spaces.
/objgroup Stop saving new placements to a group.
/spawngroup <name> Load one of your previously saved groups.
/editmode Toggle selection mode for editing your spawned objects.
/deleter Delete your closest spawned object within 100 metres.
/deleteradius Delete your spawned objects within 10 metres.
/clearer Clear the closest spawned object within 100 metres, regardless of who spawned it.
/clearradius Clear spawned objects within 10 metres, regardless of who spawned them.

The delete/clear commands target objects marked by Object Spawner, not every map prop. Ownership for these client actions is based on the object's recorded spawning ped, so it is not permanent account ownership across sessions.

Use /objgroup <name> to select a save group before placing objects. Although the command handler accepts a third argument after the model, it does not set the active save group consistently; use the dedicated group command.

Player attachment (/spawner me) is not implemented as a working mode in this source; the command falls back to world placement.

SPAWNING AND PLACEMENT

  1. Run /spawner w or /spawner v.
  2. Search the categorized Prop Selector, choose a favorite, or use Spawn by Name to enter a model name.
  3. Position and rotate the preview. New world placements start in Free Aim; vehicle placements start in Gizmo.
  4. Press Enter for hard placement or Space for soft placement. Press Delete to abandon an unplaced preview.

Hard placement freezes the object in place. Soft placement leaves it unfrozen so its model's physics can apply. Vehicle placements attach the object to the vehicle. Model collision and physics can affect the result, and attached objects can be detached by the script when a vehicle tips or stops violently, including hard-placed objects.

Favorites are stored on the player's client using resource KVP storage. They are separate from database-backed saved groups.

Placement controls

These are the default keyboard controls used by the code. Game control bindings can affect the physical key used.

Key Action
[ / ] Cycle between Free Aim, Gizmo, and Keyboard placement.
Enter / Numpad Enter Hard placement. The focused Gizmo interface handles Enter.
Space Soft placement.
Delete Cancel an unplaced preview.
Page Down Place the preview on the ground.

Free Aim

Look and walk around to position the preview in front of the camera. Switch to Gizmo or Keyboard for precise adjustments.

Gizmo

Key/control Action
Mouse drag Move or rotate using the visible gizmo handles.
W Translation mode.
R Rotation mode.
Left Alt Release cursor focus to move the camera; press again to return to the gizmo.

Keyboard

Key Action
Arrow keys Move horizontally along the X/Y axes.
Numpad 8 / 5 Move up / down.
Numpad 7 / 9 Rotate around Z (yaw).
Numpad 4 / 6 Rotate around Y (roll).
Numpad - / + Rotate around X (pitch).
Hold Left Shift Faster movement and rotation.
Hold Left Alt Fine rotation adjustments.

The bundled on-screen yaw hint says Numpad 7 / 8, but the C# handler uses Numpad 7 / 9. Numpad 8 controls height.

Editing existing objects

Run /editmode and stand within two metres of one of your spawned objects. The selected object is outlined. Press E to reposition it, or Delete to request deletion and confirm in the dialog. Press Backspace to leave selection mode, or toggle /editmode again.

Do not rely on Backspace to undo a placement already being edited: the placement cancellation/restore handlers are commented out in the current C# source, even though the interface can show a cancel-edits hint.

SAVED GROUPS AND RESTARTS

To build and reload a group:

  1. Run /objgroup Roadblock (or another name).
  2. Place objects with /spawner w or /spawner v. Completed placements are saved while a group is active.
  3. Run /objgroup with no name when finished.
  4. Use /spawngroup Roadblock or select the saved group in the prop selector to load it later.

World groups store object coordinates and rotations. Vehicle groups store attachment offsets and vehicle information; loading a vehicle group can spawn the saved vehicle with its objects. Keep world and vehicle objects in separate groups: the source checks the group's attachment type before adding objects. Group lookups use the player's license or Discord identifier.

Saved groups and automatic persistence are different. Group records remain in MySQL and can be loaded after a restart. Unsaved placements have no database-backed restoration. The readable client/server source does not implement automatic restoration of placed objects on restart; its persistence flag remains false. The supplied persistence setting does not establish a working automatic restore feature.

Clearing live objects does not reliably remove their saved group records. In particular, the radius commands only delete live entities. The edit-mode single-object deletion also has a mismatched database-delete event name in the current source, so a deleted object may return when its group is loaded again. Use the selector's group deletion action when you intend to remove a whole saved group.

CONFIGURATION

settings.ini

Section and setting names are case-insensitive. These are the supplied entries and their behavior in the inspected source. Restart the resource and reconnect as needed after changing startup permissions.

[licensing]

Setting Value Description
key1 Your product key Enter your own key from your account.

[settings]

Setting Supplied value Description
useAcePermissions false Enable the ACE startup check. The plural spelling is required.
useBadgerPermissions false Legacy permission option; the Badger checking method is not connected to the current C# startup path.
usePermissionsForClear false Present in the INI but not read by the current C# clear commands. It does not add a separate cleanup permission check.
permissions command Used by the legacy permission-checking method, not the active startup ACE check. See AcePermission below.
allowAnyModel true Allow a model argument in /spawner. Setting it to false opens the selector instead. The selector's Spawn by Name action is not gated by this setting.
allowSavingGroups true Present in the INI but not read by the current C# group-saving path. Setting it to false does not disable those commands.
requirePermsForPersisting true Present in the INI but not read by the current C# persistence path. It does not enable automatic restoration.
DesyncKey Supplied with the resource Internal synchronization setting. Keep the supplied value.

The code also reads these settings, which are absent from the supplied INI:

Setting Fallback Description
AcePermission command ACE name checked at startup when useAcePermissions=true.
Debug false Enable additional debug logging. Some messages are printed regardless.

Permissions

To restrict normal access through the active startup check, add the following under [settings] in settings.ini:

useAcePermissions=true
AcePermission=objectspawner.use

Then grant that ACE to your chosen server group, for example in server.cfg:

add_ace group.admin objectspawner.use allow

Players must already belong to the chosen group. See the permissions guide for principal setup.

The current client stops initialization when this startup check denies access. The old useAcePermission spelling and changing permissions alone do not configure that check. Enabling only useBadgerPermissions does not restrict this startup path.

These settings should not be described as complete server-side authorization: the inspected database mutation handlers do not independently repeat the startup ACE check, and the clear commands have no separate permission check.

Objects.json

The active catalog is Objects.json. It contains an array of categories, each with a props array:

[
  {
    "categoryName": "Furniture",
    "categoryDescription": "Indoor and outdoor furniture",
    "props": [
      {
        "propName": "Large Couch",
        "spawnCode": "prop_couch_lg_06"
      }
    ]
  }
]
Field Meaning
categoryName Category heading in the selector.
categoryDescription Description of the category.
props Objects in that category.
propName Friendly display name.
spawnCode Actual model spawn name. The model must be available to the client.

Keep valid JSON when adding or removing entries: use double quotes, commas between items, and no trailing commas. Restart the resource and reload the client interface after changes.