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.
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
plateOrVehicle | string | number | nil | Plate string, vehicle entity handle, or nil to use the player’s current vehicle. |
Returns: boolean — true 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).
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
plateOrVehicle | string | number | nil | Plate string, vehicle entity handle, or nil for player’s current vehicle. |
Returns: boolean — true 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.
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
plateOrVehicle | string | number | nil | Plate string, vehicle entity handle, or nil for player’s current vehicle. |
Returns: boolean — true 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
endUse 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.
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
doorIndex | number | Door index (id of the door lock). |
Returns: boolean — true 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)
endUse 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.
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
doorIndex | number | Door index (id of the door lock). |
Returns: boolean — true 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).
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
doorIndex | number | Door index (id of the door lock). |
Returns: boolean — true if the player has access.
Examples:
local hasAccess = exports.tc_keys:HasDoorKey(source, 1)
if hasAccess then
-- Player can access this door
endUse 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.
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
job | string | Job name. |
minGrade | number | nil | Minimum grade required. Defaults to 0. Note: This is deprecated - grade validation is now per-door. |
Returns: boolean — true 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).
| Parameter | Type | Description |
|---|---|---|
source | number | Player server ID. |
job | string | Job name. |
Returns: boolean — true 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()
endUse 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 lockpickedsuccess(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 doorlocked(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
| Export | Purpose |
|---|---|
GiveVehicleKey | Give vehicle key by plate/vehicle. |
RemoveVehicleKey | Remove vehicle key. |
HasVehicleKey | Check vehicle key. |
GiveDoorKey | Give door key (by doorIndex). |
RemoveDoorKey | Remove door key. |
HasDoorKey | Check door key / job access. |
GiveJobKey | Give job master key. |
RemoveJobKey | Remove job key. |
All Client Exports
| Export | Purpose |
|---|---|
openDoorLocksUi | Open door locks management UI. |
AttemptHotwire | Start hotwire minigame (driver seat). |
AttemptLockpick | Lockpick 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)