Ticker Scripts
StoreDiscord
Documentation

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:

main.lua
-- 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:

main.lua
-- 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:

main.lua
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:

main.lua
-- 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:

main.lua
-- 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:

main.lua
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:

main.lua
-- 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:

main.lua
-- 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:

main.lua
-- 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:

main.lua
-- 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:

main.lua
-- 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:

main.lua
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:

main.lua
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:

main.lua
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:

main.lua
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:

main.lua
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:

main.lua
RegisterNetEvent('tc_keys:client:useLockpickItem', function()
    -- Item handler triggers this
end)

tc_keys:client:useHotwireKitItem

Triggered when player uses hotwire kit item.

Example:

main.lua
RegisterNetEvent('tc_keys:client:useHotwireKitItem', function()
    -- Item handler triggers this
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:

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

Garage System:

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

Property System:

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

Job System:

main.lua
-- Server
RegisterNetEvent('myjob:onDuty', function(job)
    exports.tc_keys:GiveJobKey(source, job)
end)
Ticker Scripts Documentation