[PAID][ESX/QB] vms_barber - ADVANCED BARBER SHOPS, MANAGEMENT BY PLAYERS & MANAGEMENT BY NPCS

[ESX & QB Compatibility] 20€ + TAX
[OPEN SOURCE] 33€ + TAX

[SHOWCASE] vms_barber


Compatibility with ESX and QB-Core
Compatibility with esx_skin / qb-clothing / fivem-appearance / illenium-appearance
Pretty UI design.
Barber job to be set in config, many players can have their own barbershop, but this does not exclude the possibility of setting another barbers for NPCs.
Price separately for each category. (hairs, beards, eyes)
Advanced barber includes the ability to configure how many barbers are be companies of the players and how many by NPCs at one time!
Script easy to configure.
Automatic detection of addon hairstyles.
Synchronized haircutting animations by the player and NPCs.
Compatibility with Onesync & OneSync Infinity.
0.00ms resmon outside the interiors.
0.03ms resmon in the course of using the barber.
Ability to set custom hairstyle name in config.
Ability to set TextUI (my free TextUI here)
Automatically camera correct detection with switching of 45 degrees of angle.
Full JS, Lua translation.
Full support.

Config = {}

Config.Core = "ESX" -- "ESX" / "QB-Core"
Config.CoreExport = function()
    return exports['es_extended']:getSharedObject()
    -- return exports['qb-core']:GetCoreObject()
end

Config.PlayerLoaded = 'esx:playerLoaded' -- its a trigger to load players tattoos
	-- ESX: "esx:playerLoaded"
	-- QBCore: "QBCore:Client:OnPlayerLoaded"

Config.JobUpdated = 'esx:setJob' -- its a trigger to check players job
	-- ESX: "esx:setJob"
	-- QBCore: "QBCore:Client:OnJobUpdate"

-- @Config.SkinManager for ESX: "esx_skin" / "fivem-appearance" / "illenium-appearance"
-- @Config.SkinManager for QBCore: "qb-clothing" / "fivem-appearance" / "illenium-appearance"
Config.SkinManager = "esx_skin"


Config.DistanceView = 8
Config.DistanceAccess = 1.1

Config.AnimDict = "misshair_shop@barbers"
Config.Anim = "keeper_idle_b"

Config.CanMakeup = true -- if you want a player can buy makeup's set true
-- Config.CanOthers = false -- if you want a player can buy chest_hair's, set true 

Config.Notification = function(message, time, type)
    if type == "success" then
        exports["vms_notify"]:Notification("BARBER", message, time, "#27FF09", "fa fa-scissors")
        -- ESX.ShowNotification(message)
		-- QBCore.Functions.Notify(message, "success", 5000)
    elseif type == "error" then
        exports["vms_notify"]:Notification("BARBER", message, time, "#FF0909", "fa fa-scissors")
        -- ESX.ShowNotification(message)
		-- QBCore.Functions.Notify(message, "error", 5000)
    end
end

Config.TextUI_Enabled = false

Config.TextUI_Open = function(msg)
    exports["interact"]:Open("E", msg) -- Here you can use your TextUI or use my free one - https://github.com/vames-dev/interact
    -- exports['okokTextUI']:Open('[E] '..msg, 'darkgreen', 'right')
    -- exports['qb-core']:DrawText(msg, 'right')
end

Config.TextUI_Close = function()
    exports["interact"]:Close() -- Here you can use your TextUI or use my free one - https://github.com/vames-dev/interact
    -- exports['okokTextUI']:Close()
    -- exports['qb-core']:HideText()
end

Config.Blip = {
    ["Sprite"] = 71,
    ["Scale"] = 0.6,
    ["Color"] = 3,
    ["Display"] = 4
}

Config.Prices = {
    ["hair"] = 5500,
    ["beard"] = 3500,
    ["eye"] = 1500,
    ["makeup"] = 500,
}

Config.CustomNames = {
    ["hair_1"] = {
        [0] = "Bald",
        [14] = "Dreads",
        [16] = "Afro curls",
    },
}

Config.Barbers = {
    { -- HOT SHAVE | Carson Ave - Davis
        business = false,
        barber = "s_f_m_fembarber",
        pedHeadingToChair = 227.49,
        position = vector3(136.66, -1708.4, 28.29),
        barberSpawnPos = vector4(141.45, -1705.82, 28.29, 141.47),
        takeSitMarker = {
            FreeColor = {255, 9, 106, 125},
            BusyColor = {128, 0, 31, 110},
        },
        Chairs = {
            [1] = {
                position = vector3(136.8, -1709.88, 28.3),
                barberPos = vector4(137.68, -1709.84, 28.3, 224.61),
                chair_coord = vector4(137.77, -1710.67, 28.71, 229.93),
                busy = false,
            },
            [2] = {
                position = vector3(137.79, -1708.71, 28.3),
                barberPos = vector4(138.59, -1708.64, 28.3, 230.57),
                chair_coord = vector4(138.72, -1709.58, 28.64, 232.26),
                busy = false,
            },
            [3] = {
                position = vector3(138.7, -1707.5, 28.3),
                barberPos = vector4(139.35, -1707.5, 28.3, 223.69),
                chair_coord = vector4(139.66, -1708.47, 28.64, 222.14),
                busy = false,
            },
        }
    },
    { -- HOT SHAVE | Magellan Ave - Conquistador St, Vespucci
   > The file is supplemented by this hairdressing salon, but here I removed so that there was so much code.
    },
    { -- HOT SHAVE | Mirror Park Blvd - Park Mirror
        > The file is supplemented by this hairdressing salon, but here I removed so that there was so much code.
    },
    { -- HOT SHAVE | Paleto Blvd - Duluoz Ave, Paleto Bay
        > The file is supplemented by this hairdressing salon, but here I removed so that there was so much code.
    },
    { -- HOT SHAVE | Alhambra Dr - Niland Ave, Sandy Shores
        > The file is supplemented by this hairdressing salon, but here I removed so that there was so much code.
    },
    { -- BOB MULET | Mad Wayne Thunder Dr - Rockford Hills
        business = true,
        ownerJob = "barber1",
        barber = "s_m_m_hairdress_01",
        position = vector3(-814.58, -184.39, 36.57),
        barberSpawnPos = vector4(-808.27, -179.79, 36.57, 124.26),
        takeSitMarker = {
            FreeColor = {255, 9, 106, 125},
            BusyColor = {128, 0, 31, 110},
        },
        Chairs = {
            [1] = {
                position = vector3(-817.68, -184.44, 36.57),
                barberPos = vector4(-818.15, -184.76, 36.57, 344.45),
                chair_coord = vector4(-818.21, -183.57, 36.8, 27.48),
                busy = false,
            },
            [2] = {
                position = vector3(-815.9, -183.45, 36.57),
                barberPos = vector4(-816.43, -183.68, 36.57, 351.06),
                chair_coord = vector4(-816.46, -182.55, 36.8, 27.48),
                busy = false,
            },
            [3] = {
                position = vector3(-814.16, -182.53, 36.57),
                barberPos = vector4(-814.65, -182.68, 36.57, 355.75),
                chair_coord = vector4(-814.69, -181.53, 36.8, 33.27),
                busy = false,
            },
            [4] = {
                position = vector3(-812.44, -181.54, 36.57),
                barberPos = vector4(-813.22, -181.52, 36.57, 25.87),
                chair_coord = vector4(-812.97, -180.6, 36.85, 33.07),
                busy = false,
            },
        }
    },
}

Config.Lang = "EN"
Config.Translate = {
    ["EN"] = {
        ["barber_blip"] = "Barber",
        ["take_a_sit"] = "Take a sit", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this:      "Press ~INPUT_CONTEXT~ to take a sit"
        ["open_barber"] = "Take care of the customer", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this:      "Press ~INPUT_CONTEXT~ to open menu"
        ["get_up"] = "Press ~INPUT_VEH_DUCK~ to get up",
        ["paid"] = "You paid %s$ for a service.",
        ["nomoney"] = "You don't have enough money.",
        ["you_started_cutting_customer"] = "You're cutting the customer hair",
        ["started_cutting_hair_by_employee"] = "The hairdresser started cutting you",
    },
    ["PL"] = {
        ["barber_blip"] = "Fryzjer",
        ["take_a_sit"] = "Usiądź", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this:      "Press ~INPUT_CONTEXT~ to take a sit"
        ["open_barber"] = "Klient", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this:      "Press ~INPUT_CONTEXT~ to open menu"
        ["get_up"] = "Naciśnij ~INPUT_VEH_DUCK~ aby wstać",
        ["paid"] = "Zapłacono %s$ za usługę.",
        ["nomoney"] = "Nie posiadasz wystarczająco pieniędzy.",
        ["started_cutting"] = "Obcinasz klientowi włosy",
        ["started_cutting_hair_by_employee"] = "Fryzjer zaczął cię strzyc.",
    },
}

If you decide to purchase the script, I encourage you to join on the discord, to keep up to date with updates.

:anger: You can check my others scripts :anger:
vms_bank
vms_pausemenu
vms_skydiving
vms_races
vms_drivingschool
vms_boatschool
vms_flyingschool
vms_notify
vms_shops
vms_redeem
vms_garage
vms_jobcenter
vms_subway
interact

Code is accessible Yes/No
Subscription-based No
Lines (approximately) +500 lua
Requirements ESX, esx_skin, skinchanger
Support Yes
5 Likes

Wow. Can I buy open source for 25Euro? I miss a bit; /

do you plan to convert it to QBCore?

No, i cant, the price is not subject to change, only if there is a promo code available or bigger shopping.

Yes, I use ESX on a daily basis, but I am also creating a version under QB-Core, this one too will definitely get an update.

1 Like

Perfect. notify me when you release it

1 Like

Hi, how is the resmon outside of a barber shop?
And does it support addon (not replaced) haircuts etc?

Hi, resmon outside the interiors is 0.00ms.
Sure, you can use add-on hairstyles.

How i buy the Barbershop ?

You can buy it here https://vames.tebex.io/category/2092562, there are two versions open source and escrow, depends which one you want you can choose.

Sorry four my english, i buy the script, i want to work like a barber how i buy the bussines ? Or how i get barber job ?

The last hair salon in config.lua is as business.

Just add:

business = true,
ownerJob = "HERE_INSERT_NAME_OF_JOB"

image

Hello, this interests me a lot but I just have a concern before buying it.

Would it be possible to make hairdressers purchasable, and not taken by a /job.

I would like to make it so that the police who have the job “police” can also style, without using “job2”

Example :
Job Police = Police but owner barbershop => PERSON’S NAME

Hi, currently is on the job name in config.lua, but if you know how to programming it is available for purchase open source and can edit it for your server.

:computer: UPDATE 1.0.3

  • Compatible with QB-Core
  • Added compatibility with fivem-appearance for ESX and QB-Core
  • Added missing hair salon

GG, nice job! This is a nice update for the server

1 Like

thank you :smiley:

1 Like

:computer: UPDATE 1.0.4

  • Added blushes
  • Fixed hair_color_2 for fivem-appearance

:computer: UPDATE 1.0.5

  • Fixed make-up color and added blush first -1 for qb-clothing

:computer: UPDATE 1.0.6

[/] Fixed hair_color_2 in fivem-appearance


:computer: UPDATE 1.0.7

[/] Corrected category buttons to click correctly
[/] Removed opacity values on UI for qb-clothing (because it cannot be changed in qb-clothing)
[/] Removed some panels with color 2 values for fivem-appearance and qb-clothing (because it cannot be changed in qb-clothing and fivem-appearance)
[/] Fixed eyecolor and makeup color in fivem-appearance
[/] Fixed problem with character standing up when refreshing skin in qb-clothing
[+] Added 3 translations to translation.js (header name and payment button)

1 Like

Not working for me characters hair doesn’t save after purchasing and the job doesnt let the employee browse hairstyles. Any hotfixes?