Installation
Overview
ML Tattoos is a tattoo shop resource. Players browse vanilla GTA overlay tattoos and player custom-image tattoos on a 3D rotating preview, then apply or remove them. Staff manage custom tattoos, restrictions and factions from a built-in admin panel.
Quick Start
- Download the package from
https://portal.cfx.re - Extract it to your
resourcesfolder, keepingml_tattoosandml_tattoos_metatogether - Add to
server.cfg:
1ensure oxmysql
2ensure ox_lib
3ensure ml_bridge
4ensure ml_tattoos_meta
5ensure ml_tattoosml_tattoos must start AFTER ml_bridge, ox_lib, oxmysql and ml_tattoos_meta. The meta companion must be present, or custom tattoos will not render.
Database
Tables are created automatically on first start:
ml_tattoos_players: Each player's applied tattoosml_tattoos_custom: Custom-image tattoo definitions (image, position, visibility, owner)ml_tattoos_admins: In-panel admin whitelistml_tattoos_restrictions: Per-tattoo job/faction restrictionsml_tattoos_credits: Per-player use balances (solo/faction/ytd)ml_tattoos_credit_log: Audit trail of every use grant, consume, refund and revokeml_tattoos_ytd_unlocks: Which full-body packs each player has unlocked
The schema includes automatic migrations for older installs; they run safely and skip on already-healthy databases.
Item Registration
Items are only needed when you use item payment or the item-kit presets. Copy the definitions from _INSTALL/items.lua into your inventory:
1['tattoo_kit'] = {
2 label = 'Tattoo Kit', weight = 200, stack = true, close = true,
3 description = 'A portable tattoo kit. Use it to apply one tattoo.',
4},
5['tattoo_kit_basic'] = { label = 'Basic Tattoo Kit', weight = 200, stack = true, close = true },
6['tattoo_kit_premium'] = { label = 'Premium Tattoo Kit', weight = 200, stack = true, close = true },
7['tattoo_kit_custom'] = { label = 'Custom Tattoo Voucher', weight = 50, stack = true, close = true },Register only the items you actually reference in Config.ItemPerTattoo, Config.ItemPresets and Config.UnlockableHashes. The full list lives in _INSTALL/items.lua.
The custom-tattoo overlay pool is written into ml_tattoos_meta/data at boot, so that folder must be writable at runtime. On a read-only deploy, grant write access to it before starting the resource.
Verify
After starting, the console prints:
1[ml_tattoos] Resource started
2[ml_tattoos] thank you for choosing miciomods.itOpen the shop in-game through a configured shop location, a tattoo-kit item, the /opentattoo admin grant, or the openShop export. Admins open the management panel with /tattooadmin.
Run /reloadtattoos to reload tattoo data without restarting the resource.
- Custom tattoos do not appear: Confirm
ml_tattoos_metais present and started, and that itsdatafolder is writable. Restartml_tattoosso the pool is rebuilt and the meta resource restarts. - UI does not open: Check the F8 console for resource errors and confirm
ml_bridgeandox_libstarted first. - Admin panel missing: The player needs the
ml_bridgepermission set inConfig.AdminPermission(default'admin'), or an entry in the in-panel admin whitelist. - Tattoos not saving: Confirm
oxmysqlstarted beforeml_tattoosand that the tables were created on boot. - A custom image is rejected: Images must be served over HTTPS from an approved host. Re-upload to a supported image host, or enable the in-game uploader with FiveManage.
- Tebex donations not delivering uses: Confirm
ml_tebexis started, the convars are set, and each package id inConfig.TebexPackagesmatches the identifier on your Tebex store.