Skip to Content
TC KeysExports & Events

Exports & Events Reference

Complete reference for integrating tc_keys with other resources.

Server-Side Exports

Call from server scripts only using exports.tc_keys:<ExportName>(...).

Vehicle Key Exports

GiveVehicleKey(source, plateOrVehicle)

Gives a player a vehicle key. Adds the vehicle_key item with plate metadata and syncs client access.

ParameterTypeDescription
sourcenumberPlayer server ID.
plateOrVehiclestring | number | nilPlate string, vehicle entity handle, or nil to use the player’s current vehicle.

Returns: booleantrue if the key was given (or player already had it).

Examples:

-- Give key by plate exports.tc_keys:GiveVehicleKey(source, "ABC 123") -- Give key to current vehicle exports.tc_keys:GiveVehicleKey(source, nil) -- Give key by vehicle entity local vehicle = GetVehiclePedIsIn(GetPlayerPed(source), false) exports.tc_keys:GiveVehicleKey(source, vehicle)

Use Cases:

  • When a player purchases a vehicle
  • When spawning owned vehicles from garage
  • When assigning job vehicles
  • When sharing keys with another player

RemoveVehicleKey(source, plateOrVehicle)

Removes a player’s vehicle key (removes vehicle_key item and revokes client access).

ParameterTypeDescription
sourcenumberPlayer server ID.
plateOrVehiclestring | number | nilPlate string, vehicle entity handle, or nil for player’s current vehicle.

Returns: booleantrue if a key was removed.

Examples:

-- Remove key by plate exports.tc_keys:RemoveVehicleKey(source, "ABC 123") -- Remove key to current vehicle exports.tc_keys:RemoveVehicleKey(source, nil)

Use Cases:

  • When a vehicle is sold
  • When ending job shifts
  • When rental periods expire
  • When revoking stolen vehicle access

HasVehicleKey(source, plateOrVehicle)

Checks if a player has a vehicle key for the given plate or vehicle.

ParameterTypeDescription
sourcenumberPlayer server ID.
plateOrVehiclestring | number | nilPlate string, vehicle entity handle, or nil for player’s current vehicle.

Returns: booleantrue if the player has the key.

Examples:

local hasKey = exports.tc_keys:HasVehicleKey(source, "ABC 123") if hasKey then print("Player has the key!") end -- Check for current vehicle if exports.tc_keys:HasVehicleKey(source, nil) then -- Player has key to their current vehicle end

Use Cases:

  • Validating vehicle ownership
  • Restricting vehicle modifications
  • Checking access before actions

Door Key Exports

GiveDoorKey(source, doorIndex)

Gives a player a door key for the given door (by door lock id). Uses the key item with doorIndex metadata.

ParameterTypeDescription
sourcenumberPlayer server ID.
doorIndexnumberDoor index (id of the door lock).

Returns: booleantrue if the key was given (or player already had it).

Examples:

-- Give door key exports.tc_keys:GiveDoorKey(source, 1) -- In a loop for multiple players local nearbyPlayers = GetNearbyPlayers() for _, player in ipairs(nearbyPlayers) do exports.tc_keys:GiveDoorKey(player, doorIndex) end

Use Cases:

  • When selling/renting a property
  • When adding roommates
  • When granting access to shared areas
  • Admin commands for key management

RemoveDoorKey(source, doorIndex)

Removes a player’s door key for a specific door.

ParameterTypeDescription
sourcenumberPlayer server ID.
doorIndexnumberDoor index (id of the door lock).

Returns: booleantrue if a key was removed.

Examples:

-- Remove door key exports.tc_keys:RemoveDoorKey(source, 1)

Use Cases:

  • When evicting tenants
  • When property ownership changes
  • When revoking access rights
  • When a player leaves an organization

HasDoorKey(source, doorIndex)

Checks if a player has a door key for the given door (or access via job key where applicable).

ParameterTypeDescription
sourcenumberPlayer server ID.
doorIndexnumberDoor index (id of the door lock).

Returns: booleantrue if the player has access.

Examples:

local hasAccess = exports.tc_keys:HasDoorKey(source, 1) if hasAccess then -- Player can access this door end

Use Cases:

  • Validating access before actions
  • Checking permissions for door-related commands
  • Access control systems

💭 Note: This checks both regular door keys AND job-based access with job keys.


Job Key Exports

GiveJobKey(source, job, minGrade)

Gives a player a job-specific master key. The item is the one set in Config.JobKeyItem.

ParameterTypeDescription
sourcenumberPlayer server ID.
jobstringJob name.
minGradenumber | nilMinimum grade required. Defaults to 0. Note: This is deprecated - grade validation is now per-door.

Returns: booleantrue if the key was added to inventory.

Examples:

-- Give universal job key (recommended) exports.tc_keys:GiveJobKey(source, "police") -- Old method with minGrade (deprecated - grade validated per-door now) exports.tc_keys:GiveJobKey(source, "police", 2)

Use Cases:

  • When players go on duty
  • When hired into a job
  • Manual key distribution by admins

⚠️ Important: Grade validation happens per-door at time of use, not when the key is given. Use NPC dispensers for immersive key distribution.


RemoveJobKey(source, job)

Removes a job key from a player (one item matching the given job metadata).

ParameterTypeDescription
sourcenumberPlayer server ID.
jobstringJob name.

Returns: booleantrue if the key was removed.

Examples:

-- Remove job key exports.tc_keys:RemoveJobKey(source, "police")

Use Cases:

  • When players go off duty (optional)
  • When fired from a job
  • When revoking access for disciplinary reasons

Client-Side Exports

Call from client scripts only using exports.tc_keys:<ExportName>(...).

Door Lock UI Export

openDoorLocksUi()

Opens the door locks management UI. Uses nearby players (within 10 m) for giving keys. No parameters.

Examples:

-- Open door locks UI exports.tc_keys:openDoorLocksUi() -- Bind to a command RegisterCommand('doorui', function() exports.tc_keys:openDoorLocksUi() end) -- Bind to a keybind RegisterKeyMapping('doorui', 'Open Door Locks UI', 'keyboard', 'F7')

Use Cases:

  • Admin/developer door lock management
  • In-game door lock creation
  • Giving keys to nearby players
  • Editing existing door locks

Hotwire & Lockpick Exports

AttemptHotwire()

Starts the hotwire minigame for the vehicle the local player is in. Only works when the player is in the driver seat and does not already have vehicle access. Does nothing if already hotwiring.

Examples:

-- Start hotwire exports.tc_keys:AttemptHotwire() -- Check if in vehicle first if IsPedInAnyVehicle(PlayerPedId(), false) then exports.tc_keys:AttemptHotwire() end

Use Cases:

  • Custom hotwire items
  • Job-specific hotwiring
  • Mechanic functionality
  • Criminal roleplay scripts

AttemptLockpick()

Attempts to lockpick a nearby vehicle or door:

  • If a vehicle is nearby (within 2.5 m) and locked: starts the vehicle lockpick minigame.
  • If no vehicle is nearby: opens the door lockpick UI for a nearby door.

Shows a notification if there is no vehicle or door nearby. Does nothing if the player is already in a vehicle or already lockpicking.

Examples:

-- Start lockpick exports.tc_keys:AttemptLockpick() -- In a custom item handler RegisterNetEvent('myinventory:useLockpick', function() exports.tc_keys:AttemptLockpick() end)

Use Cases:

  • Custom lockpick items
  • Breaking and entering scripts
  • Criminal roleplay mechanics
  • Heist systems

Events

Server Events

tc_keys:server:doorLockpickResult

Triggered when a player completes a door lockpick attempt.

Parameters:

  • doorIndex (number) - The door being lockpicked
  • success (boolean) - Whether the lockpick succeeded

Example:

RegisterNetEvent('tc_keys:server:doorLockpickResult', function(doorIndex, success) local source = source if success then print("Player", source, "successfully lockpicked door", doorIndex) -- Add custom logic (log to database, alert, etc.) else print("Player", source, "failed to lockpick door", doorIndex) end end)

tc_keys:server:useKeyAtDoor

Triggered when a player uses a key on a door.

Parameters:

  • doorIndex (number) - The door being accessed

Example:

RegisterNetEvent('tc_keys:server:useKeyAtDoor', function(doorIndex) local source = source -- Add custom logging or effects end)

tc_keys:server:toggleDoorLock

Triggered when requesting to toggle a door lock state.

Parameters:

  • doorIndex (number) - The door to toggle

Client Events

tc_keys:client:doorLockState

Triggered when a door’s lock state changes. Synced to all clients.

Parameters:

  • doorIndex (number) - The affected door
  • locked (boolean) - New lock state

Example:

RegisterNetEvent('tc_keys:client:doorLockState', function(doorIndex, locked) if locked then print("Door", doorIndex, "was locked") else print("Door", doorIndex, "was unlocked") end -- Add custom UI indicator, sound, etc. end)

tc_keys:client:giveAccess

Triggered when a player receives vehicle access.

Parameters:

  • plate (string) - Vehicle plate

Example:

RegisterNetEvent('tc_keys:client:giveAccess', function(plate) print("Received access to vehicle:", plate) -- Custom notification or UI update end)

tc_keys:client:revokeAccess

Triggered when a player’s vehicle access is revoked.

Parameters:

  • plate (string) - Vehicle plate

Example:

RegisterNetEvent('tc_keys:client:revokeAccess', function(plate) print("Lost access to vehicle:", plate) -- Custom notification or UI update end)

tc_keys:client:useLockpickItem

Triggered when player uses lockpick item.

Example:

RegisterNetEvent('tc_keys:client:useLockpickItem', function() -- Item handler triggers this -- Calls AttemptLockpick() internally end)

tc_keys:client:useHotwireKitItem

Triggered when player uses hotwire kit item.

Example:

RegisterNetEvent('tc_keys:client:useHotwireKitItem', function() -- Item handler triggers this -- Calls AttemptHotwire() internally end)

Quick Reference Tables

All Server Exports

ExportPurpose
GiveVehicleKeyGive vehicle key by plate/vehicle.
RemoveVehicleKeyRemove vehicle key.
HasVehicleKeyCheck vehicle key.
GiveDoorKeyGive door key (by doorIndex).
RemoveDoorKeyRemove door key.
HasDoorKeyCheck door key / job access.
GiveJobKeyGive job master key.
RemoveJobKeyRemove job key.

All Client Exports

ExportPurpose
openDoorLocksUiOpen door locks management UI.
AttemptHotwireStart hotwire minigame (driver seat).
AttemptLockpickLockpick nearby vehicle or door.

Common Integration Patterns

Vehicle Shop:

-- Server RegisterNetEvent('myshop:purchase', function(plate) exports.tc_keys:GiveVehicleKey(source, plate) end)

Garage System:

-- Server RegisterNetEvent('mygarage:spawn', function(vehicle) exports.tc_keys:GiveVehicleKey(source, vehicle) end)

Property System:

-- Server RegisterNetEvent('myproperty:buy', function(propertyDoors) for _, doorIndex in ipairs(propertyDoors) do exports.tc_keys:GiveDoorKey(source, doorIndex) end end)

Job System:

-- Server RegisterNetEvent('myjob:onDuty', function(job) exports.tc_keys:GiveJobKey(source, job) end)
Last updated on