I welcome you CFX community!
Today I present to you the window cleaner job system! This system provides accessibility for all frameworks (ESX, QBCore, Standalone), huge editing capabilities using a configuration file, unique design. Iām sure you and your players will love it!
This system includes a nice user interface, a convenient configuration file, the ability to configure the entire resource and clear functionality.
Demonstration of the system:
Example of a configuration file:
Configuration files
--/*
-- āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
-- āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
-- āāāāāāā¦āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
-- āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
-- āāāāāāā¦āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
-- āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā*/
Config = {}
--If ESX = false and QBCore = false, then Standalone will turn on
--Are you using ESX?
Config.UseESX = true
--Enable this if ESX throws an error: Used the getSharedObject Event, this event no longer exists!
Config.UseESX_lib = false
--Are you using QBCore?
Config.UseQBCore = false
--Are you using Standalone?
Config.UseStandalone = false
--Your own export to get the player's job
Config.StandaloneJobCheckExport = nil
--Interaction Button
Config.JobOpenButton = 38
--Use the command to start/end the job
Config.useCommandStartEndJob = false
Config.commandStartJob = "burJobWindowCleanerStart"
Config.commandEndJob = "burJobWindowCleanerEnd"
--The ability to embed your own exports to hide the hud
Config.useHudOffOnEvents = true
function hudOnEvent()
DisplayRadar(true)
--exports.Burevestnik_hud:Burevestnik_hud_on() -- Uncomment if you use Burevestnik_HUD system (https://burevestnik.tebex.io/package/5371893)
end
function hudOffEvent()
DisplayRadar(false)
--exports.Burevestnik_hud:Burevestnik_hud_off() -- Uncomment if you use Burevestnik_HUD system (https://burevestnik.tebex.io/package/5371893)
end
function notificationInteraction(str)
SetTextComponentFormat("STRING")
AddTextComponentString(str)
DisplayHelpTextFromStringLabel(0, 0, false, -1)
end
-- If true, the custom interaction menus are activated. Pay attention to the customInteractionButtonOpen and customInteractionButtonClose functions.
Config.UseCustomInteractionButton = false
Config.BurevestnikInteractionButton = "E"
Config.BurevestnikInteractionButtonText = "Press to interact"
-- The function of opening a custom interaction menu.
function customInteractionButtonOpen()
--exports.Burevestnik_interaction_button:bur_nui_InteractionButton_open(Config.BurevestnikInteractionButton, Config.BurevestnikInteractionButtonText) -- Uncomment if you use Burevestnik Interaction Button (https://forum.cfx.re/t/free-standalone-interaction-button/4860169)
end
-- The function of closing the custom interaction menu.
function customInteractionButtonClose()
--exports.Burevestnik_interaction_button:bur_nui_InteractionButton_close() -- Uncomment if you use Burevestnik Interaction Button (https://forum.cfx.re/t/free-standalone-interaction-button/4860169)
end
Config.useHelpNotificationBottom = true
function HelpNotificationBottom(text)
BeginTextCommandThefeedPost("STRING")
AddTextComponentSubstringPlayerName(text)
EndTextCommandThefeedPostTicker(true, true)
end
-- The reward you will receive for completing the stage
Config.collectingReward = 5
receiveReward = function(source)
if Config.UseESX then
local player = ESX.GetPlayerFromId(source)
player.addMoney(Config.collectingReward)
end
if Config.UseQBCore then
local player = QBCore.Functions.GetPlayer(source)
player.Functions.AddMoney('cash', Config.collectingReward, "Bank depost")
end
end
Config.Job = {
{
interactionDistance = 2.0, --Distance for interaction with the job.
useBlip = true, --The ability to use blip on the map for this ped.
blipID = 467, --Blip ID.
blipScale = 0.7, --Blip scale.
blipColor = 16, --Blip color.
blipText = "Window cleaner job", --Blip text.
UseMarkers = true, --Do you want to use a marker ?
MarkerType = 1, --Marker type
MarkerSizeX = 0.5, --Marker size X
MarkerSizeY = 0.5, --Marker size Y
MarkerSizeZ = 0.5, --Marker size Z
MarkerColourR = 122, --Marker colour R
MarkerColourG = 195, --Marker colour G
MarkerColourB = 254, --Marker colour B
MarkerColourA = 100, --Marker colour A
allowedJobsInteraction = {"all"}, --Jobs that can interact with the job. If "all", then everyone can interact with the job.
locations = {--job location
vector3(-604.4462, -1026.3402, 21.2724),
},
taskConfig = {
interactionDistance = 2.0, --Distance for interaction with the job.
useBlip = true, --The ability to use blip on the map for this ped.
blipID = 515, --Blip ID.
blipScale = 0.7, --Blip scale.
blipColor = 2, --Blip color.
blipText = "Dirty window point", --Blip text.
UseMarkers = true, --Do you want to use a marker ?
MarkerType = 32, --Marker type
MarkerSizeX = 0.5, --Marker size X
MarkerSizeY = 0.5, --Marker size Y
MarkerSizeZ = 0.5, --Marker size Z
MarkerColourR = 122, --Marker colour R
MarkerColourG = 195, --Marker colour G
MarkerColourB = 254, --Marker colour B
MarkerColourA = 100, --Marker colour A
animationName = "WORLD_HUMAN_MAID_CLEAN", --Animation scenario
randomLocations = false, --If true, the locations will appear in random order
locations = { --Locations of interaction with job stages
vector4(-604.9159, -1018.7399, 22.3297, 178.8076),
vector4(-599.7010, -1016.7482, 22.3297, 267.6690),
vector4(-599.6061, -1012.8585, 22.3297, 273.7071),
vector4(-599.6431, -1006.8648, 22.3297, 282.8420),
vector4(-599.4959, -998.0675, 22.3291, 282.8500),
vector4(-599.4758, -992.3137, 22.3268, 268.3484),
vector4(-585.4557, -980.5916, 22.3297, 185.9809),
vector4(-581.8199, -986.8013, 22.3297, 99.4706),
vector4(-580.0188, -1012.6099, 22.3243, 181.8767),
vector4(-581.8830, -984.9188, 25.9857, 98.2047),
vector4(-581.7243, -1002.7797, 25.9857, 98.1763),
vector4(-581.7153, -1010.7007, 25.9857, 88.7933),
vector4(-576.9003, -1012.4437, 25.9849, 172.6808),
vector4(-581.8004, -1021.8083, 25.9849, 87.8169),
vector4(-581.7844, -1045.1232, 25.9849, 108.5626),
vector4(-570.8754, -1047.4281, 25.9849, 180.9612),
vector4(-565.5532, -1053.8601, 22.3297, 90.3841),
vector4(-580.3349, -1070.3456, 22.3297, 6.7053),
},
}
},
}
--Translation config
Config.Translation = {
['menu'] = 'Press ~INPUT_CONTEXT~ to ~g~interact',
['noaccess'] = '~r~You dont have access!',
['collected'] = '~g~You have received a reward!',
['jobstart'] = '~g~You got a job!',
['jobquit'] = '~y~You quit your job!',
['translationText1'] = 'Wash', -- | burevestnik.tebex.io
['translationText2'] = 'the window',
['translationText3'] = 'Bring it to shine!',
['translationText4'] = 'Move the mouse to move the rag',
}
--Exports
--exports.Burevestnik_windowcleaner_job:Burevestnik_job_windowcleaner_start() --Exporting to start a job
--exports.Burevestnik_windowcleaner_job:Burevestnik_job_windowcleaner_stop() --Exporting to cancel a job
Optimization (The script consumes):
0.01 ms in a quiet state.
0.03 ms in an active state.
What does this system include:
- This system works on all versions of ESX, QBCore, as well as STANDALONE!
- Beautiful user interface!
- Support of our
Dialogue system!
- Support for our
free Interaction Button resource!
- The ability to enable blips on the map!
- The ability to enable markers!
- The ability to install new places of interaction!
- Incredibly customizable configuration file!
- More than 18 prepared places of interaction!
- You can completely change the user interface at will!
- Of course support, Iām ready to help you!
TOP SALES
You may also be interested in my other resources:
Code accessible | Open source: Yes \ Escrow: No - Available only: config, ui |
Subscription based | No |
Lines (approximately) | ~1000 |
Requirements | Standalone/ESX/QBCore |
Support | Yes |