Skip to content

DonHulieo/don-jewellery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

don-jewellery

Jewellery Robbery for QBCore with 1 or 3 stores, Thermite, VarHack and auto-lock/unlock doors!

Credits

  • Holiday95 For their fork of qb-jewellery which this is based on, and giving me the idea.
  • QBCore Framework For the orginal qb-jewellery and for inspiring me to code.
  • MrNewb For showing me how to get the cases to break, absolute legend!

Dependencies

Optional Dependancies

New Features

  • (Not really a "new" feature but) Optimised script, running at 0~0.1ms, only hitting 0.1ms when it locks or unlocks a door after a hack.
  • 2 New stores to rob // Grapeseed & Paleto
  • Config option for just the base GTA Vangelico's Jewellers or all 3.
  • Config option for base qb police alerts or ps-dispatch.
  • Doors now lock depending of the time of day, and store is "unthievable" during opening hours.
  • Police alerts for thermite have a higher chance when closer to business close or open.
  • Police alerts for smashing the cases can be disabled by hacking the main Vangelico's PC.
  • Cases will actually smash after you hit them, and reset after cooldown.
  • Thermite the stores fusebox to open the front door at night.
  • Hack into Vinewood Vangelico's PC to unlock all Vangelico's for 5 minutes (or whatever you set the cooldown to).

Previews

Translations

  • Please open an issue for translations, I'll add them in a following update.

Store MLO's

All store locations are for GigZ Jewelers' except for the base GTA one. It's a free map, link below:

  • GigZ Jewel Store
  • MAKE SURE TO INSTALL THE HEIST VERSION
  • If you're using these MLO's, place interiorproxies.meta in the gigz_jewel_free_heist folder and edit it's fxmanifest to the following:
files {"interiorproxies.meta"}
    
data_file 'INTERIOR_PROXY_ORDER_FILE' 'interiorproxies.meta'
  • You'll also need to add the following code to qb-policejob/config.lua in Config.SecurityCameras after line 100 or after index 34 (Vangelico's Jewelers CAM#4);
[35] = {label = "Vangelico's Grapeseed CAM#1", coords = vector3(1645.27, 4886.01, 44.7), r = {x = -35.0, y = 0.0, z = -141.82}, canRotate = true, isOnline = true},
[36] = {label = "Vangelico's Paleto CAM#1", coords = vector3(-374.46, 6045.52, 34.05), r = {x = -35.0, y = 0.0, z = -105.09}, canRotate = true, isOnline = true},
  • It's important these cameras keep the same index as above and if you alter it, you should know what your doing.

If you're using the config option for one store, and don't plan to use all three

  • Don't install the store MLO's or the gigz-jewel-fix to your server.
  • Don't add the door locks for Grapeseed or Paleto to the qb-doorlocks configs file.
  • Don't add the new Cam ID's to qb-policejob.
  • Set Config.OneStore = true.

Setup Logs

Head over to qb-smallresources/server/logs.lua and add this underneath your last log

['donjewellery'] = '',

Once you've added that go over to your logs server and create a channel, create a webhook and then place it inbetween the ''. If you do not know how to create a webhook follow this guide Creating Webhooks.

Important Config

1. Intial Setup

1.1. Store Times

Config.VangelicoHours = { -- Store Hours
    range = {
        open = 6, -- When the doors unlock
        close = 18 -- When they lock for the night
    },
    alertnight = {
        start = 18, -- The start of higher chance alerts in the evening
        fin = 20 -- The end of higher chance alerts in the evening
    },
    alertmorn = {
        start = 4, -- The start of higher chance alerts in the morning
        fin = 6 -- The end of higher chance alerts in the morning
    }
}
  • The range is the time the store is open, and the alert times are the times the police will have a higher chance of getting an alert.
  • By setting open and close to 0, the store will always be locked and robbable.

1.2. Variables

Config.OneStore = false -- Set to true if using just the main Vangelico's Jewellers
Config.Cooldown = 5 * (60 * 2000) -- where x is minutes ie. x * (60 * 2000) \\ For door auto lock function
Config.Timeout = 5 * (60 * 2000) -- where x is minutes ie. x * (60 * 2000) \\ For case smashing cooldown
Config.AutoLock = true -- Set to false if you don't want the doors to auto lock/lock at all
Config.RequiredCops = 3
Config.Dispatch = 'ps' --[[ 'ps' for ps-dispatch, 'qb' for base qb-policejob alerts, 'cd' for cd_dispatch ]]--
  • The cooldown is the time (in minutes) the doors will auto lock after a hack.
  • The timeout is the time (in minutes) the cases will reset after smashing.
  • If Config.AutoLock is set to false, the doors will always be unlocked.
  • The required cops is the amount of cops online required for the store to be "thievable".
  • Set Config.Dispatch to; 'ps' for ps-dispatch, 'qb' for base qb-policejob alerts, 'cd' for cd_dispatch.

1.3. Door Locks

Config.DoorLock = 'qb' --[[ Doorlock System ]]--

Config.Stores = {
  [1] = { -- City Vangelico's
    label = 'Vangelico\'s Jewellers',
    coords = vector3(-630.5, -237.13, 38.08),
    ['Doors'] = {
      main = 'jewellery-citymain',
      sec = 'jewellery-citysec'
    },
    ...
  },
  [2] = { -- Grapeseed Vangelico's
    label = 'Vangelico\'s Jewellers',
    coords = vector3(1649.78, 4882.32, 42.16),
    ['Doors'] = {
      main = 'jewellery-grapemain',
      sec = 'jewellery-grapesec'
    },
    ...
  },
  [3] = { -- Paleto Vangelico's
    label = 'Vangelico\'s Jewellers',
    coords = vector3(-378.45, 6047.68, 32.69),
    ['Doors'] = {
      main = 'jewellery-palmain',
      sec = 'jewellery-palsec'
    },
    ...
  }
}
  • Set to qb for qb-doorlock

  • // Create a file named jewellery_stores in qb-doorlock/config/ and copy the Door Config from the README into it.

  • Set to ox for ox_doorlock

  • // Uncomment '@ox_lib/init.lua' from the fxmanifest.lua, create a file named jewellery_stores in ox_doorlock/convert/ and copy the Door Config from the README into it.

  • Set to cd for cd_doorlock

  • // Create a Group named Jewellery Stores through the in-game menu and add the copy the Door Config from the README into it.

  • Ensure the names of the doors correspond to the names of the doors below.

1.5. Hacks

Config.DoorItem = 'thermite' -- Item to remove\check for when placing a charge
Config.ThermiteSettings = {
  time = 60, -- time the hack displays for
  gridsize = 5, -- (5, 6, 7, 8, 9, 10) size of grid by square units, ie. gridsize = 5 is a 5 * 5 (25) square grid
  incorrectBlocks = 10 -- incorrectBlocks = number of incorrect blocks after which the game will fail
}

Config.HackItem = 'phone' -- Item to remove\check for when hacking
Config.VarHackSettings = {
  blocks = 2, -- time the hack displays for
  time = 20 -- time the hack displays for
}
  • The door item is the item you want to remove from the player when placing a charge.
  • The thermite settings are the settings for the thermite hack.
  • The hack item is the item you want to check for when hacking.
  • The var hack settings are the settings for the variable hack.

1.6. Skills

Config.Skills = {
  enabled = false, -- Enable Skills
  system = 'mz-skills', 
  ['Thermite'] = {
    skill = 'Heist Reputation', -- Skill to Use
    ['Limits'] = {
      xp = 800 -- XP Required to do the Task
    },
    ['Rewards'] = {
      xp = 10, -- XP to give on success
      multi = 1.5 -- Multiplier Based on Players Level
    }
  },
  ...
}
  • Set Config.Skills.enabled to true to enable skills.
  • Set Config.Skills.system to the name of the skills system you are using.
  • Set Config.Skills.[Task].skill to the name of the skill you want to use.
  • Set Config.Skills.[Task].Limits.xp to the amount of xp required to do the task.
  • Set Config.Skills.[Task].Rewards.xp to the amount of xp you want to give on success.
  • Set Config.Skills.[Task].Rewards.multi to the multiplier based on the players level/ current xp.

2. Door Configs

  • Make a copy of the door config below and place it inside qb-doorlocks/configs/ in it's own .lua file.

  • If using ox_doorlock, the file must be named jewellery_stores and can be placed in the convert folder.

Config.DoorList['jewellery-citymain'] = {
    doorType = 'double',
    locked = true,
    cantUnlock = true,
    doorLabel = 'main',
    distance = 2,
    doors = {
        {objName = 9467943, objYaw = 306.00003051758, objCoords = vec3(-630.426514, -238.437546, 38.206532)},
        {objName = 1425919976, objYaw = 306.00003051758, objCoords = vec3(-631.955383, -236.333267, 38.206532)}
    },
    doorRate = 1.0,
}

Config.DoorList['jewellery-citysec'] = {
    objYaw = 36.000022888184,
    doorRate = 1.0,
    locked = true,
    fixText = false,
    pickable = true,
    authorizedJobs = { ['police'] = 0 },
    needsAllItems = false,
    objCoords = vec3(-629.133850, -230.151703, 38.206585),
    distance = 1.5,
    doorType = 'door',
    objName = 1335309163,
}

Config.DoorList['jewellery-grapemain'] = {
    doorType = 'double',
    locked = true,
    cantUnlock = true,
    doorLabel = 'main',
    distance = 2,
    doors = {
        {objName = 9467943, objYaw = 98.17839050293, objCoords = vec3(1653.285522, 4884.148438, 42.309845)},
        {objName = 1425919976, objYaw = 98.17839050293, objCoords = vec3(1653.655518, 4881.573730, 42.309845)}
    },
    doorRate = 1.0,
}

Config.DoorList['jewellery-grapesec'] = {
    pickable = true,
    objCoords = vec3(1648.274902, 4877.423340, 42.309898),
    objName = 1335309163,
    doorRate = 1.0,
    distance = 1,
    authorizedJobs = { ['police'] = 0 },
    doorType = 'door',
    objYaw = 188.17839050293,
    fixText = false,
    doorLabel = 'sec',
    locked = true,
}

Config.DoorList['jewellery-palmain'] = {
    doorType = 'double',
    locked = true,
    cantUnlock = true,
    doorLabel = 'main',
    distance = 2,
    doors = {
        {objName = 1425919976, objYaw = 314.90930175781, objCoords = vec3(-383.837921, 6044.059082, 31.658920)},
        {objName = 9467943, objYaw = 314.90930175781, objCoords = vec3(-382.001617, 6042.216797, 31.658920)}
    },
    doorRate = 1.0,
}

Config.DoorList['jewellery-palsec'] = {
    doorType = 'door',
    locked = true,
    doorRate = 1.0,
    pickable = true,
    distance = 1.5,
    objYaw = 44.909275054932,
    fixText = false,
    authorizedJobs = { ['police'] = 0 },
    objCoords = vec3(-382.007721, 6050.603027, 31.658974),
    objName = 1335309163,
}

OX Doorlock

  • If using ox_doorlock, and the door configs above cause errors in this heist, set Config.DoorLock.Extraname to the main name of the door in your database.

  • Highlighted below is an example of what name in the database you should set Config.DoorLock.Extraname to.

OX Door Configs in Database

CD Doorlock Images

How your doorlocks should look on cd_doorlock after implementing them!

City Main Door

City Second Door

Grapeseed Main Door

Grapeseed Second Door

Paleto Main Door

Paleto Second Door

Support

This is not a QBCore script nor is it maintained by them, please refer to my discord for any issues!