# Examples The config is in the init.lua ### All the exports have to be on the client-side to work! ## AddBoxZone / Job Check This is an example setup for a police job. The resource defines a BoxZone around a clipboard in the `gabz_mrpd` MLO. It's a simple set-up, we provide a **unique** name, define its center point with the vector3, define a length and a width, and then we define some options; the unique name again, the heading of the box, a bool to display a debug poly, and the height of the zone. Then, in the actual options themselves, we define 'police' as our required job. This is an example using **exports** ```lua exports['qb-target']:AddBoxZone("MissionRowDutyClipboard", vector3(441.7989, -982.0529, 30.67834), 0.45, 0.35, { name = "MissionRowDutyClipboard", heading = 11.0, debugPoly = false, minZ = 30.77834, maxZ = 30.87834, }, { options = { { type = "client", event = "qb-policejob:ToggleDuty", icon = "fas fa-sign-in-alt", label = "Sign In", job = "police", excludejob = 'ambulance', -- this would exclude ambulance job from seeing this target exact opposite of feature above excludegang = 'ballas', -- this would exclude ballas gang from seeing this target }, }, distance = 2.5 }) ``` This is an example using the provided **config** ```lua Config.BoxZones = { ["boxzone1"] = { name = "MissionRowDutyClipboard", coords = vector3(441.7989, -982.0529, 30.67834), length = 0.45, width = 0.35, heading = 11.0, debugPoly = false, minZ = 30.77834, maxZ = 30.87834, options = { { type = "client", event = "qb-policejob:ToggleDuty", icon = "fas fa-sign-in-alt", label = "Sign In", job = "police", }, }, distance = 2.5 }, } ``` There is only one way you can define the job though, but you can also provide a `[key] = value` table instead to enable checking for more jobs or gangs: ```lua job = { ["police"] = 5, ["ambulance"] = 0, } gang = { ["ballas"] = 5, ["thelostmc"] = 0, } ``` This also applies to citizenid's, but citizenid's don't have grades so we set them to true to allow them: ```lua citizenid = { ["JFJ94924"] = true, ["KSD18372"] = true, } ``` When defining multiple jobs or gangs, you **must** provide a minimum grade, even if you don't need one. This is due to how key/value tables work. Set the minimum grade to the minimum grade of the job if you want everyone to access it. ## AddTargetModel / item / canInteract() This is an example for ped interaction. It utilizes both the `item` parameter and `canInteract` function. This is an example using **exports** ```lua Config.Peds = { "g_m_importexport_0", "g_m_m_armboss_01" } exports['qb-target']:AddTargetModel(Config.Peds, { options = { { event = "request:CuffPed", icon = "fas fa-hands", label = "Cuff / Uncuff", item = 'handcuffs', job = "police" }, { event = "Rob:Ped", icon = "fas fa-sack-dollar", label = "Rob", canInteract = function(entity) if not IsPedAPlayer(entity) then return IsEntityDead(entity) end end, }, }, distance = 2.5, }) ``` This is an example using the provided **config** ```lua Config.TargetModels = { ["targetmodel1"] = { models = { "g_m_importexport_0", "g_m_m_armboss_01" }, options = { { type = "client", event = "request:CuffPed", icon = "fas fa-hands", label = "Cuff / Uncuff", item = 'handcuffs', job = "police", }, { type = "client", event = "Rob:Ped", icon = "fas fa-sack-dollar", label = "Rob", canInteract = function(entity) if not IsPedAPlayer(entity) then return IsEntityDead(entity) end end, }, }, distance = 2.5, }, } ``` ## Add Target Entity This is an example from a postop resource. Players can rent delivery vehicles in order to make deliveries. When they rent a vehicle, we apply this target to that entity only, which allows them to "get packages" from the vehicle This is an example using **exports** ```lua local model = `mule2` RequestModel(model) while not HasModelLoaded(model) do Wait(0) end local mule = CreateVehicle(model, GetEntityCoords(PlayerPedId()), GetEntityHeading(PlayerPedId()), true, false) TaskWarpPedIntoVehicle(PlayerPedId(), mule, -1) exports['qb-target']:AddTargetEntity(mule, { options = { { type = "client", event = "postop:getPackage", icon = "fas fa-box-circle-check", label = "Get Package", job = "postop", }, }, distance = 3.0 }) ``` ## Add interactable Ped at specific coordinates This is an example for adding an interactable Ped with a weapon in given coordinates. The below `Config.Peds` table is located in `init.lua`. ```lua Config.Peds = { { model = `mp_m_securoguard_01`, coords = vector4(433.0, -985.71, 30.71, 26.92), networked = true, invincible = true, blockevents = true, weapon = { name = `weapon_carbinerifle`, ammo = 0, hidden = false, }, target = { options = { { type = "client", event = "qb-policejob:ToggleDuty", icon = "fas fa-sign-in-alt", label = "Sign In", job = "police", }, }, distance = 2.5 } } } ``` ## Passing Item Data In this example, we define the model of the coffee machines you see around the map, and allow players to purchase a coffee. You'll have to provide your own logic for the purchase, but this is how you would handle it with qb-target, and how you would pass data through to an event for future use. This is an example using **exports** The event should **not** go into the config, hence why it's not provided with the config example, it's meant for a client file ```lua exports['qb-target']:AddTargetModel(`prop_vend_coffe_01`, { options = { { type = "client", event = "coffee:buy", icon = "fas fa-coffee", label = "Coffee", price = 5, }, }, distance = 2.5 }) RegisterNetEvent('coffee:buy',function(data) -- server event to buy the item here QBCore.Functions.Notify("You purchased a " .. data.label .. " for $" .. data.price .. ". Enjoy!", 'success') end) ``` This is an example using the provided **config** ```lua Config.TargetModels = { ['buyCoffee'] = { models = `prop_vend_coffe_01`, options = { { type = "client", event = "coffee:buy", icon = "fas fa-coffee", label = "Coffee", price = 5, }, }, distance = 2.5 } } ``` ### EntityZone / Add a target in an event This is an example of how you can dynamically create a target options in an event, for example, planting a potato plant. This is an example using **exports** This example is **not** advised to use with the provided config ```lua AddEventHandler('plantpotato',function() local playerPed = PlayerPedId() local coords = GetEntityCoords(playerPed) model = `prop_plant_fern_02a` RequestModel(model) while not HasModelLoaded(model) do Wait(0) end local plant = CreateObject(model, coords.x, coords.y, coords.z, true, true) Wait(50) PlaceObjectOnGroundProperly(plant) SetEntityInvincible(plant, true) -- Logic to handle growth, create a thread and loop, or do something else. Up to you. exports['qb-target']:AddEntityZone("potato-growing-"..plant, plant, { name = "potato-growing-"..plant, heading = GetEntityHeading(plant), debugPoly = false, }, { options = { { type = "client", event = "farming:harvestPlant", icon = "fa-solid fa-scythe", label = "Harvest potato", plant = plant, job = "farmer", canInteract = function(entity) return Entity(entity).state.growth >= 100 end, }, }, distance = 2.5 }) end) ```