myClothesshop - with Torso bug prevention, EUP support, NPCs and new Design (PAID)

Hey guys,

with this script I want to present my enhanced clothesshop!
This script comes with an optional myClothes API, which makes the wardrobe work together with a Multichar system (which doesn’t worked with esx_addonaccount). More information below.

Features:

  • Torso bug prevention: For every torso of the male and female skin, there is a suitable t-shirt and arms configured. So when you scroll through the Torsos, the script will automatically adapt your t-shirt and arms. When you change your arms afterwards manually, they can still bug, but a suitable example is always given.
    If you have modded clothing parts , you can also configure this prevention for those.
  • Script spawns NPC sellers to make it more realistic
    -> to avoid bugs and increase performance the npc is being deleted when you are out of focus.
  • Beautiful UI using NativeUI. As well as menu headers, which depends on the location where you are
  • You can set up different shops: Default is one shop for main clothes, one shop for accessoires, and a mask shop. (You can disable every shop type in the config!)
  • As usual the script comes with a full translation Config and default support for German and English.
  • You can access saved outfits in the clothesshops (Can be disabled in Config)
  • Update 12.01.2021: You can now block certain clothes from being bought in the Clothesshops, so you can for example block Police/EUP uniforms and avoid abuse.

Showcase:

Shop menu:
MENU

Config
Config.Locale = 'en'

Config.useESXClothesData = true -- Clothing is saved in esx_addonaccount. 
Config.useMyClothesAPI = false -- Optimized API to work with a Multichar script. If you don't use myProperties, you need to edit your property script!

Config.Price = 149

Config.NormalShopPed = "s_f_m_fembarber"
Config.HATersShopPed = "a_f_y_runner_01"
Config.MaskShopPed   = "u_m_y_pogo_01"

Config.NormalBlipColour = 4

Config.Shops = { 
    {type = 'shopui_title_highendfashion', x = -164.94119262695, y = -302.57022094727, z = 39.733283996582, rot = 249.01162719727},
    {type = 'shopui_title_lowendfashion', x = 73.976188659668, y = -1392.4613037109, z = 29.376148223877, rot = 269.44592285156},
    {type = 'shopui_title_highendfashion', x = -708.56243896484, y = -151.98893737793, z = 37.415138244629, rot = 115.29697418213},
    {type = 'shopui_title_lowendfashion2', x = 427.12158203125, y = -806.90734863281, z = 29.491146087646, rot = 93.260101318359},
    {type = 'shopui_title_lowendfashion2', x = -822.896484375, y = -1071.9536132813, z = 11.32811164856, rot = 204.75247192383},
    {type = 'shopui_title_highendfashion', x = -1449.1019287109, y = -238.50553894043, z = 49.813743591309, rot = 50.546726226807},
    {type = 'shopui_title_lowendfashion2', x = 5.5428671836853, y = 6510.9501953125, z = 31.877834320068, rot = 45.513442993164},
    {type = 'shopui_title_lowendfashion2', x = -822.896484375, y = -1071.9536132813, z = 11.32811164856, rot = 204.75247192383},
    {type = 'shopui_title_midfashion', x = 127.06841278076, y = -224.28421020508, z = 54.55782699585, rot = 69.159606933594},
    {type = 'shopui_title_lowendfashion2', x = 1695.4453125, y = 4822.890625, z = 42.063125610352, rot = 93.038833618164},
    {type = 'shopui_title_midfashion', x = 612.69256591797, y = 2762.6242675781, z = 42.088088989258, rot = 272.66879272461},
    {type = 'shopui_title_lowendfashion2', x = 1196.9788818359, y = 2711.7102050781, z = 38.222637176514, rot = 183.91091918945},
    {type = 'shopui_title_midfashion', x = -1194.1501464844, y = -766.68597412109, z = 17.315553665161, rot = 217.00065612793},
    {type = 'shopui_title_midfashion', x = -3169.0966796875, y = 1043.171875, z = 20.863214492798, rot = 61.406246185303},
    {type = 'shopui_title_lowendfashion', x = -1102.4339599609, y = 2711.7355957031, z = 19.10786819458, rot = 227.7255859375},
    {type = 'HAT', x = -1127.3669433594, y = -1439.6357421875, z = 5.2283296585083, rot = 286.5080871582},
	  {type = 'MASK', x = -1337.1248779297, y = -1278.2264404297, z = 4.8689041137695, rot = 118.77864837646},
}

Config.shopContent = { -- normal shop

  {componentID = 11, name = 'torso_1', name2 = 'torso_2', label = 'Torso', zoomOffset = 0.75, camOffset = 0.15, type = 1},
  {componentID = 8, name = 'tshirt_1', name2 = 'tshirt_2', label = 'T-Shirts', zoomOffset = 0.75, camOffset = 0.15, type = 1},
  {componentID = 3, name = 'arms', name2 = nil, label = 'Arms', zoomOffset = 0.75, camOffset = 0.15, type = 1},
  {componentID = 4, name = 'pants_1', name2 = 'pants_2', label = 'Pants', zoomOffset = 0.8, camOffset = -0.5, type = 1},
  {componentID = 6, name = 'shoes_1', name2 = 'shoes_2', label = 'Shoes', zoomOffset = 0.8, camOffset = -0.8, type = 1},
  {componentID = 7, name = 'chain_1', name2 = 'chain_2', label = 'Chain', zoomOffset = 1.0, camOffset = 0.45, type = 1},
  {componentID = 1, name = 'glasses_1', name2 = 'glasses_2', label = 'Glasses', zoomOffset = 0.6, camOffset = 0.65, type = 2},
  {componentID = 2, name = 'ears_1', name2 = 'ears_2', label = 'Ear accessoires', zoomOffset = 0.4, camOffset = 0.65, type = 2},
  
}

Config.HATersContent = { -- accessoires shop
  {componentID = 5, name = 'bags_1', name2 = 'bags_2', label = 'Bags', zoomOffset = 0.75, camOffset = 0.15, type = 1},
  {componentID = 0, name = 'helmet_1', name2 = 'helmet_2', label = 'Helmet', zoomOffset = 0.6, camOffset = 0.65, type = 2},
  {componentID = 6, name = 'watch_1', name2 = 'watch_2', label = 'Watch', zoomOffset = 0.8, camOffset = 0.1, type = 2},

}

Config.MaskContent = {
  {componentID = 1, name = 'mask_1', name2 = 'mask_2', label = 'Mask', zoomOffset = 0.6, camOffset = 0.65, type = 1},
}
Translations
Translation = {
  ['de'] = {
    ['press_e_interact'] = 'Drücke ~g~E~s~, um mit der Verkäufer zu sprechen',
    ['blip_normal'] = 'Kleidungsladen',
    ['blip_haters'] = 'HATers Shop',
    ['blip_mask'] = 'Vespucci Maskenladen',
    ['menu_buy_clothes'] = 'Klamotten kaufen?',
    ['menu_confirm'] = 'Bestätigen',
    ['menu_abort'] = 'Abbrechen',
    ['title_haters'] = 'Accessoires Shop',
    ['change_colour'] = '~s~Farbe ändern',
    ['saved'] = '~g~Outfit ~w~',
    ['saved_2'] = '~g~ gespeichert.',
    ['not_enough_money'] = '~r~Du hast nicht genügend Geld.',
    ['buy_complete'] = '~y~Verkäuferin~s~: Vielen Dank für Ihren Einkauf und bis zum nächsten Mal.',
  },
  ['en'] = {
    ['press_e_interact'] = 'Press ~g~E~s~, to change clothes',
    ['blip_normal'] = 'Clothes shop',
    ['blip_haters'] = 'HATers shop',
    ['blip_mask'] = 'Vespucci masks',
    ['menu_buy_clothes'] = 'Buy clothes?',
    ['menu_confirm'] = 'Confirm',
    ['menu_abort'] = 'Abort',
    ['title_haters'] = 'Accessoires shop',
    ['change_colour'] = '~s~Change variation',
    ['saved'] = '~g~Outfit ~w~',
    ['saved_2'] = '~g~ was saved.',
    ['not_enough_money'] = '~r~You do not have enough money.',
    ['buy_complete'] = '~y~Seller~s~: Thank you for your purchase and see you next time.',
  }
}

Optional myClothesAPI
Because some of you told me they always had problems with the wardrobe, using a multichar script, I’ve developed a small script, which handles the storage of clothes.
For my property script I’ve added also a Config option, to simply switch to this API.

Dependencies:

  • ESX
  • NativeUIReloaded
  • skinchanger

Price: 5€ / 6$ (tax included)
Download at https://luis-scripts.tebex.io/package/4251745

11 Likes

Good job. Will be buying on payday. Already own two scripts, so you are trusted (although myDrugs could use a better explanation of how to do each step.)

1 Like

Also, since so many people do use EUP, it would be a great idea to build in the ability to lock out certain pieces of clothing to prevent civilians from buying emergency uniforms. Just an idea for an update.

2 Likes

Really nice idea. Will add this to todo.

Hi, does this script work with dpclothing?

1 Like

Yes, you shouldn’t have any problems with this. The storage of your skin isn’t different than f.e. in esx_clothesshop.

Can you show how the outfits are managed please? Ill get it if it suits my server for sure :slight_smile: But im REALLY interested on seeing the management

1 Like

If you use my API there is just a new table in the database, where every outfit is saved. Then you can request the clothes with an ESX callback.
When you don’t use my API, it simply saves with esx_addonaccount.

Hello dude, i have the skinchanger and esx_skin basic. I need to juste replace my esx_np_skinshop_v2 by yours ?

1 Like

Yeah, this will work.

Is this resource IP-locked or encrypted?

1 Like

As always, the ressource isn’t IP locked and completely free to edit.

myClothesshop - Fix - 08.01.2020

  • Fixed the issue that a menu can be opened multiple times
  • Fixed the issue that the modified cam keeps activated, when the menu isn’t visible anymore

Hey this mod looks great! I am tempted, though I only have a small server with a couple of friends. We don’t use ESX - is it possible to have this standalone (or easy to adjust it to remove ESX dependency?).

We don’t have any money systems, I literally just want it as a better way of selecting compatible clothing items. We currently use vMenu and it is very time consuming finding the correct torso!

Hey,

if you don’t need the whole money management, it will be super easy to remove ESX as dependency.
If you have a little bit of scipting knowledge, you will be able to remove ESX. If you have trouble with this, feel free to ask me!

Great thanks for the swift reply. I will probably purchase in the next couple days. Is it written in lua? I am fairly proficient with that now so should be able to alter it to remove the ESX components

It’s written in LUA, yes

1 Like

myClothesshop - Update - 08.01.2020

  • Added the option to access your saved clothes in the shop (for those, who don’t have a property script)
    aba

it would be a good idea

EDIT: IGNORE ME! Completely missed the SkinChanger requirement! Doh!

Hey bud, just bought the script and playing around with removing the ESX dependencies. I am having trouble getting the LastSkin variable to be populated, as it is erroring when I try to load the shop menu as LastSkin is nil.

It seems maybe this function isn’t populating it? (line 71 in Client I think):

  			TriggerEvent('skinchanger:getSkin', function(skin)
  				LastSkin = skin
  			end)