Brutal Scripts
YouTubeDiscordStore
  • 🙉About Us
  • ↗️Translate
  • Informations
    • 🔒Escrow System
    • 🔥Common Problems
  • Scripts
    • 📄Notify
      • Accessible files
      • Installation guide
    • 🔠Text-UI
      • Installation guide
      • Exports & How to use
      • Integrations
    • 🤟Gangs
      • Accessible files
      • Installation guide
      • exports / triggers
      • Create a new gang
    • 🏡Housing
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔑Keys
      • Accessible files
      • Installation guide
      • exports / triggers
    • 💥Gang Actions
      • Accessible files
      • Installation guide
      • exports / triggers
      • Controlling the menu
    • ⭕Radial
      • Accessible files
      • Installation guide
      • Adding new buttons
    • 🎯Executions
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🐶Pets + K9 V2
      • Accessible files
      • Installation guide
    • 👮Police Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🚑Ambulance Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔧Mechanic Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 💪GYM with Skills V2
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔫Paintball
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🥊Boxing
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔨Crafting
      • Accessible files
      • Installation guide
      • Creating a new crafting table
    • 🏦Banking
      • Accessible files
      • Installation guide
      • Paycheck transactions
      • Registering transactions
    • 🎳Bowling
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🦌Hunting
      • Accessible files
      • Installation guide
    • 🏁Racing Script
      • Accessible files
      • Installation guide
    • 🐛Reports
      • Accessible files
      • Installation guide
    • 🛒Shop Robbery
      • Accessible files
      • Installation guide
    • 🛥️Yacht Heist
      • Accessible files
      • Installation guide
    • 🧾Billing
      • Accessible files
      • Installation guide
      • Triggers
    • 💰Truck Robbery
      • Accessible files
      • Installation guide
    • 🏧Atm Robbery
      • Accessible files
      • Installation guide
    • 👶Baby script
      • Installation guide
      • How to add more babys
  • Others
    • Register Key Mapping
    • Drill Minigame
    • Discord Webhook
Powered by GitBook
On this page

Was this helpful?

  1. Scripts
  2. Yacht Heist

Accessible files

Here you can find all the files which can be edite to make the asset compatible with your server.​

config.lua
Config = {
    Core = 'ESX',  -- ESX / QBCORE | Other core setting on the 'core' folder and the client and server utils.lua
    BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
    TextUI = 'ox_lib', -- 'ox_lib' / 'okokTextUI' / 'ESXTextUI' / 'QBDrawText' // Custom can be add in the cl_utils.lua!!!
    CopsJobs = {'police', 'fbi'}, -- Add the cops jobs
    RequiredCopsCount = 0, -- This is how many cops are needed to be in the server to start a heist
    Cooldown = 60, -- The time between robberies | in minutes
    MaxDistance = 120, -- The heist ends after this distance.
    DisableControls = {170,168,24,257,25,263,32,34,31,30,45,22,44,23,288,289,170,167,73,199,59,71,72,36,47,264,257,140,141,142,143,75},
    
    MHacking = {
        Characters = 7, -- How many characters you have to find in each lines
        Time = 20 -- How much time you have for the hacking
    },

    Items = {
        HackingItem = {remove = false, item = 'hacking_device'},
        DrillingItem = {remove = false, item = 'yacht_drill'}, -- It cannot be the same as the "drill" item used in other robberies.
    },

    Coords = {
        Start = vector3(-2031.4377, -1038.0327, 2.5636),
        KeypadCoords = vector3(-2069.735595, -1020.0855, 6.444),
        SafeHacking = vector3(-2070.3191, -1019.8993, 5.4842),
        SafeDoorCoords = vector3(-2069.56, -1019.29, 6.0424),
    },

    ItemsSellToBoss = {
        use = true, -- Use item sell functions? | you can use your custom too
        availableTime = 30, -- in minutes [That's how long the player have to deliver the items after the heist]
        coords = vector4(-274.8105, 167.8665, 77.9090, 84.9507), -- Sell coords
        model = 'a_m_m_eastsa_01', -- Sell NPC model
        blip = {use = true, label = 'Items Sell', size = 0.9, sprite = 500, color = 2}, -- Sell Blip
        ItemPrices = {
            {item = "gold", label = "Gold", sellprice = 2000},
            {item = "diamond", label = "Diamond", sellprice = 5000},
            {item = "whiskey", label = "Whisky", sellprice = 700}, 
            {item = "laptop", label = "Laptop", sellprice = 700},
            {item = "laptop", label = "Laptop", sellprice = 700},
            {item = "gold_award", label = "Gold Award", sellprice = 700},
            {item = "drug_pack", label = "Drug Pack", sellprice = 700},
            {item = "painting", label = "Painting", sellprice = 700},
            {item = "painting", label = "Painting", sellprice = 700},
        }
    },

    Blips = {
        HeistBlip = {Use = true, label = 'Yacht Heist', size = 0.8, sprite = 455, color = 62},
        PoliceAlertBlip = {label = 'Yacht Heist', size = 1.0, sprite = 161, color = 1},
        SafeHackBlip = {Use = false, label = 'Hack the safe', size = 0.8, sprite = 156, color = 62},
    },

    Markers = {
        SafeHacking = {use = true, marker = 20, rgb = {233, 88, 69}, bobUpAndDown = false, rotate = false},
        LockBoxes = {use = true, marker = 20, rgb = {233, 88, 69}, bobUpAndDown = false, rotate = false},
        Trolleys = {use = true, marker = 20, rgb = {233, 88, 69}, bobUpAndDown = false, rotate = false},
    },

    SafeHackingPreset = {
        Levels = 3, -- levels is how many levels you want. Max is 4, Min is 1
        Lifes = 4,  -- lifes is how many life player has, Max is 6, Min is 1
        Time = 3, -- time is how much time player has in minutes, Max is 9, min is 1 (I highly recommend to set it between 3-1)
    },

    LockerChanceforReward = 50, -- in percentages 
    LockerRewards = {
        {item = 'gold', label = 'Gold', count = {5, 10}},
        {item = 'diamond', label = 'Diamond', count = {5, 10}},
    },

    TrollyReward = {item = "money", label = "Money", count = 5000},

    HighlightNearLoots = true,
    CollectableLoots = {
        {item = "whiskey", label = "Whisky", object = "prop_bottle_richard", coords = vector3(-2083.281, -1013.483, 5.755), heading = 0.0, chancetospawn = 50}, -- the chance is in percentages
        {item = "laptop", label = "Laptop", object = "prop_laptop_02_closed", coords = vector3(-2089.171, -1012.758, 5.782), heading = 0.0, chancetospawn = 60},
        {item = "laptop", label = "Laptop", object = "prop_laptop_02_closed", coords = vector3(-2058.118, -1024.084, 12.001), heading = 0.0, chancetospawn = 70},
        {item = "gold_award", label = "Gold Award", object = "ex_prop_exec_award_gold", coords = vector3(-2096.027, -1007.098, 5.750), heading = 0.0, chancetospawn = 50},
        {item = "drug_pack", label = "Drug Pack", object = "hei_prop_hei_drug_pack_02", coords = vector3(-2093.656, -1015.328, 9.074), heading = 80.0, chancetospawn = 90},
        {item = "drug_pack", label = "Drug Pack", object = "ex_office_swag_drugbags", coords = vector3(-2078.893, -1021.743, 5.850), heading = 180.0, chancetospawn = 90},
        {item = "drug_pack", label = "Drug Pack", object = "hei_prop_hei_drug_pack_01a", coords = vector3(-2083.006, -1019.682, 12.739), heading = -17.0, chancetospawn = 100},
    },

    HighlightNearArts = true,
    ArtSteal = {
        {item = "painting", label = "Painting", object = 'ch_prop_vault_painting_01e', coords = vector3(-2085.606, -1021.154, 5.973), heading = 162.0, chancetospawn = 100},
        {item = "painting", label = "Painting", object = 'ch_prop_vault_painting_01h', coords = vector3(-2090.608, -1009.536, 5.926), heading = -107.36, chancetospawn = 100},
    },

    Guards = {
        {
			coords = vector3(-2037.0341, -1027.6553, 5.8820), -- NPC spawn coords
			pedModel = "s_m_m_highsec_01", -- NPC model
			weapon = "WEAPON_ASSAULTRIFLE", -- Weapon
		},
		{
			coords = vector3(-2042.3258, -1038.4536, 5.8827), -- NPC spawn coords
			pedModel = "s_m_m_highsec_01", -- NPC model
			weapon = "WEAPON_ASSAULTRIFLE", -- Weapon
		},
		{
			coords = vector3(-2081.3970, -1025.9827, 5.8828), -- NPC spawn coords
			pedModel = "s_m_m_highsec_01", -- NPC model
			weapon = "WEAPON_ASSAULTRIFLE", -- Weapon
		},
		{
			coords = vector3(-2074.9980, -1018.6064, 5.8841), -- NPC spawn coords
			pedModel = "s_m_m_highsec_01", -- NPC model
			weapon = "WEAPON_ASSAULTRIFLE", -- Weapon
		},
		{
			coords = vector3(-2074.3450, -1014.7513, 5.8820), -- NPC spawn coords
			pedModel = "s_m_m_highsec_01", -- NPC model
			weapon = "WEAPON_ASSAULTRIFLE", -- Weapon
		},
    },

    Lockboxes = {
		{
			coords = vector3(-2067.530, -1018.543, 4.878),
            heading = -18.0
		},
		{
			coords = vector3(-2066.751, -1019.933, 4.878),
            heading = -107.0
		},
		{
			coords = vector3(-2067.333, -1021.842, 4.878),
            heading = -107.0
		},
		{
			coords = vector3(-2068.845, -1022.527, 4.878),
            heading = 162.0
		},
	},

	Trolleys = {
		{
			model = "hei_prop_hei_cash_trolly_01",
			coords = vector3(-2068.983, -1020.724, 4.8820),
			heading = 160.0,
		},
	},

    Animations = {
		["keypadHacking"] = "anim_heist@hs3f@ig1_hack_keypad@arcade@male@",
	},

	Props = {
		["door"] = "ch_prop_ch_vault_d_door_01a",
		["usb"] = "ch_prop_ch_usb_drive01x",
		["phone"] = "prop_phone_ing",
		["keypad"] = "prop_ld_keypad_01b",
		["tablet"] = "prop_cs_tablet",
	},
    
-----------------------------------------------------------
-----------------------| TRANSLATE |-----------------------
-----------------------------------------------------------

    MoneyForm = '$',

    HelpNotify = {
        [1] = {'Press ~INPUT_PICKUP~ to cut right', 38},
        [2] = {'Press ~INPUT_PICKUP~ to cut down', 38},
        [3] = {'Press ~INPUT_PICKUP~ to cut left', 38},
    },

    Texts = {
        [1] = {'[E] - To start the yacht heist', 38},
        [2] = {'[E] - To start hacking the safe', 38},
        [3] = {'[E] - To start drilling the locker', 38},
        [4] = {'[E] - To grab the money', 38},
        [5] = {'[E] - To steal the loot', 38},
        [6] = {'[E] - To steal the painting', 38},
        [7] = {'[E] - To sell the items', 38},
    },

    Notify = {
        [1] =  {'Notification', "There is already a heist in progress.", 5000, 'error'},
        [2] =  {'Notification', "Not enough cops in the City!", 5000, 'error'},
        [3] =  {'Notification', "The heist has started!", 5000, 'success'},
        [4] =  {'Notification', "The hacking has failed!", 5000, 'error'},
        [5] =  {'Notification', "The heist has finished!", 5000, 'success'},
        [6] =  {'Notification', "You successfully hacked the safe!", 5000, 'success'},
        [7] =  {'Notification', "You don't have the right item to do it!", 5000, 'error'},
        [8] =  {'Notification', "You sold:", 5000, 'success'},
        [9] =  {'Notification', "You got:", 5000, 'success'},
        [10] =  {'Notification', "You dont't have anything to sell!", 5000, 'error'},
        [11] =  {'Notification', "Sell the items in the designated place!", 10000, 'info'},
        [12] =  {'Notification', "Time's up! The Boss has left!", 5000, 'error'},
        [13] =  {'Notification', "Yacth Heist is in progress. Marked on the map!", 5000, 'info'},
        [14] =  {'Notification', "You are too far away to start the heist!", 5000, 'error'},
        [15] =  {'Notification', "There was a heist a while ago, you have to wait!", 5000, 'error'},
        [16] =  {'Notification', "The yacht heist has ended!", 5000, 'info'},
    },

    IdentifierType = 'steam',  -- steam / license / discord
    Webhooks = {
        Locale = {
            ['heistProcess'] = '⌛ Heist started...',
            ['heistFinished'] = '✅ Heist finished.',

            ['HasStarted'] = 'started the Yacht Heist!',
            ['HasFinished'] = 'finished the Yacht Heist!',
            ['RobberHasQuit'] = '**The robber has quit the game!\nThe heist has finished!**',

            ['Identifier'] = 'Identifier',

            ['Time'] = 'Time ⏲️'
        },

        -- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html
        Colors = {
            ['heistProcess'] = 3145631, 
            ['heistFinished'] = 16711680
        }
    },
}
client-utils.lua
ESX = Core
QBCore = Core

-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(title, text, time, type)
    if Config.BrutalNotify then
        exports['brutal_notify']:SendAlert(title, text, time, type)
    else
        -- Put here your own notify and set the Config.BrutalNotify to false
        TriggerEvent('brutal_yacht_heist:client:DefaultNotify', text)
    end
end

RegisterNetEvent('brutal_yacht_heist:client:DefaultNotify')
AddEventHandler('brutal_yacht_heist:client:DefaultNotify', function(text)
    
    SetNotificationTextEntry("STRING")
    AddTextComponentString(text)
    DrawNotification(0,1)

    -- Default ESX Notify:
    --TriggerEvent('esx:showNotification', text)

    -- Default QB Notify:
    --TriggerEvent('QBCore:Notify', text, 'info', 5000)
end)

RegisterNetEvent('brutal_yacht_heist:client:PoliceAlert')
AddEventHandler('brutal_yacht_heist:client:PoliceAlert', function(coords)
    notification(Config.Notify[13][1], Config.Notify[13][2], Config.Notify[13][3], Config.Notify[13][4])

    AlertPlace = AddBlipForCoord(coords[1], coords[2], coords[3])
    SetBlipSprite(AlertPlace, Config.Blips.PoliceAlertBlip.sprite)
    SetBlipScale(AlertPlace, Config.Blips.PoliceAlertBlip.size)
    SetBlipColour(AlertPlace, Config.Blips.PoliceAlertBlip.color)
    BeginTextCommandSetBlipName('STRING')
    AddTextComponentSubstringPlayerName(Config.Blips.PoliceAlertBlip.label)
    EndTextCommandSetBlipName(AlertPlace)
end)

RegisterNetEvent('brutal_yacht_heist:PlayerInHeistAnim')
AddEventHandler('brutal_yacht_heist:PlayerInHeistAnim', function()
    -- this event run when the player start an anim in the heist.

    --exports['qs-smartphone']:canUsePhone(false)
    --exports["lb-phone"]:ToggleDisabled(true)
end)

RegisterNetEvent('brutal_yacht_heist:PlayerOutOfHeistAnim')
AddEventHandler('brutal_yacht_heist:PlayerOutOfHeistAnim', function()
    -- this event run when the player finishes an anim in the heist.

    --exports['qs-smartphone']:canUsePhone(true)
    --exports["lb-phone"]:ToggleDisabled(false)
end)

function TextUIFunction(type, text)
    if type == 'open' then
        if Config.TextUI:lower() == 'ox_lib' then
            lib.showTextUI(text)
        elseif Config.TextUI:lower() == 'okoktextui' then
            exports['okokTextUI']:Open(text, 'darkblue', 'right')
        elseif Config.TextUI:lower() == 'esxtextui' then
            ESX.TextUI(text)
        elseif Config.TextUI:lower() == 'qbdrawtext' then
            exports['qb-core']:DrawText(text,'left')
        end
    elseif type == 'hide' then
        if Config.TextUI:lower() == 'ox_lib' then
            lib.hideTextUI()
        elseif Config.TextUI:lower() == 'okoktextui' then
            exports['okokTextUI']:Close()
        elseif Config.TextUI:lower() == 'esxtextui' then
            ESX.HideUI()
        elseif Config.TextUI:lower() == 'qbdrawtext' then
            exports['qb-core']:HideText()
        end
    end
end

function PlayerDied()
    local died = false
    if (GetEntityHealth(PlayerPedId()) <= PlayerDiedHealth) then
        died = true
    end
    return died
end

function NoCarryWeapon()
    if GetSelectedPedWeapon(PlayerPedId()) == GetHashKey('WEAPON_UNARMED') then
        return true
    else
        SendNotify(18)
        return false
    end
end
server-utils.lua
local YourWebhook = 'WEBHOOK-HERE'  -- help: https://docs.brutalscripts.com/site/others/discord-webhook

function GetWebhook()
    return YourWebhook
end

-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(source, title, text, time, type)
    if Config.BrutalNotify then
        TriggerClientEvent('brutal_notify:SendAlert', source, title, text, time, type)
    else
        TriggerClientEvent('brutal_yacht_heist:client:DefaultNotify', text)
    end
end

function PlayerNameFunction(source)
    return GetPlayerName(source)
end

RegisterServerEvent('brutal_yacht_heist:server:PoliceAlert')
AddEventHandler('brutal_yacht_heist:server:PoliceAlert', function(coords)
    local Players = GetPlayersFunction()
	for i = 1, #Players do
        for ii=1, #Config.CopsJobs do
            if GetPlayerJobFunction(Players[i]) == Config.CopsJobs[ii] then
                TriggerClientEvent('brutal_yacht_heist:client:PoliceAlert', Players[i], coords)
             end
         end
	end
end)
client-core.lua
Core = nil

if Config['Core']:upper() == 'ESX' then
    
    local _esx_ = 'new' -- 'new' / 'old'

    if _esx_ then
        Core = exports['es_extended']:getSharedObject()
    else
        while Core == nil do
            TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
            Citizen.Wait(0)
        end
    end
    
    LoadedEvent = 'esx:playerLoaded'
    TSCB = Core.TriggerServerCallback
    PlayerDiedHealth = 0

elseif Config['Core']:upper() == 'QBCORE' then

    Core = exports['qb-core']:GetCoreObject()
    TSCB = Core.Functions.TriggerCallback
    PlayerDiedHealth = 100
    LoadedEvent = 'QBCore:Client:OnPlayerLoaded'
    
end
server-core.lua
Core = nil

if Config['Core']:upper() == 'ESX' then
--------------------------------------------------------------------------
---------------------------------| ESX |----------------------------------
--------------------------------------------------------------------------

    local _esx_ = 'new' -- 'new' / 'old'
        
    if _esx_ == 'new' then
        Core = exports['es_extended']:getSharedObject()
    else
        Core = nil
        TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
        while Core == nil do
            Citizen.Wait(0)
        end
    end

    RESCB = Core.RegisterServerCallback
    GETPFI = Core.GetPlayerFromId
    RUI = Core.RegisterUsableItem

    function GetPlayersFunction()
        return Core.GetPlayers()
    end

    function AddMoneyFunction(source, amount)
        local xPlayer = GETPFI(source)
        xPlayer.addMoney(amount)
    end

    function GetPlayerJobFunction(source)
        local xPlayer = GETPFI(source)
        if xPlayer ~= nil then
            PlayerJob = xPlayer.job.name
        else
            PlayerJob = ''
        end
        return PlayerJob
    end

    function GetItemCount(source, item)
        local xPlayer = GETPFI(source)

        if _esx_ == 'new' then
            return xPlayer.getInventoryItem(item).count
        else
            if string.sub(item, 0, 6):lower() == 'weapon' then
                local loadoutNum, weapon = xPlayer.getWeapon(item:upper())

                if weapon then
                    return true
                else
                    return false
                end
            else
                return xPlayer.getInventoryItem(item).count
            end
        end
    end

    function AddItem(source, item, count)
        local xPlayer = GETPFI(source)
        if _esx_ == 'new' then
            xPlayer.addInventoryItem(item, count)
        else
            if string.sub(item, 0, 6):lower() == 'weapon' then
                xPlayer.addWeapon(item, 90)
            else
                xPlayer.addInventoryItem(item, count)
            end
        end
    end

    function RemoveItem(source, item, amount)
        local xPlayer = GETPFI(source)
        if _esx_ == 'new' then
            xPlayer.removeInventoryItem(item, amount)
        else
            if string.sub(item, 0, 6):lower() == 'weapon' then
                xPlayer.removeWeapon(item)
            else
                xPlayer.removeInventoryItem(item, amount)
            end
        end
    end

    function GetIdentifierFunction(source)
        local xPlayer = GETPFI(source)
        return xPlayer.identifier
    end

elseif Config['Core']:upper() == 'QBCORE' then
--------------------------------------------------------------------------
--------------------------------| QBCORE |--------------------------------
--------------------------------------------------------------------------

    Core = exports['qb-core']:GetCoreObject()
    
    RESCB = Core.Functions.CreateCallback
    GETPFI = Core.Functions.GetPlayer
    RUI = Core.Functions.CreateUseableItem

    function GetPlayersFunction()
        return Core.Functions.GetPlayers()
    end

    function AddMoneyFunction(source, amount)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.AddMoney('cash', amount)
    end

    function GetPlayerJobFunction(source)
        local xPlayer = GETPFI(source)
        PlayerJob = xPlayer.PlayerData.job.name
        return PlayerJob
    end

    function GetItemCount(source, item)
        local xPlayer = GETPFI(source)

        local items = xPlayer.Functions.GetItemByName(item)
        local item_count = 0
        if items ~= nil then
            item_count = items.amount
        else
            item_count = 0
        end
        return item_count
    end

    function AddItem(source, item, count)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.AddItem(item, count)
    end

    function RemoveItem(source, item, amount)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.RemoveItem(item, amount)
    end

    function GetIdentifierFunction(source)
        local xPlayer = GETPFI(source)
        return xPlayer.PlayerData.citizenid
    end
    
end
PreviousYacht HeistNextInstallation guide

Last updated 1 year ago

Was this helpful?

🛥️