by Avenida Team ESX Β· QBCore Β· vRP Β· Standalone Β· oxmysql

Tattoo shop

The whole vanilla tattoo catalogue, with a cart and a chair you actually sit in. 1615 designs across 26 DLC collections, previewed live on your own character as you add them, paid for in one go. Laser removal included, and an artist who walks in and does the work.

Delivery Instant
Updates Free for life
Support Daily on Discord
01 Β· FEATURES

What it does

02 Β· SPECS

Technical
specifications

Framework Auto-detected QBCore Β· ESX Β· vRP Β· Standalone Β· Custom
Dependencies oxmysql ox_lib Β· ox_target Β· ox_inventory supported
Catalogue 1615 tattoos 26 DLC collections Β· 368 zone corrections
In-game locales 15 included ar Β· cs Β· de Β· en Β· es Β· fr Β· id Β· it Β· nl Β· pl Β· pt-br Β· ro Β· ru Β· th Β· tr
Performance 0.00ms idle Nothing runs while no one is in a shop
03 Β· INCLUDED

Everything you
get

  • Fifteen locale files, shipped filled

    Your players read the script in their own language from the first start, and the files sit outside escrow so you can edit any line in production. Honest note: they are translated and reviewed by us, not proofread by native speakers of all fifteen. Tell us what reads wrong in yours and it gets fixed.

  • Seven bridges, one file each

    Framework, notifications, interaction, clothing, inventory, decorations and compat. Every file documents its targets, what it detects, and what each target costs you. Detection probes the actual export rather than the resource state, so a renamed export degrades quietly instead of throwing at boot.

  • The whole tattoo economy stays open

    Flat price, per-zone prices, collection multipliers, laser fee, the seven shops, the scene camera and the 368 zone corrections. `config/*.lua`, `locales/*.lua` and `bridges/*.lua` are escrow exempt and editable in production.

  • An install report you can paste into support

    `/avenida_tattoo_check` prints which bridge was picked for each category, whether the tables and columns exist, and what your game build actually ships. It answers most integration questions before you have to ask them.

04 Β· DOCUMENTATION

Integration guide

01

Installation

  1. Drop the resource

    Grab the script from your Tebex account, then copy the avenida_tattoo/ folder into your resources directory and add ensure avenida_tattoo to your server config, after ensure oxmysql.

  2. Run the SQL

    Run section [A] of INSTALL.sql on your database. Section [B] is conditional, the file header says when you need it.

  3. Set your prices

    Open config/tattoo.lua. The flat rate, the per-collection multipliers and the laser fee are the three numbers worth deciding before you open the doors. config/config.lua holds the language and the bridges.

  4. Verify the integrations

    Set Config.Debug = true, restart, and read the console: one line per bridge category names the target that was picked. Set it back to false once the lines match your server, the diagnostic commands it unlocks cost a frame hitch.

  5. Grant yourself the admin features

    Add add_ace group.admin avenida_tattoo.admin allow to your server config, then run /avenida_tattoo_check in game for the full install report.

02

Quickstart

Set the price of ink

One flat rate covers the whole catalogue, and the multipliers make old collections cheap and rare ones expensive without pricing 1615 designs by hand. Everything is recomputed server side at payment.

lua
-- config/tattoo.lua
Config.Tattoo.Prices = {
    flat  = 1000,   -- every tattoo, unless PricePerZone is on
    hair  = 500,
    reset = 3000,   -- laser removal, per tattoo removed
}

Config.Tattoo.PricePerZone = false

Config.Tattoo.CollectionMultipliers = {
    multiplayer_overlays = 0.80,   -- base game, cheaper
    mpHipster_overlays   = 0.85,
    mpBeach_overlays     = 0.85,
    -- anything not listed stays at 1.0
}
03

API Reference

Public exports grouped by domain. Each row shows the call signature and what it does, not how it does it.

Client

  • GetHairbase
    exports['avenida_tattoo']:GetHairbase() --> { c = collection, t = nameHash } | nil

    The hair base the ped currently wears. The ink studio does not own it, but it has to give it back after every redraw, and so does any resource of yours that clears decorations.

  • GetTattoos
    exports['avenida_tattoo']:GetTattoos() --> { { c, t }, ... }

    The full list of tattoos worn, as collection and name hash pairs. This is the authoritative copy: the laser removes from it, and a purchase adds to it, so read it rather than caching your own.

  • GetSkinData
    exports['avenida_tattoo']:GetSkinData()

    The stored character, including the zone corrections that place ink correctly on torso, arms and legs. Handy when your own script needs to know what body it is drawing on.

  • ApplySkin
    exports['avenida_tattoo']:ApplySkin(data, ped)

    Pushes an appearance onto a ped, tattoos included. The decoration slot is rebuilt in one pass, which avoids the flicker you get when ink is applied piece by piece.

  • ApplyClothing
    exports['avenida_tattoo']:ApplyClothing(data, ped, temporary)

    Dresses a ped without touching the ink. The third argument keeps the change out of the database, which is what you want for a scene that ends when the player walks away.

04

Recipes

Real-world copy-paste examples. Drop them into your own resource, tweak the values, ship.

With `PricePerZone` on, the server bills from the GTA decoration zone of each design. Careful with the trade-off documented in the config: only tattoos that resolve to a declared zone are sold, so anything left uncorrected disappears from the shop rather than being sold at the wrong price.

lua
-- config/tattoo.lua
Config.Tattoo.PricePerZone = true

Config.Tattoo.Prices = {
    [0] = 1250, -- torso / back
    [1] = 1000, -- head
    [2] = 600,  -- left arm
    [3] = 600,  -- right arm
    [4] = 750,  -- left leg
    [5] = 750,  -- right leg
    [6] = 750,  -- unknown
    reset = 3000,
}
05

Troubleshooting

  • Two reasons, both deliberate. Newer DLC collections are merged in by game build, so a design your client cannot render is never listed rather than listed and broken. And with `PricePerZone` on, only tattoos that resolve to a declared zone are sold, which is stated in the config: most of the catalogue disappears until you fill the overrides in. With `PricePerZone` off, the default, the whole catalogue is on sale.
REVIEWS

What buyers say

5.0 15 verified reviews

  • ΔΈΞΉrowdev πŸͺ

    Le script est est excellent rien Γ  dire

    View on Discord β†—
  • Blockerman

    Very nice support.

    View on Discord β†—
  • Shuntzu_Gamer

    Very nice support.

    View on Discord β†—
  • Woufy

    Very nice support, fast and pro !

    View on Discord β†—
  • - α΄‡ΚŸα΄„xʏ';

    I had an issue where i lost access to my script and these guys couldn't help me at first but they went out there way to fix the issue and contacted me, amazing script

    View on Discord β†—
  • ReCore OoT Randomizer

    I bought the tattoo shop first, thanks to the very patient and efficient support I was able to make it work, I bought the barber shop afterwards and I am very happy with both scripts, it works like a charm! Congratulations again to the support !

    View on Discord β†—
Cart
Spirit RP
Discord