[FREE] BUPA AnimPos - In-Game Animation Position Tool | QB / QBox / ESX / Standalone

BUPA Animpos lets a player move and rotate their own character in small steps while an emote keeps playing, so a sit or a lean lines up with the chair, ledge or counter it is meant for. Every position update is checked on the server before other players see it. The escrow edition is free.

Escrow edition (free) · Unencrypted edition · Documentation · Discord


Moving and rotating

Start an emote, open the tool, nudge the character into place, press Enter.

  • Open it with /animpos or F6. The command name and default key are set in config.lua, and players can rebind the key in the GTA key binding settings.
  • W / S move forward and backward along the direction the character faces.
  • Left / Right arrow move sideways, Up / Down arrow change the height.
  • Q / E rotate the character left and right.
  • Hold Left Shift for precision mode: movement and rotation drop to 25 % speed by default.
  • Press R to jump back to the starting position and heading without closing the tool.
  • Enter confirms. The character stays frozen at the new spot until the player releases it with the cancel key, which puts it back where it started.
  • Esc cancels and returns the character to its starting position and heading.
  • While you adjust, the character is see-through and frozen in place, the emote is not interrupted, and the mouse still turns the camera.
  • Open, confirm, cancel and reset play GTA frontend sounds. They can be changed or muted in the config.

Limits and who can use it

Every open attempt runs the same checks, and the player gets a notification saying exactly why it was blocked.

  • Distance limit: moving more than 5.0 m from the start sends the character back to where it started.
  • Height limit: 3.5 m above or below the starting point. Going past it cancels and restores the start position.
  • 15 second cooldown between uses.
  • Blocked while in a vehicle, falling or parachuting, and (optional, off by default) while swimming. These checks use natives and work on every framework.
  • On QBox and QBCore it is also blocked while dead, in last stand or handcuffed. The metadata key names are in the config, so packages that store these flags under other names still work.
  • Optional permission: an ACE permission checked on the server (animpos.use by default) or a list of framework jobs.
  • Config.CanUse is a function you can fill with your own rule. Return false and an optional message to block the player.
  • Each restriction has its own on/off switch in config.lua.

What other players see

Position changes are sent to nearby players while you move, so they see the character slide into place instead of jumping.

  • Position, heading and transparency are synced while the tool is open, at most once every 50 ms by default.
  • The server only forwards updates to players within 100 m of the player using the tool, not to the whole server.
  • The server rejects any update that is more than 12 m away from the player’s real position on the server, so the sync event cannot be used to move a ped across the map.
  • Updates with wrong data types, NaN values or coordinates outside the map are dropped.
  • Each player has a server-side rate limit on updates (50 ms by default).
  • On confirm or cancel the final position is sent once more with normal visibility.

Control panel and languages

A small panel lists every key while the tool is open and lights up the keys the player is holding.

  • Panel on the left, right or centre of the screen, with pixel offsets on both axes.
  • Any hex accent colour for the key highlights.
  • The title block and the tip line at the bottom can each be hidden.
  • Enter and Esc flash with a glow or pulse effect. Key animations can be turned off.
  • The font ships inside the resource. The panel loads nothing from outside the resource.
  • 7 languages: English, Turkish, German, French, Spanish, Portuguese and Russian. Pick one with Config.Locale.
  • Translations are JSON files in locales/. To add a language, copy en.json, translate the values and set the new code in the config. No manifest change is needed.

Exports and integrations

  • Client exports for other resources: Open (runs every check and returns true if the tool opened), Close (same as cancel) and IsActive.
  • Notifications through ox_lib, QBCore, ESX or your own function (Config.Notify = 'custom').
  • Anticheat hook (off by default): a server event of your choice is triggered with true when positioning starts and false when it ends, so a teleport or noclip check can ignore the player for that window.
  • Ped scale hook (off by default): calls your ped scale resource’s pause export while positioning and its resume export afterwards. It only runs if that resource is started.
  • If the resource is stopped while someone is using it, their character is made visible and unfrozen again.
  • The server console warns about an invalid Config.Framework or Config.Notify value, and prints a notice when a newer version is released.
  • No database and no items.
local opened = exports['bupa-animpos']:Open()

if exports['bupa-animpos']:IsActive() then
    exports['bupa-animpos']:Close()
end

Configuration

Movement limits and speeds, copied from config.lua:

Config.Movement = {
    Speed = 0.01,           -- Movement speed
    RotationSpeed = 0.5,    -- Rotation speed
    MaxDistance = 5.0,      -- Maximum distance
    MaxHeight = 3.5,        -- Maximum height
    MinHeight = -3.5,       -- Minimum height

    -- Precision mode: hold Config.Controls.Precision to move/rotate slower
    -- for fine adjustments (multiplier applied to speed & rotation).
    PrecisionMultiplier = 0.25,
}

Every key (movement, rotation, confirm, cancel with two alternatives, reset, precision), the sounds, the sync timings and the server-side distance and range checks are also in config.lua.

Frameworks and dependencies

  • Frameworks: QBox, QBCore, ESX or standalone, selected with Config.Framework in config.lua.
  • Required: ox_lib
  • Optional: qbx_core, qb-core or es_extended (only for job permissions, the dead / last stand / handcuffed checks and framework notifications)
  • Languages: 7 (en, tr, de, fr, es, pt, ru)

Editions

  • Escrow edition (free): config.lua is open. The locale files are plain JSON, so you can translate the text or add a language.
  • Unencrypted edition (paid): full source, no escrow. The same script, for servers that want to change client.lua and server.lua themselves.

Links


Code is accessible Partially (free escrow edition: config.lua open) / Yes (paid unencrypted edition)
Subscription-based No
Lines (approximately) ~1,200
Requirements & dependencies ox_lib
Support Yes
1 Like