Full View config.lua

Preview File Updated: v1.0.3 - 13.02.2025

Config = {}

-- ███████╗██████╗  █████╗ ███╗   ███╗███████╗██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗
-- ██╔════╝██╔══██╗██╔══██╗████╗ ████║██╔════╝██║    ██║██╔═══██╗██╔══██╗██║ ██╔╝
-- █████╗  ██████╔╝███████║██╔████╔██║█████╗  ██║ █╗ ██║██║   ██║██████╔╝█████╔╝ 
-- ██╔══╝  ██╔══██╗██╔══██║██║╚██╔╝██║██╔══╝  ██║███╗██║██║   ██║██╔══██╗██╔═██╗ 
-- ██║     ██║  ██║██║  ██║██║ ╚═╝ ██║███████╗╚███╔███╔╝╚██████╔╝██║  ██║██║  ██╗
-- ╚═╝     ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝ ╚══╝╚══╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝
local frameworkAutoFind = function()
    if GetResourceState('es_extended') == 'started' then
        return "ESX"
    elseif GetResourceState('qb-core') == 'started' then
        return "QB-Core"
    end
end

Config.Core = frameworkAutoFind()
Config.CoreExport = function()
    if Config.Core == "ESX" then
        return exports['es_extended']:getSharedObject()
    elseif Config.Core == "QB-Core" then
        return exports['qb-core']:GetCoreObject()
    end
end

---@field PlayerLoaded string: ESX: "esx:playerLoaded" / QB-Core: "QBCore:Client:OnPlayerLoaded"
Config.PlayerLoaded = Config.Core == "ESX" and "esx:playerLoaded" or "QBCore:Client:OnPlayerLoaded"  

---@field PlayerSetJob string: ESX: "esx:setJob" / QB-Core: "QBCore:Client:OnJobUpdate"
Config.PlayerSetJob = Config.Core == "ESX" and "esx:setJob" or "QBCore:Client:OnJobUpdate"



-- ███╗   ███╗ █████╗ ██╗███╗   ██╗    ███████╗███████╗████████╗████████╗██╗███╗   ██╗ ██████╗ ███████╗
-- ████╗ ████║██╔══██╗██║████╗  ██║    ██╔════╝██╔════╝╚══██╔══╝╚══██╔══╝██║████╗  ██║██╔════╝ ██╔════╝
-- ██╔████╔██║███████║██║██╔██╗ ██║    ███████╗█████╗     ██║      ██║   ██║██╔██╗ ██║██║  ███╗███████╗
-- ██║╚██╔╝██║██╔══██║██║██║╚██╗██║    ╚════██║██╔══╝     ██║      ██║   ██║██║╚██╗██║██║   ██║╚════██║
-- ██║ ╚═╝ ██║██║  ██║██║██║ ╚████║    ███████║███████╗   ██║      ██║   ██║██║ ╚████║╚██████╔╝███████║
-- ╚═╝     ╚═╝╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝    ╚══════╝╚══════╝   ╚═╝      ╚═╝   ╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝
---@field AutoExecuteQuery boolean: Automatic creation of tables required for vms_documentsv2
Config.AutoExecuteQuery = true

---@field Debug boolean: 
Config.Debug = true

Config.UseMarkers = true -- Using a marker to display points
Config.UseText3D = false -- Using a 3D Text to display points
Config.UseHelpNotify = true -- Using a ESX.ShowHelpNotification (only for esx)

---@field UseTarget boolean: Do you want to use target system
Config.UseTarget = false
Config.TargetResource = 'ox_target' -- 'ox_target' / 'qb-target'

---@field DistanceToStartPhotosProcess number: Minimum distance of the player from the coordinates in which he will take pictures (Config.Photographers.camera.playerCoords)
Config.DistanceToStartPhotosProcess = 1.8

---@field MaxTimeWalkIn number: Maximum time in milliseconds that a player can walk to where he is supposed to stand while taking pictures at the photographer place (Config.Photographers.camera.playerCoords)
Config.MaxTimeWalkIn = 5000 -- 5 seconds

---@field MaxTimeWalkOut number: Maximum time in milliseconds that the player has to return to the point of interaction with the photographer NPC to take a picture
Config.MaxTimeWalkOut = 5000 -- 5 seconds

---@field UseDocumentsOnlyInCityhall boolean: Will disable all Config.Documents items
Config.UseDocumentsOnlyInCityhall = false

---@field PhotosPrices number: The price for taking pictures with a photographer
Config.PhotosPrices = 200

---@field CountOfPhotos number: Number of images taken per session with the photographer
Config.CountOfPhotos = 3

---@field ActivePhotosLimitPerPlayer number: Maximum number of images possible to have at one time (it is recommended to leave the default, in order not to load the .json file with a large number of images)
Config.ActivePhotosLimitPerPlayer = 6

---@field RequiredClothing boolean: Currently this option only supports esx_skin (Possible customization in CL.GetPlayerClothesParts)
Config.RequiredClothing = false
Config.RequiredClothingParts = {
    ['mask'] = {
        ['m'] = 0,
        ['f'] = 0
    },
    ['sunglasses'] = {
        ['m'] = {0, 34, 35, 39},
        ['f'] = {},
    },
    ['hat'] = {
        ['m'] = -1,
        ['f'] = -1,
    }
}

Config.CheckDocumentBySerial = {
    enabled = true,

    command = 'checkdocument',
    description = 'Check Document by Serial Number',

    key = nil,

    useRequiredJob = true,
    requiredJob = {
        ['clerk'] = true, -- All grades
        ['police'] = true, -- All grades
        ['sheriff'] = true, -- All grades
        ['ambulance'] = true, -- All grades
        -- ['ambulance2'] = {1, 2, 3, 4}
    }
}

---@field ShowDocumentMode number: 
--[[
    1 = Menu to select a player
    2 = Show to first closest person
    3 = Show to all players on distance
]]
Config.ShowDocumentMode = 1

Config.ShowDocumentDistance = 3.0


---@field ViewDocumentAlways boolean: Do you want that every time you present a document, the player presenting it should also see it
Config.ViewDocumentAlways = true


---@class Marker Below you can configure the markers for each point
Config.Marker = {
    ['photographer'] = {
        type = 20,
        color = {168, 168, 168, 175},
        rotation = vec(0.0, 180.0, 0.0),
        scale = vec(0.1, 0.1, 0.1),
        bobUpAndDown = true,
        rotate = true,
        textureDict = nil,
        textureName = nil,
        drawOnEnts = false,
    },
    ['selecting_player'] = {
        type = 20,
        color = {55, 168, 25, 175},
        rotation = vec(0.0, 180.0, 0.0),
        scale = vec(0.1, 0.1, 0.1),
        bobUpAndDown = false,
        rotate = true,
        textureDict = nil,
        textureName = nil,
        drawOnEnts = false,
    },
    ['documents_menu'] = {
        type = 20,
        color = {168, 168, 168, 175},
        rotation = vec(0.0, 180.0, 0.0),
        scale = vec(0.1, 0.1, 0.1),
        bobUpAndDown = true,
        rotate = true,
        textureDict = nil,
        textureName = nil,
        drawOnEnts = false,
    },
}

---@class Blips Below you can configure blips
Config.Blips = {
    ['documents_menu'] = {
        sprite = 826,
        display = 4,
        scale = 0.9,
        color = 62,
        name = "Documents Office"
    },
}

---@class Controls 
Config.Controls = {
    ['hide_document'] = 202,

    ['selecting_menu.change_player'] = 38,
    ['selecting_menu.show_document'] = 201,
    ['selecting_menu.cancel'] = 202,
}

------ ▄▀▀ ▄▀▄ █▄ █ █▀ █ ▄▀  █ █ █▀▄ ▄▀▄ ▀█▀ █ ▄▀▄ █▄ █
------ ▀▄▄ ▀▄▀ █ ▀█ █▀ █ ▀▄█ ▀▄█ █▀▄ █▀█  █  █ ▀▄▀ █ ▀█
Config.Documents = {
    ['id_card'] = { -- Do not change this name
        type = 'document',
    
        itemName = 'id_card',
        identificationIdPrefix = 'ID-',
        image = 'id_card.png',

        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"random@atmrobberygen", "a_atm_mugging", 3000, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
        },
        prop = 'prop_franklin_dl',
        
        data = {
            'firstName',
            'lastName',
            'dateOfBirth',
            'height',
            'nationality',
            'ssn',
        },
        
    },
    ['driving_license'] = { -- Do not change this name
        type = 'document',
        
        itemName = 'driving_license',
        identificationIdPrefix = 'DL-',
        image = 'driving_license.png',
        
        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"random@atmrobberygen", "a_atm_mugging", 3000, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
        },
        prop = 'prop_franklin_dl',
        
        data = {
            'firstName',
            'lastName',
        },

        needAnyLicenseToGetDocument = true,
        licenses = {
            'drive_a',
            'drive_b',
            'drive_c',
        },
    },
    ['flying_license'] = { -- Do not change this name
        type = 'document',
        
        itemName = 'flying_license',
        identificationIdPrefix = 'FL-',
        image = 'flight_license.png',
        
        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"random@atmrobberygen", "a_atm_mugging", 3000, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
        },
        prop = 'prop_franklin_dl',
        
        data = {
            'firstName',
            'lastName',
        },

        needAnyLicenseToGetDocument = true,
        licenses = {
            'practical_plane',
            'practical_helicopter',
        },
    },
    ['boat_license'] = { -- Do not change this name
        type = 'document',

        itemName = 'boat_license',
        identificationIdPrefix = 'BT-',
        image = 'boat_license.png',
        
        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"random@atmrobberygen", "a_atm_mugging", 3000, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
        },
        prop = 'prop_franklin_dl',
        
        data = {
            'firstName',
            'lastName',
        },
        
        needAnyLicenseToGetDocument = true,
        licenses = {
            'practical_boat',
        },
    },

    ['police_badge'] = { -- Do not change this name
        type = 'badge',

        itemName = 'police_badge',
        identificationIdPrefix = 'PD-',
        badgeImage = 'lspd.webp',
        
        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"paper_1_rcm_alt1-9", "player_one_dual-9", 3000, 51, 57005, {0.119000, 0.035000, -0.029000, 72.579994, 19.379997, 126.270287}},
        },
        prop = 'prop_fib_badge',
        
        data = {
            'firstName',
            'lastName',
            'badgeNumber',
            'jobGrade',
        },
    },
    ['sheriff_badge'] = { -- Do not change this name
        type = 'badge',

        itemName = 'sheriff_badge',
        identificationIdPrefix = 'SH-',
        badgeImage = 'lssd.webp',
        
        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"paper_1_rcm_alt1-9", "player_one_dual-9", 3000, 51, 57005, {0.119000, 0.035000, -0.029000, 72.579994, 19.379997, 126.270287}},
        },
        prop = 'prop_fib_badge',

        data = {
            'firstName',
            'lastName',
            'badgeNumber',
            'jobGrade',
        },
    },
    ['fib_badge'] = { -- Do not change this name
        type = 'badge',

        itemName = 'fib_badge',
        identificationIdPrefix = 'FI-',
        badgeImage = 'fib.webp',
        
        animations = {
            view = {"cellphone@", "cellphone_text_read_base", -1, 51, 28422, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
            show = {"paper_1_rcm_alt1-9", "player_one_dual-9", 3000, 51, 57005, {0.119000, 0.035000, -0.029000, 72.579994, 19.379997, 126.270287}},
        },
        prop = 'prop_fib_badge',
        
        data = {
            'firstName',
            'lastName',
            'badgeNumber',
            'jobGrade',
        },
    },
}


---@class Photographers _____________
Config.Photographers = {
    {
        -- blip = Config.Blips['name'],
        -- blipCoords = vector3(-530.22, -173.02, 39.1),

        markerData = Config.Marker['photographer'],
        distanceSee = 10.0,
        distanceAccess = 1.6,
        accessCoords = vector3(-530.22, -173.02, 39.15),
        targetCoords = vec4(-530.22, -173.02, 38.4, 36.47),
        targetSize = vec3(0.9, 0.9, 2.2),

        ped = {
            model = 'ig_jimmyboston_02',
            coords = vector4(-530.22, -173.02, 37.22, 207.64),
            animation = {'rcmnigel1a', 'base'}
        },

        camera = {
            coords = vector4(-531.39, -172.61, 39.0, 228.51),
            playerCoords = vector4(-528.92, -175.09, 37.22, 29.57)
        }

    }
}


---@class DocumentsMenu _____________
Config.DocumentsMenu = {
    {
        blip = Config.Blips['documents_menu'],
        blipCoords = vector3(-552.66, -190.8, 37.22),

        markerData = Config.Marker['documents_menu'],
        distanceSee = 10.0,
        distanceAccess = 1.8,
        
        menuCoords = vector3(-532.67, -190.12, 38.22),
        targetCoords = vector4(-531.9, -189.72, 38.0, 300.73),
        targetSize = vec3(2.4, 1.5, 2.2),

        ped = {
            model = 'ig_drfriedlander',
            coords = vector4(-531.72, -189.51, 37.22, 116.64),
            animation = {'switch@michael@sitting', 'idle'}
        },

        documentsList = {
            {label = "ID Card", name = "id_card", price = 300},
            {label = "Driving License", name = "driving_license", price = 450},
            {label = "Boat License", name = "boat_license", price = 560},
            {label = "Flying License", name = "flying_license", price = 900},
        },
    },

    {
        markerData = Config.Marker['documents_menu'],
        distanceSee = 10.0,
        distanceAccess = 1.8,
        
        requiredJob = 'police',

        menuCoords = vector3(-532.75, -193.02, 38.22),
        targetCoords = vector4(-532.01, -192.56, 38.0, 300.73),
        targetSize = vec3(2.3, 1.5, 2.2),

        ped = {
            model = 'ig_drfriedlander',
            coords = vector4(-531.34, -191.73, 37.22, 20.86),
            animation = {'switch@michael@sitting', 'idle'}
        },

        documentsList = {
            {label = "Police Badge", name = "police_badge", price = 100},
            {label = "Sheriff Badge", name = "sheriff_badge", price = 100},
            {label = "FIB Badge", name = "fib_badge", price = 100},
        },
    }
}

Last updated

Was this helpful?