✂️ [PAID][Standalone][ESX] Barber shop system | UI | Burevestnik

barberbur

I welcome you CFX community!

Today I present to you the barber shop system! This system provides accessibility for frameworks (ESX, Standalone), huge editing capabilities using a configuration file, and a 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:

:movie_camera: Preview Video

Screenshots



Debug mod:

Example of a configuration file:

Configuration files
--/* 
-- ██████╗░██╗░░░██╗██████╗░███████╗██╗░░░██╗███████╗░██████╗████████╗███╗░░██╗██╗██╗░░██╗
-- ██╔══██╗██║░░░██║██╔══██╗██╔════╝██║░░░██║██╔════╝██╔════╝╚══██╔══╝████╗░██║██║██║░██╔╝
-- ██████╦╝██║░░░██║██████╔╝█████╗░░╚██╗░██╔╝█████╗░░╚█████╗░░░░██║░░░██╔██╗██║██║█████═╝░
-- ██╔══██╗██║░░░██║██╔══██╗██╔══╝░░░╚████╔╝░██╔══╝░░░╚═══██╗░░░██║░░░██║╚████║██║██╔═██╗░
-- ██████╦╝╚██████╔╝██║░░██║███████╗░░╚██╔╝░░███████╗██████╔╝░░░██║░░░██║░╚███║██║██║░╚██╗
-- ╚═════╝░░╚═════╝░╚═╝░░╚═╝╚══════╝░░░╚═╝░░░╚══════╝╚═════╝░░░░╚═╝░░░╚═╝░░╚══╝╚═╝╚═╝░░╚═╝*/

Config = {}

--If ESX = 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 = true

--Are you using Standalone?
Config.UseStandalone = false

--Debug mode
Config.debug = false

Config.useCommandNameOpenMenu = false
Config.commandNameOpenMenu = 'barber'

--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

--Interaction Button
Config.BarbershopOpenButton = 38

-- 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

function notification(source, text)
    local _source = source
    TriggerClientEvent('esx:showNotification', _source, text)
end

function notificationInteraction(str)
    SetTextComponentFormat("STRING")
    AddTextComponentString(str)
    DisplayHelpTextFromStringLabel(0, 0, false, -1)
end

--The fov value for the camera
Config.cameraFov = 25.0

--The price for changing barbers
Config.price = 100

--Opening the menu with animation of sitting on a chair.
--If true, it will check if the chair is occupied by another player and if it is occupied, you will have to wait until it becomes free.
--If false, the menu will open immediately without animations and checking for occupied chairs.
Config.chairsOpenEvent = true

--Insert your own events getting and saving a character
function gettingAndSavingCharacter(playerAppearance, playerBarbers)
    if Config.UseESX then
        for featureName, featureValue in pairs(playerBarbers) do
            TriggerEvent('skinchanger:change', featureName, featureValue)
        end
        TriggerEvent('skinchanger:getSkin', function(skin)
            TriggerServerEvent('esx_skin:save', skin)
        end)
    end
end

--Skin reset function
function resetCharacter()
    if Config.UseESX then
        ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin)
            TriggerEvent('skinchanger:loadSkin', skin) 
        end)
    end
end

Config.Barbershop = {
	{
		interactionDistance = 2.0, --Distance for interaction with the store
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 71, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 17, --Blip color.
		blipText = "Barber shop", --Blip text.
		UseMarkers = false, --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 = 20, --Marker colour A
		locations = { --Barbershop locations
            vector3(136.8, -1708.4, 28.3),
            vector3(-1282.6, -1116.8, 6.0),
            vector3(1931.5, 3729.7, 31.8), 
            vector3(1212.8, -472.9, 65.2),
            vector3(-32.9, -152.3, 56.1),
            vector3(-278.1, 6228.5, 30.7),
            vector3(-821.1483, -185.8494, 37.5689),
		},
	},
}

Config.BarbershopChairPositionList = {
    --Davis
    {pos = vector4(137.77, -1710.67, 28.51, 229.93), status = false, walkTime = 4000},
    {pos = vector4(138.72, -1709.58, 28.54, 232.26), status = false, walkTime = 4000},
    {pos = vector4(139.66, -1708.47, 28.54, 222.14 ), status = false, walkTime = 4000},

    --Vespucci
    {pos = vector4(-1284.29, -1119.58, 6.32, 189.06), status = false, walkTime = 4000},
    {pos = vector4(-1282.83, -1119.58, 6.3, 182.93), status = false, walkTime = 4000},
    {pos = vector4(-1281.32, -1119.56, 6.34, 180.99), status = false, walkTime = 4000},

    --Sandy
    {pos = vector4(1934.5, 3730.15, 32.17, 300.59), status = false, walkTime = 4000},
    {pos = vector4(1933.72, 3731.43, 32.21, 302.9), status = false, walkTime = 4000},
    {pos = vector4(1933.02, 3732.7, 32.17, 295.57), status = false, walkTime = 4000},

    --Mirror
    {pos = vector4(1210.33, -474.67, 65.53, 163.11), status = false, walkTime = 4000},
    {pos = vector4(1211.72, -475.02, 65.55, 166.5), status = false, walkTime = 4000},
    {pos = vector4(1213.18, -475.36, 65.63, 160.01), status = false, walkTime = 4000},

    --Havick
    {pos = vector4(-34.67, -150.17, 56.44, 70.0), status = false, walkTime = 4000},
    {pos = vector4(-35.18, -151.61, 56.43, 80.81), status = false, walkTime = 4000},
    {pos = vector4(-35.7, -152.98, 56.42, 77.67), status = false, walkTime = 4000},

    --Paleto 
    {pos = vector4(-280.99, 6227.58, 31.02, 133.88), status = false, walkTime = 4000},
    {pos = vector4(-279.91, 6226.51, 31.01, 137.31), status = false, walkTime = 4000},
    {pos = vector4(-278.88, 6225.48, 31.01, 131.52), status = false, walkTime = 4000},

    --Rockford
    {pos = vector4(-818.21, -183.57, 36.8, 27.48), status = false, walkTime = 6000},
    {pos = vector4(-816.46, -182.55, 36.8, 27.48), status = false, walkTime = 6000},
    {pos = vector4(-814.69, -181.53, 36.8, 33.27), status = false, walkTime = 6000},
    {pos = vector4(-812.97, -180.6, 36.85, 33.07), status = false, walkTime = 6000}
}

Config.maxMinValue = {
    --Hairstyle
    ['barberElementMaxMinValue1'] = 0,
    ['barberElementMaxMinValue2'] = 78,
    --HairstyleColor
    ['barberElementMaxMinValue3'] = 0,
    ['barberElementMaxMinValue4'] = 45,

    --Beard
    ['barberElementMaxMinValue5'] = -1,
    ['barberElementMaxMinValue6'] = 47,
    --BeardColor
    ['barberElementMaxMinValue7'] = 0,
    ['barberElementMaxMinValue8'] = 45,

    --Eyebrows
    ['barberElementMaxMinValue9'] = 0,
    ['barberElementMaxMinValue10'] = 33,
    --EyebrowsColor
    ['barberElementMaxMinValue11'] = 0,
    ['barberElementMaxMinValue12'] = 45,

    --Makeup
    ['barberElementMaxMinValue13'] = 0,
    ['barberElementMaxMinValue14'] = 94,
    --MakeupColor
    ['barberElementMaxMinValue15'] = 0,
    ['barberElementMaxMinValue16'] = 64,

    --Blush
    ['barberElementMaxMinValue17'] = 0,
    ['barberElementMaxMinValue18'] = 32,
    --BlushColor
    ['barberElementMaxMinValue19'] = 0,
    ['barberElementMaxMinValue20'] = 64,

    --Lipstick
    ['barberElementMaxMinValue21'] = -1,
    ['barberElementMaxMinValue22'] = 9,
    --LipstickColor
    ['barberElementMaxMinValue23'] = 0,
    ['barberElementMaxMinValue24'] = 64,

    --HairstyleColor2
    ['barberElementMaxMinValue25'] = 0,
    ['barberElementMaxMinValue26'] = 5,
}

--Translation config
Config.Translation = {
    ['menu'] = 'Press ~INPUT_CONTEXT~ to ~g~interact',
    ['nomoney'] = '~r~You do not have enough Money!',
    ['noseats'] = '~y~All barbers are busy now. Please wait!',
    ['debugText1'] = 'The chair is free:',
    ['debugText2'] = 'The chair is taken:',
    ['debugText3'] = 'Chair #',
    ['debugText4'] = '~r~Taken',
    ['debugText5'] = '~g~Free',
    ['translationText1'] = 'Barber shop  ㅤ burevestnik.tebex.io',
    ['translationText2'] = 'Hairstyle #',
    ['translationText3'] = 'Hairstyle color #',
    ['translationText4'] = 'Beard #',
    ['translationText5'] = 'Beard color #',
    ['translationText6'] = 'Eyebrows #',
    ['translationText7'] = 'Less',
    ['translationText8'] = 'Greater',
    ['translationText9'] = 'Eyebrows color #',
    ['translationText10'] = 'Makeup #',
    ['translationText11'] = 'Makeup color #',
    ['translationText12'] = 'Blush #',
    ['translationText13'] = 'Blush color #',
    ['translationText14'] = 'Lipstick #',
    ['translationText15'] = 'Lipstick color #',
    ['translationText16'] = 'Hairstyle color shade #',
    ['translationText17'] = 'Purchase | Price: $'..Config.price,
    ['translationText18'] = 'RMB',
    ['translationText19'] = 'Hold key to look around',
    ['translationText20'] = 'ESC',
    ['translationText21'] = 'Exit barber shop',
}

--Exports
--exports.Burevestnik_barbershop:bur_open_barbershop()  --Exporting the opening of a barbershop (Client)

Optimization (The script consumes):

0.01 ms in a quiet state.

0.02 ms in an active state.

What does this system include:

  • This system works on all versions of ESX, as well as STANDALONE!
  • Beautiful user interface!
  • Support for our :nazar_amulet:free Interaction Button resource!
  • The ability to enable blips on the map!
  • The ability to enable markers!
  • The ability to sit on chairs!
  • Synchronization between players!
  • The ability to install new places of interaction!
  • Incredibly customizable configuration file!
  • More than 7 prepared places for interaction and 22 chairs!
  • You can completely change the user interface at will!
  • Exports are available!
  • Of course support, I’m ready to help you!

:shopping_cart: [OPEN SOURCE] You can get that resource in my Tebex.

:shopping_cart: [ESCROW] You can get that resource in my Tebex.

TOP SALES

qs3 hudsystem-min bpLogo

You may also be interested in my other resources:

My other resources

clotheshopbur wj_bur wcj

garageSystem mg mg

mg mg mg

crate Anomaly zones img animsystem

bpLogo hudsystem-min OrangeSystem

barsystem storev2 qs3

dialSystem speedcam_img lockpick

train LicensePlate pop

6q6g5y as mg

ars fuelsystem mwpLG8T - Imgur

e5f6ad277b5836eb5fa4db2b8207c3e46beb8362 imgonline-com-ua-Resize-czg8px7HwUHn My project (1)

My project (5) My project kaws

My project (6) a bgk

bg bg st11

Code accessible Open source: Yes \ Escrow: No - Available only: config, ui
Subscription based No
Lines (approximately) ~1500
Requirements Standalone: No \ ESX: skinchanger
Support Yes
19 Likes

Good work :heart:

1 Like

amazing script!

1 Like

Thank you very much! :green_heart:

Thank you very much :blue_heart:

1 Like

Exclusive unique scripts like :heart_eyes:

1 Like

Thank you very much :heart:

Update 1.1.0 of all versions

  • Added the ability to use zoom.
  • The Config.cameraFov parameter has been replaced.

:mega: Contact me if you have any questions.