Native Function Lookup¶
Natives are built-in functions provided by the GTA5/RDR3 game engine and the CFX platform. They expose game functionality like entity management, player data, vehicle spawning, UI rendering, and more.
RDR3 is the CFX platform identifier for RedM, which targets Red Dead Redemption 2 (there is no game called "Red Dead Redemption 3"). The rdr3 token is used by Cfx.re for manifests, native databases, and tooling, so it is kept as-is throughout this plugin.
Reference¶
- GTA5 (FiveM) natives: https://docs.fivem.net/natives/
- RDR3 (RedM) natives: https://rdr3natives.com/
- CFX natives (shared platform functions): included in both native references above
Calling conventions¶
Natives use the same function names across all three runtimes, but the syntax differs:
Lua¶
local coords = GetEntityCoords(playerPed)
local vehicle = CreateVehicle(modelHash, x, y, z, heading, true, true)
JavaScript¶
const coords = GetEntityCoords(playerPed, false);
const vehicle = CreateVehicle(modelHash, x, y, z, heading, true, true);
C¶
Vector3 coords = API.GetEntityCoords(playerPed, false);
int vehicle = API.CreateVehicle((uint)modelHash, x, y, z, heading, true, true);
In C#, all natives are called through the API class from CitizenFX.Core.
Client vs server vs shared¶
- Client-only natives: rendering, input, camera, HUD, most entity manipulation
- Server-only natives: player management, server info, ACE permissions
- Shared natives: some entity getters, math, hash functions
Calling a server native on the client (or vice versa) will error silently or crash. Always check the native reference for which side it runs on.
Commonly used natives¶
Player and ped¶
| Native | Side | Description |
|---|---|---|
PlayerPedId() |
client | Get the local player's ped entity |
GetPlayerPed(serverId) |
server | Get a player's ped by server ID |
GetEntityCoords(entity) |
shared | Get position as vector3 |
GetPlayerName(playerId) |
shared | Get player name |
GetPlayerIdentifiers(playerId) |
server | Get all identifiers (license, steam, discord, etc.) |
Vehicles¶
| Native | Side | Description |
|---|---|---|
CreateVehicle(hash, x, y, z, heading, isNetwork, netMissionEntity) |
client | Spawn a vehicle |
SetEntityHeading(entity, heading) |
shared | Set entity rotation |
DeleteEntity(entity) |
shared | Delete an entity |
GetVehiclePedIsIn(ped, lastVehicle) |
client | Get the vehicle a ped is in |
Commands and events¶
| Native | Side | Description |
|---|---|---|
RegisterCommand(name, handler, restricted) |
shared | Register a chat command |
TriggerServerEvent(name, ...) |
client | Send event to server |
TriggerClientEvent(name, target, ...) |
server | Send event to a client |
TriggerEvent(name, ...) |
shared | Trigger a local event |
Utility¶
| Native | Side | Description |
|---|---|---|
GetHashKey(string) |
shared | Hash a string at runtime |
Wait(ms) |
shared | Yield the current thread |
GetGameTimer() |
shared | Milliseconds since game start |
GetResourceState(name) |
shared | Check if a resource is started |
Hash optimization¶
In Lua, use backtick syntax for compile-time hashing of string literals:
-- Good: compile-time hash (faster)
local hash = `adder`
-- Bad: runtime hash (slower)
local hash = GetHashKey('adder')
Backtick hashing only works with literal strings, not variables. For dynamic strings, GetHashKey() is still required.
Tips¶
- Always check the return type; some natives return vectors, others return individual x/y/z values
- Many natives that accept a "player" parameter expect different IDs on client (local index) vs server (server ID / source)
- Use the MCP
lookup_nativetool to search by name or keyword if you are unsure which native to use - Deprecated natives still work but may be removed; prefer the replacement listed in the docs