# Installation Guide

### Step 1: Download Our Free Redesign

{% hint style="success" %}
Download our redesigned version of **ox\_inventory** from pinkFrog\_inventoryAddon/installation/githubLink.txt
{% endhint %}

***

### Step 2: Installing Dependencies

Our script requires the following dependencies:

* **ox\_lib**
* **oxmysql**
* **ox\_target**
* **ox\_inventory** ← redesigned by us (download in Step 1)

Additionally, we **recommend using MariaDB** as your Database Management System.

***

***

### Step 3: Import Old Data

If you used **ox\_inventory** before, simply copy your existing files such as:

* `items.lua`
* `shops.lua`
* `weapons.lua`

and paste them into the **data/** folder of the new version.\
Do the same with all **item images**.

***

{% hint style="info" %}
If you want to keep your own `items.lua`, you **must also add our custom items** listed below to your existing file.
{% endhint %}

#### 🧥 Add Clothing and Extra Items

You **must** add the following items to your `ox_inventory/data/items.lua` file.&#x20;

<details>

<summary>Items.lua</summary>

```lua
	
	['backpack'] = {
		label = 'Extra Backpack',
		weight = 5000,
		stack = true,
		close = true,
		description = 'Add extra slots and weight',
		rarity = 'unique', -- can be unique, rare, epic, legendary, mythic
	},

		['extrabag'] = {
		label = 'Extra Bag',
		weight = 7000,
		stack = true,
		close = true,
		description = 'Add extra slots and weight',
		rarity = 'epic', -- can be unique, rare, epic, legendary, mythic
		canThrow = true, -- if true, then you can throw this item (only if Config.throwingSettings.enable = true in pinkFrog_inventoryAddon/config.lua)
		-- if you enable canThrow without prop it's going to use default prop of bag 
		-- propThrow = 'prop_nigel_bag_pickup', -- prop to show when you throw item (only if canThrow = true) 
		client = {
		   image = 'bags.png',
		}
	},

	['bag_clothes'] = {
		label = 'Bag (Clothes)',
		weight = 1000,
		stack = false,
		close = true,
		consume = 0,
		description = 'A stylish bag to carry your clothes',
		rarity = 'rare', -- can be unique, rare, epic, legendary, mythic
		canRename = true, -- if true, then you can rename this item (only if Config.canRenameAllItems = false in config.lua)
	    canChangeDescription = true, -- if true, then you can change description for this item (only if Config.canChangeDescription = false in config.lua)
		canThrow = true, -- if true, then you can throw this item (only if Config.throwingSettings.enable = true in pinkFrog_inventoryAddon/config.lua)
		propThrow = 'prop_nigel_bag_pickup', -- prop to show when you throw item (only if canThrow = true)
		client = {
			export = 'pinkFrog_inventoryAddon.useBagClothes',
		},
	},

	-- it's exmample you can register as many items as you want below
  ['plate_armor'] = {
	label = 'Plate armor',
	weight = 100,
	stack = true,
	close = true,
	rarity = 'rare',
	consume = 0,
	description = 'Adds 50 extra protection to your bulletproof vest',
	client = {
		   export = 'pinkFrog_inventoryAddon.fasterUsePlate',
	},
  },

 
  ['plate_reinforced'] = {
	label = 'Plate armor (Reinforced)',
	weight = 100,
	stack = true,
	close = true,
	rarity = 'rare',
	consume = 0,
	description = 'Adds 75 extra protection to your bulletproof vest',
	client = {
		   image = 'plate_armor.png',
		   export = 'pinkFrog_inventoryAddon.fasterUsePlate',
	},
   },

    
  ['plate_military'] = {
	label = 'Plate armor (Military)',
	weight = 100,
	stack = true,
	close = true,
	rarity = 'rare',
	consume = 0,
	description = 'Adds 100 extra protection to your bulletproof vest',
	client = {
		   image = 'plate_armor.png',
		   export = 'pinkFrog_inventoryAddon.fasterUsePlate',
	},
},



	-- You need to add the following items to your ox_inventory/data/items.lua file
['hat'] = {
	label = 'Hat',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
	buttons = {      
		
        {
            label = 'Hide hair', -- additional button to hide hair
            action = function(slot) 
                TriggerEvent('pinkFrog:repairFivemBrokenModels', slot, 'hat', 'clear')
            end
        },
        {
            label = 'Show hair',
            action = function(slot)
                TriggerEvent('pinkFrog:repairFivemBrokenModels', slot, 'hat', 'restore')
            end
        },
    },
},

['ears'] = {
		label = 'Ears',
		weight = 100,
		stack = true,
		close = true,
		description = nil,

},
	
['tshirt'] = {
	label = 'T-shirt',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
},



['torso'] = {
	label = 'Torso',
	weight = 0,
	stack = false,
	close = true,
	description = nil,
},


['arms'] = {
	label = 'Arms',
	weight = 100,
	stack = true,
	close = true,
	description = nil,
},

['legs'] = {
	label = 'Pants',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
},


['shoes'] = {
	label = 'Shoes',
	weight = 100,
	stack = false,
	close = true,
	description = nil,	
},

['mask'] = {
    label = 'Mask',              
    weight = 100,           
    stack = false,                 
    close = true,                   
    description = nil,             
    buttons = {           
        {
            label = 'Hide face', -- additional button to hide face
            action = function(slot) 
                TriggerEvent('pinkFrog:repairFivemBrokenModels', slot, 'mask', 'clear')
            end
        },
        {
            label = 'Show face',
            action = function(slot)
                TriggerEvent('pinkFrog:repairFivemBrokenModels', slot, 'mask', 'restore')
            end
        },
    },
},

['chain'] = {
	label = 'Chain',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
},


['glasses'] = {
	label = 'Glasses',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
},


['bproof'] = {
	label = 'Bulletproof',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
	   buttons = {           
        {
            label = 'Add a plate', -- additional button to add plate
            action = function(slot) 
                TriggerEvent('pinkFrog:addPlateToBproof', slot)
            end
        },
	},
},


['bags'] = {
	label = 'Bag',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
},

['watches'] = {
	label = 'Watches',
	weight = 100,
	stack = false,
	close = true,
	description = nil,
},

```

</details>

Images add to: `ox_inventory/web/images/`

{% file src="/files/QKcedy0V5MT0myApCbtf" %}

***

### Step 4: Configuration

1. Open `pinkFrog_inventoryAddon/shared/config.lua` file
2. Configure our script basing on your needs.

<figure><img src="/files/gMgePblZRBthd5oWoC34" alt=""><figcaption></figcaption></figure>

3. Open ox\_inventory`/init.lua` file
4. Configure our script basing on your needs.

<figure><img src="/files/0KMXVKq3j2KmD9WZ5czI" alt=""><figcaption></figcaption></figure>

### Step 5: Start order

```cfg
ensure ox_inventory
ensure pinkFrog_inventoryAddon
```

It's important to start in logical order to prevent any errors in your server console!

{% hint style="info" %}
It's only EXAMPLE of starting order, should looks similiar but do not copy this.
{% endhint %}

```editorconfig
ensure oxmysql
ensure ox_lib
ensure es_extended # your framework can be qbx-core or qb it's only example!
ensure ox_target
ensure ox_inventory # inventory here
ensure pinkFrog_inventoryAddon # our addon script here
```

1. Save all changes
2. Go to file ox\_inventory

### Step 6: Clothing Script Setup

{% hint style="info" %}
If your clothing framework or script isn’t listed here, open a ticket on our Discord — we’ll help you adapt it!
{% endhint %}

## illenium-appearance installation

Option 1: Use attached files and replace in script \[ONLY FOR FRESH AND LATEST VERSION]

Replace this file with illenium-appearance/client/client.lua

{% file src="/files/mMnE89GBCoxBFoUKiWqs" %}

Replace this file with illenium-appearance/client/outfits.lua

{% file src="/files/HL1TV6gFT5Zf1iBfabOM" %}

Replace this file with illenium-appearance/game/nui.lua

{% file src="/files/YAN4GDQQShik834vaCLd" %}

Option 2: Follow guide below and do it by yourself

<details>

<summary>illenium-appearance Guide</summary>

**Add Clothing Events**

1. Go to `illenium-appearance/client/client.lua` and find this below

```lua
RegisterNetEvent("illenium-appearance:client:changeOutfit", function(data)
```

2. Paste this event&#x20;

   ```lua
   TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
   ```

   &#x20;like on screenshot below!<br>

   <figure><img src="/files/z4nzrg3IzZ1eGcLfwVDV" alt=""><figcaption></figcaption></figure>
3. Go to illenium-appearance/client/outfits.lua and find `function LoadJobOutfit(oData)`
4. Paste this event&#x20;

   ```lua
   TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
   ```

   &#x20;like on screenshot below!<br>

   <figure><img src="/files/JOGIq8UGsYAHHNT21CFP" alt=""><figcaption></figcaption></figure>
5. Go to illenium-appearance/game/nui.lua and find

```
appearance_save
```

5. Paste this event&#x20;

   ```lua
   TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
   ```

   &#x20;like on screenshot below!<br>

   <figure><img src="/files/QXbqV4lFwRZk4HGnFTqt" alt=""><figcaption></figcaption></figure>

</details>

<h2 align="center">esx_skin installation</h2>

Option 1: Use attached file and replace it in script \[ONLY FOR FRESH AND LATEST VERSION]

{% file src="/files/rUuJtCATE9GyVWuWG9vC" %}

Replace this file with `esx_skin/client/modules/menu.lua`

Option 2: Follow guide below and do it by yourself

<details>

<summary>esx_skin Guide</summary>

We recommend using LATEST and FRESH version of esx\_skin to avoid any issues and errors!

**Add our Clothing Event**

* Find `function Menu:Saveable(submitCb, cancelCb, restrict)`
* Paste this event&#x20;

  ```lua
  TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
  ```

  &#x20;like on screenshot below!<br>

  <figure><img src="/files/DejFTF5i7sAJhyA0tHbH" alt=""><figcaption></figcaption></figure>

</details>

***

<h2 align="center">qb-clothing installation</h2>

Option 1: Use attached file and replace it in script \[ONLY FOR FRESH AND LATEST VERSION]

{% file src="/files/aFpaPOBSmUWaTHa3iahf" %}

Replace this file with `qb-clothing/client/main.lua`

Option 2: Follow guide below and do it by yourself

<details>

<summary>qb-clothing Guide</summary>

We recommend using LATEST and FRESH version of qb-clothing to avoid any issues and errors!

**Add Export to Get Data**

* Find `local function SaveSkin()` and add this code like on screenshot!
* Paste this event&#x20;

  ```lua
  TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
  ```

  &#x20;like on screenshot below!<br>

  <figure><img src="/files/Elaiv4FMxw9P6D6PNoqq" alt=""><figcaption></figcaption></figure>

</details>

***

<h2 align="center">17Mov_CharacterSystem Setup</h2>

Option 1: Follow guide below and do it by yourself

<details>

<summary>17Mov_CharacterSystem Guide</summary>

1. Go to `17Mov_CharacterSystem/client/functions.lua` and Locate in the file&#x20;

```lua
RegisterNetEvent("17mov_CharacterSystem:SkinMenuClosed", function()
```

and copy this code: &#x20;

```lua
RegisterNetEvent("17mov_CharacterSystem:SkinMenuClosed", function()
    -- You can add custom code after skin menu open
    TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
    if GetResourceState("qs-inventory") ~= "missing" then
        exports['qs-inventory']:setInClothing(false)
    end
end)
```

To look like this:

<figure><img src="/files/dZxlnwR0reoyMZPtFJkJ" alt=""><figcaption></figcaption></figure>

2. Set in `pinkFrog_inventoryAddon/shared/config.lua`<br>

   ```lua
   Config.skinSystem = 'illenium-appearance' --- 'illenium-appearance' or 'skinchanger' or editable by yourself in client_editable.lua (if you use rcore_clothing set it to skinchanger
   ```

</details>

***

<h2 align="center">rcore_clothing installation</h2>

<details>

<summary>To enable compatibility with the <strong>RCore</strong> clothing system</summary>

1. Go to `pinkFrog_inventoryAddon/shared/config.lua` and set to true to enable RCore clothing compatibility<br>

   ```lua
   Config.enableRcoreClothing = true -- ✅ Set to true to enable RCore clothing compatibility
   ```
2. Locate the file `rcore_clothing/client/impl/impl.lua` and replace its contents with the code below.<br>

   ```lua
    AddEventHandler('rcore_clothing:onClothingShopClosed', function()
       local outfit = nil

       if Config.Framework == 1 then
           outfit = PedToSkinchanger()
       elseif Config.Framework == 2 then
           outfit = GetPedQBCoreSkin()
       end

       if outfit then
           TriggerServerEvent('rcore_clothing:impl:setFallbackOutfit', outfit)
           TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy') -- here our event
       end
   end)
   ```

</details>

<h2 align="center">fivem-appearance (from wasabi) installation</h2>

Option 1: Use attached file and replace it in script \[ONLY FOR FRESH AND LATEST VERSION]

{% file src="/files/yr8X2SaKaPDavWZTIHyz" %}

Replace this file with `fivem-appearance/client/client.lua`

{% file src="/files/gf83yuVr8TucAOSCHCa0" %}

Replace this file with `fivem-appearance/client/functions.lua`

<details>

<summary>To enable compatibility with the fivem-appearance system</summary>

1. Go to `pinkFrog_inventoryAddon/shared/config.lua` and change skin System to:<br>

   ```lua
   Config.skinSystem = 'fivem-appearance' -- 'illenium-appearance' / 'skinchanger' / 'fivem-appearance' or editable by yourself in client_editable.lua (fivem-appearance supported from wasabi)
   ```
2. Locate in the file `fivem-appearance/client/client.lua`&#x20;

   ```lua
   exports['fivem-appearance']:startPlayerCustomization(function (appearance)
   ```

   and replace its contents with the code below.
3. ```lua
   exports['fivem-appearance']:startPlayerCustomization(function (appearance)
   		if (appearance) then
   			TriggerServerEvent('fivem-appearance:save', appearance)
               TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
   			ESX.SetPlayerData('ped', PlayerPedId())
   		else
   			ESX.SetPlayerData('ped', PlayerPedId())
   		end
   end, config)
   ```
4. In the same file locate event:<br>

   ```lua
   RegisterNetEvent('fivem-appearance:setOutfit')
   ```

and replace its content with the code below:&#x20;

```lua
RegisterNetEvent('fivem-appearance:setOutfit')
AddEventHandler('fivem-appearance:setOutfit', function(data)
	local pedModel = data.ped
	local pedComponents = data.components
	local pedProps = data.props
	local playerPed = PlayerPedId()
	local currentPedModel = exports['fivem-appearance']:getPedModel(playerPed)
	if currentPedModel ~= pedModel then
    	exports['fivem-appearance']:setPlayerModel(pedModel)
		Wait(500)
		playerPed = PlayerPedId()
		exports['fivem-appearance']:setPedComponents(playerPed, pedComponents)
		exports['fivem-appearance']:setPedProps(playerPed, pedProps)
		local appearance = exports['fivem-appearance']:getPedAppearance(playerPed)
		TriggerServerEvent('fivem-appearance:save', appearance)
		ESX.SetPlayerData('ped', PlayerPedId())
	else
		exports['fivem-appearance']:setPedComponents(playerPed, pedComponents)
		exports['fivem-appearance']:setPedProps(playerPed, pedProps)
		local appearance = exports['fivem-appearance']:getPedAppearance(playerPed)
		TriggerServerEvent('fivem-appearance:save', appearance)
		ESX.SetPlayerData('ped', PlayerPedId())
	end
    TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
end)

```

5. In the same file locate event:

   ```lua
   RegisterNetEvent('esx_skin:openSaveableMenu')
   ```

\
and change whole function with code below:&#x20;

```lua
RegisterNetEvent('esx_skin:openSaveableMenu')
AddEventHandler('esx_skin:openSaveableMenu', function(submitCb, cancelCb)
	local config = {
		ped = true,
		headBlend = true,
		faceFeatures = true,
		headOverlays = true,
		components = true,
		props = true
	}
	exports['fivem-appearance']:startPlayerCustomization(function (appearance)
		if (appearance) then
			TriggerServerEvent('fivem-appearance:save', appearance)
			ESX.SetPlayerData('ped', PlayerPedId())
			if submitCb then submitCb() end
            TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
		else
			if cancelCb then cancelCb() end
			ESX.SetPlayerData('ped', PlayerPedId())
            TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
		end
	end, config)
end)

```

5. Open `fivem-appearance/client/functions.lua` and locate function:&#x20;

   ```lua
   openShop = function(store, price)
   ```

   \
   and change whole function with code below:&#x20;

   ```lua
   openShop = function(store, price)
       local ped = cache.ped
       local currentAppearance = exports['fivem-appearance']:getPedAppearance(ped)
       local tetovaze = exports['fivem-appearance']:getPedTattoos(ped)
       currentAppearance.tattoos = tetovaze
       local config = {}
       InMenu = true
       if store == 'clothing' then
           TriggerEvent('fivem-appearance:clothingShop', price)
       else
           if store == 'clothing_menu' then 
               config = {
                   ped = false,
                   headBlend = false,
                   faceFeatures = false,
                   headOverlays = false,
                   components = true,
                   props = true,
                   tattoos = false
               }
           elseif store == 'barber' then
               config = {
                   ped = false,
                   headBlend = true,
                   faceFeatures = true,
                   headOverlays = true,
                   components = false,
                   props = false,
                   tattoos = false
               }
           elseif store == 'tattoo' then 
               config = {
                   ped = false,
                   headBlend = false,
                   faceFeatures = false,
                   headOverlays = false,
                   components = false,
                   props = false,
                   tattoos = true
               }
           end
           exports['fivem-appearance']:startPlayerCustomization(function (appearance)
               if (appearance) then
   		if json.encode(appearance.tattoos) == '[]' then
                       appearance.tattoos = tetovaze
                   end
                   if price then
                       local paid = lib.callback.await('fivem-appearance:payFunds', 100, price)                    
                       if paid then
                           lib.notify({
                               title = Strings.success,
                               description = (Strings.success_desc):format(addCommas(price)),
                               duration = 3500,
                               icon = 'basket-shopping',
                               type = 'success'
                           })
                           TriggerServerEvent('fivem-appearance:save', appearance)
                           TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
                           InMenu = false
                           ESX.SetPlayerData('ped', PlayerPedId())
                       else
                           lib.notify({
                               title = Strings.no_funds,
                               description = Strings.no_funds_desc,
                               duration = 3500,
                               icon = 'ban',
                               type = 'error'
                           })                           
                           exports['fivem-appearance']:setPlayerAppearance(currentAppearance)
                           InMenu = false
                           TriggerServerEvent('fivem-appearance:save',currentAppearance)
                           ESX.SetPlayerData('ped', PlayerPedId())
                       end
                   else
                       TriggerServerEvent('fivem-appearance:save', appearance)
                       TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
                       InMenu = false
                       ESX.SetPlayerData('ped', PlayerPedId())
                   end
               else
                   ESX.SetPlayerData('ped', PlayerPedId())
                   inMenu = false
               end
           end, config)
       end
   end
   ```

</details>

<h2 align="center">qs-appearance  installation</h2>

Use attached file and replace it in script \[ONLY FOR FRESH AND LATEST VERSION]

{% file src="/files/1p9T2eJKCpzV6IWg7r5H" %}

Replace this file with `qs-appearance\client\custom\inventory\ox_inventory.lua`

Set in our config: "qs-appearance" `pinkFrog_inventoryAddon/shared/config.lua`     &#x20;

<figure><img src="/files/RNYxhnhcyRY1A8ka8CvR" alt=""><figcaption></figcaption></figure>

<h2 align="center">crm-appearance  installation</h2>

Use attached file and replace it in script \[ONLY FOR FRESH AND LATEST VERSION]

{% file src="/files/NWoNIbdHkdKLUCjes4ku" %}

Replace this file with `crm-appearance/crm-open/crm-client/crm-main.lua`

Set in our config: "crm-appearance" `pinkFrog_inventoryAddon/shared/config.lua` &#x20;

<figure><img src="/files/Di3YNoYGi8KfqpklX25C" alt=""><figcaption></figcaption></figure>

***

<h2 align="center">tgiann-clothing  installation</h2>

Use attached file and replace it in script \[ONLY FOR FRESH AND LATEST VERSION]\
\ <sub>Note:</sub> \ <sub>The problem is that tgiann didn’t add an export or an editable option for finishing or saving clothes.</sub>\ <sub>But I managed to work around it a bit I just don’t like this solution, because even if we don’t change anything and simply close the UI, it still adds the items. Try to get in touch with him to add an export or something in</sub> <sub></sub><sub>`editable.lua`</sub> <sub></sub><sub>that allows checking whether someone saved their skin, because this is only a temporary solution. Once he adds it, please inform me on the ticket.</sub><br>

<details>

<summary>To enable compatibility with the tgiann-clothing system</summary>

1. Go to `pinkFrog_inventoryAddon/shared/config.lua` and change skin System to:<br>

   ```lua
   Config.skinSystem = 'tgiann-clothing' -- 'illenium-appearance' / 'skinchanger' / 'fivem-appearance' / crm-appearance / qs-appearance / tgiann-clothing  or editable by yourself in client_editable.lua (fivem-appearance supported from wasabi)
   ```
2. Locate in the file `tgiann-clothing/client/editable.lua`&#x20;

   ```lua
   function uiIsOpen(open)
   ```

   and replace its contents with the code below.
3. ```lua
   function uiIsOpen(open)
       if open then
           TriggerEvent("tgiann-hud:ui", false)
           TriggerEvent("tgiann-lumihud:ui", false)
       else
           TriggerEvent("tgiann-hud:ui", true)
           TriggerEvent("tgiann-lumihud:ui", true)
           TriggerEvent('pinkFrog_syncWithClotheShopAfterBuy')
       end
       if config.displayRadar then
           DisplayRadar(not open)
       end
   end

   ```

</details>


---

# 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://pinkfrog.gitbook.io/pinkfrog.io/assets-and-guides/inventory-redesign-pinkfrog_inventoryaddon/installation-guide.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.
