A comprehensive and immersive tattoo shop script for FiveM servers, supporting both ESX and QBCore frameworks. This script provides a realistic tattoo shop experience with an interactive UI, multiple tattoo collections, and business management features.
JOE Tattoo Shop is a feature-rich tattoo system that allows players to visit tattoo shops across Los Santos, browse through hundreds of tattoo designs, purchase tattoos, and remove existing ones. The script includes a beautiful HTML/CSS/JavaScript UI, dynamic camera system, realistic animations, and full support for both ESX and QBCore frameworks.
- Multi-Framework Support: Fully compatible with ESX and QBCore
- Multiple Tattoo Collections: Includes 12+ tattoo collections with hundreds of designs:
- MP Business Overlays
- MP Hipster Overlays
- MP Biker Overlays
- MP Airraces Overlays
- MP Beach Overlays
- MP Christmas2 Overlays
- MP Gunrunning Overlays
- MP Import/Export Overlays
- MP Lowrider Overlays
- MP Lowrider2 Overlays
- Custom JOE Overlays (20+ unique face tattoos)
- Multiplayer Overlays (Hair overlays)
- Interactive UI: Modern, responsive HTML/CSS/JavaScript interface
- Dynamic Camera System: Automatic camera positioning based on tattoo placement
- Realistic Animations: Players lie down on tattoo chairs with proper animations
- Tattoo Removal: Ability to remove tattoos for a fee
- Persistent Storage: All tattoos are saved to the database and persist across sessions
- Multiple Shop Locations: 4 pre-configured tattoo shop locations across Los Santos
- Business Mode: Optional job-based system where employees can manage customers
- NPC Support: Optional NPC tattoo artists for added realism
- Customizable Pricing: Individual pricing for each tattoo and removal costs
- Multi-Language Support: Built-in translation system (English, Polish, and easily expandable)
- Smart Camera Positioning: Camera automatically adjusts based on tattoo location (front/back)
- Clothing Management: Automatically removes upper clothing to show tattoos during selection
- Real-time Preview: See tattoos on your character before purchasing
- Category System: Organized tattoo browsing by collection
- Visual Markers: Clear markers showing available/busy chairs
- Blip System: Map blips for easy location finding
- TextUI Integration: Optional TextUI support for better interaction prompts
- Version Check System: Built-in version checking functionality
- Compatible with ESX Legacy and older ESX versions
- Supports
esx_skinandfivem-appearancefor ESX - Full integration with ESX player data and money system
- Full QBCore compatibility
- Supports
qb-clothingandfivem-appearancefor QBCore - Integrated with QBCore player data and money system
- oxmysql (for database operations)
- ESX or QBCore framework
- esx_skin / qb-clothing / fivem-appearance (for clothing management)
- MySQL database with the appropriate table structure
- SQL files provided for both ESX and QBCore
-
Download the resource
# Place the resource in your resources folder resources/[scripts]/JOE_tattooshop -
Database Setup
- For ESX: Run
[ESX] joe_tattooshop.sqlin your database - For QBCore: Run
[QB] joe_tattooshop.sqlin your database
- For ESX: Run
-
Configure the Script
- Open
config.lua - Set
Config.Coreto"ESX"or"QBCore" - Configure
Config.CoreExport()function - Set
Config.SkinMenuto match your clothing script - Adjust shop locations, prices, and other settings as needed
- Open
-
Add to server.cfg
ensure JOE_tattooshop
-
Restart your server
Config.Core = "QBCore" -- or "ESX"
Config.SkinMenu = "qb-clothing" -- or "fivem-appearance"
Config.Lang = "EN" -- Language selectionEach shop can be configured with:
- Position: Blip and shop coordinates
- Chairs: Multiple tattoo chairs per shop
- Business Mode: Enable/disable job requirement
- Owner Job: Required job for business mode
- NPC Model: Optional NPC tattoo artist
- Marker Colors: Customizable marker colors
Each tattoo has:
- Price: Cost to purchase the tattoo
- Remove Price: Cost to remove the tattoo (typically higher)
The script includes automatic camera positioning:
- Front Animations: For tattoos on front-facing body parts
- Back Animations: For tattoos on back-facing body parts
- Custom Camera Angles: Each tattoo has optimized camera positions
- Find a Tattoo Shop: Look for the tattoo shop blip on your map
- Approach a Chair: Walk to an available tattoo chair (marked with a red marker)
- Press E: Sit down on the chair
- Browse Tattoos: Use the UI to browse different tattoo collections
- Preview: Click on tattoos to see them on your character
- Purchase: Click "Buy" to purchase a tattoo (requires sufficient funds)
- Remove: Click "Remove" to remove an existing tattoo (costs removal fee)
- Exit: Press X or close the UI to leave
- Set Job: Configure
business = trueand setownerJobin config - Approach Busy Chair: When a customer is on a chair, approach it
- Press E: Open the tattoo menu for the customer
- Manage Customer: Apply or remove tattoos for the customer
- Customer View: Customer sees their character being tattooed in real-time
JOE_tattooshop/
โโโ client/
โ โโโ client.lua # Client-side logic
โโโ server/
โ โโโ server.lua # Server-side logic
โ โโโ version_check.lua # Version checking
โโโ meta/
โ โโโ joe_overlays.xml # Custom tattoo overlays
โ โโโ shop_tattoo.meta # Tattoo shop metadata
โโโ stream/
โ โโโ *.ytd # Tattoo texture files
โโโ html/ # UI files (HTML/CSS/JS)
โโโ config.lua # Main configuration file
โโโ fxmanifest.lua # Resource manifest
โโโ translation.js # Translation file
โโโ [ESX] joe_tattooshop.sql
โโโ [QB] joe_tattooshop.sql
- Add your tattoo texture files to the
stream/folder - Update
meta/joe_overlays.xmlwith your tattoo definitions - Add entries to
Config.TattooListinconfig.lua - Configure camera positions and animations for each tattoo
Add new shops in Config.Tattooshops:
{
business = false,
ownerJob = "",
pedModel = nil,
pedHeadingToChair = 197.46,
pedHeadingToChairBack = 22.31,
position = vector3(x, y, z),
tattooPedSpawnPos = vector4(x, y, z, heading),
Chairs = {
[1] = {
position = vector3(x, y, z),
tattooerPos = vector4(x, y, z, heading),
chair_coord = vector4(x, y, z, heading),
busy = false,
},
}
}Add new languages in Config.Translate:
Config.Translate = {
["YOUR_LANG"] = {
["tattoo_blip"] = "Translation",
["take_a_sit"] = "Translation",
-- ... etc
}
}- Ensure your clothing script is compatible
- Check that tattoos are being saved to the database
- Verify the tattoo collection files are loaded
- Check browser console for JavaScript errors
- Ensure
html/ui.htmlexists and is properly formatted - Verify NUI focus is being set correctly
- Run the appropriate SQL file for your framework
- Check that the
tattooscolumn exists in your database - Verify MySQL connection is working
- Author: JOE STUDIOS
- Version: 1.0.3
- Framework: FiveM
This resource is protected by escrow. The following files are accessible:
config.luaclient/client.luaserver/server.luaserver/version_check.lua
For support, bug reports, or feature requests, please contact the author or visit the resource page.
- This script uses Lua 5.4
- Requires FiveM server with proper MySQL setup
- Some features may require additional dependencies
- Custom tattoo collections require proper texture files and metadata
Enjoy your new tattoo shop system! ๐จ