# Config Script

{% code title="config.lua" %}

```lua
-- ! ███████╗██╗██╗   ██╗███████╗███████╗████████╗ █████╗ ██████╗ 
-- ! ██╔════╝██║██║   ██║██╔════╝██╔════╝╚══██╔══╝██╔══██╗██╔══██╗
-- ! █████╗  ██║██║   ██║█████╗  ███████╗   ██║   ███████║██████╔╝
-- ! ██╔══╝  ██║╚██╗ ██╔╝██╔══╝  ╚════██║   ██║   ██╔══██║██╔══██╗
-- ! ██║     ██║ ╚████╔╝ ███████╗███████║   ██║   ██║  ██║██║  ██║
-- ! ╚═╝     ╚═╝  ╚═══╝  ╚══════╝╚══════╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝
-- ! 		   Copyright ® 2023 Lorem All rights FiveStar
-- ! 		    5star.tebex.io | Discord/HdEzqEJBdh
Config = {}

-- * If an update is released for the script, it will not allow the script to start and will cause the server to shut down
Config.CheckVersion = true

Config.CoreName = 'qb-core' ---@param Enter your core name

Config.Display = {
    TargetExport = function(PedData)
        exports['qb-target']:AddTargetEntity(PedData, {
            options = {{
                action = function()
                    if GetPedDrawableVariation(PlayerPedId(), 2) == Config.Display.Ears then
                        ShowUI()
                    else
                        QBCore.Functions.Notify(Config.Text[3])
                    end
                end,
                icon = "far fa-clipboard",
                label = "To talk to the boss"
            }},
            distance = 2
        })
    end,
    Blips = {
        Main = {
            Display = true,
            Color = 0,
            Size = 0.9,
            Type = 429,
            Name = "Gang Mission"
        },
        Destination = {
            Color = 28,
            Size = 1.0,
            Type = 1,
            Name = "Destination"
        }
    },
    Peds = {
        Boss = {
            Model = 'g_m_m_armboss_01',
            Coords = vector4(990.87, -97.2365, 74.945, 95.83),
            SetPed = function(Ped)
                Citizen.CreateThread(function()
                    while true do
                        local dict
                        if math.random(0, 1) == 1 then
                            dict = "timetable@trevor@smoking_meth@base"
                        else
                            dict = "timetable@maid@couch@"
                        end

                        RequestAnimDict(dict)
                        while not HasAnimDictLoaded(dict) do
                            Citizen.Wait(100)
                        end

                        TaskPlayAnim(Ped, dict, "base", 8.0, -8.0, -1, 1, 0, false, false, false)
                        Citizen.Wait(60000)
                    end
                end)
            end
        },
        Guard = {
            Peds = {{
                Model = "csb_vincent",
                Coords = vector4(982.5726, -102.433, 74.848, 226.2)
            }, {
                Model = "s_m_m_highsec_01",
                Coords = vector4(990.2810, -95.5951, 74.845, 130.01)
            }, {
                Model = "s_m_m_strpreach_01",
                Coords = vector4(984.1010, -100.732, 74.845, 319.53)
            }},
            AGuardLastPlace = vector4(979.6430, -136.066, 73.332, 338.91),
            SetPed = function(Ped)
                TaskStartScenarioInPlace(Ped, "WORLD_HUMAN_GUARD_STAND", 0, true)
            end
        },
        Colleague = {
            Model = "s_m_y_xmech_02",
            MainPlace = vector4(-1074.82, -1672.95, 4.48, 281.22),
            LastPlace = vector4(-1076.23, -1673.1, 4.53, 312.13),
            SetPed = function(Ped)
                TaskStartScenarioInPlace(Ped, "WORLD_HUMAN_STAND_MOBILE", 0, true)
            end
        }
    },
    Vehicles = {
        VehicleBoss = {
            Model = "tempesta",
            Coords = vector4(985.0824, -137.955, 72.429, 60.55),
            SetVehicle = function(vehicle)
                SetVehicleDoorsLocked(vehicle, 2)
                SetVehicleColourCombination(vehicle, 11)
                FreezeEntityPosition(vehicle, true)
            end
        },
        VehicleColleague = {
            Model = "stafford",
            Coords = vector4(-1073.75, -1673.8, 3.92, 308.24),
            Coords2 = vector4(-1036.7, -2729.31, 19.55, 240.52),
            SetVehicle = function(vehicle, isVehicle2)
                if isVehicle2 then
                    FreezeEntityPosition(vehicle, true)
                    SetVehicleDoorsLocked(vehicle, 4)
                end
                SetVehicleColourCombination(vehicle, 11)
            end
        }
    },
    DependencyToStart = {
        Display = true,
        Job = "police",
        Number = 1, -- 4
        Rank = 2
    },
    Modifier = {
        Start = "MP_job_load",
        End = "default"
    },
    Cameras = {{
        pos = vector3(2372.330, 5984.714, 350.22),
        rot = vector3(0.00, 0.00, -200.0),
        fov = 45.0
    }, {
        pos = vector3(2540.076, -461.938, 359.95),
        rot = vector3(0.0, 0.00, 120.73),
        fov = 50.0
    }, {
        pos = vector3(-558.520, -2484.38, 89.578),
        rot = vector3(0.0, 0.00, 345.0),
        fov = 15.0
    }, {
        pos = vector3(-1040.79, -1170.69, 89.454),
        rot = vector3(0.0, 0.00, 289.91),
        fov = 40.0
    }, {
        pos = vector3(-1050.18, -245.505, 132.39),
        rot = vector3(0.0, 0.00, 242.0),
        fov = 45.0
    }, {
        pos = vector3(407.9123, 550.6121, 210.23),
        rot = vector3(0.0, 0.00, 158.0),
        fov = 45.0
    }, {
        pos = vector3(652.3752, 960.2534, 340.45),
        rot = vector3(0.0, 0.00, 345.0),
        fov = 45.0
    }},
    Text3D = {
        Display = true,
        data = {
            [1] = {
                Text = "Club Mission",
                Text2 = "Mission started",
                Sound = true
            },
            [2] = {
                Text = "POWER ON ",
                Text2 = "FiveStar Development",
                Sound = false
            }
        }
    },
    ToggleGps = true,
    Ears = 0,
    AddonSounds = {
        [1] = {
            Play = true,
            AudioName = "Colleague_Sound",
            AudioVolume = 0.75
        },
        [2] = {
            Play = true,
            AudioName = "Timer",
            AudioVolume = 0.8
        },
        [3] = {
            Play = true,
            AudioName = "Earthquake",
            AudioVolume = 0.8
        },
        [4] = {
            Play = true,
            AudioName = "2_Boss_Sound",
            AudioVolume = 0.35
        },
        [5] = {
            Play = true,
            AudioName = "3_Boss_Sound",
            AudioVolume = 0.35
        },
        [6] = {
            Play = true,
            AudioName = "5_Boss_Sound",
            AudioVolume = 0.75
        },
        [7] = {
            Play = true,
            AudioName = "6_Boss_Sound",
            AudioVolume = 0.75
        },
        [8] = {
            Play = true,
            AudioName = "1_Boss_Sound",
            AudioVolume = 0.35
        },
        [9] = {
            Play = true,
            AudioName = "4_Boss_Sound",
            AudioVolume = 0.35
        },
        [10] = {
            Play = true,
            AudioName = "7_Boss_Sound",
            AudioVolume = 0.75
        },
        [11] = {
            Play = true,
            AudioName = "8_Boss_Sound",
            AudioVolume = 0.75
        },
        [12] = {
            Play = true,
            AudioName = "9_Boss_Sound",
            AudioVolume = 0.75
        },
        [13] = {
            Play = true,
            AudioName = "10_Boss_Sound",
            AudioVolume = 0.75
        },
        [14] = {
            Play = true,
            AudioName = "11_Boss_Sound",
            AudioVolume = 0.75
        },
        [15] = {
            Play = true,
            AudioName = "12_Boss_Sound",
            AudioVolume = 0.75
        },
        [16] = {
            Play = true,
            AudioName = "13_Boss_Sound",
            AudioVolume = 0.75
        },
        [17] = {
            Play = true,
            AudioName = "14_Boss_Sound",
            AudioVolume = 0.75
        },
        [18] = {
            Play = true,
            AudioName = "15_Boss_Sound",
            AudioVolume = 0.75
        },
        [19] = {
            Play = true,
            AudioName = "16_Boss_Sound",
            AudioVolume = 0.75
        },
        [20] = {
            Play = true,
            AudioName = "17_Boss_Sound",
            AudioVolume = 0.75
        },
        [21] = {
            Play = true,
            AudioName = "18_Boss_Sound",
            AudioVolume = 0.75
        },
        [22] = {
            Play = true,
            AudioName = "MissionMenu_Sound",
            AudioVolume = 0.15
        },
        [23] = {
            Play = true,
            AudioName = "19_Boss_Sound",
            AudioVolume = 0.75
        },
        [24] = {
            Play = true,
            AudioName = "20_Boss_Sound",
            AudioVolume = 0.75
        }
    },
    GameSounds = {
        [1] = {
            Play = true,
            AudioName = "Enter_Area",
            AudioRef = "DLC_Lowrider_Relay_Race_Sounds"
        },
        [2] = {
            Play = true,
            AudioName = "Enter_Area",
            AudioRef = "DLC_Lowrider_Relay_Race_Sounds"
        },
        [3] = {
            Play = true,
            AudioName = "Enter_Area",
            AudioRef = "DLC_Lowrider_Relay_Race_Sounds"
        },
        [4] = {
            Play = true,
            AudioName = "Timer_10s",
            AudioRef = "DLC_HALLOWEEN_FVJ_Sounds"
        },
        [5] = {
            Play = true,
            AudioName = "TIMER_STOP",
            AudioRef = "HUD_MINI_GAME_SOUNDSET"
        }
    },
    Signal = function(Location, Signal) ---@param Location ==> vector3 | Signal ==> Number
        if Signal == 1 then
            -- send signal to police(Cutscene deliver location) 
        elseif Signal == 2 then
            -- send signal to police(Boss Gang)
        end
    end
}

Config.LeavingPlayer = true -- ? -- ? If the player cancel the game but does not leave the area, he/she will be attacked by the Guard.

Config.DamageVehicle = {
    Missions = {
        WarningDamage = 99,
        ErrorDamage = 92,
        ErrorDamageLevel0 = true
    },
    Sequence = {
        WarningDamage = 99,
        ErrorDamage = 92,
        ErrorDamageLevel1 = true
    },
    Colleague = {
        WarningDamage = 99,
        ErrorDamage = 95,
        ErrorDamageLevel2 = true
    },
    PadBoss = {
        WarningDamage = 94,
        ErrorDamage = 90,
        ErrorDamageLevel3 = true
    }
}

Config.Location = {
    [1] = {
        Coords = vector3(-1064.41, -1663.73, 3.99),
        Distance = 1.5,
        Time = 150,
        ShowUI = function()
            lib.showTextUI('[E] to deliver the car', {
                position = "left-center",
                icon = 'fas fa-sign-in-alt',
                style = {
                    borderRadius = '0.5vw',
                    backgroundColor = '#013596',
                    boxShadow = '0vw 0vw 0.3vw #013596',
                    border = '1 solid #ffff',
                    color = 'white'
                }
            })
        end,
        HideUI = function()
            lib.hideTextUI()
        end
    },
    [2] = {
        Coords = vector3(-1037.68, -2726.77, 19.80),
        Distance = 3,
        Time = 120,
        ShowUI = function()
            lib.showTextUI('[E] to park the car', {
                position = "left-center",
                icon = 'fas fa-sign-in-alt',
                style = {
                    borderRadius = '0.5vw',
                    backgroundColor = '#181818',
                    boxShadow = '0vw 0vw 0.3vw #181818',
                    color = 'white'
                }
            })
        end,
        HideUI = function()
            lib.hideTextUI()
        end
    },
    [3] = {
        Coords = vector3(1482.69, -1918.4, 70.70),
        Distance = 3,
        ShowUI = function()
            lib.showTextUI('[E] go to the banker', {
                position = "left-center",
                icon = 'fas fa-sign-in-alt',
                style = {
                    borderRadius = '0.5vw',
                    backgroundColor = '#00552d',
                    boxShadow = '0vw 0vw 0.3vw #00552d',
                    color = 'white'
                }
            })
        end,
        HideUI = function()
            lib.hideTextUI()
        end
    },
    [4] = {
        Coords = vector3(894.34, -3245.99, -98.80),
        Distance = 10,
        TimeMission = {
            [1] = 90,
            [2] = 160,
            [3] = 230
        },
        ShowUI = function()
            lib.showTextUI('[E] to get out of the bunker', {
                position = "left-center",
                icon = 'fas fa-sign-in-alt',
                style = {
                    borderRadius = '0.5vw',
                    backgroundColor = '#181818',
                    boxShadow = '0vw 0vw 0.3vw #181818',
                    color = 'white'
                }
            })
        end,
        HideUI = function()
            lib.hideTextUI()
        end
    }
}

Config.MissionRewards = {
    [1] = math.random(25000, 35000),
    [2] = math.random(50000, 65000),
    [3] = math.random(68000, 85000)
}

Config.ShowTextForBag = {
    progressBar = function()
        if lib.progressBar({
            duration = 3500,
            label = 'Searching for bag',
            useWhileDead = false,
            canCancel = false
        }) then
            return true
        end
    end,
    OverHead = {
        Display = true,
        Text = "[E] To search the bag"
    },
    ShowMenu = function()
        ShowQustionMission("Who is the item For?", {
            Title = "For Myself",
            text = "Pick All The Items For myself",
            buttom = "confirm"
        }, {
            Title = "For Boss",
            text = "Pick all the items for the boss",
            buttom = "confirm"
        })
    end
}

Config.CreateBag = {
    ShowInvetory = function(BagID, Identifier)
        exports.ox_inventory:openInventory('stash', {
            id = BagID, 
            owner = Identifier
        })
    end,
    Data = {
        label = "Matteo Malleri Bag",
        slots = 50,
        weight = 100000
    },
    Items = { -- ? Add items to the bag here
    {
        Name = "crypto_hardware",
        Count = 1,
        customer = 2
    }, {
        Name = "diamond",
        Count = 8,
        customer = 1
    }, {
        Name = "gold",
        Count = 3,
        customer = 2
    }, {
        Name = "laptop",
        Count = 2,
        customer = 3
    }, {
        Name = "rolex",
        Count = 1,
        customer = 2
    }, {
        Name = "platinum",
        Count = 2,
        customer = 1
    }, {
        Name = "phone",
        Count = 1
    }, {
        Name = "bread",
        Count = 2
    }, {
        Name = "water",
        Count = 1
    }},
    RegisterBag = function(BagID, Identifier)
        exports.ox_inventory:RegisterStash(BagID, Config.CreateBag.Data.label, Config.CreateBag.Data.slots,
            Config.CreateBag.Data.weight, Identifier)
        for i, v in ipairs(Config.CreateBag.Items) do
            exports.ox_inventory:AddItem(BagID, v.Name, v.Count)
        end
    end,
    ReceivedTheItemsAndExitedTheGame = function(xPlayer, Cutscene) -- Cutscene --- @param [0], [1], [2], [3]
        -- ! The player is out of the game

        if Cutscene[0] then -- If Cutscene equals 0, it means that none of the items have been delivered
            -- Remove player inventory item Mission 0/3
            -- exports.ox_inventory:ClearInventory(xPlayer.source)
        elseif Cutscene[1] then
            -- Remove player inventory item Mission 1/3
            -- exports.ox_inventory:ClearInventory(xPlayer.source)
        elseif Cutscene[2] then
            -- Remove player inventory item Mission 2/3
            -- exports.ox_inventory:ClearInventory(xPlayer.source)
        elseif Cutscene[3] then
            -- Remove player inventory item Mission 3/3
            -- exports.ox_inventory:ClearInventory(xPlayer.source)
        end
    end
}

Config.SpawnPedForKillMe = {{
    Ped = "g_m_y_ballaorig_01",
    Coords = vector4(1455.414, -1898.58, 71.929, 140.47),
    Weapon = "WEAPON_KNIFE"
}, {
    Ped = "g_m_y_ballasout_01",
    Coords = vector4(1449.266, -1906.91, 71.685, 358.09),
    Weapon = "WEAPON_KNIFE"
}, {
    Ped = "g_m_y_famca_01",
    Coords = vector4(1449.777, -1896.21, 71.613, 190.53),
    Weapon = "WEAPON_KNIFE"
}, {
    Ped = "g_m_y_lost_03",
    Coords = vector4(1444.542, -1905.19, 71.486, 321.01),
    Weapon = "WEAPON_PISTOL"
}, {
    Ped = "g_m_y_famfor_01",
    Coords = vector4(1444.554, -1891.00, 71.718, 265.68),
    Weapon = "WEAPON_PISTOL"
}, {
    Ped = "g_m_y_pologoon_02",
    Coords = vector4(1464.295, -1882.59, 71.739, 137.41),
    Weapon = "WEAPON_PISTOL"
}}

Config.Prop = {
    PropVehicle = {
        PropBones = 24818,
        Prop = 'p_michael_backpack_s',
        PropCoords = {0.0, -1.16, 0.24, 0.0, -0.0, 350.0}
    },
    PropTalmm = {
        PropBones = 24818,
        Prop = 'p_michael_backpack_s',
        PropCoords = {0.07, -0.11, -0.05, 0.0, 90.0, 175.0}
    }
}

Config.StatusMission = { -- ? Client-side
    Passed = function(Status)
        if Status == "Me" then
            -- ? Mission Passed by Me
        elseif Status == "Boss" then
            -- ? Mission Passed by Boss
        end
    end
}

--- @param [QBCore]: All notifications are called from QBCore.Functions.Notify function
Config.Text = {
    [1] = "Tried To use %s event",
    [2] = "Mission is cooldown.",
    [3] = "You must have a airpods!",
    [4] = "Get in the car and go on the mission",
    [5] = "Car health: [%s], If the vehicle health is less than %s, Mission will failed",
    [6] = "Car health: [%s], Mission failed.",
    [7] = "Go to the marked location in the car's GPS",
    [8] = "Mission already started!",
    [9] = "You must deliver the car that the boss gave you.",
    [10] = "To continue the mission, get into the car that your colleague gave you.",
    [11] = "You are not in the car that the boss gave you!",
    [12] = "Down the enemies.",
    [13] = "The passengers got out of the car!",
    [14] = "You don't have Item %s with the amount of %s!",
    [15] = "Tried to change level[%s] Cutscene in Mission Club"
}

Config.MissionText = {
    [1] = "I have heard about your family! Look, listen to me carefully\nI have a new mission for you.",
    [2] = "You have wasted my time. ~r~BUZZ OFF!~s~",
    [3] = "~y~You don't want to go out?~s~ ~r~Alright, no problem!~s~ Guys, let's get it done!",
    [4] = "~g~Wow~s~, ~y~what a good spine!~s~ Go out, one of my men will be waiting for you",
    [5] = "~y~meanwhile, Wait for my next commands and be in touch.~s~",
    [6] = "We will send you the target location, Get there, your colleague will be waiting for you.",
    [7] = "The car is located in front of the garage. Get there and take the car and wait for my next commands.",
    [8] = "~g~Omm nice! Take them to the club and drive safely.",
    [9] = "~r~We have a traitor.~s~ The plan has changed. I will send you the target location, Take them there",
    [10] = "~r~English Dave is traitor, kill them before they understand, ~h~Idiot~s~",
    [11] = "~r~That motherfucker has known of our plan, Kill them all as soon as possible, ~h~Idiot~s~",
    [12] = "~r~~h~Shame on you idiot, Take them quickly into the bunker and kill them.~s~",
    [13] = "~r~kill them all!!!",
    [14] = "~r~You finally got into something you piece of shit,~s~\n Empty the Matthew's bag items.",
    [15] = "~r~~h~You bastard, Don't you wanna deliver the items?~s~ I will kick your ass.",
    [16] = "I will mark different places on the map and you have to go there and deliver the package they want.",
    [17] = "~y~~h~The next location is out of the town, Be fast.",
    [18] = "~y~~h~The next customer want to see the packages, Get there and deliver the items.",
    [19] = "~y~~g~You are my top priority, Be in touch!!",
    [20] = "~r~I don't need you now, come back later",
    [21] = "~g~You did your job very well, maybe next time\n~y~I will let you know"
}
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://fivestar-development.gitbook.io/docs/scripts/fivestar-missionclub/qb/config-script.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
