Animations Core

Prompt Anim Core

Standalone animation system for gym equipment โ€” used across all Promptโ€™s Mods gym maps.

Installation Instructions

1

Step 1 โ€” Download and install

Download the Prompt Anim Core resource and place it in your resources directory.

resources/prompt_anim_core

Then add it to your server.cfg:

ensure ox_lib
ensure ox_target   # Optional but recommended
ensure prompt_anim_core
2

Step 2 โ€” Configure permissions

Edit your server.cfg to assign ACE permissions:

# Give admin group all gym permissions
add_ace group.admin gym.admin allow

# Add player to admin group
add_principal identifier.steam:YOUR_STEAM_ID group.admin

To disable all permissions and allow everyone to use admin tools:

Config.Permissions.usePermissions = false
3

Step 3 โ€” Start your server

Restart your server and use /placeequipment to begin placing gym props interactively. If animations and interaction zones appear correctly, installation was successful โœ…


๐Ÿ’ก Tip: Keep ox_lib above this resource in your cfg. It provides the required callbacks, menus, and zones for proper animation handling.


Configuration

โš™๏ธ Performance Settings

Config = {
    SpawnDistance = 50.0,  -- Distance props spawn (meters)
    SyncRadius = 20.0,     -- Animation sync radius
    Debug = true,          -- Enable debug logs
}

๐Ÿ’ก Lower SyncRadius = better performance on high-pop servers.


Unified Animation Menu

Manage all gym equipment and prop groups from one unified, interactive menu with real-time editing, placement, and group management.

Command: /anim_menu

Opens the unified interface where you can place props, manage groups, and edit existing setups โ€” all in one place.


๐ŸŽฏ Place Single Prop

Quickly place individual gym equipment outside of any group for testing or simple setups.


๐Ÿ†• Create New Group

Start a new prop group collection directly from the menu:

  1. Click "Create New Group" and enter a name

  2. Use the placement tool to add multiple props

  3. Save your group to file for persistence across restarts


โœ๏ธ Select & Edit Group

Manage existing groups effortlessly:

  • View all saved prop groups

  • Load any group for editing

  • Add or remove props live in the world

  • Save changes to update the group file

  • Visual status indicators for each group: โœ… Loaded / โญ• Unloaded


๐Ÿ’พ Active Group Session

When a group is active:

  • Add Props โ€” Place new equipment linked to this group

  • Remove Props โ€” Delete button appears on props in the active group

  • Save Changes โ€” Automatically detects and saves modifications

  • Cancel โ€” Discards all unsaved changes and closes the session


Example Workflow

1. /anim_menu โ†’ Click "Create New Group"
2. Enter name: "my_custom_gym" โ†’ Confirm
3. Use placement tool โ†’ Place speedbag
4. Use placement tool โ†’ Place leg press
5. Use placement tool โ†’ Place bike
6. /anim_menu โ†’ Click "Save Group"
7. Server restart โ†’ Group auto-loads automatically!

Commands

Command
Description

/anim_menu

Opens unified animation management menu (groups + placement)


/placeequipment (Single Prop)

Use /placeequipment to manually place a single prop outside of any group.

Controls

Key
Action

WASD

Move horizontally

PgUp / PgDn

Adjust height

Q / E

Rotate

G

Snap to ground (align bottom)

ENTER

Save and broadcast placement

BACKSPACE

Cancel placement

Requirements

gym.place or gym.admin permission (or set usePermissions = false to disable restrictions)

How It Works

  1. Opens a menu to select equipment type

  2. Spawns a transparent preview (visible only to you)

  3. Move and rotate freely to position

  4. Press ENTER to confirm placement โ€” instantly syncs for all players


Developer API

exports['prompt_anim_core']:SpawnGymEquipment(
    equipmentType,  -- "speedbag", "leg_press", etc.
    coords,         -- vector3(x, y, z)
    heading,        -- 0.0โ€“360.0
    locationName,   -- optional (e.g. "custom_gym")
    instanceName    -- optional unique ID
)

Example:

exports['prompt_anim_core']:SpawnGymEquipment(
    "speedbag",
    vector3(100.0, 200.0, 30.0),
    90.0,
    "custom_location",
    "my_speedbag_1"
)

Exercise Tracking API

Hook into these events for progression or stats systems.

gym:exerciseStarted

AddEventHandler('gym:exerciseStarted', function(data)
    print(data.playerName .. " started using " .. data.machineType)
end)

gym:exerciseCompleted

AddEventHandler('gym:exerciseCompleted', function(data)
    print(data.playerName .. " completed " .. data.machineType)
    print("Duration: " .. data.duration .. " seconds")
end)

Data Example:

{
    playerId = 1,
    playerName = "John Doe",
    machineName = "vinewood_default_speedbag_1",
    machineType = "speedbag",
    animationDict = "prompt@speedbag",
    animationName = "speedbag@skel_clip_0",
    position = vector3(x, y, z),
    heading = 90.0,
    location = "vinewood",
    timestamp = 1699123456,
    duration = 15
}

Interaction Systems

Two supported systems, auto-detected at runtime:

System
Description

ox_target

Preferred. Circular interaction zones with โ€œUse Equipmentโ€ prompts.

lib.zones

Fallback. TextUI prompts when nearby (press E).

If ox_target is not installed, the script automatically switches to lib.zones.


Debug Mode

Config.Debug = true

Displays:

  • Spawn/despawn logs

  • Animation triggers

  • Player position/heading

  • Permission checks

  • Exercise data

Disable in production for best performance.


Dependencies

Required:

  • ox_lib

Optional:

  • ox_target (recommended for enhanced targeting)


Quick Start

  1. Install and ensure ox_lib (and optionally ox_target)

  2. Add ensure prompt_anim_core to server.cfg

  3. Configure permissions (or disable them)

  4. Use /placeequipment to start placing gym props

  5. Players interact via target zones or proximity prompts


Example: Custom Gym Resource

RegisterCommand('spawngym', function()
    exports['prompt_anim_core']:SpawnGymEquipment("speedbag", vector3(100,200,30), 0.0, "custom", "bag1")
    exports['prompt_anim_core']:SpawnGymEquipment("leg_press", vector3(105,200,30), 90.0, "custom", "press1")
    exports['prompt_anim_core']:SpawnGymEquipment("gymbike", vector3(110,200,30), 180.0, "custom", "bike1")
end)

AddEventHandler('gym:exerciseCompleted', function(data)
    print(data.playerName .. " earned XP for " .. data.machineType)
end)

Troubleshooting & Support

Problem
Solution

Props not visible

Ensure ox_lib is running and resource is started

Can't use /placeequipment

Check ACE permissions or disable them in config

Animations not syncing

Increase SyncRadius or ensure players are within range

Props floating/clipping

Use G to snap to ground, adjust with PgUp/PgDn

Join Discord

Last updated