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

Dependency
Required

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 employees

  • A tattoos column 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_lib must start before forge-tattoo.

4. Configure

Edit the files inside the config/ folder to fit your server:

File
Purpose

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:

#
Section
Description

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_extended is present → ESX mode

  • If qb-core is present → QBCore mode

The clothing resource is auto-detected from this priority list:

  1. illenium-appearance

  2. rcore_clothing

  3. fivem-appearance

  4. qb-clothing

  5. esx_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:

Key
Location
Job

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

  1. Copy an existing parlor entry in shops.lua

  2. Change the key name (e.g. 'parlor_legion')

  3. Update all coordinates using your preferred coord tool in-game

  4. Set a new assignedJob and register it in your framework

  5. Restart 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

  1. Candidate pool — A configurable list of NPC candidates with names, ped models, and skill levels (1–4) is defined in Cfg.NPCPool

  2. Rotation — The available-for-hire list refreshes every Cfg.NPCRotationMinutes (default: 120 minutes)

  3. Hiring — Parlor owners hire NPCs through the Management Panel (the adminPanel interaction point). There's an upfront hiring fee = NPCSalaryPerLevel × level × NPCHiringCostMult

  4. Cap — Each parlor can have at most Cfg.MaxNPCEmployees (default: 3) NPCs at once

  5. Salary — Every Cfg.NPCSalaryIntervalMin minutes (default: 60), each NPC is paid level × NPCSalaryPerLevel from the parlor's balance

  6. Firing — 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:

Parameter
Default
Description

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:

Level
$/tick
$/hour
Salary/hr
Net Profit/hr

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:

Happiness
Modifier
Trigger

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.

Setting
Default
Description

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

  • All 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 assignedJob is registered in neon-boss Config.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.

Difficulty
Description

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:

  1. A worker approaches the dutyPoint marker/target and interacts

  2. They toggle between on-duty and off-duty

  3. While on-duty, the system checks their distance every 5 seconds

  4. If they move further than 40 units from the parlor, they're automatically set off-duty

  5. 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:

Marker
Default Style
Purpose

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

  1. Open OpenIV

  2. Enable Edit Mode

  3. Browse to a tattoo overlay collection (e.g. mpbusiness_overlays) and find a tattoo in the zone you want (head, torso, arms, legs)

  4. Note the txdHash name from the XML — for example mp_bea_tat_m_004

  5. Search for that .ytd file in OpenIV and extract it to your desktop

  6. Open the .ytd in OpenIV, export the texture as .png

Option B: Start from scratch

  1. Find any existing .ytd from the stream/ folder of this resource and extract its texture for reference on size/positioning

  2. Create your design in a graphics editor (Photoshop, GIMP, etc.)

  3. Save it as a .png file 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

  1. Pick a name for your tattoo following the naming convention:

    Example: forge_skull_face.ytd, forge_dragon_torso.ytd

  2. Take any existing .ytd file (you can use one from stream/ as a base), copy it, and rename it to your new name

  3. Open the renamed .ytd in OpenIV (with Edit Mode enabled):

    • Delete the existing texture inside

    • Import your new .png texture

    • The texture name inside the .ytd should match the .ytd filename (without extension)

    • Save and close

  4. Place the finished .ytd file in the stream/ folder:

FiveM automatically streams all .ytd files from the stream/ 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:

Field
Description

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:

Parameter
Description

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:

Preset
Zone

'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 Constant
Body Area

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

Preset
Zone
Pose

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


circle-check

Last updated