Config

Config = {} -- You can place webhook link for logs in server/main_editable.lua

Config.Framework = 'esx' -- 'esx' | 'qb'
Config.NotificationType = 'esx' -- 'esx' | 'qb' | 'ox' | 'mythic'
Config.Locale = 'en' -- 'en' | 'fi'
Config.ImagePath = 'nui://ox_inventory/web/images' -- path for images used in UI (for QB: nui://qb-inventory/html/images) (for ox_inventory: nui://ox_inventory/web/images)
Config.DebugMode = false -- false | true

Config.Inventory = 'default' -- 'default' | 'ox' | 'qs' | 'qb_old' | 'qb_new'
Config.Target = 'none' -- 'none' | 'ox' | 'qb'
Config.Dispatch = 'none' -- 'none' | 'tk' | 'cd'
Config.Clothing = 'illenium' -- 'illenium' | 'qb'
Config.Bossmenu = 'tk' -- 'tk' | 'esx' | 'qb'
Config.Billing = 'esx' -- 'esx' | 'qb' | 'okok'
Config.UseOxLib = false -- false | true, remember to add ' shared_script '@ox_lib/init.lua' ' to fxmanifest.lua if set to true
Config.UseTKEvidence = false -- false | true

Config.InteractionType = 'menu' --  'menu' | 'target' | 'both'
Config.UseMouseForMenu = false -- true | false, if true you use mouse to navigate menu, if false you use arrow keys. Only used if Config.InteractionType is set to 'menu' and Config.UseOxLib is set to false

Config.Skeletal = 'menu' -- 'menu' | 'cam' | 'both', the type of skeletal menu to use

Config.UISettings = {
    color = 'red', -- https://v6.mantine.dev/theming/colors/
    shade = 6, -- 1-9
}

Config.Controls = {
    interact = 38, -- E
    remove = 246, -- Y
    dropStretcher = 47, -- G
    distressSignal = 47, -- G
    respawn = 38, -- E
}

Config.Keybinds = { -- https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
    jobMenu = 'F6',
    --drag = 'F7',
    skeletal = 'F9',
}

Config.Anims = {
    place = {
        dict = 'weapons@first_person@aim_rng@generic@projectile@sticky_bomb@',
        name = 'plant_floor',
        duration = 1000,
    },
    remove = {
        dict = 'weapons@first_person@aim_rng@generic@projectile@sticky_bomb@',
        name = 'plant_floor',
        duration = 1000,
    },
}

Config.Actions = {
    {
        name = 'player',
        actions = {
            'viewSkeletal',
            'putInVehicle',
            'drag',
            'sendBill',
            -- add custom actions like this:
            --[[ {
                title = 'Lockup',
                icon = 'fas fa-lock',
                canInteract = function()
                    if Config.ShowActionsAlways then
                        return true
                    end

                    local closestPlayer = Utils.GetClosestPlayer()
                    return closestPlayer and closestPlayer ~= -1
                end,
                onSelect = function()
                    local closestPlayer = Utils.GetClosestPlayer()
                    local targetId = GetPlayerServerId(closestPlayer)

                    local input = OpenDialog('Lock Up', {'Time'})
                    if not input or not input[1] then return end

                    local time = tonumber(input[1])
                    if not time or time <= 0 then
                        return
                    end

                    exports.tk_jail:jail(targetId, time, 'lockup')
                end
            }, ]]
        },
    },
    {
        name = 'vehicle',
        actions = {
            'takeOutFromVehicle',
        },
    },
}
Config.ShowActionsAlways = true

Config.Bills = { -- you can add more here if you want to use the built in billing system, these are just some examples
    {
        categoryLabel = 'Medical Services',
        bills = {
            {name = 'Basic Treatment Fee', amount = 1000},
            {name = 'Ambulance Transport', amount = 1000},
            {name = 'Medication Administration', amount = 1000},
            {name = 'On-Scene Medical Assessment', amount = 1000},
        },
    },
    {
        categoryLabel = 'Medical Procedures',
        bills = {
            {name = 'Minor Procedure / Treatment', amount = 1000},
        },
    },
}
Config.AllowCustomBills = true -- true | false, if true, players can create custom bills where they can set the amount and reason themselves

Config.Objects = { -- different objects can be placed down, you can also add a storage (persistent storage only works with ox_inventory)
    {item = 'med_bag', model = `xm_prop_x17_bag_med_01a`, storage = {label = _U('med_bag'), slots = 10, weight = 10000}},
}

Config.DistressSignal = {
    enable = true,
    cooldown = 60, -- in seconds
    blip = {
        color = 1, -- https://docs.fivem.net/docs/game-references/blips/ (Scroll to the bottom)
        scale = 1.0, -- This needs to be a float (eg. 1.0, 1.2, 2.0)
        sprite = 303, -- https://docs.fivem.net/docs/game-references/blips/
        playSound = true -- Should there be a sound for the when the blip shows up (true / false)
    }
}

Config.Blips = { -- blips used for tracker
    default = {
        sprite = 1,
        scale = 0.5,
        color = 1,
        display = 4,
        category = 2,
        shortRange = true,
        cone = true,
        indicator = false
    },
    dead = {
        enable = true,
        sprite = 303,
        scale = 0.7,
        color = 1,
        display = 4,
        category = 2,
        shortRange = true,
        cone = false,
        indicator = false
    },
    car = {
        enable = true,
        sprite = 227,
        scale = 1.0,
        color = 1,
        display = 4,
        category = 2,
        shortRange = true,
        cone = false,
        indicator = false,
        sirenFlashing = true,
        flashInterval = 250
    },
    heli = {
        enable = true,
        sprite = 43,
        scale = 1.0,
        color = 1,
        display = 4,
        category = 2,
        shortRange = true,
        cone = false,
        indicator = false
    },
    boat = {
        enable = true,
        sprite = 427,
        scale = 1.0,
        color = 1,
        display = 4,
        category = 2,
        shortRange = true,
        cone = false,
        indicator = false
    }
}

Config.Beds = {
    {
        model = `v_med_bed1`, -- bed model
        maxEMSCount = 2, -- max amount of EMS that can be online for this bed model to work (if there are more than this, the medic will stop working)
        heal = {
            treat = {'shot', 'stab', 'bruise', 'fracture', 'sprain', 'burn', 'crush', 'bite', 'fall', 'vehicle_impact', 'explosion', 'electrical', 'other'}, -- injuries that the bed will treat
            health = 100, -- how much player health will be healed by the bed
            removesBullets = true, -- if true, all bullets will be removed from the player
            revive = true, -- if true, the player will be revived by the bed
            anim = {
                duration = 60000,
                dict = 'mini@cpr@char_b@cpr_def',
                name = 'cpr_pumpchest_idle',
                flag = 1,
            },
        }
    }
}

Config.Respawn = {
    items = {
        remove = true, -- remove items from player inventory when respawning
        blacklist = {}, -- items that will not be removed
        --whitelist = {}, -- if set, only these items will be removed
    },
    locations = { -- player will always be teleported to nearest location
        {coords = vec4(314.58, -584.04, 43.6, 339.90), useWakeUpAnim = true}, -- useWakeUpAnim: if true, the player will wake up using the wake up animation
    },
    cost = 500, -- cost of respawning
}

Config.Hospitals = {
    {
        blip = {
            label = 'Hospital',
            coords = vector3(299.25, -584.79, 43.26),
            sprite = 61,
            color = 1,
            scale = 0.8,
            display = 4,
            shortRange = true,
        },
        jobs = {
            ambulance = 0,
            ems = 0,
        },
        medics = {
            {
                coords = vec4(311.58, -594.11, 43.28, 340.97),
                distance = 2.0,
                ped = `s_m_m_doctor_01`,
                scenario = 'WORLD_HUMAN_CLIPBOARD',
                healDuration = 10000,
                price = 500,
                maxEMSCount = 2, -- max amount of EMS workers that can be online for this medic to work (if there are more than this, the medic will stop working)
            },
        },
        shops = {
            {
                coords = vec4(312.34, -597.32, 43.28, 73.68),
                distance = 2.0,
                ped = `s_m_m_scientist_01`,
                scenario = 'WORLD_HUMAN_HANG_OUT_STREET',
                --[[ marker = { -- you can add marker for any location like this (so also works for storages, wardrobes, etc)
                    type = 1,
                    scale = vec3(1.0, 1.0, 1.0),
                    color = {r = 0, g = 255, b = 0, a = 100},
                    bob = false,
                    faceCamera = true,
                }, ]]
                items = {
                    {name = 'bandage', price = 10, amount = 1},
                    {name = 'ifak', price = 30, amount = 1},
                    {name = 'tourniquet', price = 15, amount = 1},
                    {name = 'gauze', price = 15, amount = 1},
                    {name = 'burn_gel', price = 15, amount = 1},
                    {name = 'surgical_kit', price = 50, amount = 1},
                    {name = 'saline_bag', price = 100, amount = 1},
                    {name = 'leg_brace', price = 20, amount = 1},
                    {name = 'arm_brace', price = 20, amount = 1},
                    {name = 'body_brace', price = 20, amount = 1},
                    {name = 'neck_brace', price = 20, amount = 1},
                    {name = 'ice_pack', price = 10, amount = 1},
                    {name = 'painkillers', price = 50, amount = 1},
                    {name = 'defibrillator', price = 100, amount = 1},
                    {name = 'adrenaline_syringe', price = 50, amount = 1},
                    {name = 'wheelchair', price = 250, amount = 1},
                    {name = 'walking_stick', price = 150, amount = 1},
                    {name = 'med_bag', price = 150, amount = 1},
                    {name = 'body_bag', price = 200, amount = 1},
                },
            },
        },
        storages = { -- public: everyone has same storage, personal: every player has their own storage, locker: player can choose the locker id (and lockers are public)
            {coords = vec3(306.77, -602.17, 43.57), distance = 2.0, type = 'public', weight = 1000000, slots = 100},
            {coords = vec3(308.61, -562.43, 43.52), distance = 2.0, type = 'public', weight = 1000000, slots = 100},
            {coords = vec3(298.20, -598.37, 43.68), distance = 2.0, type = 'personal', weight = 1000000, slots = 100},
            {coords = vec3(303.89, -569.28, 43.50), distance = 2.0, type = 'locker', weight = 1000000, slots = 100},
        },
        wardrobes = {
            {coords = vec3(302.24, -599.36, 43.55), distance = 2.0},
        },
        bossmenus = {
            {coords = vec3(335.32, -594.37, 43.29), distance = 2.0},
        },
        toggleDuty = {
            {coords = vec3(307.41, -595.17, 43.18), distance = 2.0},
        },
        mechanics = {
            {
                coords = vec4(345.40, -556.78, 28.74, 63.60),
                distance = 4.0,
                features = {
                    repair = true,
                    wash = true,
                    colors = {
                        primary = true,
                        secondary = true
                    },
                    extras = true,
                    liveries = true,
                    performance = {
                        engine = true,
                        brakes = true,
                        turbo = true,
                        transmission = true,
                        armor = true,
                        suspension = true
                    }
                },
                ped = `s_m_m_dockwork_01`,
                scenario = 'WORLD_HUMAN_COP_IDLES',
            }
        },
        vehicleMenus = {
            { -- Heli
                locations = {
                    {
                        take = {
                            {coords = vec4(340.63, -581.64, 74.16, 246.73), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(351.64, -588.46, 74.16, 250.11), distance = 2.0},
                        },
                        --[[ blip = {
                            label = 'EMS Garage',
                            coords = vec3(463.36, -985.34, 43.69),
                            sprite = 50,
                            color = 3,
                            scale = 0.8,
                        } ]]
                    },
                },
                returnLocations = {
                    {coords = vec3(351.64, -588.46, 74.16), distance = 2.0},
                },
                vehicleCategories = {
                    {
                        category = 'Helicopter',
                        vehicles = {
                            {label = 'Maverick', model = 'polmav', price = 0, livery = 1},
                        },
                    },
                },
            },
            --[[ { -- Boat
                locations = {
                    {
                        take = {
                            {coords = vec3(-778.6799, -1437.2778, 0.5953), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(-783.6753, -1432.3116, 0.3526, 55.4069), distance = 2.0},
                        },
                    },
                    {
                        take = {
                            {coords = vec3(2826.5039, -670.2258, 0.4134), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(2854.2952, -667.8505, 0.5903, 282.3907), distance = 2.0},
                        }
                    },
                    {
                        take = {
                            {coords = vec3(85.9970, -2258.3513, 5.0806), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(82.3357, -2267.1614, 0.4062, 182.6948), distance = 2.0},
                        }
                    },
                    {
                        take = {
                            {coords = vec3(3858.5674, 4459.5347, 0.8349), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(3860.0947, 4453.5415, 0.3257, 246.5833), distance = 2.0},
                        }
                    },
                    {
                        take = {
                            {coords = vec3(-1611.3589, 5262.6030, 2.9741), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(-1600.9111, 5261.2876, 0.6112, 27.9818), distance = 2.0},
                        }
                    },
                    {
                        take = {
                            {coords = vec3(-1802.9984, -1231.3341, 0.6072), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(-1798.9021, -1235.8271, 0.5562, 215.9090), distance = 2.0},
                        }
                    }
                }, ]]
                --[[ returnLocations = {
                    {coords = vec3(-783.6753, -1432.3116, 0.3526), distance = 2.0},
                    {coords = vec3(2854.2952, -667.8505, 0.5903), distance = 2.0},
                    {coords = vec3(82.3357, -2267.1614, 0.4062), distance = 2.0},
                    {coords = vec3(3860.0947, 4453.5415, 0.3257), distance = 2.0},
                    {coords = vec3(-1600.9111, 5261.2876, 0.6112), distance = 2.0},
                    {coords = vec3(-1798.9021, -1235.8271, 0.5562), distance = 2.0},
                }, ]]
                --[[ vehicleCategories = {
                    {
                        category = 'Boat',
                        vehicles = {
                            {label = 'dinghy', model = 'Dinghy', price = 0},
                        },
                    },
                },
            }, ]]
            { -- Car
                locations = {
                    {
                        take = {
                            {coords = vec4(336.76, -589.55, 28.80, 343.17), distance = 2.0, ped = `s_m_m_dockwork_01`, scenario = 'WORLD_HUMAN_COP_IDLES'},
                        },
                        spawn = {
                            {coords = vec4(333.08, -590.51, 28.80, 339.69), distance = 2.0},
                            {coords = vec4(329.67, -589.33, 28.80, 339.74), distance = 2.0},
                            {coords = vec4(326.35, -588.37, 28.80, 339.16), distance = 2.0},
                            {coords = vec4(322.92, -587.48, 28.80, 339.24), distance = 2.0},
                            {coords = vec4(319.40, -586.25, 28.80, 343.60), distance = 2.0},
                        }
                    },
                },
                returnLocations = {
                    {coords = vec3(328.42, -576.84, 28.80), distance = 5.0},
                },
                vehicleCategories = {
                    {
                        category = 'Cars',
                        vehicles = {
                            {label = 'Ambulance', model = 'ambulance', price = 0, minGrade = 0}, -- you can set minGrade for a vehicle and a category to restrict to certain grades
                        },
                        minGrade = 0,
                    },
                    {
                        category = 'Other',
                        vehicles = {
                            {label = 'Firetruck', model = 'firetruk', price = 0},
                        },
                        minGrade = 2,
                    },
                }
            }
        },
        outfits = {
            male = {
                {
                    name = 'EMS',
                    data = {
                        mask_1 = 121,
                        mask_2 = 0,
                        arms = 93,
                        tshirt_1 = 15,
                        tshirt_2 = 0,
                        torso_1 = 249,
                        torso_2 = 0,
                        bproof_1 = 0,
                        bproof_2 = 0,
                        decals_1 = 60,
                        decals_2 = 0,
                        chain_1 = 126,
                        chain_2 = 0,
                        pants_1 = 31,
                        pants_2 = 0,
                        shoes_1 = 25,
                        shoes_2 = 0,
                        helmet_1 = -1,
                        helmet_2 = 0,
                        glasses_1 = 0,
                        glasses_2 = 0,
                    },
                },
            },
            female = {
                {
                    name = 'EMS',
                    data = {
                        mask_1 = 0,
                        mask_2 = 0,
                        arms = 104,
                        tshirt_1 = 2,
                        tshirt_2 = 0,
                        torso_1 = 257,
                        torso_2 = 0,
                        bproof_1 = 0,
                        bproof_2 = 0,
                        decals_1 = 0,
                        decals_2 = 0,
                        chain_1 = 96,
                        chain_2 = 0,
                        pants_1 = 30,
                        pants_2 = 0,
                        shoes_1 = 25,
                        shoes_2 = 0,
                        helmet_1 = 0,
                        helmet_2 = 0,
                        glasses_1 = 0,
                        glasses_2 = 0,
                    },
                },
            },
        },
    },
}
Config.EnableOwnedVehicles = true -- true | false, if true, vehicles taken from job garage will be saved and show up in job garage menu

Config.SkeletalDamage = {
    minDamage = 2.5, -- minimum damage to apply an injury
    showCause = true, -- true | false, should cause of the damage be shown in the UI
    weaponCalibers = { -- caliber settings, used in UI
        weapons = {
            [`WEAPON_PISTOL`] = '9mm', -- you can also set caliber per weapon like this, weapon caliber will always override class caliber
        },
        class = {
            ['pistol'] = '9mm',
            ['smg'] = '9mm',
            ['rifle'] = '7.62',
            ['shotgun'] = '12g',
            ['mg'] = '7.62',
            ['sniper'] = '.308',
        },
    },
}

Config.BulletEffects = {
    enable = true,
    headShake = { -- how much player head will shake when hit by a bullet
        amount = 0.5,
        time = 1,
    },
    bodyStumble = { -- settings for ragdoll when hit by a bullet in torso
        chance = 10,
        time = {
            min = 1000,
            max = 2000,
        },
        type = {3},
    },
    legsRagdoll = { -- settings for ragdoll when hit by a bullet in legs
        chance = {
            pistol = 10,
            smg = 10,
            shotgun = 15,
            rifle = 20,
            mg = 20,
            sniper = 25,
        },
        time = {
            pistol = {min = 500, max = 1500},
            smg = {min = 1000, max = 2000},
            shotgun = {min = 1000, max = 2500},
            rifle = {min = 1000, max = 2500},
            mg = {min = 1000, max = 2500},
            sniper = {min = 1000, max = 2500},
        },
        type = {
            pistol = {0, 3},
            smg = {0, 3},
            shotgun = {0, 3},
            rifle = {0, 3},
            mg = {0, 3},
            sniper = {0, 3},
        },
    },

    slowMultiplier = 1.0, -- how much movement speed will be reduced when hit by a bullet in legs
    minMoveRate = 0.5, -- minimum movement speed when hit by a bullet in legs
    injuredWalkBullets = 1, -- how many bullets in legs are needed to apply injured walk
    disableJumpingBullets = 4, -- how many bullets in legs are needed to disable jumping

    armShakeMultiplier = 1.0, -- multiplier for camera shake when shooting with bullets in arms
    disableShootingBullets = 4, -- how many bullets in arms are needed to disable shooting
}

Config.Debuffs = {
    settings = {
        movementReduction = { -- settings for movement reduction
            {health = 20, reduction = 0.75},
            {health = 40, reduction = 0.85},
            {health = 50, reduction = 0.9},
        },
        visionBlur = {
            intensityMultiplier = 1.0, -- how blurry the vision will be
        },
        cameraShake = {
            multiplier = 1.0, -- how much camera will shake camera shakes
            interval = 5000, -- how often camera will shake
        },
        reducedGrip = {
            multiplier = 1.0, -- how much camera will shake when shooting
        },
        staminaDrain = {
            maxStamina = 50.0,
        },
        drunkVision = {
            intensityMultiplier = 0.8,
        },
        aimShake = {
            multiplier = 1.0,
        },
        bleed = {
            multiplier = 1, -- how much health will be drained per second
            max = 5, -- maximum health that can be drained
            interval = 30000, -- how often health will be drained
            showNotification = true, -- should a notification to the player be shown when bleeding
        },
        ragdoll = {
            types = { -- settings for ragdoll, will always use the lowest health one
                {health = 10, chance = 0.001, time = 1000, type = 1},
                {health = 20, chance = 0.001, time = 1000, type = 3},
                {health = 30, chance = 0.0005, time = 1000, type = 3},
            },
            showNotification = true, -- should a notification to the player be shown when ragdoll
        },
        injuredWalk = {
            {
                clipset = "move_m@injured",
                style = "Injured",
                healthThreshold = 70,
                gender = "male"
            },
            {
                clipset = "move_f@injured",
                style = "Injured2",
                healthThreshold = 70,
                gender = "female"
            },
        },
    },
    -- debuffs:
    -- movement_reduction: reduces movement speed
    -- no_sprint: disables sprinting
    -- no_jump: disables jumping
    -- vision_blur: vision blur
    -- camera_shake: random camera shake
    -- reduced_grip: camera shake when shooting
    -- aim_shake: shake when aiming with a weapon
    -- stamina_drain: reduces max stamina
    -- drunk_vision: drunk visual effect
    -- bleed: health drain
    -- ragdoll: random ragdolls
    bodyParts = {
        head = { -- possible debuffs for this body part
            vision_blur = {threshold = 65, chance = 0.5}, -- threshold: health threshold for the debuff, chance: chance to apply the debuff when body part health is less than threshold (calculated every time body part is damaged)
            camera_shake = {threshold = 40, chance = 0.4},
            drunk_vision = {threshold = 30, chance = 0.2},
        },
        torso = {
            movement_reduction = {threshold = 50, chance = 0.3},
            stamina_drain = {threshold = 60, chance = 0.5},
            ragdoll = {threshold = 30, chance = 0.4},
            bleed = {threshold = nil, chance = 1.0},
        },
        larm = {
            reduced_grip = {threshold = 35, chance = 0.5},
            aim_shake = {threshold = 70, chance = 0.6},
            bleed = {threshold = nil, chance = 0.5},
        },
        rarm = {
            reduced_grip = {threshold = 35, chance = 0.5},
            aim_shake = {threshold = 40, chance = 0.6},
            bleed = {threshold = nil, chance = 0.5},
        },
        lleg = {
            no_sprint = {threshold = 35, chance = 0.8},
            no_jump = {threshold = 40, chance = 0.8},
            movement_reduction = {threshold = 75, chance = 0.6},
            ragdoll = {threshold = 30, chance = 0.4},
            stamina_drain = {threshold = 75, chance = 0.5},
            bleed = {threshold = nil, chance = 0.5},
        },
        rleg = {
            no_sprint = {threshold = 35, chance = 0.8},
            no_jump = {threshold = 40, chance = 0.8},
            movement_reduction = {threshold = 75, chance = 0.6},
            ragdoll = {threshold = 30, chance = 0.4},
            stamina_drain = {threshold = 75, chance = 0.5},
            bleed = {threshold = nil, chance = 0.5},
        },
    },
}

Config.HealingItems = {
    bandage = {
        minUseHealth = 0, -- if body part health is less than this then item will become unusable
        treat = {'bruise', 'fall', 'vehicle_impact', 'other', 'electrical'}, -- list of injuries that the item can treat
        description = 'Treats minor wounds', -- description for UI
        bodyParts = 'any', -- list of body parts that the item can be used on
        heal = 25, -- how much to heal player health by (0-100)
        removesBullets = false, -- if true then item will remove all bullets from body part
        anim = { -- animation for using on yourself and other player
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    ifak = {
        minUseHealth = 0,
        treat = {'stab', 'sprain', 'fall', 'vehicle_impact', 'bite', 'other', 'electrical'},
        description = 'First aid kit for different injuries',
        bodyParts = 'any',
        heal = 50,
        anim = {
            self = {
                duration = 10000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_ld_health_pack',
                    pos = vec3(0.024, -0.04, -0.111),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 10000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    tourniquet = {
        minUseHealth = 0,
        treat = {'stab', 'crush', 'bite'},
        description = 'Stops bleeding on arms and legs',
        bodyParts = {'larm', 'rarm', 'lleg', 'rleg'},
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    gauze = {
        minUseHealth = 0,
        treat = {'bruise', 'fall', 'vehicle_impact', 'bite', 'other'},
        description = 'Covers and protects wounds',
        bodyParts = 'any',
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    burn_gel = {
        minUseHealth = 0,
        treat = {'burn', 'explosion'},
        description = 'Treats burns and explosion damage',
        bodyParts = 'any',
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_beach_lotion_01',
                    pos = vec3(-0.087, 0.015, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    surgical_kit = {
        minUseHealth = 0,
        treat = {'shot', 'stab', 'bite', 'explosion'},
        description = 'Treats serious wounds and removes bullets',
        bodyParts = 'any',
        removesBullets = true,
        anim = {
            self = {
                duration = 10000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'v_serv_bs_scissors',
                    pos = vec3(-0.023, 0.013, -0.051),
                    rot = vec3(-92.082, -72.672, -4.813),
                },
            },
            other = {
                duration = 10000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    saline_bag = {
        minUseHealth = 0,
        treat = {},
        description = 'Full health recovery',
        heal = 100,
        bodyParts = 'any',
        anim = {
            self = {
                duration = 15000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 15000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    leg_brace = {
        minUseHealth = 0,
        treat = {'fracture', 'crush', 'fall', 'vehicle_impact'},
        description = 'Fixes broken legs',
        bodyParts = {'lleg', 'rleg'},
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    arm_brace = {
        minUseHealth = 0,
        treat = {'fracture', 'crush', 'fall', 'vehicle_impact'},
        description = 'Fixes broken arms',
        bodyParts = {'larm', 'rarm'},
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    body_brace = {
        minUseHealth = 0,
        treat = {'fracture', 'crush', 'fall', 'vehicle_impact'},
        description = 'Fixes broken torso',
        bodyParts = {'torso'},
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    neck_brace = {
        minUseHealth = 0,
        treat = {'fracture', 'sprain', 'crush', 'fall', 'vehicle_impact'},
        description = 'Fixes neck and head injuries',
        bodyParts = {'head', 'torso'},
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    ice_pack = {
        minUseHealth = 0,
        treat = {'electrical', 'bruise', 'other'},
        description = 'Reduces pain and swelling',
        bodyParts = 'any',
        anim = {
            self = {
                duration = 5000,
                dict = 'missheistdockssetup1clipboard@idle_a',
                name = 'idle_a',
                flag = 49,
                allowControls = true,
                prop = {
                    model = 'prop_rolled_sock_02',
                    pos = vec3(-0.072, -0.019, -0.032),
                    rot = vec3(0.0, 0.0, 0.0),
                },
            },
            other = {
                duration = 5000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        },
    },
    painkillers = {
        minUseHealth = 0,
        treat = {},
        description = 'Full health recovery',
        heal = 100,
        bodyParts = 'any',
        anim = {
            self = {
                duration = 2000,
                dict = 'mp_suicide',
                name = 'pill',
                flag = 49,
                allowControls = true,
            },
            other = {
                duration = 2000,
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 49,
            },
        }
    },
}

Config.ReviveOptions = {
    {
        chance = 0.7, -- chance for revive to succeed
        anim = 'cpr', -- animation to play when reviving, cpr is a premade animation
        jobs = { -- jobs that can use this revive option
            ambulance = 0,
        },
    },
    {
        item = {
            name = 'defibrillator', -- item name that is needed for this option
            remove = { -- should item be removed
                fail = true,
                success = true,
            }
        },
        description = 'Revives dead players', -- description for UI
        chance = 1.0,
        jobs = {
            ambulance = 0,
        },
        anim = {
            other = {
                dict = 'mini@cpr@char_a@cpr_str',
                name = 'cpr_pumpchest',
                flag = 1,
            },
        },
    },
    {
        item = {
            name = 'adrenaline_syringe',
            remove = {
                fail = true,
                success = true,
            }
        },
        description = 'Chance to revive dead players',
        chance = 0.5,
        anim = {
            other = {
                dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
                name = 'machinic_loop_mechandplayer',
                flag = 1,
            },
        },
    },
}

Config.Stretcher = {
    model = `prop_ld_binbag_01`,
    amountPerVehicle = 1, -- how many stretchers are in a vehicle
}

Config.KnifeWeapons = { -- weapons that will show "stab" as injury type
    `WEAPON_KNIFE`,
    `WEAPON_DAGGER`,
    `WEAPON_MACHETE`,
    `WEAPON_BOTTLE`,
}

Config.Wheelchair = {
    item = 'wheelchair',
    model = `iak_wheelchair`,
}

Config.WalkingStick = {
    item = 'walking_stick',
    model = `prop_cs_walking_stick`,
    clipset = 'move_lester_caneup',
}

Config.BodyBag = {
    item = 'body_bag',
    model = `xm_prop_body_bag`,
    anim = {
        duration = 5000,
        dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
        name = 'machinic_loop_mechandplayer',
        flag = 1,
    },
}

Config.LastStand = {
    enable = true,
    time = 60, -- how long last stand will last (seconds)
    audioEffectIntensity = 0.5, -- multiplier for audio effect intensity
}

Config.Death = {
    time = 300, -- how long until player can respawn (seconds)
    anim = {
        dict = 'dead',
        name = 'dead_a',
    },
    respawnHoldTime = 3, -- how long the player needs to hold the respawn key to respawn (seconds)
    audioEffectIntensity = 0.7, -- multiplier for audio effect intensity
}

Config.Elevators = {
    {
        label = 'Hospital Elevator',
        floors = {
            {
                label = 'Ground Floor',
                coords = {
                    interact = vec3(345.05, -584.83, 28.80), -- interact coords for elevator
                    teleport = vec4(342.22, -585.51, 28.80, 248.00), -- teleport coords for elevator
                },
            },
            {
                label = 'First Floor',
                coords = {
                    interact = vec3(332.43, -595.54, 43.28),
                    teleport = vec4(332.43, -595.54, 43.28, 74.26),
                },
            },
            {
                label = 'Helipad',
                coords = {
                    interact = vec3(338.67, -583.94, 74.16),
                    teleport = vec4(338.67, -583.94, 74.16, 252.02),
                },
            },
        },
    },
}

Last updated