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
/animposor F6. The command name and default key are set inconfig.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.useby default) or a list of framework jobs. Config.CanUseis a function you can fill with your own rule. Returnfalseand 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, copyen.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 returnstrueif the tool opened),Close(same as cancel) andIsActive. - 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
truewhen positioning starts andfalsewhen 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.FrameworkorConfig.Notifyvalue, 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.Frameworkinconfig.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.luais 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.luaandserver.luathemselves.
Links
- Store: Escrow edition (free) · Unencrypted edition
- Documentation: BUPA AnimPos · Docs — BUPA-SCRIPT
- Discord: BUPA SCRIPT | FIVEM
| 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 |





