🖌️SLEEK TATTOO
Here check the installation guide
✨ Features
Auto-detection of ESX / QBCore — zero manual framework config
6 pre-configured parlor locations (El Burro Heights, Vinewood, Chumash, Vespucci Beach, Sandy Shores, Paleto Bay)
Full business system — job-based parlors with worker/owner ranks
NPC employee system — hire virtual artists that generate passive income
Supply system — parlors consume supplies when tattoos are applied
Henna / temporary tattoos — auto-expire after configurable real-time days
Tattooing minigame — optional ox_lib skillCheck before applying a tattoo
Duty system — workers clock in/out with auto-off-duty if they leave
Custom addon tattoos — with a CUSTOM badge displayed in the shop UI
Tattoo removal station — per-parlor configurable
Full GTA vanilla catalog + custom tattoo collections
Modern NUI — customizable color palette, blur, particles, sound effects
ox_target / qb-target support or classic marker + keypress interaction
9 banking integrations — ESX, QB, FORGE (neon-boss), OKOK, FD, TGG, WASABI, CODEM, JUSTBANKING
5 clothing resource integrations — illenium-appearance, rcore_clothing, fivem-appearance, qb-clothing, esx_skin
Discord webhooks for sale logging
Multi-language — English, Spanish, French, German, Italian, Turkish, Chinese, Arabic
📋 Requirements
Yes
Yes
ESX or QBCore
Yes (one of them)
Clothing resource
Recommended (illenium-appearance, rcore_clothing, fivem-appearance, qb-clothing, or esx_skin)
ox_target or qb-target
Optional (only if you enable target mode)
🚀 Installation
1. Download & Place
Copy the forge-tattoo folder into your server's resources/ directory:
2. Database
The resource auto-creates all required database tables on first start (Cfg.AutoMigrateDB = true by default). This includes:
forge_business— parlor balances, supply levels, NPC employeesA
tattooscolumn in your framework's player/users table
No manual SQL import is needed unless you disable auto-migration.
3. Add to server.cfg
Important:
ox_libmust start beforeforge-tattoo.
4. Configure
Edit the files inside the config/ folder to fit your server:
config.lua
Master config — framework, locale, economy, NPCs, supplies, henna, minigame, UI, markers, camera, animations
shops.lua
Parlor locations — coordinates, NPC spawn, seats, blips, business settings
tattoos.lua
Full tattoo catalog — all vanilla GTA collections + custom addon entries
translation.lua
UI and notification text in 8 languages
bridge_client.lua
Client-side framework bridge (usually no edits needed)
bridge_server.lua
Server-side framework bridge (usually no edits needed)
5. Create Jobs
If you're running parlors as businesses (isBusiness = true), register the job names in your framework:
ESX — add to your jobs database table:
QBCore — add equivalent entries in qb-core/shared/jobs.lua.
Each parlor's assignedJob in shops.lua must match its job name.
6. Start Your Server
The resource auto-detects your framework (ESX or QBCore) and your clothing resource. No manual framework configuration needed.
⚙ Configuration Overview
All configuration lives in config/config.lua. The file is divided into numbered sections:
1
Runtime Detection
Auto-detects ESX/QB and clothing resource
2
Locale
Language setting (en, es, fr, de, it, tr, zh, ar)
3
Business & Economy
Payment routing, society method, revenue split
4
NPC Employee System
Hiring pool, salary, skill levels
5
Extra Sales
NPC passive income formula & tuning
6
Supply System
Consumption, pricing, happiness thresholds
7
Henna
Temporary tattoo toggle & duration
8
Mini-Game
Skill check toggle & difficulty
9
Duty System
Distance checks & auto-clock-off
10
Inventory & Items
Tattoo gun/ink item requirements
11
UI Appearance
Colors, blur, particles, sound
12
World & Map
Blip settings, marker styles
13
Interaction
Target mode vs marker mode
14
Preview & Camera
Studio outfit, camera angles
15
Props & Furniture
Chair model, extra spawn points
16
Animations
Lying poses, tattoo gun anim
17
Database & Misc
Auto-migration toggle
18
Neon-Boss Integration
Auto-config when neon-boss is enabled
🔍 Framework & Auto-Detection
Forge Tattoo automatically detects which framework and clothing resource are running. You never need to set Cfg.Framework manually:
If
es_extendedis present → ESX modeIf
qb-coreis present → QBCore mode
The clothing resource is auto-detected from this priority list:
illenium-appearancercore_clothingfivem-appearanceqb-clothingesx_skin
The first one found in a started state wins. This is used to restore the player's appearance after previewing tattoos.
📍 Parlor Locations
Parlor locations are defined in config/shops.lua inside Cfg.Parlors. The resource ships with 6 locations:
parlor_elburro
El Burro Heights
tattoo1
parlor_vinewood
Vinewood
tattoo2
parlor_chumash
Chumash
tattoo3
parlor_vespucci
Vespucci Beach
tattoo4
parlor_sandy
Sandy Shores
tattoo5
parlor_paleto
Paleto Bay
tattoo6
Parlor Configuration Fields
Each parlor entry supports these fields:
Adding a New Parlor
Copy an existing parlor entry in
shops.luaChange the key name (e.g.
'parlor_legion')Update all coordinates using your preferred coord tool in-game
Set a new
assignedJoband register it in your frameworkRestart the resource
Non-Business Mode
If you don't want job-based parlors, set isBusiness = false. The parlor will work as a public self-service shop — any player can sit down and browse/buy tattoos without needing a job.
👥 NPC Employee System
Parlors can hire virtual NPC artists from a rotating candidate pool. NPCs earn a salary, generate passive income, and have a happiness meter that affects their productivity.
How It Works
Candidate pool — A configurable list of NPC candidates with names, ped models, and skill levels (1–4) is defined in
Cfg.NPCPoolRotation — The available-for-hire list refreshes every
Cfg.NPCRotationMinutes(default: 120 minutes)Hiring — Parlor owners hire NPCs through the Management Panel (the
adminPanelinteraction point). There's an upfront hiring fee =NPCSalaryPerLevel × level × NPCHiringCostMultCap — Each parlor can have at most
Cfg.MaxNPCEmployees(default: 3) NPCs at onceSalary — Every
Cfg.NPCSalaryIntervalMinminutes (default: 60), each NPC is paidlevel × NPCSalaryPerLevelfrom the parlor's balanceFiring — Owners can dismiss NPCs at any time through the management panel
Default NPC Pool
You can add/remove/modify entries. The level determines salary cost and passive income generation.
NPC Passive Income (Extra Sales)
When Cfg.EnableExtraSales = true, each hired NPC automatically generates passive income every Cfg.ExtraSaleIntervalMin minutes (default: 30).
Revenue formula per NPC per tick:
ExtraSaleBase
60
Base $ per NPC per tick
ExtraSaleLevelExp
1.5
Level exponent (higher = bigger gap between levels)
ExtraSaleTeamBonus
0.15
Bonus per additional NPC (1 NPC = ×1.00, 2 = ×1.15, 3 = ×1.30)
ExtraSaleSupplyCost
1
Supply units consumed per NPC per tick
Profitability at default settings:
1
$60
$120
$150
-$130 ★
2
$170
$340
$300
-$60 ★
3
$312
$624
$450
+$74
4
$480
$960
$600
+$260
★ Level 1–2 NPCs need real customer purchases to break even. Supply cost ($100/hr per NPC) is already factored in. With the team bonus, 3 NPCs get ×1.30 (+30%).
NPC Happiness
NPCs have a happiness level (0–3) that directly multiplies their passive income:
3 (Happy)
×1.00
Supplies above anger threshold
2 (Okay)
×0.75
Normal state
1 (Unhappy)
×0.35
Supplies below SupplyAngerThreshold (50)
0 (Miserable)
×0.00
Supplies below SupplyCriticalThreshold (10) — NPC may quit!
Keep your supplies stocked to maintain NPC productivity. If supplies hit critical, NPCs stop generating income and may leave the company.
📦 Supply System
Parlors consume supply units when tattoos are applied or removed. Owners must buy refills through the Management Panel.
Cfg.DefaultSupplyMax
100
Maximum supply units a parlor can hold
Cfg.SupplyPerTattoo
2
Units consumed when applying a tattoo
Cfg.SupplyPerRemoval
1
Units consumed when removing a tattoo
Cfg.SupplyUnitPrice
$50
Cost per supply unit when restocking
Cfg.SupplyBuyIncrement
10
Step size for the "buy supplies" button
If supplies run out, tattoos cannot be applied. A notification tells the customer to alert the owner.
Supply level also affects NPC happiness (see above):
Below 50 units → NPCs become unhappy (reduced passive income)
Below 10 units → NPCs become miserable (0 passive income, may quit)
💰 Business & Economy
Revenue Split
When a customer buys a tattoo, the payment is split between the parlor and the worker:
Payment Routing
You have two options for how the parlor's share (80%) is stored:
Option A — Built-in balance (default):
The parlor's money is stored in the forge_business database table. Owners manage funds through the in-game management panel.
Option B — External banking system:
Each parlor's societyKey in shops.lua must match what the banking resource expects:
ESX (esx_addonaccount) →
"society_tattoo1"formatAll others → plain job name, e.g.
"tattoo1"
Neon-Boss Integration
If you use the neon-boss resource for boss menus:
This automatically sets UseBuiltinBalance = false and routes all money through neon-boss exports. Each parlor config includes a bossMenuPoint coordinate where the boss menu marker will appear.
Make sure each parlor's
assignedJobis registered in neon-bossConfig.Societies.
🌿 Henna (Temporary Tattoos)
Henna tattoos are temporary overlays that fade away after a set number of real days.
When a henna tattoo expires, the player receives a notification: "Your henna tattoo has faded away."
Henna tattoos are marked differently in the catalog and use the same application flow as permanent tattoos.
🎮 Minigame System
Optionally require a skill check before a worker can apply a tattoo. This only affects real player workers, not NPC-only parlors.
easy
1 simple line to trace
medium
2 drawings in sequence
hard
4 complex shapes in sequence
If the worker fails the minigame, the tattoo is not applied and they can try again. Uses ox_lib skillCheck under the hood.
👔 Duty System
Workers clock in and out at the parlor's dutyPoint. The system automatically clocks workers off if they leave the parlor area.
How it works:
A worker approaches the
dutyPointmarker/target and interactsThey toggle between on-duty and off-duty
While on-duty, the system checks their distance every 5 seconds
If they move further than 40 units from the parlor, they're automatically set off-duty
Workers must be on-duty to apply tattoos to customers
🎯 Interaction Modes
Choose between two interaction styles:
Target Mode (ox_target / qb-target)
Registers 3D target zones on seats, removal stations, duty points, and management panels. Players aim at the zone and select an option.
Marker Mode (default)
Classic floating 3D markers with [E] key prompts. Each interaction type has its own visual style configurable in Cfg.MarkerStyles:
Admin
Small cyan dot
Management panel
Available
Rotating cyan diamond
Free tattoo seat
Occupied
Rotating red diamond
Taken seat
DutyPoint
Rotating purple marker
Clock in/out
NeonBoss
Small orange dot
Boss menu
Removal
Red orb
Tattoo removal station
🎨 UI Customization
The entire UI color palette is configurable from config.lua:
Additional visual options:
📷 Camera & Preview
When a customer sits in the chair, a stripped-down outfit is applied so clothes don't hide tattoos. This outfit is configurable:
Camera angles are configured per body zone:
The cinematic camera during the actual tattooing process:
🎒 Inventory & Items
Optionally require physical items to apply tattoos:
For qs-inventory users:
📡 Webhooks
Forge Tattoo can send Discord webhook notifications for sales. Configure your webhook URL in the server bridge. The webhook sends embeds with:
Sale title
Description of the transaction
Color-coded embed
Player identifier in the footer
🎨 Custom Addon Tattoos
Forge Tattoo supports custom addon tattoos that appear in the shop UI with a CUSTOM badge. This guide walks you through creating and adding your own tattoos.
The resource ships with a collection of pre-made custom tattoos (flags, art designs) in the stream/ folder. To add your own, follow these steps:
Step 1 — Find or Create Your Tattoo Texture
You have two options:
Option A: Edit an existing GTA tattoo as a template
Open OpenIV
Enable Edit Mode
Browse to a tattoo overlay collection (e.g.
mpbusiness_overlays) and find a tattoo in the zone you want (head, torso, arms, legs)Note the
txdHashname from the XML — for examplemp_bea_tat_m_004Search for that
.ytdfile in OpenIV and extract it to your desktopOpen the
.ytdin OpenIV, export the texture as.png
Option B: Start from scratch
Find any existing
.ytdfrom thestream/folder of this resource and extract its texture for reference on size/positioningCreate your design in a graphics editor (Photoshop, GIMP, etc.)
Save it as a
.pngfile with transparency
Tip: Use the existing tattoo texture as a canvas size reference. The UV mapping determines the final position on the body, not the image placement.
Step 2 — Prepare the .ytd File
Pick a name for your tattoo following the naming convention:
Example:
forge_skull_face.ytd,forge_dragon_torso.ytdTake any existing
.ytdfile (you can use one fromstream/as a base), copy it, and rename it to your new nameOpen the renamed
.ytdin OpenIV (with Edit Mode enabled):Delete the existing texture inside
Import your new
.pngtextureThe texture name inside the
.ytdshould match the.ytdfilename (without extension)Save and close
Place the finished
.ytdfile in thestream/folder:
FiveM automatically streams all
.ytdfiles from thestream/folder — no extra manifest entries needed for stream files.
Step 3 — Register the Overlay in the XML
Open ADDON/forge_overlays_custom.xml and add a new <Item> entry for your tattoo. You need two entries — one for Male and one for Female:
Field reference:
uvPos
Position on the body UV map (x, y). Adjust to move the tattoo around
scale
Size of the tattoo on the body. Keep 0.1 / 0.1 as a safe default
rotation
Rotation in radians (0 = no rotation)
nameHash
Unique identifier — must end in _M (male) or _F (female)
txdHash
Must match your .ytd filename (without extension)
txtHash
Must match your .ytd filename (without extension)
zone
Body zone (see Available Zones)
faction
FM for male, FM_F for female
gender
GENDER_MALE or GENDER_FEMALE
Step 4 — Add the Tattoo to the Catalog
Open config/tattoos.lua and find the forge_overlays_custom collection at the bottom of the file.
Add your tattoo using the ctat() function (this marks it as custom so the CUSTOM badge appears in the UI):
ctat() parameters:
label
Display name in the shop UI
hashMale
The nameHash from the XML for the male version (_M)
hashFemale
The nameHash from the XML for the female version (_F)
cost
Price to apply the tattoo (in $)
eraseCost
Price to remove the tattoo (in $)
pose
1 = face-down (front tattoos), 2 = face-up (back tattoos)
camera
Camera preset string or custom offset table (see below)
Camera presets available:
'f_head'
Front head
'f_neck'
Front neck
'b_neck'
Back neck
'b_face', 'b_face_r', 'b_face_l'
Back face (center, right, left)
'b_torso', 'b_torso_r', 'b_torso_l'
Back torso (center, right, left)
'b_belly'
Belly
For arms or other custom angles, use a two-element table with {cameraOffset, lookAtOffset}:
Step 5 — Restart and Test
Or restart your server. Your new tattoo will appear in the shop UI with the CUSTOM badge.
📍 Available Zones & Camera Presets
GTA Body Zones
ZONE_TORSO
Chest & Back
ZONE_HEAD
Head & Face
ZONE_LEFT_ARM
Left Arm
ZONE_RIGHT_ARM
Right Arm
ZONE_LEFT_LEG
Left Leg
ZONE_RIGHT_LEG
Right Leg
Camera Preset Quick Reference
'f_head'
Front head
1 (face-down)
'f_neck'
Front neck
1
'b_neck'
Back neck
2 (face-up)
'b_face'
Back face center
2
'b_face_r'
Back face right
2
'b_face_l'
Back face left
2
'b_torso'
Back torso center
2
'b_torso_r'
Back torso right
2
'b_torso_l'
Back torso left
2
'b_belly'
Belly
1
For arms and legs, use custom camera offset tables:
🌐 Translations
The resource supports 8 languages out of the box. Set the active language in config.lua:
All translation strings are defined in config/translation.lua. The system covers:
Map & interaction — blip names, target labels, key prompts
Alerts & notifications — payment confirmations, errors, NPC events
UI text — all labels sent to the NUI frontend via
setTranslations()
To add a new language, copy the en block inside LangPacks, change the key to your language code, and translate all strings.
💬 Support
Need help? Have questions? Want a custom tattoo design added for free?
Installation help — Open a ticket and we'll walk you through setup step by step
Configuration assistance — Need help setting up parlor locations, banking, or jobs? We've got you
Bug reports — Found something not working? Let us know and we'll fix it
Custom tattoo requests — Don't want to go through the manual OpenIV process? Just open a ticket, send us your image, and tell us where on the body you want it — we'll create the addon tattoo for you completely free of charge
Feature requests — Have an idea? We're always open to suggestions
📄 License
© CodeForge — All rights reserved.
If you want to edit the aesthetics or design. You have the HTML open so you can modify the style and everything as you want.
The script is RESPONSIVE for all resolutions as well.
Last updated