-- This is for notifications when all goes according to plan. (i.e. vehicle is cleaned) RegisterNetEvent("fh_detailer:client:InfoNotification", function(notificationText) -- You can change this to your prefered notification System -- --exports['mythic_notify']:DoHudText('inform', notificationText) --exports['okokNotify']:Alert('Detailer', notificationText, Time, 'info', false) end) -- This is for notifications when something goes wrong. (i.e. you don't have money) RegisterNetEvent("fh_detailer:client:WarningNotification", function(notificationText) -- You can change this to your prefered notification System -- --exports['mythic_notify']:DoHudText('error', notificationText) --exports['okokNotify']:Alert('Detailer', notificationText, Time, 'error', false) end) -- You can add stuff you want to happen when the car is completely cleaned here. E. g. getting rid of evidence fingerprints and such. RegisterNetEvent("fh_detailer:client:vehicleCleaned", function(licensePlate, vehicleServerID) print('Vehicle cleaned: licensePlate ' .. licensePlate .. ' vehicleServerID ' .. vehicleServerID) end) -- Function for removing decals (dirt, scratches, blood). This can remove stickers if you are using such a script. -- You can disable the removal of the decals or add you custom code here: RegisterNetEvent("fh_detailer:client:removeDecals", function(vehicle) RemoveDecalsFromVehicle(vehicle) end) -- ox-target / qb-target exports here if not Config.qbtarget then exports.ox_target:addGlobalVehicle({ event = 'washVehicle', icon = 'fa-solid fa-soap', label = Lang:t("info.wash_vehicle"), canInteract = function(entity, distance, coords, name) if holdingBucket then makeEntityFaceEntity(playerPed, entity) end return holdingBucket and not IsPedBusy() end, distance = Config.WashDistance, }) else exports['qb-target']:AddGlobalVehicle({ options = { { type = 'client', event = 'washVehicle', icon = 'fa-solid fa-soap', label = Lang:t("info.wash_vehicle"), canInteract = function(entity, distance, data) if holdingBucket then makeEntityFaceEntity(playerPed, entity) end return holdingBucket and not IsPedBusy() end, } }, distance = Config.WashDistance, }) end if Config.JobRestriction then if not Config.qbtarget then exports.ox_target:addModel(GetHashKey(Config.HoseModel), { event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), groups = Config.AllowedJobs, } ) exports.ox_target:addModel(GetHashKey(Config.BucketModel), { event = 'UseBucket', icon = 'fa-solid fa-soap', label = Lang:t("info.label_bucket"), groups = Config.AllowedJobs, } ) exports.ox_target:addGlobalVehicle({ event = 'waxVehicle', icon = 'fa-solid fa-soap', label = Lang:t("info.wax_vehicle"), item = {'car_wax'}, anyItem = true, canInteract = function(entity, distance, coords, name) if not holdingBucket and not holdingHose and not IsPedBusy() then makeEntityFaceEntity(playerPed, entity) return true end end, groups = Config.AllowedJobs, distance = Config.WashDistance, }) else exports['qb-target']:AddTargetModel(Config.HoseModel, { options = { { type = "client", event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), job = Config.AllowedJobs, } }, }) exports['qb-target']:AddTargetModel(Config.BucketModel, { options = { { type = "client", event = 'UseBucket', icon = 'fa-solid fa-soap', label = Lang:t("info.label_bucket"), job = Config.AllowedJobs, } }, }) end exports['qb-target']:AddGlobalVehicle({ options = { { type = 'client', event = 'waxVehicle', icon = 'fa-solid fa-soap', label = Lang:t("info.wax_vehicle"), canInteract = function(entity, distance, data) if not holdingBucket and not holdingHose and not IsPedBusy() then makeEntityFaceEntity(playerPed, entity) return true end end, job = Config.AllowedJobs, } }, distance = Config.WashDistance, }) else if not Config.qbtarget then exports.ox_target:addGlobalVehicle({ event = 'waxVehicle', icon = 'fa-solid fa-soap', label = Lang:t("info.wax_vehicle"), item = {'car_wax'}, anyItem = true, canInteract = function(entity, distance, coords, name) if not holdingBucket and not holdingHose and not IsPedBusy() then makeEntityFaceEntity(playerPed, entity) return true end end, distance = Config.WashDistance, }) exports.ox_target:addModel(GetHashKey(Config.HoseModel), { event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), }) exports.ox_target:addModel(GetHashKey(Config.BucketModel), { event = 'UseBucket', icon = 'fa-solid fa-soap', label = Lang:t("info.label_bucket"), }) else exports['qb-target']:AddTargetModel(Config.HoseModel, { options = { { type = "client", event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), } }, }) exports['qb-target']:AddTargetModel(Config.BucketModel, { options = { { type = "client", event = 'UseBucket', icon = 'fa-solid fa-soap', label = Lang:t("info.label_bucket"), } }, }) exports['qb-target']:AddGlobalVehicle({ options = { { type = 'client', event = 'waxVehicle', icon = 'fa-solid fa-soap', label = Lang:t("info.wax_vehicle"), canInteract = function(entity, distance, data) if not holdingBucket and not holdingHose and not IsPedBusy() then makeEntityFaceEntity(playerPed, entity) return true end end, } }, distance = Config.WashDistance, }) end end if not Config.qbtarget then exports.ox_target:addModel(GetHashKey(Config.HoseModel2), { event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), } ) exports.ox_target:addModel(GetHashKey(Config.BucketModel2), { event = 'UseBucket', icon = 'fa-solid fa-soap', label = Lang:t("info.label_bucket"), } ) else exports['qb-target']:AddTargetModel(Config.HoseModel2, { options = { { type = "client", event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), } }, }) exports['qb-target']:AddTargetModel(Config.BucketModel2, { options = { { type = "client", event = 'takeHose', icon = 'fa-solid fa-soap', label = Lang:t("info.take_hose"), } }, }) end -- End of ox-target / qb-target exports