# \[QB/QBOX/ESX] Wigs & Bundles \[PAID]

<figure><img src="https://4274191150-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZcaPZpEbITNtKQaqEE6V%2Fuploads%2Fkye1WZacDHXP2QFFmyNk%2Fadminpluswigs.png?alt=media&#x26;token=1b62a6aa-b081-4b93-9b7e-926cd0a30d75" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
This script is a player-owned business, allowing employees to purchase materials to craft wigs & sell them to other individuals. The script is integrated with compatibility to other scripts with features such as dispatch alerting for rejected sales, wearable wigs, locking inventory to avoid exploits, boss menu, customizable notification types & even integration with TXAdmin restarts to disallow users from selling x seconds before scheduled restarts. For each wig you're able to determine which hair from clothing menu is given when the hair is dragged to use. You are also able to determine whether specific items sell for clean or dirty money alongside female-only sell option can be disabled/enabled. Finally, but not least, you are also capable of adding in your own items as you desire, you are not limited to just our items.
{% endhint %}

<figure><img src="https://4274191150-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZcaPZpEbITNtKQaqEE6V%2Fuploads%2FCy3y3Gv3t8FZT4Pa6RRc%2Ffeatures.png?alt=media&#x26;token=0477a285-417f-4ada-8bee-4413fec70123" alt=""><figcaption></figcaption></figure>

* <mark style="color:orange;">Configurable</mark> wearable wigs. (enable/disable option).
* <mark style="color:orange;">Configurable</mark> job & minimum grade to craft & open shop.
* <mark style="color:orange;">Configurable</mark> boss menu location & minimum grade to open. <mark style="color:orange;">(enable/disable option).</mark>
* <mark style="color:orange;">Configurable</mark> notifications <mark style="color:orange;">(editable to add your own).</mark>
* Configurable minigame when crafting <mark style="color:orange;">(enable/disable option).</mark>

***

* <mark style="color:orange;">Configurable</mark> wig sell options&#x20;

\| editable sell command <mark style="color:orange;">(enable/disable option).</mark>

\| txAdmin integration to not allow to sell x seconds before a restart <mark style="color:orange;">(enable/disable option).</mark>

\| Delete ped after x seconds of sell rejection. <mark style="color:orange;">(enable/disable option).</mark>

\| Required cops. <mark style="color:orange;">(enable/disable option).</mark>

\| Lock inventory. <mark style="color:orange;">(enable/disable option).</mark>

\| Marker on ped during sell. <mark style="color:orange;">(enable/disable option).</mark>

\| Peds list.&#x20;

***

* Dispatch <mark style="color:orange;">(enable/disable option).</mark> - Alert PD dispatch when sale is rejected?

\| cd\_dispatch | core-dispatch | ps-dispatch

***

* <mark style="color:orange;">Configurable</mark> ped models to allow only male/female to sell.
* <mark style="color:orange;">Configurable</mark> prices of each wig (able to add more wigs).
* <mark style="color:orange;">Configurable</mark> ped shop / items (able to add more items into shop). <mark style="color:orange;">(enable/disable option).</mark>
* <mark style="color:orange;">Configurable</mark> wigs to craft (able to add more items into crafting).
* <mark style="color:orange;">Configurable</mark> wig snatching. (if player is ragdolling - you can also snatch their wig - if they have one on).
* <mark style="color:orange;">Compatibility</mark> | ox\_inventory, qb-inventory, qs-inventory & codem-inventory. ✅

```
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
```

<figure><img src="https://4274191150-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZcaPZpEbITNtKQaqEE6V%2Fuploads%2FKolaTzag0myC87a8DXZz%2Finstall.png?alt=media&#x26;token=3165a02a-6af8-42f2-b619-3388fb5bc51d" alt=""><figcaption></figcaption></figure>

* This resource has a couple steps. You firstly need to install the items in the provided folders into your existing inventory. (items/images).&#x20;

> If you're on "<mark style="color:orange;">ESX</mark>" framework ensure the script settings inside <mark style="color:orange;">adminplus-wigs/shared/mainConfig.lua</mark> is set to <mark style="color:orange;">Config.Framework = '</mark>ESX<mark style="color:orange;">'</mark>

> If you're on "<mark style="color:orange;">QB</mark>" framework ensure the script settings inside <mark style="color:orange;">adminplus-wigs/shared/mainConfig.lua</mark> is set to <mark style="color:orange;">Config.Framework = '</mark>QB<mark style="color:orange;">'</mark>

> If you're on "<mark style="color:orange;">QBOX</mark>" framework ensure the script settings inside <mark style="color:orange;">adminplus-wigs/shared/mainConfig.lua</mark> is set to <mark style="color:orange;">Config.Framework = '</mark>QBX<mark style="color:orange;">'</mark>

***

> If you're using the boss menu option from the script make sure these settings align with your framework, inside <mark style="color:orange;">adminplus-wigs/shared/mainConfig.lua.</mark>

```lua
    societyScript = 'esx_society', -- 'esx_society' for ESX | 'qb-bossmenu' for QB
    societyName = 'society_wigs' -- 'society_wigs' for ESX | 'wigs' for QB / QBOX
```

{% hint style="warning" %}
Feel free to check the Shared/.luas & customize the script to your liking. There is tons of various different options to enable/disable.
{% endhint %}

***

**adminplus-wigs/shared/AppearanceConfig.lua**

```lua
Config.wigAppearance = {
    enabled = true, -- do you want to enable for female characters to wear wigs when dragged to use?
    wigStyles = {
        ['bob_wig'] = { hair = 36, color = 4 },
        ['pixie_wig'] = { hair = 38, color = 4 },
        ['curly_bob_wig'] = { hair = 12, color = 5 },
        ['layered_short_wig'] = { hair = 18, color = 0 },
        ['shoulder_straight_wig'] = { hair = 4, color = 2 },
        ['medium_wavy_wig'] = { hair = 9, color = 2 },
        ['shoulder_curly_wig'] = { hair = 14, color = 6 },
        ['blunt_cut_wig'] = { hair = 17, color = 0 },
        ['long_straight_wig'] = { hair = 3, color = 0 },
        ['long_wavy_wig'] = { hair = 2, color = 3 },
        ['long_curly_wig'] = { hair = 8, color = 7 },
        ['long_layered_wig'] = { hair = 5, color = 2 },
        ['braided_wig'] = { hair = 13, color = 5 },
        ['afro_wig'] = { hair = 15, color = 0 },
        ['dreadlock_wig'] = { hair = 20, color = 0 },
        ['mohawk_wig'] = { hair = 35, color = 4 },
        ['ponytail_wig'] = { hair = 23, color = 1 },
        ['twist_wig'] = { hair = 24, color = 8 },
        -- add more wigs here to wear
    }
}
```

***

**adminplus-wigs/shared/deliveryConfig.lua**

```lua
if not Config then Config = {} end

Config.DeliverySystem = {
    enabled = true,     -- enable/disable delivery system?
    vehicleModel = 'boxville7',     -- vehicle model used to deliver wigs
    vehicleSpawn = vector4(253.3360, -1493.2014, 29.1417, 226.1033), -- vehicle spawn location
    requiredJob = Config.Job.name,  -- required job to do deliveries
    requiredJobGrade = Config.Job.grade, -- required job grade to deliveries
    givekeyScript = '', -- 'mk_vehiclekeys' | 'wasabi_carlock' | 'qs-vehiclekeys' | 'cd_garage' | 'qb' or 'qbx' | 'custom'
    deliveryOptions = {
        enable = true,  -- Enable/disable garage system
        spawnLocation = vector3(253.3360, -1493.2014, 29.1417), -- vehicle spawn location
        returnDistance = 1.0, -- Distance to grab/return vehicle
        markerType = 36, -- marker type to display
        markerColor = {r = 255, g = 192, b = 203, a = 255}, -- pink color for the marker
        model = 'boxville7', -- vehicle model used to deliver wigs
    },
    deliveryLocations = {   -- delivery locations
        {coords = vector4(-824.4159, -187.4863, 37.6277, 120.99), label = "Bob Mulet"},
        {coords = vector4(130.8206, -1712.0087, 29.2823, 149.74), label = "Herr Kutz Barber"},
        {coords = vector4(-1288.9818, -1117.3472, 6.9852, 60.61), label = "Beach Combover Barber"},
        {coords = vector4(-31.6468, -145.8780, 57.0448, 356.15), label = "Hair on Hawick"},
        -- add more locations here
    },
    peds = {
        'a_f_m_downtown_01',
        'a_f_m_eastsa_01',
        'a_f_m_eastsa_02',
        'a_f_m_salton_01',
        'a_f_m_skidrow_01',
        'a_f_m_soucentmc_01',
        'a_f_o_soucent_01',
        'g_f_y_ballas_01',
        'g_f_y_families_01',
        -- add more peds, one of these will show up at the coordinate during delivery process
    }
}

Config.deliveryPrices = { -- payments can be (clean or dirty)
    ['bob_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['pixie_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['curly_bob_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['layered_short_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['shoulder_straight_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['medium_wavy_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['shoulder_curly_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['blunt_cut_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['long_straight_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['long_wavy_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['long_curly_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['long_layered_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['braided_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['afro_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['dreadlock_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['mohawk_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['ponytail_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['twist_wig'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['straight_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['curly_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['deep_wave_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['loose_wave_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['body_wave_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['kinky_curly_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'},
    ['ombre_bundle'] = {priceMin = 1500, priceMax = 2000, money = 'clean'}
}
```

***

**adminplus-wigs/shared/mainConfig.lua**

```lua
Config = {}

Config.Framework = 'ESX' -- 'ESX' or 'QB' or 'QBX'

Config.Job = {
    name = 'wigs', -- job name
    label = 'Wig Crafting', -- job label
    grade = 0 -- minimum grade to Craft / Open Shop
}

Config.bossMenu = {
    enabled = true,
    bossGrade = 3, -- grade required to open boss menu (must be boss in database)
    location = vector4(218.3100, -1471.2599, 29.3256, 176.9540),
    target = {
        enabled = false, -- enable target?
        label = 'Open Boss Menu',
        icon = 'fas fa-briefcase'
    },
    societyScript = 'esx_society', -- 'esx_society' for ESX | 'qb-bossmenu' for QB
    societyName = 'society_wigs' -- 'society_wigs' for ESX | 'wigs' for QB
}

Config.Notification = 'ox_lib' -- 'ox_lib' | 'esx' | 'qb' or 'qbx' | 'okok | 'custom' -- which notification script do you want to use?

Config.Minigame = {
    enabled = false, -- enable minigame during crafting?
    CraftWigs = function()
        local result = false
        
        if Config.Minigame.enabled then -- if minigame is enabled use ox_lib skillcheck
            local success = lib.skillCheck({'easy', 'easy', {areaSize = 60, speedMultiplier = 1}, 'easy'}, {'w', 'w', 's', 's'})
            if success then
                success = lib.progressCircle({
                    label = 'Crafting wigs',
                    duration = 7000,
                    position = 'bottom',
                    useWhileDead = false,
                    canCancel = true,
                    disable = {
                        car = true,
                        combat = true,
                        move = true
                    },
                    anim = {
                        dict = 'mini@repair',
                        clip = 'fixing_a_ped'
                    },
                })
                if success then
                    result = true
                end
            end
        else
            result = lib.progressCircle({ -- if minigame is disabled use ox_lib progess circle instead
                label = 'Crafting wigs',
                duration = 7000,
                position = 'bottom',
                useWhileDead = false,
                canCancel = true,
                disable = {
                    car = true,
                    combat = true,
                    move = true
                },
                anim = {
                    dict = 'mini@repair',
                    clip = 'fixing_a_ped'
                },
            })
        end

        return result
    end
}

Config.debug = false
```

***

**adminplus-wigs/shared/sellConfig.lua**

```lua
Config.sellWigs = {
    enabled = true,
    command = 'sellwigs', -- command to sell wigs?
    bargainTime = 5000, -- (5s) / how much time to bargain the Ped?
    txAdminAntiSell = true, -- this is a option to not allow players from selling (x) minutes before every restart (powergaming purposes). 
    txAdminAntiDuration = 300, -- how many seconds before restart to where they can't sell wigs (use command), '300' is 5 minutes before restart.
    deletePed = true, -- do you want to delete the ped after sale is complete/rejected? -- optimization purposes (no random wandering peds)
    deletePedTime = 10000, -- do you want to delete the ped after sale is complete/rejected? -- optimization purposes (no random wandering peds)
    requiredCops = 0, -- required cops to sell?
    lockInventory = true, -- do you want to lock inventory during selling (anti-exploit)
    markerPed = false, -- do you want a marker above the peds head when it is walking towards you? -- 0.02ms usage during when ped is running to you.
    minSellAmount = 1, -- minimum amount of wigs to sell at a time
    maxSellAmount = 3, -- maximum amount of wigs to sell at a time
    peds = {
        'a_f_m_downtown_01',
        'a_f_m_eastsa_01',
        'a_f_m_eastsa_02',
        'a_f_m_salton_01',
        'a_f_m_skidrow_01',
        'a_f_m_soucentmc_01',
        'a_f_o_soucent_01',
        'g_f_y_ballas_01',
        'g_f_y_families_01',
        -- add more peds here (modelhash)
    }
}

Config.Dispatch = {
    enabled = false, -- 'cd_dispatch' - ESX/QB, 'core-dispatch' - QB/ESX, 'ps-dispatch' - QB | false to disable
    title = '10-31 - Suspicious Activity',
    blip = {
        sprite = 480,
        scale = 0.9,
        colour = 41,
        flashes = false,
        text = 'Suspicious Sale',
        time = 30,
        radius = 0
    }
}

Config.pedModels = {
    ['mp_f_freemode_01'] = true, -- do you want to allow only female peds to /sellwigs.
    ['mp_m_freemode_01'] = false, -- do you want to allow male peds to /sellwigs.
}

Config.Prices = { -- payments can be (clean or dirty)
    ['bob_wig'] = {priceMin = 500, priceMax = 1000, money = 'clean'},
    ['pixie_wig'] = {priceMin = 400, priceMax = 900, money = 'dirty'},
    ['curly_bob_wig'] = {priceMin = 550, priceMax = 1100, money = 'clean'},
    ['layered_short_wig'] = {priceMin = 450, priceMax = 950, money = 'dirty'},
    ['shoulder_straight_wig'] = {priceMin = 600, priceMax = 1200, money = 'clean'},
    ['medium_wavy_wig'] = {priceMin = 650, priceMax = 1300, money = 'dirty'},
    ['shoulder_curly_wig'] = {priceMin = 700, priceMax = 1400, money = 'clean'},
    ['blunt_cut_wig'] = {priceMin = 600, priceMax = 1200, money = 'dirty'},
    ['long_straight_wig'] = {priceMin = 700, priceMax = 1400, money = 'clean'},
    ['long_wavy_wig'] = {priceMin = 750, priceMax = 1500, money = 'dirty'},
    ['long_curly_wig'] = {priceMin = 800, priceMax = 1600, money = 'clean'},
    ['long_layered_wig'] = {priceMin = 750, priceMax = 1500, money = 'dirty'},
    ['braided_wig'] = {priceMin = 900, priceMax = 1800, money = 'clean'},
    ['afro_wig'] = {priceMin = 700, priceMax = 1400, money = 'dirty'},
    ['dreadlock_wig'] = {priceMin = 1200, priceMax = 2400, money = 'clean'},
    ['mohawk_wig'] = {priceMin = 650, priceMax = 1300, money = 'dirty'},
    ['ponytail_wig'] = {priceMin = 700, priceMax = 1400, money = 'clean'},
    ['twist_wig'] = {priceMin = 800, priceMax = 1600, money = 'dirty'},
    ['straight_bundle'] = {priceMin = 900, priceMax = 1800, money = 'clean'},
    ['curly_bundle'] = {priceMin = 1000, priceMax = 2000, money = 'dirty'},
    ['deep_wave_bundle'] = {priceMin = 1100, priceMax = 2200, money = 'clean'},
    ['loose_wave_bundle'] = {priceMin = 1150, priceMax = 2300, money = 'dirty'},
    ['body_wave_bundle'] = {priceMin = 1200, priceMax = 2400, money = 'clean'},
    ['kinky_curly_bundle'] = {priceMin = 1300, priceMax = 2600, money = 'dirty'},
    ['ombre_bundle'] = {priceMin = 1250, priceMax = 2500, money = 'clean'},
    -- add more items to sell via /sellwigs
}
```

***

**adminplus-wigs/shared/shopConfig.lua**

```lua
Config.shopPed = {
    enabled = true, -- enable shop ped?
    model = 'a_f_y_business_02', -- model of the ped.
    coords = vector4(231.9843, -1488.6252, 29.3263, 315.2643), -- coordinates to spawn shop ped.
    scenario = 'WORLD_HUMAN_STAND_MOBILE' -- scenario that the ped is doing.
}

Config.blipsMap = {
    wigShop = {
        enabled = true,
        coords = vector3(248.6794, -1491.4819, 29.2841), -- shop coords
        sprite = 197, -- icon on map
        scale = 0.7, -- size
        colour = 8, -- color
        name = "Wig Store"
    },
}

Config.shopItems = {
    {name = 'hair_fiber', price = 50, label = 'Hair Fiber'},
    {name = 'wig_cap', price = 25, label = 'Wig Cap'},
    {name = 'wig_table', price = 500, label = 'Wig Crafting Table'},
    {name = 'hair_dye', price = 75, label = 'Hair Dye'},
    {name = 'styling_gel', price = 30, label = 'Styling Gel'},
    {name = 'hair_clips', price = 15, label = 'Hair Clips'}
    -- add more items to ped shop here (name, price, label)
}

Config.wigTypes = {
    { name = "Bob Wig", time = 7, requirements = {{item = "hair_fiber", amount = 2}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 2}}, reward = "bob_wig"},
    { name = "Pixie Wig", time = 5, requirements = {{item = "hair_fiber", amount = 1}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 2}}, reward = "pixie_wig"},
    { name = "Curly Bob Wig", time = 8, requirements = {{item = "hair_fiber", amount = 2}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 2}, {item = "styling_gel", amount = 1}}, reward = "curly_bob_wig"},
    { name = "Layered Short Wig", time = 9, requirements = {{item = "hair_fiber", amount = 2}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 3}}, reward = "layered_short_wig"},
    { name = "Shoulder Length Straight Wig", time = 10, requirements = {{item = "hair_fiber", amount = 3}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 3}}, reward = "shoulder_straight_wig"},
    { name = "Medium Wavy Wig", time = 11, requirements = {{item = "hair_fiber", amount = 3}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 3}, {item = "styling_gel", amount = 1}}, reward = "medium_wavy_wig"},
    { name = "Shoulder Length Curly Wig", time = 12, requirements = {{item = "hair_fiber", amount = 3}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 3}, {item = "styling_gel", amount = 1}}, reward = "shoulder_curly_wig"},
    { name = "Blunt Cut Wig", time = 9, requirements = {{item = "hair_fiber", amount = 3}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 3}}, reward = "blunt_cut_wig"},
    { name = "Long Straight Wig", time = 13, requirements = {{item = "hair_fiber", amount = 4}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 4}}, reward = "long_straight_wig"},
    { name = "Long Wavy Wig", time = 14, requirements = {{item = "hair_fiber", amount = 4}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 4}, {item = "styling_gel", amount = 1}}, reward = "long_wavy_wig"},
    { name = "Long Curly Wig", time = 15, requirements = {{item = "hair_fiber", amount = 4}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 4}, {item = "styling_gel", amount = 2}}, reward = "long_curly_wig"},
    { name = "Long Layered Wig", time = 15, requirements = {{item = "hair_fiber", amount = 4}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 4}}, reward = "long_layered_wig"},
    { name = "Braided Wig", time = 15, requirements = {{item = "hair_fiber", amount = 5}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 6}, {item = "styling_gel", amount = 2}}, reward = "braided_wig"},
    { name = "Afro Wig", time = 13, requirements = {{item = "hair_fiber", amount = 4}, {item = "wig_cap", amount = 1}, {item = "styling_gel", amount = 2}}, reward = "afro_wig"},
    { name = "Dreadlock Wig", time = 15, requirements = {{item = "hair_fiber", amount = 6}, {item = "wig_cap", amount = 1}, {item = "styling_gel", amount = 3}}, reward = "dreadlock_wig"},
    { name = "Mohawk Wig", time = 10, requirements = {{item = "hair_fiber", amount = 2}, {item = "wig_cap", amount = 1}, {item = "styling_gel", amount = 2}}, reward = "mohawk_wig"},
    { name = "Ponytail Wig", time = 11, requirements = {{item = "hair_fiber", amount = 3}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 4}, {item = "styling_gel", amount = 1}}, reward = "ponytail_wig"},
    { name = "Twist Wig", time = 15, requirements = {{item = "hair_fiber", amount = 4}, {item = "wig_cap", amount = 1}, {item = "hair_clips", amount = 5}, {item = "styling_gel", amount = 2}}, reward = "twist_wig"},
    { name = "Straight Hair Bundle", time = 10, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}}, reward = "straight_bundle"},
    { name = "Curly Hair Bundle", time = 11, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}, {item = "styling_gel", amount = 1}}, reward = "curly_bundle"},
    { name = "Deep Wave Bundle", time = 12, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}, {item = "styling_gel", amount = 2}}, reward = "deep_wave_bundle"},
    { name = "Loose Wave Bundle", time = 12, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}, {item = "styling_gel", amount = 1}}, reward = "loose_wave_bundle"},
    { name = "Body Wave Bundle", time = 13, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}, {item = "styling_gel", amount = 1}}, reward = "body_wave_bundle"},
    { name = "Kinky Curly Bundle", time = 14, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}, {item = "styling_gel", amount = 2}}, reward = "kinky_curly_bundle"},
    { name = "Ombre Bundle", time = 15, requirements = {{item = "hair_fiber", amount = 5}, {item = "hair_clips", amount = 2}, {item = "hair_dye", amount = 2}, {item = "styling_gel", amount = 1}}, reward = "ombre_bundle"}
    -- add more wigs to craft here (name, time, requirements)
}
```

***

**adminplus-wigs/shared/translations.lua**

```lua
Config.Strings = {
    -- currency
    currency_symbol = '$',
    
    -- notification titles
    notification_title = 'Wigs',
    notification_delivery_title = 'Wigs - Delivery',
    notification_sell_title = 'Wigs - Sell',
    notification_craft_title = 'Wigs - Craft',
    notification_shop_title = 'Wigs - Shop',
    
    -- jobReq
    job_required = 'You do not have the required job!',
    grade_required = 'You need to be grade %s',
    
    -- shop
    shop_browse = 'Browse Shop',
    shop_item_price = 'Price: $%d',
    shop_purchase_title = 'Purchase %s',
    shop_purchase_amount = 'Amount',
    shop_purchase_success = 'Bought %dx %s',
    shop_insufficient_funds = 'Insufficient Funds',
    
    -- craft
    craft_station = 'Wig Crafting Station',
    craft_requirements = 'Requirements:',
    craft_time = 'Time',
    craft_seconds = 's',
    craft_missing_materials = 'You need more %s',
    craft_cancelled = 'Crafting cancelled',
    craft_successful = 'Successfully crafted %s',
    craft_progress = 'Crafting wigs',
    
    -- tablePlacement
    table_title = 'Wigs - Table',
    place_table = '[E] Place | [X] Cancel',
    table_removed = 'Table picked up.',
    
    -- deliverySys
    delivery_start = '[E] - Start Delivery Job',
    delivery_return = '[E] - Return Delivery Vehicle',
    delivery_menu_title = 'Wig Delivery Service',
    delivery_menu_start = 'Start Deliveries',
    delivery_menu_start_desc = 'Begin delivering wigs to customers',
    delivery_menu_cancel = 'Cancel',
    delivery_status_title = 'Wig Delivery Status',
    delivery_status_active = 'Active Deliveries',
    delivery_status_active_confirm = 'You still have active deliveries. Are you sure you want to return your vehicle?',
    delivery_status_remaining = 'You have %d deliveries remaining',
    delivery_status_cancel = 'Cancel Deliveries',
    delivery_status_cancel_desc = 'Cancel your current delivery run',
    delivery_cancel_confirm = 'Cancel Deliveries?',
    delivery_cancel_confirm_desc = 'Are you sure you want to cancel your deliveries? You will not receive payment.',
    delivery_wig = 'Deliver Wig',
    delivery_need_wigs = 'You need wigs to make deliveries!',
    delivery_vehicle_spawn_failed = 'Vehicle model failed to load!',
    delivery_vehicle_spawn_blocked = 'The vehicle spawn area is blocked!',
    delivery_vehicle_missing = 'Your delivery vehicle is not here!',
    delivery_reset_confirm = 'Delivery Reset',
    delivery_reset_desc = 'Your delivery vehicle is missing. Do you want to reset your delivery status?',
    delivery_new_location = 'You have a wig to deliver. Check your GPS!',
    delivery_vehicle_returned = 'You have returned the delivery vehicle.',
    delivery_ped_failed = 'Failed to load ped model!',
    delivery_completed = 'Delivered %s for $%d in %s',
    delivery_continue = 'Continue Deliveries?',
    delivery_continue_desc = 'Would you like to continue delivering wigs?',
    delivery_new_marked = 'A new delivery location has been marked on your GPS.',
    delivery_ended = 'You have ended your deliveries.',
    delivery_failed = 'Delivery canceled',
    
    -- sellSys
    sell_cooldown = 'You must wait before selling again',
    sell_completing = 'Completing sale...',
    sell_spawn_failed = 'Unable to find location for ped to spawn',
    sell_buyer_found = 'Possible buyer found in %s',
    sell_showcase_wig = 'Showcasing wig...',
    sell_bargaining = 'Bargaining...',
    sell_rejected = 'Buyer rejected your final offer',
    sell_failed = 'Bargaining failed',
    sell_success = 'Sold %dx %s for $%d',
    sell_female_only = 'Only females can sell wigs',
    sell_no_wigs = 'No wigs to sell',
    sell_not_enough_police = 'Not enough police in the city',
    sell_restart = 'Cannot sell wigs during scheduled restart',
    
    -- wearableWigs
    wig_female_only = 'Only female characters can wear wigs',
    wig_invalid = 'Invalid wig style',
    wig_applied = 'You put on a new hairstyle',
    
    -- bossMenu
    boss_access_denied = 'You need to be grade %d',
    boss_society_error = 'Invalid society (check Config)',
    boss_textUI = '[E] - Boss Menu',
    
    -- targetOpts
    target_craft_wigs = 'Craft Wigs',
    target_remove_table = 'Remove Table',
    target_boss_menu = 'Open Boss Menu',
    
    -- wigTypes (for display)
    wig_labels = {
        ['bob_wig'] = 'Bob Wig',
        ['pixie_wig'] = 'Pixie Wig',
        ['curly_bob_wig'] = 'Curly Bob Wig',
        ['layered_short_wig'] = 'Layered Short Wig',
        ['shoulder_straight_wig'] = 'Shoulder Straight Wig',
        ['medium_wavy_wig'] = 'Medium Wavy Wig',
        ['shoulder_curly_wig'] = 'Shoulder Curly Wig',
        ['blunt_cut_wig'] = 'Blunt Cut Wig',
        ['long_straight_wig'] = 'Long Straight Wig',
        ['long_wavy_wig'] = 'Long Wavy Wig',
        ['long_curly_wig'] = 'Long Curly Wig',
        ['long_layered_wig'] = 'Long Layered Wig',
        ['braided_wig'] = 'Braided Wig',
        ['afro_wig'] = 'Afro Wig',
        ['dreadlock_wig'] = 'Dreadlock Wig',
        ['mohawk_wig'] = 'Mohawk Wig',
        ['ponytail_wig'] = 'Ponytail Wig',
        ['twist_wig'] = 'Twist Wig',
        ['straight_bundle'] = 'Straight Bundle',
        ['curly_bundle'] = 'Curly Bundle',
        ['deep_wave_bundle'] = 'Deep Wave Bundle',
        ['loose_wave_bundle'] = 'Loose Wave Bundle',
        ['body_wave_bundle'] = 'Body Wave Bundle',
        ['kinky_curly_bundle'] = 'Kinky Curly Bundle',
        ['ombre_bundle'] = 'Ombre Bundle'
    },
    
    -- moneyTypes
    money_types = {
        ['clean'] = 'cash',
        ['dirty'] = 'dirty money'
    },
    
    -- dispatchMsgs
    dispatch_title = '10-31 - Suspicious Activity',
    dispatch_description = 'An individual was reported selling suspicious items at %s',
}
```

<pre><code><strong>⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
</strong></code></pre>

<figure><img src="https://4274191150-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZcaPZpEbITNtKQaqEE6V%2Fuploads%2FzUBw2K8iJtQN1PmrvtyY%2Fchangelog.png?alt=media&#x26;token=a35ca929-89e9-4d76-a7e1-5967797b7a25" alt=""><figcaption></figcaption></figure>

```markup
V 1.0.0
```

> Original Release

```
V 1.0.4
```

> Codem-inventory compatibility ✅

<mark style="color:red;">Changed Files:</mark>

* adminplus-wigs/client/\*\* (replace entire folder)
* adminplus-wigs/server/\*\* (replace entire folder)

```
V 1.0.7
```

> Added QBOX Compatibility ✅

<mark style="color:red;">Changed Files:</mark>

* adminplus-wigs/client/\*\* (replace entire folder)
* adminplus-wigs/server/\*\* (replace entire folder)
* change <mark style="color:red;">Config.Framework = 'QBX'</mark> inside adminplus-wigs/shared/mainConfig.lua

```
V 1.0.8
```

> Added min/max option for how much to sell at a time. 🫰

<mark style="color:red;">Changed Files:</mark>

* adminplus-wigs/shared/sellConfig.lua
* adminplus-wigs/server/server\_sell.lua

```
V 1.0.9
```

> Added ps-inventory compatibility. 🔗

<mark style="color:red;">Changed Files:</mark>

* adminplus-wigs/client/main.lua
* adminplus-wigs/server/main.lua
* adminplus-wigs/fxmanifest.lua

```
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
```

<figure><img src="https://4274191150-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZcaPZpEbITNtKQaqEE6V%2Fuploads%2FNwMogM8VwPQ3aPHa5VUu%2Fpurchase.png?alt=media&#x26;token=b0f72168-8d77-4fea-b347-8735abd1e002" alt=""><figcaption></figcaption></figure>

* [<mark style="color:yellow;">Forums Post</mark>](https://forum.cfx.re/t/qb-esx-enhanced-wigs-n-bundles-craft-wig-snatching/5324261)
* [<mark style="color:yellow;">Showcase (video)</mark>](https://www.youtube.com/watch?v=SZU8DnGeMxQ)
* [<mark style="color:yellow;">Tebex (purchase)</mark>](https://adminplus.tebex.io/package/6735278)
* [<mark style="color:yellow;">Support (discord)</mark>](https://discord.gg/J2mP9kJJ83)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.adminplus.dev/paid-scripts/qb-qbox-esx-wigs-and-bundles-paid.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
