Accessible code

Config = {
    Locale = 'en',
    FrameworkName = IsESX() and 'es_extended' or 'qb-core',

    PlayerLoadedEvent = {
        esx = 'esx:playerLoaded',
        qb = 'QBCore:Client:OnPlayerLoaded'
    },

    FlashLightWeapon = `WEAPON_FLASHLIGHT`,

    -- Evidence will be wiped after remaining unchanged for the given time
    DeleteEvidenceTime = '6 MONTH',

    EvidenceDatabase = {
        {
            coords = vec3(441.754, -996.019, 30.690),

            /*
                table hash   > groups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
                table array  > groups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
                string       > groups = 'police'                            > only once job can access, no grade checks
            */

            groups = { ['police'] = 1 },

            Marker = { type = 2, scaleX = 0.3, scaleY = 0.2, scaleZ = 0.15, r = 30, g = 150, b = 30 },
        },

        -- you can add more
    },

    Features = {
        BloodGround = true,             -- Drops blood evidence on the ground upon death.
        WeaponBlood = true,             -- Leaves blood evidence of the target when hitting somebody with a melee weapon (requires ox_inventory). (todo)
        BulletAndShell = true,          -- Leaves bullet shell on the ground while firing a weapon.
        Bullet = true,                  -- Leaves bullet evidence if bullet hits anything
        ShellsInVehicle = true,         -- Allows searching for bullets in vehicles. (todo)
        FingerprintsVehicle = true,     -- Leaves fingerprint evidence upon entering a vehicle without wearing gloves. (todo)
        FingerprintsWeapon = true,      -- Leaves fingerprint evidence upon using a weapon without wearing gloves. (todo)
    },

    /*
        %d/%m/%Y day/month/year
        %d-%m-%Y day-month-year

        %m/%d/%Y month/day/year
        %m-%d-%Y month-day-year

        %Y/%d/%m year/day/month
        %Y-%d-%m year-day-month

        etc
    */

    DateFormat = '%d/%m/%Y', -- day/month/year

    -- variations that DOESN'T have gloves, might be differnet for you, depending on clothing pack
    Gloves = {
        [`mp_m_freemode_01`] = {
            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
            11, 12, 13, 14, 15, 18, 26, 52,
            53, 54, 55, 56, 57, 58, 59, 60,
            61, 62, 112, 113, 114, 118, 125, 132
        },

        [`mp_f_freemode_01`] = {
            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
            11, 12, 13, 14, 15, 19, 59, 60, 61,
            62, 63, 64, 65, 66, 67, 68, 69, 70,
            71, 129, 130, 131, 135, 142, 149, 153,
            157, 161, 165
        },

        -- this models have gloves by default, you can add them here
        [`s_m_y_swat_01`] = true,

        /*
            [`model_name`] = { variations that doesnt have gloves }

            if case you use ped that has gloves by default but cant change variations (example s_m_y_swat_01 above),
            you will do next

            [`model_name`] = true     
        */
    },

    BulletAndShell = {

        /*
            table hash   > CollectEvidenceGroups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
            table array  > CollectEvidenceGroups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
            string       > CollectEvidenceGroups = 'police'                            > only once job can access, no grade checks
            string       > CollectEvidenceGroups = ''                                  > everyone can collect evidence
        */

        CollectEvidenceGroups = '',

        -- for how long it will collect evidence, 5000ms = 5 sec
        CollectingTime = 5000,
        
        -- for how long it will analyze evidence, 5000ms = 5 sec
        AnalyzingTime = 5000,

        -- for how long it will analyze weapon, 10000ms = 10 sec
        AnalyzingWeaponTime = 1000,

        -- jobs that dont leave bullet evidence on ground when shooting
        NoBulletEvidenceJob = {
            ['police'] = true,
            -- you can add more
        },

        -- weapons that should not leave bullet evidence when shooting
        BlacklistWeapons = {
            [`weapon_stungun`] = true,
            -- you can add more
        },

        Shell = { type = 2, scaleX = 0.1, scaleY = 0.05, scaleZ = 0.07, r = 188, g = 159, b = 96 },
        Bullet = { type = 2, scaleX = 0.1, scaleY = 0.05, scaleZ = 0.07, r = 182, g = 122, b = 94 },

        -- time in minutes before evidence disappears
        RemoveTime = 25,

        -- police and grade that can delete evidence from database, must be hash
        DeleteEvidence = { ['police'] = 2 },

        -- you can add as many as you want
        Scanner = {
            {
                type = 'shell', -- scanner for shells or bullet
                coords = vec3(441.882, -991.446, 30.690),

                /*
                    table hash   > groups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
                    table array  > groups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
                    string       > groups = 'police'                            > only once job can access, no grade checks
                */

                groups = { ['police'] = 1 },

                Marker = { type = 2, scaleX = 0.3, scaleY = 0.2, scaleZ = 0.15, r = 30, g = 150, b = 30 },
            },

            {
                type = 'bullet',
                coords = vec3(437.030, -990.831, 30.690),
                groups = { ['police'] = 1 },
                Marker = { type = 2, scaleX = 0.3, scaleY = 0.2, scaleZ = 0.15, r = 30, g = 150, b = 30 },
            },

            -- you can add more
        },

        EvidenceReport = {
            date = true,            -- date when evidence was created
            time = true,            -- time when evidence was created
            street = true,          -- street address where evidence was created
            ammolabel = true,       -- type of weapon it was fired from, AmmoLabels
            weaponSerial = true,    -- serial number of weapon it was fired from, kinda op?
            analyst = true,         -- name of player who analysed evidence
            color = true,           -- color of vehicle (if bullet was taken out from vehicle)
            plate = true,           -- plate of vehicle where shell was taken from   
        }
    },

    Weapon = {
        Scanner = {
            {
                coords = vec3(437.693, -994.525, 30.690),

                /*
                    table hash   > groups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
                    table array  > groups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
                    string       > groups = 'police'                            > only once job can access, no grade checks
                */

                groups = { ['police'] = 1 },

                Marker = { type = 2, scaleX = 0.3, scaleY = 0.2, scaleZ = 0.15, r = 30, g = 150, b = 30 },
            },

            -- you can add more
        },

        -- police and grade that can delete evidence from database, must be hash
        DeleteEvidence = { ['police'] = 2 },

        EvidenceReport = {
            date = true,            -- date when evidence was scanned
            weaponLabel = true,     -- label of weapon
            time = true,            -- time when evidence was scanned
            ammolabel = true,       -- type of weapon it was fired from, AmmoLabels
            weaponSerial = true,    -- serial number of weapon
            analyst = true,         -- name of player who analysed evidence
            fingerprint = true,     -- fingerprints of last person who used gun (if not wearing gloves)
            dna = true,             -- DNA of victim
        }
    },

    Blood = {

        /*
            table hash   > CollectEvidenceGroups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
            table array  > CollectEvidenceGroups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
            string       > CollectEvidenceGroups = 'police'                            > only once job can access, no grade checks
            string       > CollectEvidenceGroups = ''                                  > everyone can collect evidence
        */

        CollectEvidenceGroups = { 'police', 'sheriff' },

        -- if ranining, remove evidence?
        RemoveEvidenceOnRain = true,

        -- time in minutes before evidence disappears
        RemoveTime = 25,

        -- for how long it will collect evidence, 5000ms = 5 sec
        CollectingTime = 5000,

        -- for how long it will analyze evidence, 5000ms = 5 sec
        AnalyzingTime = 5000,

        -- blood on ground marker
        Evidence = { type = 2, scaleX = 0.1, scaleY = 0.05, scaleZ = 0.07, r = 255, g = 0, b = 0 },

        Scanner = {
            {
                coords = vec3(439.117, -993.290, 30.690),

                /*
                    table hash   > groups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
                    table array  > groups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
                    string       > groups = 'police'                            > only once job can access, no grade checks
                */

                groups = { ['police'] = 1 },

                Marker = { type = 2, scaleX = 0.3, scaleY = 0.2, scaleZ = 0.15, r = 30, g = 150, b = 30 },
            },

            -- you can add more
        },

        -- police and grade that can delete evidence from database, must be hash
        DeleteEvidence = { ['police'] = 2 },

        EvidenceReport = {
            street = true,          -- street where blood was found
            date = true,            -- date when evidence was scanned
            time = true,            -- time when evidence was scanned
            analyst = true,         -- name of player who analysed evidence
            dna = true,             -- DNA of victim
        },
    },

    FingerprintsVehicle = {

        /*
            table hash   > CollectEvidenceGroups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
            table array  > CollectEvidenceGroups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
            string       > CollectEvidenceGroups = 'police'                            > only once job can access, no grade checks
            string       > CollectEvidenceGroups = ''                                  > everyone can collect evidence
        */

        CollectEvidenceGroups = { 'police', 'sheriff' },

        -- here you can whitelist vehicles in which you do not want to leave fingerprints
        WhitelistModels = { `xyz`, },

        -- here you can whitelist plates 
        WhiteListPlates = { 'xyz', },

        WhitelistJobs = {
            -- xyz and grade 2 and above wont leave fingerprints
            ['xyz'] = 2
        },

        -- here you can add your identifier or citizenid
        WhitelistIdentifiers = {
            'char1:xyz',
        },

        -- time in msec for searching fingerprints in vehicle
        FingerSearching = 2000,

        Scanner = {
            {
                coords = vec3(461.881, -989.336, 24.915),

                /*
                    table hash   > groups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
                    table array  > groups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
                    string       > groups = 'police'                            > only once job can access, no grade checks
                */

                groups = { ['police'] = 1 },

                Marker = { type = 2, scaleX = 0.3, scaleY = 0.2, scaleZ = 0.15, r = 30, g = 150, b = 30 },
            },

            -- you can add more
        },

        -- police and grade that can delete evidence from database, must be hash
        DeleteEvidence = { ['police'] = 2 },

        EvidenceReport = {
            street = true,          -- street where fingerprints were found
            date = true,            -- date when evidence was taken
            time = true,            -- time when evidence was taken
            analyst = true,         -- name of player who analysed evidence
            plate = true,           -- vehicle plates
            color = true,           -- vehicle color
        }
    },

    ShellsInVehicle = {

        /*
            table hash   > CollectEvidenceGroups = { ['police'] = 1, ['sheriff'] = 5 } > grade 1 (and above) police and grade 5 (and above) sheriff can access
            table array  > CollectEvidenceGroups = { 'police', 'sheriff' }             > police and sherrif can access, no grade check
            string       > CollectEvidenceGroups = 'police'                            > only once job can access, no grade checks
            string       > CollectEvidenceGroups = ''                                  > everyone can collect evidence
        */

        CollectEvidenceGroups = { 'police', 'sheriff' },

        -- jobs that wont leave shell evidence in vehicle
        NoShell = {
            ['police'] = true
        },

        -- weapons that should not leave shell evidence when shooting
        BlacklistWeapons = {
            [`weapon_stungun`] = true
        },

        -- duration for searching for shells in vehicle
        SearchingDuration = 2000,
    },

    Notify = {
        blood = true,           -- notify player that he have blood on weapon after hitting somebody
        printsweapon = true,    -- notify player that he left fingerprints on weapon
        printsvehicle = true,   -- notify player that he left fingerprints in vehicle
    },

    AmmoLabels = {
        [`WEAPON_ADVANCEDRIFLE`] = '5.56x45',
        [`WEAPON_APPISTOL`] = '9mm',
        [`WEAPON_ASSAULTRIFLE`] = '7.62x39',
        [`WEAPON_ASSAULTRIFLE_MK2`] = '7.62x39',
        [`WEAPON_ASSAULTSHOTGUN`] = '12 Gauge',
        [`WEAPON_ASSAULTSMG`] = '5.56x45',
        [`WEAPON_AUTOSHOTGUN`] = '12 Gauge',
        [`WEAPON_BULLPUPRIFLE`] = '5.56x45',
        [`WEAPON_BULLPUPRIFLE_MK2`] = '5.56x45',
        [`WEAPON_BULLPUPSHOTGUN`] = '12 Gauge',
        [`WEAPON_CARBINERIFLE`] = '5.56x45',
        [`WEAPON_CARBINERIFLE_MK2`] = '5.56x45',
        [`WEAPON_CERAMICPISTOL`] = '9mm',
        [`WEAPON_COMBATMG`] = '5.56x45',
        [`WEAPON_COMBATMG_MK2`] = '7.62x39',
        [`WEAPON_COMBATPDW`] = '9mm',
        [`WEAPON_COMBATPISTOL`] = '9mm',
        [`WEAPON_COMBATSHOTGUN`] = '12 Gauge',
        [`WEAPON_COMPACTLAUNCHER`] = '40mm Explosive',
        [`WEAPON_COMPACTRIFLE`] = '7.62x39',
        [`WEAPON_DBSHOTGUN`] = '12 Gauge',
        [`WEAPON_DOUBLEACTION`] = '.38 LC',
        [`WEAPON_EMPLAUNCHER`] = 'EMP round',
        [`WEAPON_FIREWORK`] = 'Firework',
        [`WEAPON_FLAREGUN`] = 'Flare round',
        [`WEAPON_GADGETPISTOL`] = '9mm',
        [`WEAPON_GRENADELAUNCHER`] = '40mm Explosive',
        [`WEAPON_GUSENBERG`] = '.45 ACP',
        [`WEAPON_HEAVYPISTOL`] = '.45 ACP',
        [`WEAPON_HEAVYRIFLE`] = '5.56x45',
        [`WEAPON_HEAVYSHOTGUN`] = '12 Gauge',
        [`WEAPON_HEAVYSNIPER`] = '.50 BMG',
        [`WEAPON_HEAVYSNIPER_MK2`] = '.50 BMG',
        [`WEAPON_HOMINGLAUNCHER`] = 'Rocket',
        [`WEAPON_MACHINEPISTOL`] = '9mm',
        [`WEAPON_MARKSMANPISTOL`] = '.22 Long Rifle',
        [`WEAPON_MARKSMANRIFLE`] = '7.62x51',
        [`WEAPON_MARKSMANRIFLE_MK2`] = '7.62x51',
        [`WEAPON_MG`] = '7.62x39',
        [`WEAPON_MICROSMG`] = '.45 ACP',
        [`WEAPON_MILITARYRIFLE`] = '5.56x45',
        [`WEAPON_MINIGUN`] = '7.62x39',
        [`WEAPON_MINISMG`] = '9mm',
        [`WEAPON_MUSKET`] = '.50 Ball',
        [`WEAPON_NAVYREVOLVER`] = '.44 Magnum',
        [`WEAPON_PISTOL`] = '9mm',
        [`WEAPON_PISTOL50`] = '.50 AE',
        [`WEAPON_PISTOLXM3`] = '9mm',
        [`WEAPON_PISTOL_MK2`] = '9mm',
        [`WEAPON_PRECISIONRIFLE`] = '7.62x51',
        [`WEAPON_PUMPSHOTGUN`] = '12 Gauge',
        [`WEAPON_PUMPSHOTGUN_MK2`] = '12 Gauge',
        [`WEAPON_RAILGUN`] = 'Railgun charge',
        [`WEAPON_RAILGUNXM3`] = 'Railgun charge',
        [`WEAPON_RAYCARBINE`] = 'Laser charge',
        [`WEAPON_RAYMINIGUN`] = 'Laser charge',
        [`WEAPON_REVOLVER`] = '.44 Magnum',
        [`WEAPON_REVOLVER_MK2`] = '.44 Magnum',
        [`WEAPON_RPG`] = 'Rocket',
        [`WEAPON_SAWNOFFSHOTGUN`] = '12 Gauge',
        [`WEAPON_SMG`] = '9mm',
        [`WEAPON_SMG_MK2`] = '9mm',
        [`WEAPON_SNIPERRIFLE`] = '7.62x51',
        [`WEAPON_SNSPISTOL`] = '.45 ACP',
        [`WEAPON_SNSPISTOL_MK2`] = '.45 ACP',
        [`WEAPON_SPECIALCARBINE`] = '5.56x45',
        [`WEAPON_SPECIALCARBINE_MK2`] = '5.56x45',
        [`WEAPON_TACTICALRIFLE`] = '5.56x45',
        [`WEAPON_TECPISTOL`] = '9mm',
        [`WEAPON_VINTAGEPISTOL`] = '9mm',
    }
}