Zum Hauptinhalt springen

Client Exports

All client exports are called via exports.msk_vehiclekeys:<name>(...).

info

Many functions accept a vehicle handle (int) directly, while the key functions also accept a {plate, model} table so you can act on vehicles that are not currently spawned.


(Un)locking

toggleLock

(Un)locks a vehicle. When used as the inventory item export, the vehicle data is read from the item's metadata.

Parameters
data - any - Reserved (pass nil)
slot - table - {metadata = {plate, model}} or {metadata = {vehicle}}

-- From a vehicle handle
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
exports.msk_vehiclekeys:toggleLock(nil, {metadata = {plate = GetVehicleNumberPlateText(vehicle), model = GetEntityModel(vehicle)}})

-- Directly with a vehicle entity
exports.msk_vehiclekeys:toggleLock(nil, {metadata = {vehicle = vehicle}})

toggleLockAdmin

(Un)locks a vehicle without needing a key. The caller must be allowed by Config.AdminCommand.

Parameters
data - table - {vehicle} or {plate, model}

exports.msk_vehiclekeys:toggleLockAdmin({vehicle = vehicle})
exports.msk_vehiclekeys:toggleLockAdmin({plate = 'LS 1234', model = `adder`})

Lock State

GetVehicleLockState

Parameters
vehicle - int - A vehicle handle

Returns
isLocked - boolean

local isLocked = exports.msk_vehiclekeys:GetVehicleLockState(vehicle)
local isLocked = Entity(vehicle).state.isLocked -- alternative

GetVehicleLockStatus

Parameters
vehicle - int - A vehicle handle

Returns
lockStatus - number - 1 = unlocked, 2 = locked

local lockStatus = exports.msk_vehiclekeys:GetVehicleLockStatus(vehicle)
local lockStatus = Entity(vehicle).state.lockState -- alternative
Internal exports

SetVehicleLockState and SetVehicleLockStatus also exist but are for internal use. Do not call them unless you know exactly what you are doing. They can break the script.


openKeysMenu

Opens the keys menu.

exports.msk_vehiclekeys:openKeysMenu()

openLocksmithMenu

Opens the locksmith menu (exchange vehicle locks).

exports.msk_vehiclekeys:openLocksmithMenu()

openDialog

Opens the transfer/sell dialog (used by the contract item).

exports.msk_vehiclekeys:openDialog()

Reading Keys

RefreshPlayerKeys

Adds missing permanent keys from the player's owned vehicles.

Parameters
rtn - boolean? - Await and return the result instead of firing async

exports.msk_vehiclekeys:RefreshPlayerKeys()

GetPlayerKeys

Parameters
playerId - number? - ServerId (self if omitted)

Returns
keys - table

local keys = exports.msk_vehiclekeys:GetPlayerKeys()

for i = 1, #keys do
print(keys[i].plate, keys[i].model, keys[i].type)
end

GetPlayerPrimaryKeys / GetPlayerSecondaryKeys / GetPlayerTempKeys

Return only the keys of the given type.

local primary = exports.msk_vehiclekeys:GetPlayerPrimaryKeys()
local secondary = exports.msk_vehiclekeys:GetPlayerSecondaryKeys()
local temporary = exports.msk_vehiclekeys:GetPlayerTempKeys()

GetAllVehicleKeys

Returns the complete key cache of all players.

local allKeys = exports.msk_vehiclekeys:GetAllVehicleKeys()

GetPlayerVehicles

Returns the player's owned vehicles ({plate, model}).

Parameters
playerId - number? - ServerId (self if omitted)

local vehicles = exports.msk_vehiclekeys:GetPlayerVehicles()

for i = 1, #vehicles do
print(vehicles[i].plate, vehicles[i].model)
end

GetPlayerKeysAndVehicles

Returns both keys and owned vehicles.

local keys, vehicles = exports.msk_vehiclekeys:GetPlayerKeysAndVehicles()

Key Checks

HasPlayerKey

Parameters
vehicle - int - A vehicle handle

Returns
hasKey - boolean

local hasKey = exports.msk_vehiclekeys:HasPlayerKey(vehicle)

HasPlayerPrimaryKey / HasPlayerSecondaryKey / HasPlayerTempKey

local hasPrimary = exports.msk_vehiclekeys:HasPlayerPrimaryKey(vehicle)
local hasSecondary = exports.msk_vehiclekeys:HasPlayerSecondaryKey(vehicle)
local hasTemp = exports.msk_vehiclekeys:HasPlayerTempKey(vehicle)

IsVehicleOwner

Parameters
vehicle - int - A vehicle handle

Returns
isOwner - boolean

local isOwner = exports.msk_vehiclekeys:IsVehicleOwner(vehicle)

HasPlayerKeyOrIsVehicleOwner

Returns true if the player has any key for the vehicle or owns it. Ideal for engine-toggle scripts.

Parameters
vehicle - int - A vehicle handle

Returns
hasKeyOrIsOwner - boolean

local allowed = exports.msk_vehiclekeys:HasPlayerKeyOrIsVehicleOwner(vehicle)

Adding Keys

Security check on the client path

The client AddKey (and its wrappers) is sent to the server through an event, so primary and secondary keys run through a server-side check: the player can only add such a key for a vehicle they own (stored in owned_vehicles) or already hold a key for (this also covers whitelist and job vehicles). Giving a key to another player additionally requires that player to be nearby and is limited to secondary and temporary keys, you never hand out a primary key that way.

Temporary keys are exempt from the ownership check. They are RAM-only and removed again on the next (re)connect, so the client can add a temporary key for any vehicle, for example a test drive.

To give a player a persistent (primary or secondary) key for a vehicle they do not own, call the server export from a server script. The server export is not restricted.

AddKey

Parameters
vehicle - int or table - Vehicle handle or {plate, model}
type - string - 'primary', 'secondary' or 'temporary'
playerId - number? - ServerId (self if omitted)

exports.msk_vehiclekeys:AddKey(vehicle, 'secondary')
exports.msk_vehiclekeys:AddKey({plate = vehiclePlate, model = vehicleModel}, 'secondary')

AddPrimaryKey / AddSecondaryKey / AddTempKey

Convenience wrappers around AddKey.

exports.msk_vehiclekeys:AddPrimaryKey(vehicle)
exports.msk_vehiclekeys:AddPrimaryKey({plate = vehiclePlate, model = vehicleModel})
exports.msk_vehiclekeys:AddSecondaryKey(vehicle)
exports.msk_vehiclekeys:AddTempKey(vehicle)

Removing Keys

Security check on the client path

A player can always remove their own key. Removing a key from another player requires the caller to own the vehicle. Server scripts are not restricted, see the server export.

RemoveKey

Parameters
vehicle - int or table - Vehicle handle or {plate, model}
type - string - 'primary', 'secondary' or 'temporary'
playerId - number? - ServerId (self if omitted)

exports.msk_vehiclekeys:RemoveKey(vehicle, 'temporary')

RemovePrimaryKey / RemoveSecondaryKey / RemoveTempKey

exports.msk_vehiclekeys:RemovePrimaryKey(vehicle)
exports.msk_vehiclekeys:RemovePrimaryKey({plate = vehiclePlate, model = vehicleModel})
exports.msk_vehiclekeys:RemoveSecondaryKey(vehicle)
exports.msk_vehiclekeys:RemoveTempKey(vehicle)

Locks & Transfer

ExchangeVehicleLocks

Deletes every key other players have for this vehicle.

Parameters
vehicle - int or table - Vehicle handle or {plate, model}

exports.msk_vehiclekeys:ExchangeVehicleLocks(vehicle)
exports.msk_vehiclekeys:ExchangeVehicleLocks({plate = vehiclePlate, model = vehicleModel})

TransferVehicle

Transfers a vehicle (including ownership) to another player.

Parameters
targetId - number - ServerId of the target player
vehicle - int or table - Vehicle handle or {plate, model}
showDialog - boolean - Show the price input dialog

exports.msk_vehiclekeys:TransferVehicle(targetId, vehicle, false)
exports.msk_vehiclekeys:TransferVehicle(targetId, {plate = vehiclePlate, model = vehicleModel}, true)

Helpers

IsVehicleWhitelisted / IsVehicleBlacklisted

Check a plate/model against Config.Whitelist / Config.Blacklist.

Parameters
plate - string?
model - number?

Returns
result - boolean

local whitelisted = exports.msk_vehiclekeys:IsVehicleWhitelisted(plate, model)
local blacklisted = exports.msk_vehiclekeys:IsVehicleBlacklisted(plate, model)

CloseVehicleDoors

Closes every open door of a vehicle.

exports.msk_vehiclekeys:CloseVehicleDoors(vehicle)

playLockAnim

Plays the key-fob animation on the local player.

exports.msk_vehiclekeys:playLockAnim()

playDoorLockEffects

Plays the lock/unlock sound and indicator flash.

Parameters
vehicle - int - A vehicle handle
state - boolean - true = locked effect, false = unlocked effect

exports.msk_vehiclekeys:playDoorLockEffects(vehicle, true)