Skip to Content

Target

The target providers provide a service that allows resources to create targetable interactions.

Usage

To retrieve the target provider, use the load function with "target" for the service parameter.

Lua:

local targetProvider = exports.r3_servicesmanager:load("target")

JavaScript:

const targetProvider = exports.r3_servicesmanager.load("target");

Client

On the client side, the following methods are available:

enableTargeting

Enable or disable targeting.

targetProvider.enableTargeting(bool)

Parameters:

  • enabled: boolean

Returns:

  • nil

addGlobalObject

Adds global options for all objects.

targetProvider.addGlobalObject(options)

Parameters:

Returns:

  • nil

removeGlobalObject

Removes global options for all objects by their names.

targetProvider.removeGlobalObject(optionNames)

Parameters:

  • optionNames: string[]

Returns:

  • nil

addGlobalPlayer

Adds global options for players.

targetProvider.addGlobalPlayer(options)

Parameters:

Returns:

  • nil

removeGlobalPlayer

Removes global options for players by their names.

targetProvider.removeGlobalPlayer(optionNames)

Parameters:

  • optionNames: string[]

Returns:

  • nil

addGlobalVehicle

Adds global options for vehicles.

targetProvider.addGlobalVehicle(options)

Parameters:

Returns:

  • nil

removeGlobalVehicle

Removes global options for vehicles by their names.

targetProvider.removeGlobalVehicle(optionNames)

Parameters:

  • optionNames: string[]

Returns:

  • nil

addModel

Adds options for specific models.

targetProvider.addModel(models, options)

Parameters:

  • models: integer | string | (integer | string)[]
  • options: TargetOption[]

Returns:

  • nil

removeModel

Removes options for specific models by their names.

targetProvider.removeModel(models, optionNames)

Parameters:

  • models: integer | string | (integer | string)[]
  • optionNames: string[]

Returns:

  • nil

addEntity

Adds options for specific entities.

targetProvider.addEntity(netIds, options)

Parameters:

Returns:

  • nil

removeEntity

Removes options for specific entities by their names.

targetProvider.removeEntity(netIds, optionNames)

Parameters:

  • netIds: integer | integer[]
  • optionNames: string[]

Returns:

  • nil

addLocalEntity

Adds options for specific local entities.

targetProvider.addLocalEntity(entities, options)

Parameters:

Returns:

  • nil

removeLocalEntity

Removes options for specific local entities by their names.

targetProvider.removeLocalEntity(entities, optionNames)

Parameters:

  • entities: integer | integer[]
  • optionNames: string[]

Returns:

  • nil

addSphereZone

Creates a new targetable sphere zone with the provided options.

targetProvider.addSphereZone(parameters)

Parameters:

  • parameters:
    • name: string
    • options: TargetOption[]
    • coords: vector3
    • radius: number (optional)
    • debug: boolean (optional)

Returns:

  • string The name of the zone which can be used to remove it later.

addBoxZone

Creates a new targetable box zone with the provided options.

targetProvider.addBoxZone(parameters)

Parameters:

  • parameters:
    • name: string
    • options: TargetOption[]
    • coords: vector3
    • size: number (optional)
    • debug: boolean (optional)

Returns:

  • string The name of the zone which can be used to remove it later.

addPolyZone

Creates a new targetable poly zone with the provided options.

targetProvider.addPolyZone(parameters)

Parameters:

  • parameters:
    • name: string
    • options: TargetOption[]
    • points: vector3[]
    • thickness: number (optional)
    • debug: boolean (optional)

Returns:

  • string The name of the zone which can be used to remove it later.

removeZone

Removes a targetable zone by name.

targetProvider.removeZone(name)

Parameters:

  • name: string

Returns:

  • nil

Types

The following types are used within the target provider:

TargetOption

An object containing the options for a single target option.

Fields:

  • label: string
  • name: string (optional, used to remove an option)
  • icon: string (optional, full font awesome 5 icon including prefix such as “fas fa-”)
  • distance: number (optional)
  • bones: string[] (optional)
  • groups: table<string, integer> (optional, group: minimum grade map)
  • canInteract: fun(entity: number, distance: number): boolean (optional)
  • onSelect: fun(data: TargetResponse): nil

TargetResponse

An object containing the data that is passed to the onSelect function when an option is selected.

Fields:

  • entity: integer

Registration

To register a target provider, ensure it implements all methods described above. Check out target.lua and target.ts for type definitions.

When your provider object implements all methods, you can register it as follows:

Lua:

exports.r3_servicesmanager:register("target", provider, priority, GetCurrentResourceName())

JavaScript:

exports.r3_servicesmanager.register("target", provider, priority, GetCurrentResourceName());

For priority, it is recommended to use priority 2, this corresponds to ServicePriority.Normal. It would be even better to allow server owners to configure the used priority in the configuration of your resource so that they can choose which resource takes priority.