Config

Lua Config

if Config == nil then Config = {} end
function GetLocales(cd, ...) if Locales[Config.Language][cd] then return string.format(Locales[Config.Language][cd], ...) else print('Locale is nil ('..cd..')') end end
Config.KeyTable = { ['A'] = 34, ['B'] = 29, ['C'] = 26, ['D'] = 9, ['E'] = 38, ['F'] = 23, ['G'] = 47, ['H'] = 74, ['I'] = 311, ['J'] = 245, ['K'] = 311, ['L'] = 182, ['M'] = 244, ['N'] = 249, ['O'] = 199, ['P'] = 199, ['Q'] = 44, ['R'] = 45, ['S'] = 8, ['T'] = 245, ['U'] = 303, ['V'] = 0, ['W'] = 32, ['X'] = 73, ['Y'] = 246, ['Z'] = 20, ['1'] = 157, ['2'] = 158, ['3'] = 160, ['4'] = 164, ['5'] = 165, ['6'] = 159, ['7'] = 161, ['8'] = 162, ['9'] = 163, ['0'] = 159, ['NUMPAD0'] = 82, ['NUMPAD1'] = 79, ['NUMPAD2'] = 80, ['NUMPAD3'] = 81, ['NUMPAD4'] = 75, ['NUMPAD5'] = 76, ['NUMPAD6'] = 77, ['NUMPAD7'] = 71, ['NUMPAD8'] = 72, ['NUMPAD9'] = 73, ['F1'] = 288, ['F2'] = 289, ['F3'] = 170, ['F5'] = 166, ['F6'] = 167, ['F7'] = 168, ['F8'] = 169, ['F9'] = 56, ['F10'] = 57, ['LEFT'] = 174, ['RIGHT'] = 175, ['UP'] = 27, ['DOWN'] = 173, ['SPACE'] = 22, ['ENTER'] = 18, ['BACKSPACE'] = 177, ['TAB'] = 37, ['SHIFT'] = 21, ['CTRL'] = 36, ['ALT'] = 19, ['CAPS'] = 217, ['ESC'] = 200, ['HOME'] = 213, ['PAGEUP'] = 10, ['PAGEDOWN'] = 11, ['DELETE'] = 178, ['INSERT'] = 121, ['MOUSE1'] = 24, ['MOUSE2'] = 25, ['MOUSE3'] = 348, ['LEFTBRACKET'] = 39, ['RIGHTBRACKET'] = 40, ['MINUS'] = 84, ['EQUAL'] = 83, ['BACKSLASH'] = 85, ['SEMICOLON'] = 186, ['APOSTROPHE'] = 39, ['COMMA'] = 82, ['PERIOD'] = 81, ['SLASH'] = 84, ['TILDE'] = 243, ['LEFTCTRL'] = 36, ['RIGHTCTRL'] = 70, ['LEFTSHIFT'] = 21, ['RIGHTSHIFT'] = 229, ['LEFTALT'] = 19, ['RIGHTALT'] = 170, ['DPAD_UP'] = 172, ['DPAD_DOWN'] = 173, ['DPAD_LEFT'] = 174, ['DPAD_RIGHT'] = 175, ['A'] = 176, ['B'] = 177, ['X'] = 178, ['Y'] = 179, ['LB'] = 180, ['RB'] = 181, ['LT'] = 182, ['RT'] = 183, ['BACK'] = 184, ['START'] = 185, ['LS'] = 186, ['RS'] = 187, ['CHANGE_ME'] = 'CHANGE_ME' }


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                            FRAMEWORK                             │
-- └──────────────────────────────────────────────────────────────────┘


-- WHAT DOES 'auto_detect' DO?
-- The 'auto_detect' feature automatically identifies your framework, SQL database, notification and other resources, 
-- applying default settings based on what it detects.

Config.Framework = 'auto_detect' --[ 'auto_detect' ] Detects either ESX or QBCore frameworks.
Config.Database = 'auto_detect' --[ 'auto_detect' ] Detects MySQL, GHMattimysql, or Oxmysql SQL resources.
Config.Notification = 'esx' --[ 'auto_detect' / 'other' ] Detects ESX, QBCore, cd_notifications, okokNotify, ps-ui, and ox_lib. Use 'other' for custom notifications.
Config.Inventory = 'auto_detect' --[ 'auto_detect' ] Detects the inventory resource automatically.
Config.AutoInsertSQL = true -- If true, automatically inserts the necessary SQL tables. Set to false if you've already done this.
Config.Language = 'EN' --[ 'EN' ] You can add your own locales in Locales.lua and update this to match your custom language code.

Config.FrameworkTriggers = {
    esx = { -- Update these if you have modified the default ESX event names.
        resource_name = 'es_extended',
        main = 'esx:getSharedObject',
        load = 'esx:playerLoaded',
        job = 'esx:setJob'
    },
    qbcore = { -- Update these if you have modified the default QBCore event names.
        resource_name = 'qb-core',
        main = 'QBCore:GetObject',
        load = 'QBCore:Client:OnPlayerLoaded',
        job = 'QBCore:Client:OnJobUpdate',
        duty = 'QBCore:Client:SetDuty'
    }
}


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                            IMPORTANT                             │
-- └──────────────────────────────────────────────────────────────────┘


Config.Debug = false -- Set to true to enable debug prints (for troubleshooting and development purposes).
Config.EnableTestCommand = true -- (/dispatchtest) Set to true to enable the test command (for troubleshooting and development purposes).

Config.AllowedJobs = { --Jobs who are allowed to use the dispatch.
--This will group different jobs together. Eg., so 2 jobs {'police', 'ambulance'} can both see can see each other on the dispatch UI and the pause menu/mini-map blips.
    {'police', 'ambulance'}, --police & ambulance group
    {'mechanic', }, --mechanic group
    --{'1st_job', '2nd_job', }, --add more here
}

Config.Perms = {
    Dispatcher = { --The permissions table for those who can be a dispatcher, based off jobs and job grades.
        ['police'] = { 0, 1, 2, 3 } ,
        ['sheriff'] = { 0, 1, 2, 3 } ,
        ['ambulance'] = { 0, 1, 2, 3 },
        ['fire'] = { 0, 1, 2, 3 },
        ['mechanic'] = { 0, 1, 2, 3 },
    },

    Planner = { --The permissions table for those who can use the planner, based off jobs and job grades.
        ['police'] = { 0, 1, 2, 3 } ,
    },
}

Config.AntiCheat = {
    ENABLE = true, --Enable or Disable all of the built in anti cheat features?
    
    BannedWords = { --This feature will kick and send a message in your discord if any banned words are detected in a notification or /911 call.
        ENABLE = true, --Enable or Disable this feature?
        discord_tag_everyone = true, --Tag @ everyone who has access to your discord webhook channel?
        banned_words = {'fuck', } --A table of banned words.

    },

    EventSpam = { --This feature will detect events being spammed by lua injectors or mod menus.
        ENABLE = true, --Enable or Disable this feature?
        discord_tag_everyone = true, --Tag @ everyone who has access to your discord webhook channel?
        threshold = { --If x amount of 'events' are triggered within x amount of 'time' this player will be flagged for modding.
            events = 5, --(in seconds)
            time = 3 --(in seconds)
        }
    }
}


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                             MAIN                                 │
-- └──────────────────────────────────────────────────────────────────┘


Config.Dispatcher = {
    ENABLE = true, --Do you want to use the build in dispatcher system? (this is optional)
    notify_activity = true, --Do you want players to be notified when a dispatcher comes online/goes offline?
    VoipResource = 'toko' ---[ 'toko' / 'mumble' / 'pmavoice' / 'other' ] Choose your servers voip resource.
}

Config.Ping = {
    ENABLE = true, --Do you want to allow players who have access to the dispatch to ping their location to other players of the same job?
    command = 'dispatchping', --The chat command.
    key = '', --The key press. You can choose other keys here - https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/.
    cooldown = 10, --(in seconds) This cooldown is to prevent a player spamming pings.
}

Config.PanicButton = {
    ENABLE = true, --Do you want to allow dispatch users to use the built-in panic button?
    command = 'panic', --The chat command.
    key = '', --The key press. This is not used by default. You can choose keys here - https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/.
    job_table = {'police', 'ambulance', }, --A list of jobs who can use the panic button. (every job in this list will be notified if a panic button is pressed).
    cooldown = 10, --(in seconds) This cooldown is to prevent a player spamming the panic button.
    play_sound_in_distance = true --Do you want the panic button sound to play to all nearby players?
}

Config.GpsTracker = { -- Used for kidnapping scenarios, if the gps tracker item is removed from a players inventory they will no longer have access to use the dispatch features and their player blips will be hidden from others view.
    ENABLE = false, -- Enable or disable the GPS tracker feature.
    item_name = 'gpstracker', -- The name of the inventory item.
    item_check_timer = 10, -- Time in seconds to check for the item in the inventory.
    AllowedJobs = { -- Jobs that are allowed to use the GPS tracker features.
        'police',
        'ambulance',
    }
}

Config.UpdateDistanceToCall = { -- This will update the distance from the player to the call location automatically every x amount of seconds.
    ENABLE = true, --Do you want to use auto update distance?
    time = 2 --(in seconds) How often the distance should be updated.
}

Config.AutoUpdatePlayerCoordinates = { -- This will update players coordinates on the UI map automatically every x amount of seconds. Only updates when a player is using the ui.
    ENABLE = true, --Do you want to use auto update player blips?
    time = 5, --(in seconds) How often the blips should be updated.
}

Config.FollowPlayer = { -- In the map UI, you have the ability to follow a players movements.
    ENABLE = true, --To improve optimisation you can disable this feature.    
    time = 500, --(in ms) How often the coordinates for the 1 player you are following should be updated. Lower is smoother but uses more resources. Max recommended is 1000.
}

Config.HeatMap = { -- This will show the most active areas on the map (where most calls are made).
    ENABLE = true, --Do you want to use the heat map feature?
    limit_calls = 100, --The amount of calls to store in the heat map.
}

Config.AfkTimer = {  -- This will set a player's status to AFK if they are not moving for a certain amount of time.
    ENABLE = true, --Do you want to use the AFK timer?
    time = 10, --(in minutes) How often the player should be checked for AFK status.
}

Config.NotifyStatusChange = true --Do you want players to be notified when another player changes their status? (eg., from Available to Unavailable).
Config.DispatchCallExipryTime = 60 --(in minutes) How long a call should last before it expires.
Config.HideSmallUIWhenOtherOpen = true --Do you want the small UI to be hidden when other UI's are open? (this will prevent the small UI from being hidden when the large UI is open).


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                              BLIPS                               │
-- └──────────────────────────────────────────────────────────────────┘


Config.PauseMenuBlips = {
    ENABLE = true, --Do you want to use the built in player blips (on the pause menu & mini-map)?
    data_update_timer = 3, --(in seconds) How many seconds should the blip data from the server side be sent to the client side to be updated?
    blip_type = 'auto', --You can choose 3 different methods for displaying the player blips.
    --'static' = Players will all have the same standard player blip.
    --'auto' = Blips will change automatically depending on the vehicle type. (CAN CAUSE HIGH RESOURCE USAGE!).
    flashing_blips = true, --Do you want blips to flash when a player's vehicle has it's emergancy lights enabled?
    bundle_blips = false, --Do you want to bundle the blips together so they do not spam the pause menu legend?
    radiochannel_on_blips = true, --Do you want a players radio chanel to be displayed on blips?
    minimize_longdistance_blips = true, --Do you want long distance blips to be minimized(smaller size) on the mini-map instead of them being hidden?
    
    blip_sprites = { --These are the blip sprites (icons). More blips can be found here - https://docs.fivem.net/docs/game-references/blips.
        ['static']       = 1,
        ['foot']         = 1,
        ['car']          = 56,
        ['motorcycle']   = 226,
        ['helicopter']   = 43,
        ['boat']         = 427,
    },

    blip_colours = { --If you add more jobs, you need to add them here too. More colours can be found at the bottom of this page - https://docs.fivem.net/docs/game-references/blips.
        --pausemenu_blip_colour: The colour of the player blips on the gta mini-map and pause menu. The 1st one is the default colour and the 2nd one is the flashing colour.
        ['police']      = {3, 1},
        ['sheriff']     = {3, 1},
        ['ambulance']   = {1, 0},
        ['fire']        = {1, 0},
        ['mechanic']    = {2, 0},
        --['CHANGE_ME'] = {3, 1},
    }
}


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                        JOB CALL COMMANDS                         │
-- └──────────────────────────────────────────────────────────────────┘


Config.JobCallCommands = { 
    ENABLE = true,--Do you want to use the job chat commands eg., /911 to send a notification to the police.

    --label: The job display label.
    --command: The chat command.
    --job_table: The jobs who can see the calls. (you can add multiple).
    Civilian_Commands = {
        { command = '911',          job_label = 'Police',       job_table = {'police', } },
        { command = '911ems',       job_label = 'Ambulance',    job_table = {'ambulance', } },
        { command = 'mechanic',     job_label = 'Mechanic',     job_table = {'mechanic', } },
        --{ job_label = 'CHANGE_ME',      command = 'CHANGE_ME',  job_table = {'police', } },
    },
    
    JobReply_Command = 'reply' --The chat command for the jobs above^ to reply to incomming calls.
}


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                          KEYS & COMMANDS                         │
-- └──────────────────────────────────────────────────────────────────┘


Config.small_ui = {
    ENABLE = true, --Do you want to enable the small UI?
    command = 'dispatchsmall', --The chat command.
    key = 'u' --The key press. You can choose other keys here - https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/.
}

Config.large_ui = {
    ENABLE = true, --Do you want to enable the large map UI?
    command = 'dispatchlarge',
    key = 'l'
}

Config.respond = {
    ENABLE = true, --Do you want to enable the units responding feature?
    command = 'respond',
    key = 'g'
}

Config.small_ui_left = {
    ENABLE = true, --Do you want to enable the small UI left scroll?
    command = 'scrollleft',
    key = 'left'
}

Config.small_ui_right = {
    ENABLE = true, --Do you want to enable the small UI right scroll?
    command = 'scrollright',
    key = 'right'
}


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                          POLICE ALERTS                           │
-- └──────────────────────────────────────────────────────────────────┘


Config.PoliceAlerts = {
    ENABLE = true, --Do you want to use the built in police alerts?
    police_jobs = {'police', }, --The jobs who will be notified from these police alerts.
    whitelisted_jobs = {'ambulance', }, --These jobs will NOT trigger these police alerts.
    cooldown = 30, --(in seconds) This cooldown is to prevent alerts from being spammed by the same player.
    add_bolos = true, --(requires cd_radar) Do you want to add a bolo for the vehicle that was used in the crime?
    require_witness_peds = {
        ENABLE = true, --Do you want police alerts only to be sent if a witness (npc ped) is in the area?
        distance = 30, --The distance to check for witnesses.
        time_to_kill = 10, --(in seconds) You have x amount of seconds to kill/injure the ped(s) calling the police before the call is complete.
    },

    --[[GUNSHOTS CONFIG]]--
    GunShots = {
        ENABLE = true, ---Do you want gunshots to alert police?
        
        WhitelistedZones = { --Shooting in whitelisted areas doesn't alert police.
            [1] = {coords = vector3(13.98, -1098.05, 29.8), distance = 20}, --Legion gunrange.
            [2] = {coords = vector3(821.09, -2163.46, 78.67), distance = 20}, --Cypress Flats gunrange.
            --[3] = {coords = vector3(0, 0, 0), distance = 10},
        },
        WhitelistedWeapons = { --Shooting whitelisted weapons doesn't alert police.
            [`WEAPON_FLARE`] = true,
            [`WEAPON_FLAREGUN`] = true,
            [`WEAPON_FIREEXTINGUISHER`] = true,
            [`WEAPON_PETROLCAN`] = true,
            [`WEAPON_STUNGUN`] = true,
            --[`ADD_MORE_HERE`] = true,
        },
    },

    --[[SPEEDTRAP CONFIG]]--
    SpeedTrap = {
        ENABLE = true, ----Do you want speeding vehicles to alert police?
        check_owner_for_fine = true, --Only fine players if they own the vehicle they are in? (if enabled, players in stolen cars will not be fined).

        Blip = {
            ENABLE = true, --Do you want speed traps to display on a players minimap?
            sprite = 184, --Icon of the blip.
            scale = 0.7, --Size of the blip.
            colour = 0, --Colour of the blip.
            display = 5, --Set to [4] to display on the pause menu map or [5] to only display on the mini-map.
            name = GetLocales('speedtrap_blip_name') --Change this in the locales.lua, not here.
        },

        Locations = {
            --coords: The location of the speed trap.
            --distance: The distance a player must be from the 'coords^' to alert the speed trap. 
            --speed_limit: The minimum speed to alert the speed trap (in MPH). 
            --fine_amount: The amount the player will be fined (set to 0 to not fine a player).
            [1] = {coords = vector3(1051.42, 331.11, 84.00), distance = 9, speed_limit = 150, fine_amount = 500 }, --LS Freeway.
            [2] = {coords = vector3(544.43, -373.24, 33.14), distance = 9, speed_limit = 150, fine_amount = 5000 }, --Into Legion.
            [3] = {coords = vector3(-2612.10, 2940.81, 16.67), distance = 15, speed_limit = 150, fine_amount = 1000 }, --Zancuda.
            [4] = {coords = vector3(287.94, -517.44, 42.89), distance = 15, speed_limit = 100, fine_amount = 500 }, --Pillbox.
            [5] = {coords = vector3(2792.73, 4407.68, 48.44), distance = 24, speed_limit = 150, fine_amount = 1000 }, --Sandy Freeway.
            [6] = {coords = vector3(577.11, -1028.32, 37.07), distance = 15, speed_limit = 100, fine_amount = 1000 }, --Mission Row.
            [7] = {coords = vector3(114.83, -797.89, 30.97), distance = 15, speed_limit = 100, fine_amount = 2000 }, --Legion Square.
            [8] = {coords = vector3(74.33, -163.30, 54.67), distance = 15, speed_limit = 100, fine_amount = 4000 }, --Pink Cage.
            [9] = {coords = vector3(28.19, -971.05, 28.96), distance = 15, speed_limit = 100, fine_amount = 1000 }, --PDM.
            --[10] = {coords = vector3(0, 0, 0), distance = 15, speed_limit = 50, fine_amount = 1000 },
        }
    },

    --[[CAR CRASH CONFIG]]--
    CarCrash = {
        ENABLE = true, ----Do you major car crashes to alert police?
        minimum_crash_speed = 10, --(in mph) Only count crashes at or above this speed.
    }
}

-- ┌──────────────────────────────────────────────────────────────────┐
-- │                             OTHER                                │
-- └──────────────────────────────────────────────────────────────────┘


function Round(cd)return math.floor(cd+0.5) end
function Trim(cd) return cd:gsub('%s+', '') end
function RoundDec(cd) return math.floor(cd * 100 + 0.5) / 100 end

function GetMultiJob(job)
    for cd = 1, #Config.AllowedJobs do
        for c, d in pairs(Config.AllowedJobs[cd]) do
            if d == job then
                return Config.AllowedJobs[cd]
            end
        end
    end
    return false
end

function GetConfig()
    return Config
end


-- ┌──────────────────────────────────────────────────────────────────┐
-- │                          AUTO DETECT                             │
-- └──────────────────────────────────────────────────────────────────┘


-----DO NOT TOUCH ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING.-----
if Config.Framework == 'auto_detect' then
    if GetResourceState(Config.FrameworkTriggers.esx.resource_name) == 'started' then
        Config.Framework = 'esx'
    elseif GetResourceState(Config.FrameworkTriggers.qbcore.resource_name) == 'started' then
        Config.Framework = 'qbcore'
    end
    if Config.Framework == 'esx' or Config.Framework == 'qbcore' then
        for c, d in pairs(Config.FrameworkTriggers[Config.Framework]) do
            Config.FrameworkTriggers[c] = d
        end
        Config.FrameworkTriggers.esx, Config.FrameworkTriggers.qbcore = nil, nil
    end
end

if Config.Database == 'auto_detect' then
    if GetResourceState('mysql-async') == 'started' then
        Config.Database = 'mysql'
    elseif GetResourceState('ghmattimysql') == 'started' then
        Config.Database = 'ghmattimysql'
    elseif GetResourceState('oxmysql') == 'started' then
        Config.Database = 'oxmysql'
    end
end

if Config.Notification == 'auto_detect' then
    if GetResourceState('cd_notifications') == 'started' then
        Config.Notification = 'cd_notifications'
    elseif GetResourceState('okokNotify') == 'started' then
        Config.Notification = 'okokNotify'
    elseif GetResourceState('ps-ui') == 'started' then
        Config.Notification = 'ps-ui'
    elseif GetResourceState('ox_lib') == 'started' then
        Config.Notification = 'ox_lib'
    else
        if Config.Framework == 'esx' or Config.Framework == 'qbcore' then
            Config.Notification = Config.Framework
        else
            Config.Notification = 'chat'
        end
    end
end

if Config.Inventory == 'auto_detect' then
    if GetResourceState('ox_inventory') == 'started' then
        Config.Inventory = 'ox_inventory'
    elseif GetResourceState('qb-inventory') == 'started' then
        Config.Inventory = 'qb-inventory'
    elseif GetResourceState('qs-inventory') == 'started' then
        Config.Inventory = 'qs-inventory'
    else
        if Config.Framework == 'esx' or Config.Framework == 'qbcore' then
            Config.Inventory = Config.Framework
        end
    end
end

if Config.Framework == 'esx' then
    Config.FrameworkSQLtables = {
        vehicle_table = 'owned_vehicles',
        vehicle_identifier = 'owner',
    }
elseif Config.Framework == 'qbcore' then
    Config.FrameworkSQLtables = {
        vehicle_table = 'player_vehicles',
        vehicle_identifier = 'citizenid',
    }
end

if Config.AntiCheat.ENABLE == false then
    Config.AntiCheat.BannedWords.ENABLE = false
    Config.AntiCheat.BannedWords.EventSpam = false
end
-----DO NOT TOUCH ANYTHING ABOVE THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING.-----

JS Config

// *Model notes
// If you are adding custom models be aware of their polygon counts and file sizes.
// The map is already pretty heavy on polygons, so if adding new models make sure their polygon count is low and file size is small.

// The higher polygon counts won't make a difference on higher end machines, but on lower end machines it will cause stuttering and lag.
// This is also the reason why we are using the lowest quality GTA 5 models by default.

// Besides adding an entry here for the custom model, you will also need to add the model to the models/placeable folder in the correct format.
// THE MODEL MUST BE IN **.GLB** FORMAT.

// The map also supports DRACO compression for the models.
window['models'] = {
    police: // Job name. Change this to the name of your job. This is used in the code and should be unique.
        {
            car:{ // Car model configuration. Do not change the name "car" as it is used in the code.
                file_name: "police.glb", // File name of the vehicle/ped model inside the models/placeable folder.
                scale: 2, // Scale of the model. 1 is default scale. Adjust as needed. Can use decimals (E.g. 0.01 or 0.1 and so on)
                position_adjustment: { // Position adjustment for the model. Adjust as needed. Shifts the model in the X, Y and Z axis.
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: { // Rotation adjustment for the model in DEGREES. Adjust as needed. Correct rotation enables heading tracking.
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            foot: {
                file_name: "s_m_y_cop_01.glb",
                scale: 3,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            helicopter : {
                file_name: "polmav.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            boat : {
                file_name: "predator.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            motorcycle: {
                file_name: "policeb.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            }
    },
    ambulance: {
        car:{ 
            file_name: "ambulance.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        foot: {
            file_name: "s_m_m_doctor_01.glb",
            scale: 3,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
    },
    mechanic: {
        car:{ 
            file_name: "towtruck4.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        foot: {
            file_name: "s_m_m_autoshop_02.glb",
            scale: 3,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        }
    },
    fire: {
        car:{ 
            file_name: "firetruk.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        foot: {
            file_name: "s_m_y_fireman_01.glb",
            scale: 3,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        }
    },
    taxi: {
        car:{ 
            file_name: "taxi.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
    },
    // The default model list is used if the job does not have an entry in the models object.
    // The entries of the default model list are used as a fallback if the job does not have an entry in the models object for the specific mode of transport.
    default: {
        car:{ 
            file_name: "tailgater2.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        foot: {
            file_name: "ig_tylerdix_02.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        helicopter : {
            file_name: "maverick.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        boat : {
            file_name: "dinghy.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        },
        motorcycle: {
            file_name: "bati.glb",
            scale: 2,
            position_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            },
            rotation_adjustment: {
                x: 0,
                y: 0,
                z: 0,
            }
        }
    }
}


// List of available status messages and their colors.
window['status_messages'] = [
    {name:"Available", color:"#198754"}, // The status will default to the first one in the list
    {name:"Unavailable", color:"#ff5d57"},
    {name:"Processing", color:"#fd7e14"},
    {name:"Training", color:"#0d6efd"},
    {name:"Undercover", color:"#6f42c1"},
  ];

window['transport_icons'] = {
    motorcycle: `<svg fill="#fff" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" xml:space="preserve"><path d="M256 345.043c-27.619 0-50.087 22.468-50.087 50.087v66.783C205.913 489.532 228.381 512 256 512s50.087-22.468 50.087-50.087V395.13c0-27.619-22.468-50.087-50.087-50.087"/><path d="M422.957 66.783h-85.161C330.04 28.724 296.316 0 256 0s-74.04 28.724-81.795 66.783H89.044c-9.217 0-16.696 7.473-16.696 16.696s7.479 16.696 16.696 16.696h85.161c3.612 17.723 12.915 33.352 25.833 45.068-54.187 22.761-92.439 76.395-92.439 138.584V404.37c0 22.521 18.315 40.848 40.836 40.848h24.087V395.13c0-46.032 37.446-83.478 83.478-83.478s83.478 37.446 83.478 83.478v50.087h25.935c22.521 0 40.848-18.326 40.848-40.848V283.826c0-62.655-38.855-116.587-93.788-139.048 12.652-11.665 21.759-27.115 25.323-44.604h85.161c9.217 0 16.696-7.473 16.696-16.696s-7.479-16.695-16.696-16.695M256 133.565c-27.619 0-50.087-22.468-50.087-50.087S228.381 33.391 256 33.391s50.087 22.468 50.087 50.087-22.468 50.087-50.087 50.087"/></svg>`,
    foot: '<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M160 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM126.5 199.3c-1 .4-1.9 .8-2.9 1.2l-8 3.5c-16.4 7.3-29 21.2-34.7 38.2l-2.6 7.8c-5.6 16.8-23.7 25.8-40.5 20.2s-25.8-23.7-20.2-40.5l2.6-7.8c11.4-34.1 36.6-61.9 69.4-76.5l8-3.5c20.8-9.2 43.3-14 66.1-14c44.6 0 84.8 26.8 101.9 67.9L281 232.7l21.4 10.7c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L247 287.3c-10.3-5.2-18.4-13.8-22.8-24.5l-9.6-23-19.3 65.5 49.5 54c5.4 5.9 9.2 13 11.2 20.8l23 92.1c4.3 17.1-6.1 34.5-23.3 38.8s-34.5-6.1-38.8-23.3l-22-88.1-70.7-77.1c-14.8-16.1-20.3-38.6-14.7-59.7l16.9-63.5zM68.7 398l25-62.4c2.1 3 4.5 5.8 7 8.6l40.7 44.4-14.5 36.2c-2.4 6-6 11.5-10.6 16.1L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L68.7 398z"/></svg>',
    car: '<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 117.4L109.1 192l293.8 0-26.1-74.6C372.3 104.6 360.2 96 346.6 96L165.4 96c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32l181.2 0c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2l0 144 0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L96 400l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L0 256c0-26.7 16.4-49.6 39.6-59.2zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z"/></svg>',
    helicopter:
        '<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 640 512"><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 32c0-17.7 14.3-32 32-32L544 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L384 64l0 64 32 0c88.4 0 160 71.6 160 160l0 64c0 17.7-14.3 32-32 32l-160 0-64 0c-20.1 0-39.1-9.5-51.2-25.6l-71.4-95.2c-3.5-4.7-8.3-8.3-13.7-10.5L47.2 198.1c-9.5-3.8-16.7-12-19.2-22L5 83.9C2.4 73.8 10.1 64 20.5 64L48 64c10.1 0 19.6 4.7 25.6 12.8L112 128l208 0 0-64L160 64c-17.7 0-32-14.3-32-32zM384 320l128 0 0-32c0-53-43-96-96-96l-32 0 0 128zM630.6 425.4c12.5 12.5 12.5 32.8 0 45.3l-3.9 3.9c-24 24-56.6 37.5-90.5 37.5L256 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l280.2 0c17 0 33.3-6.7 45.3-18.7l3.9-3.9c12.5-12.5 32.8-12.5 45.3 0z"/></svg>',
    boat: '<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M192 32c0-17.7 14.3-32 32-32L352 0c17.7 0 32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 128 44.4 14.8c23.1 7.7 29.5 37.5 11.5 53.9l-101 92.6c-16.2 9.4-34.7 15.1-50.9 15.1c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-16.2 0-34.7-5.7-50.9-15.1l-101-92.6c-18-16.5-11.6-46.2 11.5-53.9L96 240l0-128c0-26.5 21.5-48 48-48l48 0 0-32zM160 218.7l107.8-35.9c13.1-4.4 27.3-4.4 40.5 0L416 218.7l0-90.7-256 0 0 90.7zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z"/></svg>',
    dispatcher: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-headset" viewBox="0 0 16 16"><path d="M8 1a5 5 0 0 0-5 5v1h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a6 6 0 1 1 12 0v6a2.5 2.5 0 0 1-2.5 2.5H9.366a1 1 0 0 1-.866.5h-1a1 1 0 1 1 0-2h1a1 1 0 0 1 .866.5H11.5A1.5 1.5 0 0 0 13 12h-1a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h1V6a5 5 0 0 0-5-5"/></svg>`,
}

Last updated

Was this helpful?