# REALISTIC SMOKING

V 3.0

**The script uses the escrow system**

:small\_blue\_diamond:Compatible with ESX / QB / QBX, the script itself detects which framework you are using.

:small\_blue\_diamond:Compatible for ox\_inventory / qs\_inventory / qb\_inventory. (Script works for other inventory systems but without saving metadata)

:small\_blue\_diamond:Optimized 0.01ms.

:small\_blue\_diamond:Brand new code compared to version 2.0.

:small\_blue\_diamond:Very extensive configuration both for the script itself and for individual items.

:small\_blue\_diamond:Synchronized smoke effects.

:small\_blue\_diamond:It is possible to smoke, Bongs / Joints / Vapes / Puff Vapes / Cigarettes / Cigars.

:small\_blue\_diamond:8 custom animations (Using bong, Rolling joints, Lighting cigarettes/joints/cigar)

:small\_blue\_diamond:For each item it is possible to adjust the Exhale Effect and smoke particles.

:small\_blue\_diamond:Rollings joints with a minigame, it is possible to disable the mini-game in the configuration.

:small\_blue\_diamond:After using a cigarette, cigar or joint you need to use the lighter in the inventory or press the Light button to light it.

:small\_blue\_diamond:Before lighting a cigarette, cigar or joint, the unlit prop is set and after lighting the prop is changed.

:small\_blue\_diamond:It is possible to add more liquids, cigarette packs, rollings papers, lighters or create new items like (cigars, cigarettes, joints, bongs, puff vapes, vapes).

:small\_blue\_diamond:Compatible with xsound, it is possible to add sound to any animation.

:small\_blue\_diamond:A dropped item ignites spilled gasoline on the ground.

:small\_blue\_diamond:Before lighting a Cigarette, Cigar or Joint, the items can be placed in a position behind the ear.\
You can set the high effect to any item just like other effects.

:small\_blue\_diamond:Each exhale of smoke from a joint, bong or other item that has a set High value will increase the high effect.

:small\_blue\_diamond:High effect drops automatically every 15 seconds time is adjustable.

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

```
1. After purchasing the script on the store https://store.devcore.cz/, the script can be downloaded here https://keymaster.fivem.net/assets

2. Upload the contents of the zip file to your server.

3. ensure devcore_smoking in server.cfg after your framework and ox_lib.

4. Now create items depending on the inventory

If you are using ox_inventory 
paste the contents of the file upload/inventory/ox_inventory.txt into the file ox_inventory/data/items.lua.
And upload/icons into ox_inventory/web/images.

If you are using qs-inventory
paste the contents of the file upload/inventory/qs_inventory.txt into the file qs-inventory/shared/items.lua.
and uplod/icons into qs-inventory/html/images

If you are using qb-inventory
paste the contents of the file upload/inventory/qb_inventory.txt into the file qb-core/shared/items.lua.
And upload/icons into qb-inventory/html/images.

If you are using a different inventory
paste the contents of the file upload/inventory/items.sql file into the database.

5. If you want to use xsound for sound effects, you can find it here: https://github.com/Xogy/xsound/releases/tag/1.4.3
If you have an xsound script running on your server, put the files from devcore_smoke/upload/xsound into xsound/html/sounds

6. For devcore_smoke to work properly, ox_lib needs to be added to the server: https://github.com/overextended/ox_lib/releases

7. After adding ox_lib, restart the server.
```


# Configs

{% tabs %}
{% tab title="Config" %}

```lua
Config = {}
-- DISCORD : https://discord.gg/zcG9KQj3sa
-- STORE : https://store.devcore.cz/


-- Framework is automatically detected here you have the option to replace the default exports with your own
Config.Export = function()
    if Framework == 'ESX'  then -- ESX
-- insert your esx export here
    return exports['es_extended']:getSharedObject()
--
    elseif Framework == 'QB'  then -- QB or QBX 
-- insert your qb or qbx export here
    return exports['qb-core']:GetCoreObject()
--
    end
end


Config.Settings = {
    OptionsMenuPosition = 'top-right', -- Position for options menu
    OxDurabilitySystem = true, -- Durability for lighters true for enable (only for ox_inventory)
    TakeEarItemCommand = 'takecig', -- An order to remove a stored smoking item in a position behind the ear..
    DisableCombatButtons = true, -- true if you want disable combat and aim buttons
    SoundEffects = true, -- only with xsound
    
    RollingJointsMinigame = { -- minigame from ox_lib
        Enable = true, -- true if you want to have a mini-game before packing your joints
        Difficulty = 'easy', -- easy / medium / hard
        areaSize = 50,
        speedMultiplier = 1,
        Buttons = {'a', 'd'}
    },
}


Config.HighSystem = { -- High Effect Settings
    MaxHigh = 1.6, -- Max high value 
    Effect = 'spectator9', -- High effect up to size 1.0
    ShakeCamWhileAiming = true, -- Cam vibration during aiming at high effect above 1.0
    DisableSprint = true, -- disable sprint when high effect is above 1.0
    RemoveHigh = {
        Remove = 0.04, -- Set a rank that is removed every 15 seconds (this makes the effect go away more slowly)
        Time = 15, -- Every 15 seconds 0.04 values are taken from the high effect
        RemoveEffect = 'DrugsDrivingOut', -- The name of the effect that is executed when the high effect is above 1.0, each time the effect is reduced, false for disable. https://forge.plebmasters.de/animpostfx
    },
    HighMovement = { -- Movement will change when Hight value exceeds size 1.0
        enable = true,
        anim = 'move_m@drunk@slightlydrunk',
    }
}


Config.Buttons = { 
    Use = 176, -- LEFT CLICK ON MOUSE
    Accept = 38, -- E 
    Light = 38, -- E 
    Charge = 10, -- PAGEUP
    Options = 310, -- R 
    Throw = 73, -- X 
    Back = 73, -- X 
    Hide = 73, -- X
}


-- STATUS --
Config.Status = { --Settings for adding Armor, remove Stress and High Effect
    ["ARMOR"] = function(data) -- Trigger to increase thirst status
        AddArmourToPed(PlayerPedId(), data.AfterExhale.Status['ARMOR'])
    end,
    ["STRESS"] = function(data) -- Here you can insert an export or trigger for your stress system
        if Framework == 'ESX' then

         TriggerEvent('esx_status:remove', 'stress', data.AfterExhale.Status['STRESS']) -- this trigger only works for the esx_status stress system

        elseif Framework == 'QB' then -- Trigger for QB-Core / QBX

            TriggerServerEvent('hud:server:RelieveStress', data.AfterExhale.Status['STRESS'])
            
        end
    end,
    ["HIGH"] = function(data) -- This is a default function that does not need to be modified
        SetHigh(data.AfterExhale.Status['HIGH']) -- Default function from devcore_smoking
    end,
}

-- NOTIFY FUNCTION --
Config.Notify = function(message, type)
    if Framework == 'ESX' then
        -- For your notify remove ESX.ShowNotification(message, 2000, type) and put your export or trigger 
        ESX.ShowNotification(message, 2000, type) -- Default ESX Notify

    elseif Framework == 'QB' then
        -- For your notify remove QBCore.Functions.Notify(message, type) and put your export or trigger 
        QBCore.Functions.Notify(message, type) -- Default QB Notify

    end
end


--CUSTOM DRAW MENU FUNCTION-- here put your export or trigger for your menu and delete - DrawSmokeMenu(text, menuid)
Config.CustomMenu = function(text, menuid) -- menuid only for default realistic smoking draw menu.
    DrawSmokeMenu(text, menuid) 
end


-- MENU CUSTOMIZE --
Config.Menu = {

    ['MAIN'] = { -- MAIN DRAW MENU
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.50, y = 0.95},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
    ['STATUS'] = { -- STATUS DRAW MENU
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.984, y = 0.90},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
    ['OPTIONS'] = { -- OPTIONS DRAW MENU
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.972, y = 0.94},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },

}


-- MENU TEXT AND TEXT --
Translations = {
    ['MENU'] = {
        ['USE'] =  {tag = '~g~[M1]~w~ ', label = 'USE'},
        ['OPTIONS'] = {tag = '~g~[R]~w~ ', label = 'OPTIONS'},
        ['LIGHT'] = {tag = '~g~[E]~w~ ', label = 'LIGHT'},
        ['CHARGE'] = {tag = '~g~[PGUP]~w~ ', label = 'CHARGE'},
        ['HIDE'] = {tag = '~g~[X]~w~ ', label = 'HIDE'},
        ['THROW'] = {tag = '~g~[X]~w~ ', label = 'THROW'},
        ['BACK'] = {tag = '~g~[X]~w~ ', label = 'BACK'},
        ['ACCEPT'] = {tag = '~g~[E]~w~ ', label = 'ACCEPT'},
    },
    ['TEXT'] = {
        ['charge_menu_title'] = 'Select an item',
        ['charge_desc'] = 'Click to charge: ',
        ['cigarette_pack_menu_title'] = 'How many cigarettes do you want to take out of the pack?',
        ['cigarette_pack_menu_desc'] = 'Max: ',
        ['cigarette_pack_menu_label'] = 'Cigarette item in pack: ',
        ['papers_quantity'] = 'Quantity of papers',
        ['roll_joints_desc'] = 'Click to start rolling: ',
        ['roll_joints_starting'] = 'Starting rolling joint',
        ['failed_roll'] = 'You failed to roll a joint',
        ['success_roll'] = 'He successfully rolled ',
        ['no_near_you'] = 'Theres no one near you',
        ['dont_have_item'] = 'You dont carry the necessary items to fill',
        ['hidden_menu_info'] = 'You have a hidden menu',
        ['max_high'] = 'Youre already too high. Wait a minute.',
        ['dont_have_item_for_rolling'] = 'You dont have the right item for packing joints ',
        ['already'] = 'Youre already smoking',
        ['player_already'] = 'Player already smoking',
        ['save_position'] = 'To take the item back into your hand, use the command /' ..Config.Settings.TakeEarItemCommand,
        ['not_filled'] = 'You have to fill the bong first',
        ['not_lighter'] = 'You dont have Lighter',
        ['options_menu_title'] = 'Smoking Options',
        ['options_positions_label'] = 'Positions',
        ['options_hide_menu_label'] = 'Menu show/hide',
        ['options_hide_label'] = 'Hide',
        ['options_filled_label'] = 'Filled',
        ['options_show_label'] = 'Show',
        ['options_give_label'] = 'Give',
        ['options_mouth_positions'] = 'Mouth',
        ['options_hand_positions'] = 'Hand',
        ['options_ear_positions']= 'Ear',
        ['status_bong'] = 'g', -- for ox_inventory metadata description
        ['status_vape'] = 'ml', -- for ox_inventory metadata description
        ['status_puff_vape'] = ' PUFFS', -- for ox_inventory metadata description
        ['empty_lighter'] = 'Lighter is empty',
    },
}
```

{% endtab %}

{% tab title="Items" %}

```lua

---- ROLLING PAPERS ITEMS ----
Config.RollingPapers = { -- Any amount of rolling papers can be added
    --
    ['ocb_paper'] = { -- ITEM NAME
        Quantity = 30, -- Number of pieces of paper in the package 
        Prop = {Paper = 'p_cs_papers_02', Weed = 'bkr_prop_weed_bud_pruned_01a'},
        Positions = { -- Post
                ['PAPER'] = {
                    BoneID = 18905,
                    Offset = vector3(0.12, 0.0, 0.02),
                    Rot = vector3(180.0, -145.0, 120.0),},
                ['WEED'] = {
                    BoneID = 57005,
                    Offset = vector3(0.13, 0.07, -0.03),
                    Rot = vector3(-89.0, 192.0, -6.0),},
                ['ROLL_ITEM'] = { -- Rolling item prop positions
                    BoneID = 64097,
                    Offset = vector3(0.020, 0.0, 0.04),
                    Rot = vector3(90.0, 0.0, -198.0),},
        },
        Anims = {
            ['ROLL'] = { -- Animation rolling joints
                [1] = {anim = 'clip_rolling', dict = 'foxyando@rolling', params = {1.0, -1.0, 14000, 49, 1}},
            },
        },
        RollingItems = {  -- Here you set the names of the items from which it will be possible to rolling the joint and also specify the names of the items for the joints
            ['og_kush_weed'] = { joint = 'og_kush_joint'}, 
            ['banana_kush_weed'] = { joint = 'banana_kush_joint'},
            ['purple_haze_weed'] = { joint = 'purple_haze_joint'},
            ['blue_dream_weed'] = { joint = 'blue_dream_joint'},
           -- ['example_weed'] = { joint = 'example_joint'},
        }
    },

    --
    
    ['raw_paper'] = { -- ITEM NAME
        Quantity = 35, -- Number of pieces of paper in the package 
        Prop = {Paper = 'p_cs_papers_02', Weed = 'bkr_prop_weed_bud_pruned_01a'},
        Positions = {
                ['PAPER'] = { 
                    BoneID = 18905,
                    Offset = vector3(0.12, 0.0, 0.02),
                    Rot = vector3(180.0, -145.0, 120.0),},
                ['WEED'] = {
                    BoneID = 57005,
                    Offset = vector3(0.13, 0.07, -0.03),
                    Rot = vector3(-89.0, 192.0, -6.0),},
                ['ROLL_ITEM'] = {
                    BoneID = 64097,
                    Offset = vector3(0.020, 0.0, 0.04),
                    Rot = vector3(90.0, 0.0, -198.0),},
        },
        Anims = {
            ['ROLL'] = { -- Animation rolling joints
                [1] = {anim = 'clip_rolling', dict = 'foxyando@rolling', params = {1.0, -1.0, 14000, 49, 1}},
            },
        },
        RollingItems = { -- Here you set the names of the items from which it will be possible to rolling the joint and also specify the names of the items for the joints
            ['og_kush_weed'] = { joint = 'og_kush_joint'},
            ['banana_kush_weed'] = { joint = 'banana_kush_joint'},
            ['purple_haze_weed'] = { joint = 'purple_haze_joint'},
            ['blue_dream_weed'] = { joint = 'blue_dream_joint'},
             -- ['example_weed'] = { joint = 'example_joint'},
        }
    },
    --

}

---- LIGHTERS ITEMS ----

Config.Lighters = {-- Any amount of Lighters can be added

    --
    ['classic_lighter'] = { -- ITEM NAME
        Prop = {Default = 'ex_prop_exec_lighter_01'},
        Remove_Durability = {min = 1, max = 5}, -- Only for ox_inventory
        Positions = { -- 
            ['DEFAULT'] = { -- Lighter position if you are lighting an item with Type NEED_LIGHTER 
                BoneID = 57005,
                Offset = vector3(0.14, 0.01, 0.0),
                Rot = vector3(-89.0, 192.0, -6.0),},
            ['BONG'] = { --Lighter position if you are lighting an item with Type BONG 
                BoneID = 18905,
                Offset = vector3(0.12, 0.01, 0.02),
                Rot = vector3(-119.0, 36.0, -32.0),},
        },
        Particles = {
            ['Light'] = {-- light effect 
                particleName = 'ent_amb_torch_fire', -- ent_amb_fire_ring
                particleDict = 'core',
                Scale = 0.03,
                Offset = vector3(0.0, 0.0, 0.050),
                Rot = vector3(0.0, 0.0, 0.0),},
        },
        Anims = {
            ['LIGHT'] = { -- Animation Lighting a Cigarette
                [1] = {anim = 'devcore_light_c_1', dict = 'lightcig_1@devcore', params = {1.0, -1.0, 3000, 49, 1}, sound = {url = './sounds/devcore_light_1.mp3', volume = 0.3, distance = 5}},
                [2] = {anim = 'devcore_light_c_2', dict = 'lightcig_2@devcore', params = {1.0, -1.0, 3000, 49, 1}, sound = {url = './sounds/devcore_light_1.mp3', volume = 0.3, distance = 5}},
                [3] = {anim = 'devcore_light_c', dict = 'lightcig@devcore', params = {1.0, -1.0, 3000, 49, 1}, sound = {url = './sounds/devcore_light_1.mp3', volume = 0.3, distance = 5}},},
            ['TAKEOUT'] = { -- Animation of putting the cigarette in the pocket and taking it out of the pocket
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},},
        },
    }, 

    ['gold_lighter'] = { -- ITEM NAME
        Prop = {Default = 'lux_prop_lighter_luxe'},
        Remove_Durability = {min = 1, max = 5}, -- Only for ox_inventory
        Positions = {
            ['DEFAULT'] = { -- Lighter position if you are lighting an item with Type NEED_LIGHTER 
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.0),
                Rot = vector3(-89.0, 192.0, -6.0),},
            ['BONG'] = { -- Lighter position if you are lighting an item with Type BONG 
                BoneID = 18905,
                Offset = vector3(0.12, 0.01, 0.02),
                Rot = vector3(-119.0, 36.0, -32.0),},
        },
        Particles = {
            ['Light'] = {-- light effect 
                particleName = 'ent_amb_torch_fire',
                particleDict = 'core',
                Scale = 0.03,
                Offset = vector3(0.0, 0.0, 0.050),
                Rot = vector3(0.0, 0.0, 0.0),},
        },
        Anims = {
            ['LIGHT'] = { -- Animation Lighting a Cigarette
                [1] = {anim = 'devcore_light_c', dict = 'lightcig@devcore', params = {1.0, -1.0, 3000, 49, 1}, sound = {url = './sounds/devcore_light_1.mp3', volume = 0.5, distance = 10}},
                [2] = {anim = 'devcore_light_c_2', dict = 'lightcig_2@devcore', params = {1.0, -1.0, 3000, 49, 1}, sound = {url = './sounds/devcore_light_1.mp3', volume = 0.5, distance = 10}},},
            ['TAKEOUT'] = {-- Animation of putting the cigarette in the pocket and taking it out of the pocket
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},},
        },
    }, 
    
}


---- CIGARETTE PACKS ITEMS ----
Config.CigarettePack = {-- Any amount of Cigarette Packages can be added
--
    ['redwood_pack'] = { -- Item name 
        Prop = {Default = 'ng_proc_cigpak01a'}, -- Prop model name 
        Quantity = 20, -- Number of items in a packet of cigarettes
        ItemInPack = 'cig_redwood', -- Name of the item that will be in the cigarette pack
        Positions = {  -- Prop position in hand
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.0),
                Rot = vector3(-89.0, 192.0, -6.0),
        },
        Anims = {
            ['OPEN'] = { -- Animation when taking items out of a pack of cigarettes
                [1] = {anim = 'a_uncuff', dict = 'mp_arresting', params = {1.0, -1.0, 2000, 49, 1}},},
            ['TAKEOUT'] = { -- Animation of putting the cigarette in the pocket and taking it out of the pocket
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},},
         }
    },
    -- 
    ['marlboro_pack'] = { -- Item name
        Prop = {Default = 'ng_proc_cigpak01a'}, -- Prop model name 
        Quantity = 20, -- Number of items in a packet of cigarettes
        ItemInPack = 'cig_marlboro', -- Name of the item that will be in the cigarette pack
        Positions = {  -- Prop position in hand
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.0),
                Rot = vector3(-89.0, 192.0, -6.0),
        },
        Anims = {
            ['OPEN'] = { -- Animation when taking items out of a pack of cigarettes
                [1] = {anim = 'a_uncuff', dict = 'mp_arresting', params = {1.0, -1.0, 2000, 49, 1}},},
            ['TAKEOUT'] = { -- Animation of putting the cigarette in the pocket and taking it out of the pocket
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},},
         }
    },
    -- 

}


---- SMOKING ITEMS ----

Config.SmokingItems = { -- Any amount of Smoking Items can be added

-- CIGARETTE -- TYPE : NEED_LIGHTER
    ['cig_redwood'] = { -- ITEM NAME
        Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'prop_cs_ciggy_01', Light = 'prop_cs_ciggy_01b'}, -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
        Setting = {
            Size = 100, -- The size for the NEED_LIGHTER type sets a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked.
            Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 1}, -- Smoke exhalation time
            RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size 
            ExhaleEffect = {enable = true, intensity = 60, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 0.5}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = false, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = nil, -- Adds armor after each puff of smoke
            ['STRESS'] = 1, -- Removes stress after smoke exhalation
            ['HIGH'] = nil, -- Adds a high after exhaling smoke
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 64097,
                Offset = vector3(0.020, 0.02, -0.008),
                Rot = vector3(100.0, 0.0, 100.0),},
            ['MOUTH'] = { -- Prop position in mouth 
                BoneID = 47419,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['EAR'] = { -- Prop position behind the ear
                BoneID = 12844,
                Offset = vector3(0.05, -0.03, -0.08),
                Rot = vector3(80.0, 7.0, -118.0),},
        },
        Particles = {
            ['Exhale'] = {-- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.1,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['Prop'] = {-- Smoke particles on prop 
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.02,
                Offset = vector3(-0.050, 0.0, 0.0),
                Rot = vector3(0.0, 0.0, 0.0),}
        },
        Anims = { -- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1600, 49, 1}},
            },
            ['MOUTH'] = {
                [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['EAR'] = {
                [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

    -- CIGARETTE -- TYPE : NEED_LIGHTER
    ['cig_marlboro'] = { -- ITEM NAME
        Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'prop_cs_ciggy_01', Light = 'prop_cs_ciggy_01b'}, -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
        Setting = {
            Size = 100,  --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
            Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 1}, -- Smoke exhalation time
            RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size 
            ExhaleEffect = {enable = true, intensity = 40, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = false, value = 0.0}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = false, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = nil, -- Adds armor after each puff of smoke
            ['STRESS'] = nil, -- Removes stress after smoke exhalation
            ['HIGH'] = nil, -- Adds a high after exhaling smoke
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 64097,
                Offset = vector3(0.020, 0.02, -0.008),
                Rot = vector3(100.0, 0.0, 100.0),},
            ['MOUTH'] = { -- Prop position in mouth 
                BoneID = 47419,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['EAR'] = { -- Prop position behind the ear
                BoneID = 12844,
                Offset = vector3(0.05, -0.03, -0.08),
                Rot = vector3(80.0, 7.0, -118.0),},
        },
        Particles = {
            ['Exhale'] = {-- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.1,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['Prop'] = {-- Smoke particles on prop 
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.02,
                Offset = vector3(-0.050, 0.0, 0.0),
                Rot = vector3(0.0, 0.0, 0.0),}
        },
        Anims = { -- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1600, 49, 1}},
            },
            ['MOUTH'] = {
                [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['EAR'] = {
                [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

    -- CIGARS -- TYPE : NEED_LIGHTER

    ['cigar_cuban'] = { -- ITEM NAME
        Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars) , BONG(bongs), VAPE(Must be topped up with liquid) , VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'prop_cigar_02', Light = 'prop_cigar_01'},  -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
        Setting = {
            Size = 150,  --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
            Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 2}, -- Smoke exhalation time
            RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size
            ExhaleEffect = {enable = true, intensity = 90, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 0.7}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = 5, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = nil, -- Adds armor after each puff of smoke
            ['STRESS'] = nil, -- Removes stress after smoke exhalation
            ['HIGH'] = nil, -- Adds a high after exhaling smoke 
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 64097,
                Offset = vector3(0.020, 0.02, -0.008),
                Rot = vector3(100.0, 0.0, -100.0),},
            ['MOUTH'] = { -- Prop position in mouth 
                BoneID = 47419,
                Offset = vector3(0.01, 0.0, 0.01),
                Rot = vector3(6.0, 32.0, -86.0),},
            ['EAR'] = { -- Prop position behind the ear
                BoneID = 12844,
                Offset = vector3(0.05, -0.03, -0.08),
                Rot = vector3(-1.0, 1.0, 63.0),},
        },
        Particles = {
            ['Exhale'] = {-- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.1,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['Prop'] = {-- Smoke particles on prop 
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.04,
                Offset = vector3(0.050, 0.0, 0.0),
                Rot = vector3(0.0, 0.0, 0.0),}
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1300, 49, 1}},
            },
            ['MOUTH'] = {
                [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['EAR'] = {
                [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

        -- CIGARS -- TYPE : NEED_LIGHTER

    ['cigar_davidoff'] = { -- ITEM NAME
        Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars) , BONG(bongs), VAPE(Must be topped up with liquid) , VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'prop_cigar_02', Light = 'prop_cigar_01'},  -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
        Setting = {
            Size = 100,  --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
            Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 2}, -- Smoke exhalation time
            RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size
            ExhaleEffect = {enable = true, intensity = 80, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 0.6}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = 5, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = nil, -- Adds armor after each puff of smoke
            ['STRESS'] = nil, -- Removes stress after smoke exhalation
            ['HIGH'] = nil, -- Adds a high after exhaling smoke 
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 64097,
                Offset = vector3(0.020, 0.02, -0.008),
                Rot = vector3(100.0, 0.0, -100.0),},
            ['MOUTH'] = { -- Prop position in mouth 
                BoneID = 47419,
                Offset = vector3(0.01, 0.0, 0.01),
                Rot = vector3(6.0, 32.0, -86.0),},
            ['EAR'] = { -- Prop position behind the ear
                BoneID = 12844,
                Offset = vector3(0.05, -0.03, -0.08),
                Rot = vector3(-1.0, 1.0, 63.0),},
        },
        Particles = {
            ['Exhale'] = {-- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.1,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['Prop'] = {-- Smoke particles on prop 
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.03,
                Offset = vector3(0.050, 0.0, 0.0),
                Rot = vector3(0.0, 0.0, 0.0),}
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1300, 49, 1}},
            },
            ['MOUTH'] = {
                [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['EAR'] = {
                [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

    -- JOINTS -- TYPE : NEED_LIGHTER

    ['og_kush_joint'] = { -- ITEM NAME
        Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'p_cs_joint_02', Light = 'p_cs_joint_01'}, -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
        Setting = {
            Size = 100,  --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
            Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 2}, -- Smoke exhalation time in sec
            RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size
            ExhaleEffect = {enable = true, intensity = 40, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 2.0}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = 2, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = 1, -- Adds armor after each puff of smoke
            ['STRESS'] = nil, -- Removes stress after smoke exhalation
            ['HIGH'] = 1, -- Adds a high after exhaling smoke
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand 
                BoneID = 64097,
                Offset = vector3(0.020, 0.02, -0.008),
                Rot = vector3(100.0, 0.0, 100.0),},
            ['MOUTH'] = { -- Prop position in mouth 
                BoneID = 47419,
                Offset = vector3(0.01, -0.01, 0.01),
                Rot = vector3(-2.0, 0.0, 96.0),},
            ['EAR'] = { -- Prop position behind the ear
                BoneID = 12844,
                Offset = vector3(0.05, -0.03, -0.08),
                Rot = vector3(80.0, 7.0, -118.0),},
        },
        Particles = {
            ['Exhale'] = {-- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.1,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['Prop'] = {-- Smoke particles on prop 
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.03,
                Offset = vector3(-0.050, 0.0, 0.0),
                Rot = vector3(0.0, 0.0, 0.0),}
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1300, 49, 1}},
            },
            ['MOUTH'] = {
                [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['EAR'] = {
                [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

    -- JOINTS -- TYPE : NEED_LIGHTER

    ['banana_kush_joint'] = { -- ITEM NAME
        Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'p_cs_joint_02', Light = 'p_cs_joint_01'}, -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
        Setting = {
            Size = 100,  --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
            Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 1}, -- Smoke exhalation time
            RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size
            ExhaleEffect = {enable = true, intensity = 70, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 2.5}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = 3,-- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = 2, -- Adds armor after each puff of smoke
            ['STRESS'] = nil, -- Removes stress after smoke exhalation
            ['HIGH'] = 1.3, -- Adds a high after exhaling smoke
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 64097,
                Offset = vector3(0.020, 0.02, -0.008),
                Rot = vector3(100.0, 0.0, 100.0),},
            ['MOUTH'] = { -- Prop position in mouth 
                BoneID = 47419,
                Offset = vector3(0.01, -0.01, 0.01),
                Rot = vector3(-2.0, 0.0, 96.0),},
            ['EAR'] = { -- Prop position behind the ear
                BoneID = 12844,
                Offset = vector3(0.05, -0.03, -0.08),
                Rot = vector3(80.0, 7.0, -118.0),},
        },
        Particles = {
            ['Exhale'] = { -- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.1,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
            ['Prop'] = {-- Smoke particles on prop
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.03,
                Offset = vector3(-0.050, 0.0, 0.0),
                Rot = vector3(0.0, 0.0, 0.0),}
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
                [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1300, 49, 1}},
            },
            ['MOUTH'] = {
                [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['EAR'] = {
                [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

    -- JOINTS -- TYPE : NEED_LIGHTER

    ['purple_haze_joint'] = { -- ITEM NAME
    Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
    Prop = {Default = 'p_cs_joint_02', Light = 'p_cs_joint_01'}, -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
    Setting = {
        Size = 100, --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
        Remove = 0.3, Time = 3}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
    AfterExhale = {
        ExhaleTime = {min = 1, max = 1}, -- Smoke exhalation time
        RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size
        ExhaleEffect = {enable = true, intensity = 90, effect = 'SwitchShortNeutralIn'}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
        ShakeCam = {effect = 'VIBRATE_SHAKE', value = 2.8}, -- Shake cam effect after exhale smoke for disable, effect = false
        CoughChance = 4,-- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
    Status = {
        ['ARMOR'] = 3, -- Adds armor after each puff of smoke
        ['STRESS'] = nil, -- Removes stress after smoke exhalation
        ['HIGH'] = 1.5, -- Adds a high after exhaling smoke
        }
    },
    Positions = {
        ['HAND'] = { -- Prop position in hand
            BoneID = 64097,
            Offset = vector3(0.020, 0.02, -0.008),
            Rot = vector3(100.0, 0.0, 100.0),},
        ['MOUTH'] = { -- Prop position in mouth 
            BoneID = 47419,
            Offset = vector3(0.01, -0.01, 0.01),
            Rot = vector3(-2.0, 0.0, 96.0),},
        ['EAR'] = { -- Prop position behind the ear
            BoneID = 12844,
            Offset = vector3(0.05, -0.03, -0.08),
            Rot = vector3(80.0, 7.0, -118.0),},
    },
    Particles = {
        ['Exhale'] = { -- Smoke particles after exhale
            particleName = 'exp_grd_bzgas_smoke',
            particleDict = 'core',
            Scale = 0.1,
            Offset = vector3(0.014, -0.003, 0.008),
            Rot = vector3(55.0, 0.0, 110.0),},
        ['Prop'] = {-- Smoke particles on prop
            particleName = 'exp_grd_bzgas_smoke',
            particleDict = 'core',
            Scale = 0.03,
            Offset = vector3(-0.050, 0.0, 0.0),
            Rot = vector3(0.0, 0.0, 0.0),}
    },
    Anims = {-- New animations can be added to each category and are always selected randomly
        ['USE'] = {
            [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
            [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
            [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
            [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1300, 49, 1}},
        },
        ['MOUTH'] = {
            [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
        },
        ['EAR'] = {
            [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
        },
        ['COUGH'] = {
            [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
        },
        ['THROW'] = {
            [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
        },
        ['GIVE'] = {
            [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
        },
        ['TAKEOUT'] = {
            [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
        },
    },
},

    -- JOINTS -- TYPE : NEED_LIGHTER
    ['blue_dream_joint'] = { -- ITEM NAME
    Type = 'NEED_LIGHTER', -- NEED_LIGHTER (joints, cigarette, cigars), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
    Prop = {Default = 'p_cs_joint_02', Light = 'p_cs_joint_01'}, -- Default is prop before lighting and Light is prop after lighting the cigarette (if you want to use only one prop, remove the Light prop and leave only the Default prop)
    Setting = {
        Size = 100,  --  TYPE : NEED_LIGHTER : set a value that decreases gradually after the item is lit, the larger the number you set, the longer the item can be smoked. 
        Remove = 0.3, Time = 3},  -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
    AfterExhale = { 
        ExhaleTime = {min = 1, max = 2}, -- Smoke exhalation time
        RemoveAfterExhale = 5, -- The set value is taken after each exhalation of smoke from the size
        ExhaleEffect = {enable = true, intensity = 100, effect = 'SwitchShortNeutralIn'}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
        ShakeCam = {effect = 'VIBRATE_SHAKE', value = 3.0}, -- Shake cam effect after exhale smoke for disable, effect = false
        CoughChance = 5, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
    Status = {
        ['ARMOR'] = 4, -- Adds armor after each puff of smoke
        ['STRESS'] = nil, -- Removes stress after smoke exhalation
        ['HIGH'] = 2, -- Adds a high after exhaling smoke
        }
    },
    Positions = {
        ['HAND'] = { -- Prop position in hand
            BoneID = 64097,
            Offset = vector3(0.020, 0.02, -0.008),
            Rot = vector3(100.0, 0.0, 100.0),},
        ['MOUTH'] = { -- Prop position in mouth 
            BoneID = 47419,
            Offset = vector3(0.01, -0.01, 0.01),
            Rot = vector3(-2.0, 0.0, 96.0),},
        ['EAR'] = { -- Prop position behind the ear
            BoneID = 12844,
            Offset = vector3(0.05, -0.03, -0.08),
            Rot = vector3(80.0, 7.0, -118.0),},
    },
    Particles = {
        ['Exhale'] = { -- Smoke particles after exhale
            particleName = 'exp_grd_bzgas_smoke',
            particleDict = 'core',
            Scale = 0.1,
            Offset = vector3(0.014, -0.003, 0.008),
            Rot = vector3(55.0, 0.0, 110.0),},
        ['Prop'] = {-- Smoke particles on prop
            particleName = 'exp_grd_bzgas_smoke',
            particleDict = 'core',
            Scale = 0.03,
            Offset = vector3(-0.050, 0.0, 0.0),
            Rot = vector3(0.0, 0.0, 0.0),}
    },
    Anims = {-- New animations can be added to each category and are always selected randomly
        ['USE'] = {
            [1] = {anim = 'idle_a', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
            [2] = {anim = 'idle_b', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
            [3] = {anim = 'idle_c', dict = 'amb@world_human_aa_smoke@male@idle_a', params = {1.0, -1.0, 2800, 49, 1}},
            [4] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1300, 49, 1}},
        },
        ['MOUTH'] = {
            [1] = {anim = 'take_mouth_c', dict = 'pos_mouth@devcore', params = {1.0, -1.0, 1000, 49, 1}},
        },
        ['EAR'] = {
            [1] = {anim = 'takecig_clip', dict = 'takecig@devcore', params = {1.0, -1.0, 1500, 49, 1}},
        },
        ['COUGH'] = {
            [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
        },
        ['THROW'] = {
            [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
        },
        ['GIVE'] = {
            [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
        },
        ['TAKEOUT'] = {
            [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
        },
    },
},

-- BONGS -- TYPE : BONG

    ['bong'] = { -- ITEM NAME
        Type = 'BONG', -- NEED_LIGHTER (joints, cigarette, cigar), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'prop_bong_01'}, -- For the BONG / VAPE / VAPE-PUFF type, only the Default prop can be set
        Setting = {
            Size = 1, -- TYPE : BONG : After filling the bong, the set size is added.
            Remove = nil, Time = nil}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 2, max = 2}, -- Smoke exhalation time
            RemoveAfterExhale = 1, -- The set value is taken after each exhalation of smoke from the size
            ExhaleEffect = {enable = true, intensity = 100, effect = 'SwitchShortNeutralIn'}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 2.8}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = 2, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = 80, -- Adds armor after each puff of smoke
            ['STRESS'] = nil, -- Removes stress after smoke exhalation
            ['HIGH'] = 5, -- Adds a high after exhaling smoke
            }
        },
        AllowedItems = {-- items with which to fill the bong, filling is up to the maximum size value
                ['og_kush_weed'] = { label = 'Og Kush Weed'},
                ['banana_kush_weed'] = { label = 'Banana Kush Weed'},
                ['purple_haze_weed'] = { label = 'Purple Haze Weed'},
                ['blue_dream_weed'] = { label = 'Blue Dream Weed'},
              --['example_weed'] = { label = 'Example Weed'},
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 57005,
                Offset = vector3(0.14, -0.26, -0.1),
                Rot = vector3(-72.0, 0.0, 8.0),},
        },
        Particles = {
            ['Exhale'] = { -- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.3,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),},
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'smokebong_c', dict = 'smokebong@devcore', params = {1.0, -1.0, 4000, 49, 1}, sound = {url = './sounds/devcore_bonghit_1.mp3', volume = 0.5, distance = 10}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['CHARGE'] = {
                [1] = {anim = 'a_uncuff', dict = 'mp_arresting', params = {1.0, -1.0, 2000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },

    -- VAPES -- TYPE : VAPE

    ['vape'] = { -- ITEM NAME
        Type = 'VAPE', -- NEED_LIGHTER (joints, cigarette, cigar), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'xm3_prop_xm3_vape_01a'}, -- For the BONG / VAPE / VAPE-PUFF type, only the Default prop can be set
        Setting = {
            Size = 5, -- TYPE : VAPE : After filling the vape, the set size is added.
            Remove = nil, Time = nil}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 2}, -- Smoke exhalation time
            RemoveAfterExhale = 0.2, -- The set value is taken after each exhalation of smoke from the size 
            ExhaleEffect = {enable = true, intensity = 60, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 1.5}, -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = false, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = nil, -- Adds armor after each puff of smoke
            ['STRESS'] = 1, -- Removes stress after smoke exhalation
            ['HIGH'] = nil, -- Adds a high after exhaling smoke
            }
        },
        AllowedItems = {-- items with which to fill the vape, filling is up to the maximum size value
                ['cherry_liquid'] = {label = 'Cherry liquid'},
                ['blueberry_liquid'] = {label = 'Blueberry liquid'},
            --  ['example_liquid'] = {label = 'Example liquid'},
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 57005,
                Offset = vector3(0.1, 0.04, -0.01),
                Rot = vector3( 0.0, 0.0, 0.0),},
        },
        Particles = {
            ['Exhale'] = { -- Smoke particles after exhale
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.2,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),}
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'smokevape_c', dict = 'smoke_vape@devcore', params = {1.0, -1.0, 2000, 49, 1}, sound = {url = './sounds/devcore_vape_1.mp3', volume = 0.5, distance = 5}},
            },
            ['CHARGE'] = {
                [1] = {anim = 'a_uncuff', dict = 'mp_arresting', params = {1.0, -1.0, 2000, 49, 1}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['THROW'] = {
                [1] = {anim = 'putdown_low', dict = 'pickup_object', params = {1.0, -1.0, 1000, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },


-- PUFF VAPES -- TYPE : VAPE-PUFF

    ['puff_vape'] = { -- ITEM NAME
        Type = 'VAPE-PUFF', -- NEED_LIGHTER (joints, cigarette, cigar), BONG(bongs), VAPE(Must be topped up with liquid), VAPE-PUFF(It has an adjustable maximum amount of puffs)
        Prop = {Default = 'ba_prop_battle_vape_01'}, -- For the BONG / VAPE / VAPE-PUFF type, only the Default prop can be set 
        Setting = {
            Size = 100, -- TYPE : VAPE-PUFF : Size is maximum puffs
            Remove = nil, Time = nil}, -- The size is subtracted by 0.3 every 3 seconds during smoking, depending on the setting (ONLY FOR: NEED_LIGHTER).
        AfterExhale = {
            ExhaleTime = {min = 1, max = 2},  -- Smoke exhalation time
            RemoveAfterExhale = 1, -- The set value is taken after each exhalation of smoke from the size 
            ExhaleEffect = {enable = true, intensity = 60, effect = false}, -- screen blackout effect after smoke exhalation and Animpostfx effect-- https://forge.plebmasters.de/animpostfx
            ShakeCam = {effect = 'VIBRATE_SHAKE', value = 1.5},  -- Shake cam effect after exhale smoke for disable, effect = false
            CoughChance = false, -- false if you don't want to have any chance of coughing / 1 is a 100% chance, the higher the value you set, the lower the chance will be.
        Status = {
            ['ARMOR'] = nil, -- Adds armor after each puff of smoke
            ['STRESS'] = 1, -- Removes stress after smoke exhalation
            ['HIGH'] = nil, -- Adds a high after exhaling smoke
            }
        },
        Positions = {
            ['HAND'] = { -- Prop position in hand
                BoneID = 57005,
                Offset = vector3(0.1, 0.0, -0.01),
                Rot = vector3( 190.0, 0.0, 0.0),},
        },
        Particles = {
            ['Exhale'] = { -- Smoke particles effect after exhale 
                particleName = 'exp_grd_bzgas_smoke',
                particleDict = 'core',
                Scale = 0.2,
                Offset = vector3(0.014, -0.003, 0.008),
                Rot = vector3(55.0, 0.0, 110.0),}
        },
        Anims = {-- New animations can be added to each category and are always selected randomly
            ['USE'] = {
                [1] = {anim = 'smokevape_c', dict = 'smoke_vape@devcore', params = {1.0, -1.0, 2000, 49, 1}, sound = {url = './sounds/devcore_vape_1.mp3', volume = 0.5, distance = 5}},
            },
            ['COUGH'] = {
                [1] = {anim = 'idle_cough', dict = 'timetable@gardener@smoking_joint', params = {1.0, -1.0, 2500, 49, 1}},
            },
            ['GIVE'] = {
                [1] = {anim = 'givetake1_a', dict = 'mp_common', params = {1.0, -1.0, 1800, 49, 1}},
            },
            ['TAKEOUT'] = {
                [1] = {anim = 'enter', dict = 'amb@world_human_smoking@male@male_a@enter', params = {1.0, -1.0, 1300, 49, 1}},
            },
        },
    },
--

}
```

{% endtab %}
{% endtabs %}


# BANKING SYSTEM

V 1.0

**The script uses the escrow system**

:small\_blue\_diamond:Compatible with ESX&#x20;

:small\_blue\_diamond:Fully configurable banking system, UI, notifications and translations

:small\_blue\_diamond:Ability to transfer money to offline players

:small\_blue\_diamond:Ability to select from near players in transfer for easier money transfer

:small\_blue\_diamond:Integrated logs

:small\_blue\_diamond:Modern responsive UI

:small\_blue\_diamond:Optimized performance with minimal resource impact

:small\_blue\_diamond:Multiple notification system support (ox\_lib, ESX, okok, cd, mythic, pnotify)

:small\_blue\_diamond:Multiple open banking system support (ox\_lib textui, ESX textui, okok textui, cd textui, ox target)

:small\_blue\_diamond:Configurable loan requirements

:small\_blue\_diamond:Localization support

:small\_blue\_diamond:Configurable objects and zones for ox target

:small\_blue\_diamond:Card limit system

:small\_blue\_diamond:Society account management.

:small\_blue\_diamond:Debug mode and export functions for integration

:small\_blue\_diamond:Automatic bank accounts and cards creation

:small\_blue\_diamond:Persistence storage with reliable database handling

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

```
DEVCORE BANKING HOW TO INSTALLATION

documentation: https://docs.devcore.cz/

1. After purchasing the script on the store https://store.devcore.cz/, the script can be downloaded here https://keymaster.fivem.net/assets

2. Upload the contents of the zip file to your server.

3. ensure devcore_banking in server.cfg after your framework and db.

4. Insert your database query from insert.sql into your database

5. Put this at the end of es_extended/server/main.lua:

RegisterServerEvent("devcore_banking:save", function(money, bankMoney, message)
    if money or bankMoney then
        DropPlayer(source, message)
    else
        Core.SavePlayers()
    end
end)

6. Edit the config as you wish and enjoy your new script. 😄



EXPORTS (server-side):

Generate card when player created:
local success, result = exports['devcore_banking']:generateBankCard(playerId)
callback (success) - true: card successfully created, false: card wasn't created
callback (result) - only if success is false, then it return why the card wasn't created


Check card limit (limitType = 'general'/'atm')
local inLimit = exports['devcore_banking']:checkLimit(playerId, amount, limitType)
callback - true: it will fit into limit, false: it won't fit into limit



[i]: If you want to change locales of the UI, we have tutorial in our docs!
[i]: You can edit locales in web/src/locales
[i]: We don't recommend to do any changed to the ui/style of the UI, it can easily break the UI


```


# Configs

{% tabs %}
{% tab title="Config" %}

```lua
Config = {}
-- DISCORD : https://discord.gg/zcG9KQj3sa
-- STORE : https://store.devcore.cz/

Config.Locale = 'en' -- Set your locale here -  en/cs/sk/de/fr/es/it/pl
Config.UI = {
	Language = {
        defaultLanguage = "en",  -- Default language for the UI
        availableLanguages = {"en", "cs", "sk", "de", "fr", "es", "it", "pl"}  -- Supported languages
    }
}
Config.KickMessage = 'You have been kicked for attempting to abuse the banking system. If you think this is an error, please contact the server management.'

Config.OpenBanking = 'ox_target' -- ox_target: ox_target, okok_textui: okok textui, ox_lib: ox_lib textui, esx: esx textui, cd: cd draw text ui
Config.Notify = 'ox' -- okok: okok notify, ox_lib: ox notify, esx: esx notification, cd: cd notifications, mythic: mythic notifications, pnotify: pNotify

Config.debug = false

Config.TransactionLabels = {
    ['account_transfer'] = "Account Transfer to: ",
    ['account_transfer_2'] = "Transfer from Account: ",
    ['account_deposit'] = 'Deposit',
    ['account_withdraw'] = 'Withdrawal',
    ['savings_deposit'] = 'Transfer to Savings',
    ['savings_withdraw'] = 'Transfer from Savings',
    ['loan_transaction'] = 'Loan'
}

Config.Loans = {
    MaxActiveLoans = 1,
    MinAmount = 10000, -- Minimum loan amount
    MaxAmount = 100000, -- Maximum loan amount
    minTerm = 5, -- Minimum loan term in days
    maxTerm = 20, -- Maximum loan term in days
    InterestRate = 0.05, -- Interest rate for loans (5%)
    PaymentInterval = 1 * 24 * 60 * 60, -- 1 day (in seconds) for daily payments
    DefaultGracePeriod = 3, -- Grace period in days before next payment is due again if player can't pay
	MinPlaytime = 14, -- Minimum playtime in days before player can take a loan
}

Config.MoneyItem = 'cash' -- Item name for cash

Config.ATMProps = {
	`prop_atm_01`,
	`prop_atm_02`,
	`prop_atm_03`,
	`prop_fleeca_atm`,
	`v_5_b_atm1`,
	`v_5_b_atm2`,
	`fm_ltd_atm_sign_01`
}

Config.BankZones = {
	{ -- Legion Square
		pos = vec3(149.02, -1041.17, 29.37),
		h = 340.0,
		length = 0.8,
		width = 6.0,
		minZ = 28.37,
		maxZ = 31.07
	},

	{ -- Del Perro
		pos = vec3(-1212.92, -331.6, 37.79),
		h = 27.0,
		length = 0.8,
		width = 6.0,
		minZ = 36.79,
		maxZ = 39.49
	},

	{ -- Burton
		pos = vec3(-351.78, -50.36, 49.04),
		h = 341.0,
		length = 0.8,
		width = 6.0,
		minZ = 48.04,
		maxZ = 50.74
	},

	{ -- Hawick
		pos = vec3(313.37, -279.53, 54.17),
		h = 340.0,
		length = 0.8,
		width = 6.0,
		minZ = 53.17,
		maxZ = 55.87
	},

	{ -- Highway
		pos = vec3(-2961.91, 482.27, 15.7),
		h = 87.0,
		length = 0.8,
		width = 6.0,
		minZ = 14.7,
		maxZ = 17.4
	},

	{ -- Sandy Shores
		pos = vec3(1175.7, 2707.51, 38.09),
		h = 0.0,
		length = 0.8,
		width = 6.0,
		minZ = 37.09,
		maxZ = 39.79
	},

	{ -- Paleto Bay
		pos = vec3(-111.54, 6469.59, 31.62),
		h = 315.0,
		length = 0.8,
		width = 4.4,
		minZ = 30.62,
		maxZ = 33.12
	}
}


Config.Jobs = {
    ['ambulance'] = 'society_ambulance',
    ['police'] = 'society_police',
}
```

{% endtab %}

{% tab title="Logs Config" %}

```lua
SConfig = {}
SConfig.DiscordLogs = {
    Enabled = true,
    Logs = {
        ["transaction"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Transaction Log",
            Description = "A banking transaction has occurred."
        },
        ["banking_account_creation_basic"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Account Creation Log",
            Description = "A new banking account has been created."
        },
        ["banking_account_creation_savings"] ={
            Webhook = "",
            Color = 3447003,
            Title = "Savings Account Creation Log",
            Description = "A new savings banking account has been created."
        },
        ["banking_account_creation_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Account Creation Failure Log",
            Description = "An attempt to create a banking account has failed."
        },
        ["banking_card_creation"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Card Creation Log",
            Description = "A new banking card has been created."
        },
        ["banking_card_creation_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Card Creation Failure Log",
            Description = "An attempt to create a banking card has failed."
        },
        ["card_limit_change"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Card Limit Change Log",
            Description = "The limit on a banking card has been changed."
        },
        ["card_limit_change_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Card Limit Change Failure Log",
            Description = "An attempt to change the limit on a banking card has failed."
        },
        ["card_pin_change"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Card PIN Change Log",
            Description = "The PIN on a banking card has been changed."
        },
        ["card_pin_change_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Card PIN Change Failure Log",
            Description = "An attempt to change the PIN on a banking card has failed."
        },
        ["banking_loan_payment"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Loan Payment Log",
            Description = "A loan payment has been made."
        },
        ["banking_loan_fully_paid"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Loan Fully Paid Log",
            Description = "A banking loan has been fully paid off."
        },
        ["banking_loan_payment_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Loan Payment Failure Log",
            Description = "An attempt to make a loan payment has failed."
        },
        ["banking_loan_creation"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Loan Creation Log",
            Description = "A new banking loan has been created."
        },
        ["banking_loan_creation_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Loan Creation Failure Log",
            Description = "An attempt to create a banking loan has failed."
        },
        ["banking_society_withdrawal"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Withdrawal Log",
            Description = "A society withdrawal has been made."
        },
        ["banking_society_withdrawal_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Withdrawal Failure Log",
            Description = "An attempt to withdraw from a society has failed."
        },
        ["banking_society_deposit"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Deposit Log",
            Description = "A society deposit has been made."
        },
        ["banking_society_deposit_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Deposit Failure Log",
            Description = "An attempt to deposit into a society has failed."
        },
        ["banking_society_transfer"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Transfer Log",
            Description = "A society transfer has occurred."
        },
        ["banking_society_transfer_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Transfer Failure Log",
            Description = "An attempt to transfer funds within a society has failed."
        },
        ["banking_society_savings_deposit"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Savings Deposit Log",
            Description = "A deposit has been made into a society's savings account."
        },
        ["banking_society_savings_deposit_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Savings Deposit Failure Log",
            Description = "An attempt to deposit into a society's savings account has failed."
        },
        ["banking_society_savings_withdrawal"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Society Savings Withdrawal Log",
            Description = "A withdrawal has been made from a society's savings account."
        },
        ["banking_society_savings_withdrawal_fail"] = {
             Webhook = "",
            Color = 3447003,
            Title = "Society Savings Withdrawal Failure Log",
            Description = "An attempt to withdraw from a society's savings account has failed."
        },
        ["banking_savings_withdrawal"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Savings Withdrawal Log",
            Description = "A withdrawal has been made from a savings account."
        },
        ["banking_savings_withdrawal_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Savings Withdrawal Failure Log",
            Description = "An attempt to withdraw from a savings account has failed."
        },
        ["banking_savings_deposit"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Savings Deposit Log",
            Description = "A deposit has been made into a savings account."
        },
        ["banking_savings_deposit_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Savings Deposit Failure Log",
            Description = "An attempt to deposit into a savings account has failed."
        },
        ["banking_withdrawal"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Withdrawal Log",
            Description = "A withdrawal has been made from a banking account."
        },
        ["banking_withdrawal_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Withdrawal Failure Log",
            Description = "An attempt to withdraw from a banking account has failed."
        },
        ["banking_deposit"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Deposit Log",
            Description = "A deposit has been made into a banking account."
        },
        ["banking_deposit_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Deposit Failure Log",
            Description = "An attempt to deposit into a banking account has failed."
        },
        ["banking_transfer"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Transfer Log",
            Description = "A transfer has occurred between banking accounts."
        },
        ["banking_transfer_fail"] = {
            Webhook = "",
            Color = 3447003,
            Title = "Transfer Failure Log",
            Description = "An attempt to transfer funds between banking accounts has failed."
        }
    }
}
```

{% endtab %}
{% endtabs %}


# REALISTIC NEEDS

V 3.5

**The script uses the escrow system**

<img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">0 ms when inactive\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Compatible with ox\_inventory and qb-inventory\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Drunk system\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Customizable menu\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Movement interaction in drink driving\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Breathalyzer\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Pouring drinks into glasses\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Automatic consumption\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Placing all items on the ground (it is possible not to store items placed on the ground in the database)\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Serving items to players around you\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Is possible to add a second prop for example to hold a fork.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Custom animation when pouring drinks\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Auto take ( for ox\_inventory if you have an item in your inventory that is set to auto takeover, then this item is automatically used)

UPDATE v 3.5 :beers: :hamburger:&#x20;

[**Update Preview**](https://streamable.com/6fzsnz)

```
🔹The script is now Compatible for ESX/QB/QBX at the same time, it detects which framework you are using.
🔹Fixed problem  Warning: [natives] TRIGGER_CLIENT_EVENT_INTERNAL: client 1 ...
🔹Added Options menu for better clarity.
🔹In the options menu is the Hide draw menu option.
🔹Modified placing items on the ground.
🔹Modified system for pouring drinks into glasses.
🔹Added Floating Menu to items on the ground.
🔹The whole drunk system has been modified.
🔹Added export GetAlcoholValue to get the alcohol value.
🔹Added change of movement according to alcohol level Three phases are set in the base.
🔹Now you can use the breathalyzer on yourself.
🔹Better compatibility between qs-inventory

```

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

```
1. After purchasing the script, the script can be downloaded here https://portal.cfx.re/assets/granted-assets

2. Upload the contents of the zip file to your server

3. ensure devcore_needs in server.cfg after ox_lib and after framework

4. Now create items depending on the inventory.

If you are using ox_inventory 
paste the contents of the file upload/inventory/ox_inventory.txt into the file ox_inventory/data/items.lua.
And upload/icons into ox_inventory/web/images.

If you are using qs-inventory
paste the contents of the file upload/inventory/qs_inventory.txt into the file qs-inventory/shared/items.lua.
and uplod/icons into qs-inventory/html/images

If you are using qb-inventory
paste the contents of the file upload/inventory/qb_inventory.txt into the file qb-core/shared/items.lua.
And upload/icons into qb-inventory/html/images.

If you are using a different inventory for ESX
paste the contents of the file upload/inventory/items.sql file into the database.

5.If you want to store the positions of items placed on the ground in the database, don't forget to upload the upload/sql/needs.sql file to the database

6. Go to esx_basicneeds/config.lua and delete all created items 
-- Default --
Config.Items = {
	["bread"] = {
		type = "food",
		prop= "prop_cs_burger_01",
		status = 200000,
		remove = true
	},
	
	["water"] = {
		type = "drink",
		prop = "prop_ld_flow_bottle",
		status = 100000,
		remove = true
	}
}
--
After removed --
Config.Items = {

}
----
7. restart server

Make sure your server artifacts version is above the 5181.
```


# Exports


# GetAlcoholValue

export GetAlcoholValue to get the alcohol value.

```
Export to get the alcohol value can only be used in the client side

local alcohol_value =  exports['devcore_needs']:GetAlcoholValue()

print(alcohol_value)
```


# Configs

{% tabs %}
{% tab title="Config" %}

```lua
Config = {}
-- DISCORD : https://discord.gg/zcG9KQj3sa
-- STORE : https://store.devcore.cz/

Config.PlaceItems = {} -- DONT TOUCH --

-- Framework is automatically detected here you have the option to replace the default exports with your own
Config.Export = function()
    if Framework == 'ESX'  then -- ESX
-- insert your esx export here
    return exports['es_extended']:getSharedObject()
--
    elseif Framework == 'QB'  then -- QB or QBX 
-- insert your qb or qbx export here
    return exports['qb-core']:GetCoreObject()
--
    end
end

-- MAIN --
Config.Settings = {
    SaveDB = true, -- Storing placed items in the database (after restarting the server/script the items remain on the ground)
    PlaceDistance = 2.0, -- Maximum distance for placing the item on the ground
    OptionsMenuPosition = 'top-right',
    DisableCombatButtons = true, -- Deactivate combat buttons when consuming
    AutoTake = { -- only for ox_inventory
        enable = false, -- true if the set items are to be used automatically if they are found in the inventory.
        items = { -- The listed items are automatically placed in your hand if they are in inventory and the item is not returned when you press the x button.
            'cola',
            'coffe',
            'sprunk',
            'burger',
            'taco',
            'hotdog',
        },
    },
}

-- BUTTONS --
Config.Buttons = {
    Use = 38, -- Button for consumption
    Place = 38, -- Button to place an item on the ground
    Hide = 105, -- Button to cancel consumption
    Accept = 38, -- Button to confirm that the item will be placed on the ground, Button to confirm the give of the item to the player 
    Take = 38, -- Button to pick up an item from the ground
    Pour = 176, -- Button for pouring drinks into glasses
    Options = 310, -- Button for open options menu
    TestYourself = 310, --Button for testing yourself with alcohol tester
    Back = 105 -- Button to return from the menu to place the item on the ground and give the item to the player
}

Config.Menu = {

    ['MAIN'] = { -- MAIN DRAW MENU
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.50, y = 0.95},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
    ['STATUS'] = { -- STATUS DRAW MENU
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.984, y = 0.90},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
    ['OPTIONS'] = { -- OPTIONS DRAW MENU
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.972, y = 0.94},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },

}

-- NOTIFY FUNCTION --
Config.Notify = function(message, type)
    if Framework == 'ESX' then
        -- For your notify remove ESX.ShowNotification(message, 2000, type) and put your export or trigger 
        ESX.ShowNotification(message, 2000, type) -- Default ESX Notify

    elseif Framework == 'QB' then
        -- For your notify remove QBCore.Functions.Notify(message, type) and put your export or trigger 
        QBCore.Functions.Notify(message, type) -- Default QB Notify

    end
end

-- MENU FUNCTION --
Config.CustomMenu = function(text, menuid) -- menuid is only for Realistic needs default menu 

    Draw2DNeedsMenu(text, menuid)

end

-- STATUS -- 
Config.Status = { --Settings for adding food, drink, alcohol and removing stress

    ["FOOD"] = function(data) -- Trigger to increase hunger status
        if Framework == 'ESX' then -- ESX TRIGGER / EXPORT
        
        TriggerEvent('esx_status:add', 'hunger', data.Consume.Status) -- Default triggers work only for esx_basicneeds and esx_status so for proper functioning don't forget to have the scripts enabled

        elseif Framework == 'QB' then -- QB/QBX TRIGGER / EXPORT

        TriggerServerEvent("consumables:server:addHunger", QBCore.Functions.GetPlayerData().metadata["hunger"] + data.Consume.Status)
        end
    end,

    ["DRINK"] = function(data) -- Trigger to increase thirst status
        if Framework == 'ESX' then-- ESX TRIGGER / EXPORT

        TriggerEvent('esx_status:add', 'thirst', data.Consume.Status) -- Default triggers work only for esx_basicneeds and esx_status so for proper functioning don't forget to have the scripts enabled

        elseif  Framework == 'QB' then -- QB/QBX TRIGGER / EXPORT

        TriggerServerEvent("consumables:server:addThirst", QBCore.Functions.GetPlayerData().metadata["thirst"] + data.Consume.Status)

        end
    end,

    ["STRESS"] = function(data) -- Trigger to increase stress status
         if Framework == 'ESX' then -- ESX TRIGGER / EXPORT

            TriggerEvent('esx_status:remove', 'stress', data.Consume.Stress)

        elseif Framework == 'QB' then -- QB/QBX TRIGGER / EXPORT

            TriggerServerEvent('hud:server:RelieveStress', data.Consume.Stress)
        end
    end,

    ["ALCOHOL"] = function(data) -- function to increase Alcohol status
        setAlcohol(data.Consume.Alcohol) 
    end,
}

-- DRUNK SYSTEM -- 
Config.DrunkSystem = {
    TesterItem = 'alcotester', -- Item name for breath test
    ResultTime = 3, -- Duration per breath test result in seconds
    Driving = true, -- Difficult driving under the influence of alcohol
    DisableSprint = true, -- No sprinting while drunk walking
    Ragdoll = true, --true if you want a drunk player to occasionally fall to the ground while walking.
    MaxDrunk = 2.3, -- blood alcohol limit
    Time = 15, -- Effect update time in seconds
    Remove = 0.04, -- Removal of alcohol from the blood after updating the effect
    ShakeCamWhileAiming = true, -- Cam vibration during aiming at Alcohol value above 1.0
    Effect = "spectator5", -- Effect of drunkenness
    VeryDrunkEffect = 'Dax_TripFreefall', -- Effect that appears when the alcohol value is higher than 1.0
    RemoveEffect = 'DrugsDrivingOut', -- The name of the effect that is executed when the drunk effect is above 1.0, each time the effect is reduced, false for disable. https://forge.plebmasters.de/animpostfx
    ShakeCamEffect = true, -- Shake Cam effect after each addition of alcohol.
    DarkEffectIntensity = 100, -- Intensity for slow dark screen effect when drinking alcoholic beverage / false for disable
    DrunkMovement = {
        enable = true,
        Phase = { -- phase for setting the player's movement animation according to the alcohol level
            [1] = {NeedAlcoholValue = 0.4, anim = 'move_m@drunk@slightlydrunk'},
            [2] = {NeedAlcoholValue = 0.7, anim = 'move_m@drunk@a'},
            [3] = {NeedAlcoholValue = 1.0, anim = 'move_m@drunk@verydrunk'},
        }
    },
    MovementTime = 3, -- -- the lower the time you give the harder it will be for the drunk driver to drive the vehicle
    RandomVehicleInteraction = { -- Drunk driving interactions
        {interaction = 10, time = 300}, --turn left and restore wheel pos
        {interaction = 11, time = 300}, --turn right and restore wheel pos
        {interaction = 10, time = 500}, --turn left and restore wheel pos
        {interaction = 11, time = 500}, --turn right and restore wheel pos
    },
}

-- MENU AND TEXT --
Translations = {
    ['MENU'] = {
        ['USE'] =  {tag = '~g~[E]~w~', label = 'USE'},
        ['OPTIONS'] = {tag = '~g~[R]~w~', label = 'OPTIONS'},
        ['TEST_YOURSELF'] = {tag = '~g~[R]~w~', label = 'TEST ON YOURSELF'},
        ['PLACE'] = {tag = '~g~[E]~w~', label = 'PLACE'},
        ['HIDE'] = {tag = '~g~[X]~w~', label = 'HIDE'},
        ['THROW'] = {tag = '~g~[X]~w~', label = 'THROW'},
        ['BACK'] = {tag = '~g~[X]~w~', label = 'BACK'},
        ['ACCEPT'] = {tag = '~g~[E]~w~', label = 'ACCEPT'},
        ['POUR'] = {tag = '~g~[M1]~w~', label = 'POUR'},
        ['TAKE'] = {tag = '~g~[E]~w~', label = 'TAKE'},
    },
    ['TEXT'] = { 
        ['already'] = 'You already have something in your hand',
        ['player_already'] = 'The player is already consuming something',
        ['max_drunk'] = 'Im drunk enough',
        ['add_content'] = 'How much add ml into ',
        ['large_number'] = 'Its not possible to pour more into a glass than will fit',
        ['dont_have_ml'] = 'Thats how many ml you dont have in the bottle',
        ['item_cannot_be_poured'] = 'This item cannot be poured into a glass',
        ['item_in_glass'] = 'There is a different type of drink in the glass than the one you want to pour',
        ['no_near_you'] = 'Theres no one near you',
        ['too_far_away'] = 'You cant put an item this far out',
        ['result'] = 'Result: ',
        ['request_rejected'] = 'The person refused the request for a breath test',
        ['request_text'] = 'Request for breath test',
        ['pour_menu_title'] = 'Choose what you want to pour into the ',
        ['waiting'] = ' Waiting..',
        ['hidden_menu'] = 'You have a hidden menu',
        ['options_menu_title'] = 'Options',
        ['options_autouse_label'] = 'Auto use',
        ['options_place_label'] = 'Place',
        ['options_give_label'] = 'Give',
        ['options_hide_menu_label'] = 'Menu show/hide',
        ['options_hide_label'] = 'Hide',
        ['options_filled_label'] = 'Filled',
        ['options_show_label'] = 'Show',
    },
}
```

{% endtab %}

{% tab title="Items" %}

```lua

--------------CONSUME ITEMS---------------
-- PROPS = https://forge.plebmasters.de/
-- BONES INDEX = LEFT HAND : 18905 , RIGHT HAND : 28422
--[[
--------------------- LEFT HAND HOLD ANIM 
    Hold = {
            dict = "amb@code_human_wander_drinking@male@base",
            anim = "static",
            params = {8.0, -8, -1, 49, 0}
        },
-------------------- RIGHT HAND HOLD ANIM 
    Hold = {
            dict = "anim@heists@humane_labs@finale@keycards",
            anim = "ped_a_enter_loop",
            params = {8.0, -8, -1, 49, 0}
        },

]]


Config.ConsumeItems = {-- It is possible to add custom items

---FOOD--

    ["burger"] = {-- item name
        Size = 220, -- Item size
        Type = 'FOOD', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_cs_burger_01',
                BoneID = 18905,
                Offset = vector3(0.13, 0.05, 0.02),
                Rot = vector3(-180.0, 0.0, 0.0),
            },
            --[[Second = { --https://forum.cfx.re/t/free-animation-eat-with-fork/5068991
                Model = 'alcaprop_fork',
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.01),
                Rot = vector3(-118.0, 192.0, 24.0),
            }]]
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_inteat@burger",
                anim = "mp_player_int_eat_burger_fp",
                params = {nil, nil, 1200, 49}
            }
        },
        Consume = {
            Bite = {min = 15, max = 25}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 50000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
        },
    },

    

    ["chaser"] = {-- item name
        Size = 70,
        Type = 'FOOD', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_choc_ego',
                BoneID = 18905,
                Offset = vector3(0.13, 0.04, 0.0),
                Rot = vector3(48.0, 18.0, -133.0),
            },
            --[[Second = { --https://forum.cfx.re/t/free-animation-eat-with-fork/5068991
                Model = 'alcaprop_fork',
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.01),
                Rot = vector3(-118.0, 192.0, 24.0),
            }]]
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_inteat@burger",
                anim = "mp_player_int_eat_burger_fp",
                params = {nil, nil, 1200, 49}
            }
        },
        Consume = {
            Bite = {min = 15, max = 25}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 60000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ["meteorite"] = {-- item name
        Size = 80,
        Type = 'FOOD', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_choc_meto',
                BoneID = 18905,
                Offset = vector3(0.13, 0.05, 0.02),
                Rot = vector3(50.0, 30.0, 260.0),
            },
            --[[Second = { --https://forum.cfx.re/t/free-animation-eat-with-fork/5068991
                Model = 'alcaprop_fork',
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.01),
                Rot = vector3(-118.0, 192.0, 24.0),
            }]]
    },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_inteat@burger",
                anim = "mp_player_int_eat_burger_fp",
                params = {nil, nil, 1200, 49}
            }
        },
        Consume = {
            Bite = {min = 15, max = 25}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 60000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ["hotdog"] = {-- item name
        Size = 120,
        Type = 'FOOD', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
          Main = {
                Model = 'prop_cs_hotdog_01',
                BoneID = 18905,
                Offset = vector3(0.13, 0.05, 0.02),
                Rot = vector3(0.0, -140.0, -140.0),
            },
            --[[Second = { --https://forum.cfx.re/t/free-animation-eat-with-fork/5068991
                Model = 'alcaprop_fork',
                BoneID = 57005,
                Offset = vector3(0.14, 0.02, 0.01),
                Rot = vector3(-118.0, 192.0, 24.0),
            }]]
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_inteat@burger",
                anim = "mp_player_int_eat_burger_fp",
                params = {nil, nil, 1200, 49}
            }
        },
        Consume = {
            Bite = {min = 15, max = 25}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 60000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ["taco"] = {-- item name
        Size = 100,
        Type = 'FOOD', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
          Main = {
                Model = 'prop_taco_01',
                BoneID = 18905,
                Offset = vector3(0.13, 0.05, 0.02),
                Rot = vector3(0.0, -140.0, -140.0),
        },
        --[[Second = { --https://forum.cfx.re/t/free-animation-eat-with-fork/5068991
            Model = 'alcaprop_fork',
            BoneID = 57005,
            Offset = vector3(0.14, 0.02, 0.01),
            Rot = vector3(-118.0, 192.0, 24.0),
        }]]
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_inteat@burger",
                anim = "mp_player_int_eat_burger_fp",
                params = {nil, nil, 1200, 49}
            }
        },
        Consume = {
            Bite = {min = 15, max = 25}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 60000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
        },
    },


--DRINK


    ["raine"] = {-- item name
        Size = 500,
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'ba_prop_club_water_bottle',
                BoneID = 18905,
                Offset = vector3(0.14, -0.08, 0.05),
                Rot = vector3(251.0, -14.0, 11.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 60000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ["energy_drink"] = {-- item name
        Size = 500,
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_energy_drink',
                BoneID = 18905,
                Offset = vector3(0.14, -0.08, 0.05),
                Rot = vector3(251.0, -14.0, 11.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
                Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
                Status = 50000, -- set how much food or drink you want to add 
                Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
                Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
            },
        },


    ["sprunk"] = {-- item name
        Size = 330,
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_ld_can_01',
                BoneID = 28422,
                Offset = vector3(0.0, -0.01, -0.02),
                Rot = vector3(05.0, -10.0, 0.0),
            }
        },
        Anim = {
            Hold = {
                dict = "amb@code_human_wander_drinking@male@base",
                anim = "static",
                params = {8.0, -8, -1, 49, 0}
                },
            Use = {
                dict = "amb@code_human_wander_drinking_fat@male@idle_a",
                anim = "idle_c",
                params = {nil, nil, 2000, 49}
                }
            },
        Consume = {
                Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
                Status = 50000, -- set how much food or drink you want to add 
                Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
                Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
            },
        },

    ["coffe"] = {-- item name
        Size = 330,
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_fib_coffee',
                BoneID = 28422,
                Offset = vector3(0.0, -0.01, -0.02),
                Rot = vector3(05.0, -10.0, 0.0),
                }
            },
        Anim = {
            Hold = {
                dict = "amb@code_human_wander_drinking@male@base",
                anim = "static",
                params = {8.0, -8, -1, 49, 0}
                },
            Use = {
                dict = "amb@code_human_wander_drinking_fat@male@idle_a",
                anim = "idle_c",
                params = {nil, nil, 2000, 49}
                }
            },
        Consume = {
                Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
                Status = 40000, -- set how much food or drink you want to add 
                Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
                Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
            },
        },

    ["cola"] = {-- item name
        Size = 330,
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_ecola_can',
                BoneID = 28422,
                Offset = vector3(0.0, -0.01, -0.02),
                Rot = vector3(05.0, -10.0, 0.0),
                }
            },
        Anim = {
            Hold = {
                dict = "amb@code_human_wander_drinking@male@base",
                anim = "static",
                params = {8.0, -8, -1, 49, 0}
                },
            Use = {
                dict = "amb@code_human_wander_drinking_fat@male@idle_a",
                anim = "idle_c",
                params = {nil, nil, 2000, 49}
                }
            },
        Consume = {
                Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
                Status = 50000, -- set how much food or drink you want to add 
                Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
                Alcohol = nil -- Set the amount of alcohol the item should add after each drink.
            },
        },

    ["piswasser"] = {-- item name
        Size = 500,
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_amb_beer_bottle',
                BoneID = 18905,
                Offset = vector3(0.14, -0.08, 0.05),
                Rot = vector3(251.0, -14.0, 11.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 0.5, -- Set the amount of alcohol the item should add after each drink.
        },
    },

    ["mount_whiskey"] = {-- Item spawn name
        Size = 700, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_whiskey_bottle',
                BoneID = 18905,
                Offset = vector3(0.18, -0.19, 0.13),
                Rot = vector3(-120.0, 12.0, 6.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 3, -- Set the amount of alcohol the item should add after each drink.
        },
    },

    ["tequila"] = {-- Item spawn name
        Size = 700, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_tequila_bottle',
                BoneID = 18905,
                Offset = vector3(0.14, -0.28, 0.1),
                Rot = vector3(-74.0, 190.0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 4, -- Set the amount of alcohol the item should add after each drink.
        },
    },

    ["nogo_vodka"] = {-- Item spawn name
        Size = 700, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_vodka_bottle',
                BoneID = 18905,
                Offset = vector3(0.12, -0.28, 0.19),
                Rot = vector3(-120.0, .0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 3, -- Set the amount of alcohol the item should add after each drink.
        },
    },

    ["costa_del_perro"] = {-- Item spawn name
        Size = 500, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_wine_bot_01',
                BoneID = 18905,
                Offset = vector3(0.14, -0.32, 0.1),
                Rot = vector3(-74.0, 190.0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 2 -- Set the amount of alcohol the item should add after each drink.
        },
    },

    ["rockford_hill"] = {-- Item spawn name
        Size = 500, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_wine_bot_02',
                BoneID = 18905,
                Offset = vector3(0.14, -0.32, 0.1),
                Rot = vector3(-74.0, 190.0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 2 -- Set the amount of alcohol the item should add after each drink.
        },
    },

    
    ["vinewood_red"] = {-- Item spawn name
        Size = 500, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_wine_rose',
                BoneID = 18905,
                Offset = vector3(0.14, -0.32, 0.1),
                Rot = vector3(-74.0, 190.0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 2 -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ["vinewood_blanc"] = {-- Item spawn name
        Size = 500, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_wine_white',
                BoneID = 18905,
                Offset = vector3(0.14, -0.32, 0.1),
                Rot = vector3(-74.0, 190.0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 2 -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ["bleuterd"] = { -- Item spawn name
        Size = 700, -- 
        Type = 'DRINK', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = 'prop_champ_jer_01a',
                BoneID = 18905,
                Offset = vector3(0.14, -0.32, 0.1),
                Rot = vector3(-74.0, 190.0, 0.0),
            }
        },
        Anim = {
            Hold = nil,
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            }
        },
        Consume = {
            Bite = {min = 30, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
            Status = 40000, -- set how much food or drink you want to add 
            Stress = nil, -- How much stress do you want to remove after using the item if you don't want to use the stress system leave nil
            Alcohol = 2 -- Set the amount of alcohol the item should add after each drink.
        },
    },


    ---GLASSES


    ['whiskey_glass'] = {
        Size = 250,
        Type = 'GLASS', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = {full = 'prop_drink_whisky', null = 'prop_whiskey_01'}, -- Prop model null = prop of empty glass, full = prop of full glass
                BoneID = 28422, -- Id of the bone to which the prop is to be attached
                Offset = vector3(0.0, -0.01, -0.02),
                Rot = vector3(05.0, -10.0, 0.0),
            }
        },
        Anim = {
            Hold = {
                dict = "amb@code_human_wander_drinking@male@base",
                anim = "static",
                params = {8.0, -8, -1, 49, 0}
            },
            Use = {
                dict = "amb@code_human_wander_drinking@male@idle_a",
                anim = "idle_c",
                params = {nil, nil, 3000, 49}
            },
            Pour = { -- only for glasses 
                dict = "devcore_fox@pour",
                anim = "foxyando_pour_clip",
                params = {4.0, 4.0, 10000, 16, 0}
            }
        },
        Consume = { -- For glasses, there is no need to indicate alcohol, status, or stress because this information is taken from the beverage that is poured into the glass.
            Bite = {min = 30, max = 40}, -- Set how many ml or g are removed from the item after each drink / bite into food
        },
        AllowedItems = { -- Items that can be poured into the glass
            ['tequila'] = {label = 'Tequilya'},
            ['mount_whiskey'] = {label = 'Mount Whiskey'},
        },
    },

    ['flute_glass'] = {
        Size = 250,
        Type = 'GLASS', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = {full = 'prop_cs_champ_flute', null = 'prop_champ_flute'}, -- Prop model null = prop of empty glass, full = prop of full glass
                BoneID = 28422, -- Id of the bone to which the prop is to be attached
                Offset = vector3(0.06, 0.0, -0.18),
                Rot = vector3(05.0, -10.0, 0.0),
            }
        },
        Anim = {
            Hold = {
                dict = "amb@code_human_wander_drinking@male@base",
                anim = "static",
                params = {8.0, -8, -1, 49, 0}
            },
            Use = { 
                dict = "amb@code_human_wander_drinking@male@idle_a",
                anim = "idle_c",
                params = {nil, nil, 3000, 49}
            },
            Pour = { -- only for glasses 
                dict = "devcore_fox@pour",
                anim = "foxyando_pour_clip",
                params = {4.0, 4.0, 4000, 16, 0}
            }
        },
        Consume = { -- For glasses, there is no need to indicate alcohol, status, or stress because this information is taken from the beverage that is poured into the glass.
            Bite = {min = 25, max = 40}, -- Set how many ml or g are removed from the item after each drink / bite into food
        },
        AllowedItems = { -- Items that can be poured into the glass
            ['costa_del_perro'] = {label = 'Costa Del Perro'},
            ['vinewood_blanc'] = {label = 'Vinewood Sauvignon Blanc'},
            ['vinewood_red'] = {label = 'Vinewood Red Zinfadel'},
            ['rockford_hill'] = {label = 'Rockford Hill Reserve'},
            ['bleuterd'] = {label = 'Bleuterd Champagne'},
        },
    },

    ['wine_glass'] = {
        Size = 250, -- 
        Type = 'GLASS', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = {full = 'prop_drink_redwine', null = 'prop_sh_wine_glass'}, -- -- Prop model null = prop of empty glass, full = prop of full glass
                BoneID = 28422, -- Id of the bone to which the prop is to be attached
                Offset = vector3(0.01, 0.01, -0.1),
                Rot = vector3(05.0, -10.0, 0.0),
            }
        },
        Anim = {
            Hold = {
                dict = "amb@code_human_wander_drinking@male@base",
                anim = "static",
                params = {8.0, -8, -1, 49, 0}
            },
            Use = {
                dict = "amb@code_human_wander_drinking@male@idle_a",
                anim = "idle_c",
                params = {nil, nil, 3000, 49}
            },
            Pour = { -- only for glasses 
                dict = "devcore_fox@pour",
                anim = "foxyando_pour_clip",
                params = {4.0, 4.0, 4000, 16, 0}
            },
        },
        Consume = { -- For glasses, there is no need to indicate alcohol, status, or stress because this information is taken from the beverage that is poured into the glass.
            Bite = {min = 30, max = 40}, -- Set how many ml or g are removed from the item after each drink / bite into food
        },
        AllowedItems = { -- Items that can be poured into the glass
            ['costa_del_perro'] = {label = 'Costa Del Perro'},
            ['vinewood_blanc'] = {label = 'Vinewood Sauvignon Blanc'},
            ['vinewood_red'] = {label = 'Vinewood Red Zinfadel'},
            ['rockford_hill'] = {label = 'Rockford Hill Reserve'},
        },
    },

    ['shot_glass'] = {
        Size = 50,
        Type = 'GLASS', -- Item type 'DRINK' , 'FOOD' , 'GLASS'
        Prop = { -- Prop spawn data for idle & usage.
            Main = {
                Model = {full = 'p_cs_shot_glass_2_s', null = 'prop_sh_shot_glass'}, -- -- Prop model null = prop of empty glass, full = prop of full glass
                BoneID = 18905, -- Id of the bone to which the prop is to be attached
                Offset = vector3(0.11, 0.01, 0.03),
                Rot = vector3(-101.0, -91.0, 11.0),
            }
        },
        Anim = {
            Hold = {
                dict = "anim@heists@humane_labs@finale@keycards",
                anim = "ped_a_enter_loop",
                params = {8.0, -8, -1, 49, 0}
            },
            Use = {
                dict = "mp_player_intdrink",
                anim = "loop_bottle",
                params = {nil, nil, 2000, 49}
            },
            Pour = { -- only for glasses 
                dict = "devcore_fox@pour",
                anim = "foxyando_pour_clip",
                params = {4.0, 4.0, 4000, 16, 0}
            }
        },
        Consume = { -- For glasses, there is no need to indicate alcohol, status, or stress because this information is taken from the beverage that is poured into the glass.
            Bite = {min = 50, max = 50}, -- Set how many ml or g are removed from the item after each drink / bite into food
        },
        AllowedItems = { -- Items that can be poured into the glass
            ['nogo_vodka'] = {label = 'Nogo Vodka'},
            ['tequila'] = {label = 'Tequilya'},
            ['mount_whiskey'] = {label = 'Mount Whiskey'},
        },
    },
    
}
```

{% endtab %}
{% endtabs %}


# MILEAGE METER

V 2.0

**The script uses the escrow system**

The script will enrich your roleplay server for a better experience when selling vehicles, as vehicle prices may vary due to mileage

<img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Version 2.0 has completely new code from the previous version.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Mileage only counts for vehicles that someone owns.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">The more kilometers the vehicle has, the lower the power and the dirtier the vehicle, this function can be switched off.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">If the vehicle has twist mileage, the dirtiness of the vehicle and the wear of the engine depend on the actual mileage which can only be found by decrypting the twist mileage.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">The appearance of the 2d menu can be customized in the configuration.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Mileage can also be displayed using notifications.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">0 ms when inactive.\ <img src="https://forum.cfx.re/images/emoji/twitter/small_blue_diamond.png?v=12" alt=":small_blue_diamond:" data-size="line">Extensive Configuration.

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

{% tabs %}
{% tab title="ESX" %}

```
1. After purchasing the script, the script can be downloaded here https://keymaster.fivem.net/assets

2. Upload the contents of the zip file to your server

3. ensure devcore_mileagemeter in server.cfg after your Framework and after oxmysql

4. Upload the mileagemeter.sql file to the database.

5. Now create items depending on the inventory.

 Here are the items to put into ox_inventory/data/items.lua


	['twist_mil'] = {
		label = 'USB-twist mileage',
		stack = true,
		close = true,
		description = "For to reduce vehicle mileage"
	},

	['mil_decrypter'] = {
		label = 'USB-decryped mileage',
		stack = true,
		close = true,
		description = "For to decode the reduction in mileage"
	},

If you use another inventory, use its method to add items.

6. Restart the server
```

{% endtab %}
{% endtabs %}


# Config

{% tabs %}
{% tab title="Config" %}

```lua
Config = {}

-- ESX --
Config.EsxExport = function()
    return exports['es_extended']:getSharedObject()
end

--Version : 2.0

Config.TwistMileageItem = 'twist_mil'
Config.DecrypterItem = 'mil_decrypter'

Config.Settings = {
    FireEngine = true, -- true, if you want the vehicle to catch fire when you unsuccessfully try to decrypt or reduce the mileage.
    AutomaticShowMenu = true, -- true if you want the mileage to be displayed whenever you sit in the owner's vehicle as a 2d menu / false if you want to display the mileage using the button
    VehicleWear = true, --True = if you want the vehicle's performance to decrease, if the vehicle has traveled many miles, the first power reduction is to 100 miles, then to 150 miles, and then every 100 miles.
    DirtyVehicle = true, -- True = as the performance of a vehicle with a large mileage decreases, the vehicle will also become more and more dirty
        MiniGame = {
            Difficulty = 'medium', -- easy / medium / hard
            areaSize = 50, -- size of the area in degrees.
            speedMultiplier = 2,
            Buttons = {'a', 'd', 's'}
        }
}

Config.Buttons = {  -- https://docs.fivem.net/docs/game-references/controls/
    Show = 208,
}

-- MENU CUSTOMIZE --
Config.Menu = {
    ['MAIN'] = {
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.95, y = 0.90},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
}

Config.Notify = function(style, msg)

    ESX.ShowNotification(msg, 2000, style)
    
end

------------------------
--If you don't understand much, you don't have to edit it, or you can ask in the support ticket on the discord.
function WearVehicle(vehicle, mileage)  --Vehicle wear adjustment 
        if mileage >= 600 then --600 is the mileage
           if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.1) -- this is a performance reduction of 0.1 is the lowest and 1.0 is the default
           end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 15.0) -- this is dirt on the vehicle if the vehicle has driven more than 600 miles
        end
        elseif mileage >= 500 then
            if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.3)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 15.0)
        end
        elseif mileage >= 400 then
            if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.4)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 15.0)
        end
        elseif mileage >= 300 then
            if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.5)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 14.0)
        end
        elseif mileage >= 200 then
            if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.6)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 12.0)
        end
        elseif mileage >= 150 then
            if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.8)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 7.0)
        end
        elseif mileage >= 100 then
            if Config.Settings.VehicleWear  then
            SetVehicleCheatPowerIncrease(vehicle, 0.9)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 5.0)
        end
        elseif mileage >= 50 then
            if Config.Settings.VehicleWear then
            SetVehicleCheatPowerIncrease(vehicle, 1.0)
            end
            if Config.Settings.VehiclePollution then
            SetVehicleDirtLevel(vehicle, 1.0)
        end
    end
end

--TEXT --
Translations = {
    ['TEXT'] = { 
        ['error_twist'] = 'Failed to twist mileage',
        ['error_decrypted'] = 'Failed to decrypt mileage',
        ['success_twist'] = 'We managed to twist the mileage on ',
        ['success_decrypted'] = 'Success to decrypt a twisted mileage.',
        ['never_reduced'] = 'The mileage of the vehicle has never been reduced.',
        ['no_owned'] = 'The vehicle has no owner',
        ['already'] = 'Youre not in the vehicle.',
        ['state_mileage'] = ' mil',
    },
}
```

{% endtab %}
{% endtabs %}


# WATER-GUN

V 2.5

**The script uses the escrow system**

:small\_blue\_diamond:Brand new code compared to v1.

:small\_blue\_diamond:Need to fill the water gun tank with water, the maximum amount of water in the tank can be changed in the configuration.

:small\_blue\_diamond:The water gun also needs to be pumped up to give it a longer hit range.

:small\_blue\_diamond:The player has wet clothes after the hit.

:small\_blue\_diamond:Synchronized water effects.

:small\_blue\_diamond:Custom water gun prop.

:small\_blue\_diamond:Script is optimized.

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

{% tabs %}
{% tab title="README" %}

```
WATER GUN v 2.6 script from https://store.devcore.cz/
If you have a problem with the script, contact our support Discord: https://discord.gg/zcG9KQj3sa


The script uses the escrow system

How to install the script


1. After purchasing the script, the script can be downloaded here https://keymaster.fivem.net/assets

2. Upload the contents of the zip file to your server

3. ensure devcore_watergun in server.cfg after es_extended or qb-core or qbx-core

4. Now create items depending on the inventory.

If you are using ox_inventory 
paste this into the file ox_inventory/data/items.lua,

		['watergun'] = {
		label = 'Water Gun',
                weight = 500,
		stack = false,
		close = true,
		client = {
			export = 'devcore_watergun.useWaterGun'
		}
	},

----
If you are using qs-inventory or qb-inventory
paste this into the file qb-core/shared/items.lua,
	
["watergun"] = {["name"] = "watergun", ["label"] = "Water  Gun", ["weight"] = 500, ["type"] = "item", ["image"] = "watergun.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = ""},
----
If you use another inventory, you use its method to add the item.

5. restart server

Make sure your server artifacts version is above the 5181.

Exports ----

Client Side Export for start watergun 
item is item name from Config.WaterGuns 

exports['devcore_watergun']:useWaterGun(item)
```

{% endtab %}
{% endtabs %}


# Config

{% tabs %}
{% tab title="Config" %}

```lua
Config = {}

-- ESX / QB / QBX EXPORTS
Config.FrameworkExport = function()
    if fwType == 'esx' then
    return exports['es_extended']:getSharedObject()
    elseif fwType == 'qbcore' then
        return exports['qb-core']:GetCoreObject()
    elseif fwType == 'qbx' then
     return exports['qbx-core']:GetCoreObject()
    end
end

Config.ShowOnlyInfoMenu = false

------ BUTTONS ------
Config.Buttons = {
    Splash = 24,
    Reload = 80,
    Pump = 38,
    Hide = 73,
}

------------- MENU -------------
Config.Menu = {
    ['MAIN'] = {
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.50, y = 0.90},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
    ['PUMP'] = {
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.94, y = 0.94},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
    ['TANK'] = {
        TextFont = 4,
        TextColor = {255, 255, 255},
        Scale = 0.4,
        Position = {x = 0.94, y = 0.90},
        Background = {
            enable = true,
            color = { r = 35, g = 35, b = 35, alpha = 200 },
        },
    },
}

------ NOTIFY ------
Config.Notify = function(message, type)
    if fwType == 'esx' then

         core.ShowNotification(message, 2000, type) -- Default ESX Notify

    elseif fwType == 'qbcore' then

         core.Functions.Notify(message, type) -- Default QB Notify

    end
end

------ WATER GUN ITEMS ------
Config.WaterGuns = {
    ['watergun'] = {
        max_size = 100,
        pumping = {min = 20, max = 30},
        reloding = {min = 25, max = 35},
        remove_pumping = {min = 2, max = 3},
        remove_water = {min = 1, max = 2},
        Anims = {
            Reload = {
                dict = 'anim@mp_snowball',
                anim = 'pickup_snowball',
                time = 1500,
            },
            Pump = {
                dict = 'missmic4',
                anim = 'michael_tux_fidget',
                time = 1500,
            }
        },
            Prop = {
                Model = 'watergun',
                BoneID = 18905,
                Offset = vector3(0.12, 0.06, -0.01),
                Rot = vector3(-114.0, -4.0, 1.0),
        },
    },
}

Translations = {
    ['MENU'] = {
        ['WATERGUN'] = '~g~[M1]~w~ USE ~g~[R]~w~ RELOAD ~g~[E]~w~ PUMP ~g~[X]~w~ HIDE',
        ['PUMP'] = 'Pump: ~o~',
        ['TANK'] = 'Tank: ~b~',
    },
    ['TEXT'] = {
        ['go_to_close_water'] = 'You have to be in the water to fill up',
        ['empty_tank'] = 'The water tank is empty. Go to the water and fill it up.',
        ['full_tank'] = 'The water tank is full.',
    }
}

```

{% endtab %}
{% endtabs %}


# Exports

```lua

Client Side Export for start watergun 

item is item name from Config.WaterGuns 

exports['devcore_watergun']:useWaterGun(item)
```


# MULTIJOB

V 1.0

:small\_blue\_diamond:Compatible with ESX/QB/QBX

:small\_blue\_diamond:Fully configurable system for jobs, UI, notifications and translations

:small\_blue\_diamond:Support for up to 3 simultaneous jobs with automatic rotation

:small\_blue\_diamond:Admin commands for job management and player monitoring

:small\_blue\_diamond:Modern responsive UI with smooth animations

:small\_blue\_diamond:Optimized performance with minimal resource impact

:small\_blue\_diamond:Multiple notification system support (ox\_lib, ESX, custom)

:small\_blue\_diamond:Configurable sound effects and keybinds

:small\_blue\_diamond:Complete localization support

:small\_blue\_diamond:Maintains job grades when switching

:small\_blue\_diamond:MySQL async operations for better performance

:small\_blue\_diamond:Debug mode and export functions for integration

:small\_blue\_diamond:Fully customizable UI appearance

:small\_blue\_diamond:Automatic job saving and conflict prevention

:small\_blue\_diamond:Persistence storage with reliable database handling

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

{% tabs %}
{% tab title="ESX" %}

```
DEVCORE MULTIJOB HOW TO INSTALLATION

documentation: https://docs.devcore.cz/

1. After purchasing the script on the store https://store.devcore.cz/, the script can be downloaded here https://keymaster.fivem.net/assets

2. Upload the contents of the zip file to your server.

3. ensure devcore_multijob in server.cfg after your framework and db.

5. Insert your database query from insert.sql into your database

6. Edit the config as you wish and enjoy your new script.

[i] The script takes the names of jobs and job positions from your job database.
```

{% endtab %}
{% endtabs %}


# Config

{% tabs %}
{% tab title="ESX" %}

```lua
Config = {}

-- ============================================= --
--                   BASIC                       --
-- ============================================= --

-- Maximum number of jobs a player can have
Config.MaxJobs = 3

-- Shortcut to open the menu (e.g., 'F6', 'F7', etc.)
Config.OpenMenuKey = 'F6'

-- Command to open the menu
Config.MenuCommand = 'jobs'

-- ============================================= --
--                  NOTIFICATIONS                --
-- ============================================= --

Config.Notifications = {
    -- Notification type: 'ox_lib', 'esx', 'custom'
    Type = 'ox_lib',
    
    -- Notification title (only for ox_lib)
    Title = 'Job Manager',
    
    -- Notification display duration in ms
    Duration = 5000
}

-- ============================================= --
--                  TRANSLATIONS                 --
-- ============================================= --

Config.Translations = {
    -- UI Texts
    ['ui_title'] = 'MY JOBS',
    ['ui_count'] = '/3',
    ['btn_switch'] = 'SWITCH',
    ['btn_remove'] = 'REMOVE',
    
    -- Notifications
    ['job_switched'] = 'Job successfully switched',
    ['job_removed'] = 'Job successfully removed',
    ['job_left'] = 'Job successfully left',
    ['job_full'] = 'You don’t have a free slot for another job',
    ['job_replaced'] = 'Your oldest removable job has been replaced with the current job.',
    ['job_not_found'] = 'You don’t have this job saved',
    ['job_not_removable'] = 'This job cannot be removed',
    ['job_not_active'] = 'This is not your active job',
    ['job_cannot_leave'] = 'You cannot leave the unemployed status',
    ['job_cannot_remove'] = 'The unemployed status cannot be removed',
    ['job_cannot_remove_active'] = 'The active job cannot be removed',
    ['player_not_found'] = 'Player not found',
    ['player_full_no_removable'] = 'Player %s has no free slot for another job and no removable job.',
    ['player_full_will_replace'] = 'Player %s has full slots, but the oldest removable job will be replaced.',
    ['job_data_not_found'] = 'Job data not found',
    ['cannot_add_job'] = 'Cannot add the current job, you have no free slot or removable job.',
    ['cannot_save_job'] = 'Your current job will not be saved, you have no free slot or removable job.',
    ['invalid_data'] = 'Invalid data',
    ['job_replaced_with_current'] = 'Your oldest removable job has been replaced with the current job.',
    ['previous_job_replaced'] = 'Your previous job has been replaced with a new job.',
    ['oldest_job_replaced'] = 'The oldest removable job has been replaced with a new job.',
    ['cannot_add_no_space'] = 'Cannot add a new job, you have no free slot and no removable job.',
    ['job_replaced_previous'] = 'Your oldest removable job has been replaced with the previous job.',
    ['previous_job_not_saved'] = 'The previous job was not saved, you have no free slot or removable job.',
    
    -- Job descriptions
    ['unemployed'] = 'Unemployed',
    ['grade_unknown'] = 'Unknown',
    
    -- Info messages
    ['keybind_description'] = '(~HUD_COLOUR_RADAR_ARMOUR~Job~w~) - Open Multijob',
    
    -- Debugs
    ['debug_job_name'] = 'Debug - jobName: %s %s',
    ['debug_current_job'] = 'Debug - currentJob: %s %s',
    ['debug_leave_attempt'] = 'Player [%s] is attempting to leave job [%s]',
    ['debug_job_deleted'] = 'Job [%s] was successfully deleted for player [%s]',
    ['debug_job_not_found'] = 'Job [%s] was not found in the database for player [%s]',
}

-- ============================================= --
--                    SOUNDS                     --
-- ============================================= --

Config.Sounds = {
    -- List of sounds with their settings
    ['menu_open'] = {
        sound = "SELECT",
        set = "HUD_FRONTEND_DEFAULT_SOUNDSET"
    },
    ['menu_close'] = {
        sound = "BACK",
        set = "HUD_FRONTEND_DEFAULT_SOUNDSET"
    },
    ['job_switched'] = {
        sound = "MEDAL_UP",
        set = "HUD_MINI_GAME_SOUNDSET"
    },
    ['job_removed'] = {
        sound = "RACE_PLACED",
        set = "HUD_AWARDS"
    },
    ['error'] = {
        sound = "ERROR",
        set = "HUD_FRONTEND_DEFAULT_SOUNDSET"
    },
    ['click'] = {
        sound = "SELECT",
        set = "HUD_FRONTEND_DEFAULT_SOUNDSET"
    }
}

-- ============================================= --
--                  DEBUG MODE                   --
-- ============================================= --

Config.Debug = false

-- ============================================= --
--              UI CUSTOMIZATION                --
-- ============================================= --

Config.UI = {
    -- Menu position (in percentages)
    Position = {
        X = 50,  -- 50% from the left
        Y = 50   -- 50% from the top
    },
    
    -- Colors (RGB format)
    Colors = {
        MainColor = {61, 74, 237}  -- Default blue color
    },
    
    -- Sizes and dimensions
    Sizes = {
        MenuWidth = 400,
        MaxListHeight = 500,
        ItemPadding = 15,
        ButtonPadding = 6,
        ButtonBorderRadius = 5
    },
    
    -- Animations
    Animations = {
        FadeInDuration = 300,
        FadeOutDuration = 500,
        NotificationDuration = 3000
    }
}
```

{% endtab %}
{% endtabs %}


# NPC DRUG SALES

V 2.0

SOON


# TAG SYSTEM

V 1.0

**The script uses the escrow system**

**Features**

:small\_blue\_diamond:Compatible with ESX/QB/QBX/STANDALONE.

:small\_blue\_diamond:Sync with other players.

:small\_blue\_diamond:For ESX using group system (xPlayer.getGroup()) or with exports

:small\_blue\_diamond:For QBCore/QBX/Standalone using ACE permissions in server.cfg or with exports

:small\_blue\_diamond:Displaying ui in 3d space :small\_blue\_diamond:Optimized performance

### Server artifacts

Make sure your server artifacts version is above the **5181**.


# Installation

`TAGS SYSTEM script from https://store.devcore.cz/ Store Discord: https://discord.gg/zcG9KQj3sa`

`The script uses the escrow system`

`How to install the script`

1. `ensure devcore_tags in server.cfg after your framework`
2. `Setup configuration`
3. `Enjoy the Script`

`-- Permissions setup For ESX using group system (xPlayer.getGroup()) or with exports For QBCore/QBX/Standalone using ACE permissions in server.cfg or with exports`

`SERVER SIDE Exports -`

`--Active/Deactive Tags with permissions check exports['devcore_tags']:TagActiveWithCheck(source)`

`--Active/Deactive Tags without premissions check if you have own check local group = 'admin' exports['devcore_tags']:TagActiveWithoutCheck(source, group)`

`--Deactive Tags for deactivation it is possible to recall previous exports again exports['devcore_tags']:TagDeactive(source)`


# Config

```lua
Config = {}

-- Framework autodetect
core = nil -- DONT TOUCH
fwType = 'standalone' -- DONT TOUCH

if GetResourceState("es_extended") == "started" then
    core = exports['es_extended']:getSharedObject()
    fwType = "esx"
elseif GetResourceState("qb-core") == "started" then
    core = exports['qb-core']:GetCoreObject()
    fwType = "qbcore"
elseif GetResourceState("qbx-core") == "started" then
    core = exports['qbx-core']:GetCoreObject()
    fwType = "qbx"
end

-- NOTIFY FUNCTION --
Config.Notify = function(message, type)
    if fwType == 'esx' then
        
        -- For your notify remove ESX.ShowNotification(message, 2000, type) and put your export or trigger 
        core.ShowNotification(message, 2000, type) -- Default ESX Notify

    elseif fwType == 'qbcore' or fwType == 'qbx' then

        -- For your notify remove QBCore.Functions.Notify(message, type) and put your export or trigger 
        core.Functions.Notify(message, type) -- Default QB/QBX Notify

    elseif fwType == 'standalone' then
            -- HERE PUT YOUR NOTIFY EXPORT

    end
end

Config.EnableCommand = true
Config.TagCommand = 'tag'


--Permissions--
--For ESX using group system (xPlayer.getGroup()) or with exports
--For QBCore/QBX/Standalone using ACE permissions in server.cfg or with exports
Config.TagsList= {
     ['admin'] = { -- Permission name or group name
        TagLabel = 'ADMIN',
        ShowName = true,
        BackgroundColor = 'linear-gradient(to right, rgba(194, 117, 69, 0.8), rgba(200, 84, 12, 0.8))',
        Offset = 1.0,
     },
     ['developer'] = { -- Permission name or group name
        TagLabel = 'DEVELOPER',
        ShowName = true,
        BackgroundColor = 'linear-gradient(to right, rgba(47,103,66,0.8), rgba(92,179,125,0.8))',
        Offset = 1.0,
     },
     ['moderator'] = { -- Permission name or group name
        TagLabel = 'MODERATOR',
        ShowName = true,
        BackgroundColor = 'linear-gradient(to right, rgba(55,112,169,0.8), rgba(121,184,250,0.8)',
        Offset = 1.0,
     },
     ['owner'] = { -- Permission name or group name
        TagLabel = 'OWNER',
        ShowName = true,
        BackgroundColor = 'linear-gradient(to right, rgba(255, 184, 0, 0.8), rgba(255, 255, 0, 0.8))',
        Offset = 1.0,
     }
 -- ['example'] = { -- Permission name or group name
 --     TagLabel = 'Example',
 --     ShowName = true,
 --     BackgroundColor = 'linear-gradient(to right, rgba(194, 117, 69, 0.8), rgba(200, 84, 12, 0.8))',
 --     Offset = 1.0,
 --  }
}

Translation = {
     ['tag_no_permissions'] = 'You are not authorised to use the Tag',
     ['tag_deactivated'] = 'Tag has been deactivated',
     ['tag_activated'] = 'Tag has been activated'
}
```


# Exports

```
SERVER SIDE Exports -
--Active/Deactive Tags with permissions check 
exports['devcore_tags']:TagActiveWithCheck(source)

--Active/Deactive Tags without premissions check if you have own check 
local group = 'admin' 
exports['devcore_tags']:TagActiveWithoutCheck(source, group)

--Deactive Tags for deactivation it is possible to recall previous exports again 
exports['devcore_tags']:TagDeactive(source)
```


