[ZaT-SCRIPTS][QBCore/ESX] CASH EXCHANGE HEIST AND MONEY PRINTER

As a player, you will enjoy a seamless and user-friendly UI.

  • You can start the mission with your group.
  • You can make it work with any other MLOs, all the data and coords are in the config.lua
  • As a dev you can configure the following settings :
  • The Framework.
  • The Target/Dialog useage.
  • The Target/Interact useage.
  • The minimum cops required.
  • The minigame settings.
  • The alarm sounds.
  • The dispatch.
  • The rewards and their chances.
    ++ More.

Code is accessible 80%
Subscription-based No
Lines (approximately) 5k+
Requirements qb-core / es_extended
Support Yes
  • Config.lua :
Config = {}

Config.Framework        = "qb" -- "esx"
Config.Inventory        = "qb" -- "qb", "ox", "qs"
Config.QBInventory      = "old" -- new
Config.Target           = "ox" -- ox
Config.FrameworkPseudo  = 'qb-core'
Config.UseInteract      = false -- better to use target
Config.Doorlock         = 'qb'
Config.phone            = 'qb-phone'
Config.Debug            = true -- use /placebox and /placeshoe and /placepc command to place the prop using gizmo and get coords
Config.UseBuckets       = false -- recommended
--::::::::::::::::::::::::: NPC DIALOG ::::::::::::::::::::::::::::::
Config.UseNPCDialog     = true
-- Only if NPCDialog is set to false
Config.NPC = {
    model  = "a_m_m_socenlat_01",
    anim   = "CODE_HUMAN_MEDIC_TIME_OF_DEATH",
    coords = vector4(1213.85, -1238.6, 35.33, 92.7)
}
--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Config.Alarm = {
    started             = false,
    dispatch            = 'qb-core',
    url                 = 'https://www.youtube.com/watch?v=EnRK43JkxJk', -- alarm URL
    time                = 3, -- 3 minutes and the alarm sound will stop
}

Config.MiniumCops       = 0
Config.GenerateTime     = 0
Config.Timeout          = 45
Config.VaultDelay       = 3
Config.MainDoorDelay    = 1
Config.Locations        = {
    main = vector3(135.73, -1337.25, 29.71),
}

Config.Item = {
    name = 'rfid_cloner',
    uses = 5, -- max usage of 1 item
}

Config.Items = {
    printer = 'moneyprinter',
    ink     = 'ink',
    paper   = 'paper',
}

Config.Printer = {
    working = 'prop_cash_printer',
    close   = 'prop_cash_printer_c',
    time    = 1, --1 minute to print a paper (it could take more but will not be more than 2 x time)
    reward  = 'rollcash',
    max     = 100, -- max 100 paper per ink (ink item is useable only once !)
}

Config.Doors = {
    { -- 1
        coords = vector3(137.47, -1334.30, 29.22),
        label  = 'Disable Smart Lock',
        id     = 'cashexchange-1', -- door id
        item   = 'rfid_cloner',
        ped    = vector4(137.46, -1334.52, 29.60, 126.87)
    },
    { -- 2
        coords = vector3(140.08, -1340.04, 29.64),
        label  = 'Disable Electricity',
        id     = 'cashexchange-2', -- door id
        item   = 'rfid_cloner',
        ped    = vector4(140.11, -1340.07, 29.64, 228.91)
    },
    { -- 3
        coords = vector3(125.72, -1342.32, 29.95),
        label  = 'Hack Door',
        id     = 'cashexchange-3', -- door id
        item   = 'rfid_cloner',
        ped    = vector4(125.60, -1342.34, 30.1, 137.59)
    },
    { -- 4
        coords = vector3(133.89, -1344.99, 29.94),
        label  = 'Hack Door',
        id     = 'cashexchange-4', -- door id
        item   = 'rfid_cloner',
        ped    = vector4(134.05, -1344.95, 30.1, 316.02)
    }
}

Config.Trollys = {
    {
        coords      = vector4(132.61, -1337.97, 28.71, 164.0),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(134.19, -1339.73, 28.71, 139.72),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(135.62, -1344.88, 28.71, 48.47),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(131.04, -1339.74, 28.71, 295.91),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },    
}

-- IMPORTANT :
-- random one of these (keep it from lower chance to higher) (10% 40% 50%)
-- you must have one with 100% chance at least (check target.lua for more details)
Config.Rewards = { 
    {
        name = 'moneyprinter',
        min  = 1,
        max  = 1, 
        chance = 10, --10% 
        coords = vector3(130.755, -1340.60, 29.71),
        available = true,
    },
    {
        name = 'ink',
        min  = 1,
        max  = 3, 
        chance = 50, --40% 
        coords = vector3(130.755, -1340.60, 29.71),
        available = true,
    },
    {
        name   = 'paper',
        min    = 50,
        max    = 120,
        chance = 100, --100% 
        coords = vector3(130.755, -1340.60, 29.71),
        available = true,
    },
}

----------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------OPTIMISATION PART --------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------
-- Description  : this part is responsable on deleting the not needed props when no players are nearby
-- refreshprops : is the time to check if there is someone near the props or not
-- radius       : is to check how far is the player from the prop if it is < then the prop will be deleted until someone is nearby...
Config.RefreshProps = 10     -- 15 seconds
Config.Radius       = 100.0  -- if the distance between the player and the prop is < 50 then the prop will be deleted.
----------------------------------------------------------------------------------------------------------------------------------------