[ESX & QB-Core Compatibility] 20€ + TAX
[OPEN SOURCE] 33€ + TAX
[SHOWCASE] vms_tattooshop
Possibility to add your own custom tattoos.
By default, we made 11 add-on face tattoos because there are few in GTA.
If you want to make new add-on tattoos, no problem it is very easy and in addition, we wrote a detailed step-by-step documentation on how to make such!
ADD-ON TATTOOS - docs.vames-store.com
Features:
Compatibility with ESX and QB-Core
Compatibility with esx_skin / qb-clothing / fivem-appearance / illenium-appearance
Pretty UI design.
Tattoo Artist job to be set in config, many players can have their own tattoo studio, but this does not exclude the possibility of setting another tattoo studio for NPCs.
Price separately for each tattoos.
Advanced tattoo includes the ability to configure how many tattooshops are be companies of the players and how many by NPCs at one time!
Script easy to configure.
Camera switching between tattoo.
Compatibility with Onesync & OneSync Infinity.
0.00ms resmon outside the interiors.
0.03ms resmon in the course of using the tattoo menu.
Ability to set custom tattoos names in config. (The default is made to detect the language of your game.)
Ability to set TextUI (my free TextUI here)
Full JS, Lua translation.
Full support.
Config.lua:
Config = {}
Config.DistanceView = 8 -- Distance the marker will be visible
Config.DistanceAccess = 1.1 -- The distance in which it will be possible to take a seat by pressing the E key
-- █▀ █▀▄ ▄▀▄ █▄ ▄█ ██▀ █ █ ▄▀▄ █▀▄ █▄▀
-- █▀ █▀▄ █▀█ █ ▀ █ █▄▄ ▀▄▀▄▀ ▀▄▀ █▀▄ █ █
Config.Core = "ESX" -- "ESX" or "QB-Core"
Config.CoreDefine = ""
-- @Config.CoreDefine - If you are using old ESX which is defined by the esx:getSharedObject trigger, enter it here but if you are using ESX Legacy or QB-Core, leave the "" and the script will complete the export itself to define the 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.PlayerLogout = 'esx:onPlayerLogout' -- its a trigger to unload players tattoos
-- ESX: "esx:onPlayerLogout"
-- QBCore: "QBCore:Client:OnPlayerUnload"
Config.JobUpdated = 'esx:setJob' -- its a trigger to check players job
-- ESX: "esx:setJob"
-- QBCore: "QBCore:Client:OnJobUpdate"
-- @ Config.SkinManager for ESX = "" -- you don't need to fill anything if you use "esx_skin" / "fivem-appearance" / "illenium-appearance" for ESX
-- @ Config.SkinManager for QB-Core = "qb-clothing" / "fivem-appearance" / "illenium-appearance"
Config.SkinManager = ""
Config.LiesAnims = {
frontAnimDict = "amb@world_human_sunbathe@male@front@base",
frontAnim = "base",
backAnimDict = "switch@trevor@annoys_sunbathers",
backAnim = "trev_annoys_sunbathers_loop_girl",
}
Config.StartingCam = {vec(.0, -.2, 0.4), vec(.0, -.205, -0.6)}
Config.Notification = function(message, time, type)
if type == "success" then
exports["vms_notify"]:Notification("TATTOO SHOP", message, time, "#27FF09", "fa-solid fa-pen-nib")
-- ESX.ShowNotification(message)
-- QBCore.Functions.Notify(message, "success", 5000)
elseif type == "error" then
exports["vms_notify"]:Notification("TATTOO SHOP", message, time, "#FF0909", "fa-solid fa-pen-nib")
-- 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
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
end
Config.Blip = {
["Sprite"] = 75,
["Scale"] = 0.75,
["Color"] = 1,
["Display"] = 4
}
Config.Tattooshops = {
{
business = false, -- If you want the player to be a tattoo shop employee set true
ownerJob = "", -- If business is on true, here you must specify the work that has in this salon to manage
pedModel = nil, -- If business is on false you can add a ped who will take care of the customer (only stands, for attractiveness and realism). If you set nil, the peda will not be.
pedHeadingToChair = 197.46, -- Heading a player who will lie on his stomach
pedHeadingToChairBack = 22.31, -- Heading a player who will be lying on his back
position = vector3(1323.27, -1652.07, 51.28), -- Blip coordinates
tattooPedSpawnPos = vector4(1327.66, -1654.03, 51.28, 42.35), -- If you have set pedModel here are the coords in which the ped spawns and goes to the player
takeSitMarker = {
FreeColor = {235, 235, 235, 125}, -- RGBA color, if the seat is free
BusyColor = {128, 0, 31, 110}, -- RGBA color, if the seat is busy
},
Chairs = {
[1] = {
position = vector3(1320.64, -1653.94, 51.28), -- Marker coordinate to take a seat
tattooerPos = vector4(1321.84, -1654.83, 51.28, 143.44), -- Coordinates of the ped or employee in which he will stand to tattoo the customer
chair_coord = vector4(1321.13, -1655.12, 51.9, 22.31), -- Seat coordinates
busy = false, -- DO NOT CHANGE IT
},
}
},
}
Config.ClothesOff = {
-- ESX Clothes:
["male"] = {
sex = 0,
arms = 15,
tshirt_1 = 15, tshirt_2 = 0,
torso_1 = 91, torso_2 = 0,
pants_1 = 14, pants_2 = 0,
shoes_1 = 34, shoes_2 = 0,
},
["female"] = {
sex = 1,
arms = 15,
tshirt_1 = 34, tshirt_2 = 0,
torso_1 = 101, torso_2 = 1,
pants_1 = 16, pants_2 = 0,
shoes_1 = 0, shoes_2 = 0,
},
-- QBCore Clothes:
-- ["male"] = {
-- outfitData = {
-- ['t-shirt'] = {item = 15, texture = 0},
-- ['torso2'] = {item = 91, texture = 0},
-- ['arms'] = {item = 19, texture = 0},
-- ['pants'] = {item = 14, texture = 0},
-- ['shoes'] = {item = 1, texture = 0},
-- ['hat'] = {item = -1, texture = -1},
-- ['glass'] = {item = 0, texture = 0},
-- ['mask'] = {item = 0, texture = 0}
-- }
-- },
-- ["female"] = {
-- outfitData ={
-- ['t-shirt'] = {item = 34, texture = 0},
-- ['torso2'] = {item = 101, texture = 1},
-- ['arms'] = {item = 0, texture = 0},
-- ['pants'] = {item = 16, texture = 0},
-- ['shoes'] = {item = 1, texture = 0},
-- ['hat'] = {item = -1, texture = -1},
-- ['glass'] = {item = 0, texture = 0},
-- ['mask'] = {item = 0, texture = 0}
-- }
-- }
}
Config.Lang = "EN"
Config.Translate = {
["EN"] = {
["tattoo_blip"] = "Tattoo Shop",
["take_a_sit"] = "Lie down", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this: "Press ~INPUT_CONTEXT~ to take a sit"
["get_up"] = "Press ~INPUT_VEH_DUCK~ to get up",
["open_tattooshop"] = "Take care of the customer", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this: "Press ~INPUT_CONTEXT~ to open menu"
["paid"] = "You paid %s$ for tattoo.",
["nomoney"] = "You don't have enough money.",
["started_tattooing"] = "The tattoo artist started tattooing you.",
["removing_tattooing"] = "Tattoo has been removed from your skin.",
},
["PL"] = {
["tattoo_blip"] = "Salon tatuaży",
["take_a_sit"] = "Połóż się", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this: "Press ~INPUT_CONTEXT~ to take a sit"
["get_up"] = "Naciśnij ~INPUT_VEH_DUCK~ aby wstać",
["open_tattooshop"] = "Klient", -- if textui is disabled then you will use ESX.ShowHelpNotification, set this: "Press ~INPUT_CONTEXT~ to open menu"
["paid"] = "Zapłacono %s$ za tatuaż.",
["nomoney"] = "Nie posiadasz wystarczająco pieniędzy.",
["started_tattooing"] = "Tatuażysta wytatuował Ci nowy wzór.",
["removing_tattooing"] = "Tatuażysta usunął tatuaż z Twojej skóry.",
},
}
Config.TattooList = {
>> Here are sorted tattoos into categories but there are a lot of them so I don't put them here
}
If you decide to purchase the script, I encourage you to join on the discord, to keep up to date with updates.
You can check my others scripts
vms_barber
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) | +750 lua |
Requirements | ESX / QBCore |
Support | Yes |