Skip to content

Installation

Installation#

Follow these steps to successfully install frkn-cakejob on your server.

1. Download & Add Stream Files (Important ⚠️)

To keep the script size optimized, the bakery asset files (stream folder containing cake props, decorations, and bakery models) are provided separately. You must install them for the script to work.

  1. Download the stream files from the link provided with your purchase.
  2. Extract the downloaded .zip or .rar file.
  3. Drag and drop the stream folder directly into your frkn-cakejob folder. (Make sure the folder is named exactly stream)

2. Database Setup

The script automatically creates the required database table (frkn_cakejob) on first start. No manual SQL execution is needed — just make sure your database connection is working properly (via oxmysql).

3. Add Items to Inventory

Add the following items to your framework's item configuration file.

QB-Core Example (qb-core/shared/items.lua):

lua
frkn_cake_box = { name = 'frkn_cake_box', label = 'Cake Box', weight = 200, type = 'item', image = 'cake_box.png', unique = true, useable = true, shouldClose = true, description = 'A packed cake box ready for delivery or opening.' },
frkn_cake = { name = 'frkn_cake', label = 'Cake', weight = 500, type = 'item', image = 'cake.png', unique = true, useable = true, shouldClose = true, description = 'A delicious looking full cake.' },
frkn_cake_slice_white = { name = 'frkn_cake_slice_white', label = 'Vanilla Cake Slice', weight = 100, type = 'item', image = 'cake_slice_white.png', unique = true, useable = true, shouldClose = true, description = 'A delicious slice of white vanilla cake.' },
frkn_cake_slice_brown = { name = 'frkn_cake_slice_brown', label = 'Chocolate Cake Slice', weight = 100, type = 'item', image = 'cake_slice_brown.png', unique = true, useable = true, shouldClose = true, description = 'A delicious slice of brown chocolate cake.' },
frkn_cake_slice_pink = { name = 'frkn_cake_slice_pink', label = 'Strawberry Cake Slice', weight = 100, type = 'item', image = 'cake_slice_pink.png', unique = true, useable = true, shouldClose = true, description = 'A delicious slice of pink strawberry cake.' },
frkn_cake_slice_yellow = { name = 'frkn_cake_slice_yellow', label = 'Caramel Cake Slice', weight = 100, type = 'item', image = 'cake_slice_yellow.png', unique = true, useable = true, shouldClose = true, description = 'A delicious slice of yellow caramel cake.' },
frkn_cake_slice_purple = { name = 'frkn_cake_slice_purple', label = 'Pattern Cake Slice', weight = 100, type = 'item', image = 'cake_slice_purple.png', unique = true, useable = true, shouldClose = true, description = 'A delicious slice of purple pattern cake.' },

OX-Inventory Example (data/items.lua):

lua
['frkn_cake_box'] = {
    label = 'Cake Box',
    weight = 200,
    stack = false,
    client = {
        image = 'cake_box.png',
    }
},
['frkn_cake'] = {
    label = 'Cake',
    weight = 500,
    stack = false,
    client = {
        image = 'cake.png',
    }
},
['frkn_cake_slice_white'] = {
    label = 'Vanilla Cake Slice',
    weight = 100,
    stack = false,
    client = { image = 'cake_slice_white.png' }
},
['frkn_cake_slice_brown'] = {
    label = 'Chocolate Cake Slice',
    weight = 100,
    stack = false,
    client = { image = 'cake_slice_brown.png' }
},
['frkn_cake_slice_pink'] = {
    label = 'Strawberry Cake Slice',
    weight = 100,
    stack = false,
    client = { image = 'cake_slice_pink.png' }
},
['frkn_cake_slice_yellow'] = {
    label = 'Caramel Cake Slice',
    weight = 100,
    stack = false,
    client = { image = 'cake_slice_yellow.png' }
},
['frkn_cake_slice_purple'] = {
    label = 'Pattern Cake Slice',
    weight = 100,
    stack = false,
    client = { image = 'cake_slice_purple.png' }
},

Make sure to put cake_box.png, cake.png, and all 5 specific slice images (cake_slice_white.png, cake_slice_brown.png, cake_slice_pink.png, cake_slice_yellow.png, cake_slice_purple.png) into your inventory images directory. These images are provided in the itemimages folder.

4. Add Job to Framework (If Job Restriction is Enabled)

If you enable jobRestriction in your config, add this job to your framework:

QB-Core (qb-core/shared/jobs.lua):

lua
bakeryjob = {
    label = 'Bakery',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'Apprentice', payment = 50 },
        ['1'] = { name = 'Baker', payment = 75 },
        ['2'] = { name = 'Decorator', payment = 100 },
        ['3'] = { name = 'Co-Owner', payment = 125 },
        ['4'] = { name = 'Owner', isboss = true, payment = 150 },
    },
},

Qbox (qbx_core/shared/jobs.lua):

lua
bakeryjob = {
    label = 'Bakery',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'Apprentice', payment = 50 },
        ['1'] = { name = 'Baker', payment = 75 },
        ['2'] = { name = 'Decorator', payment = 100 },
        ['3'] = { name = 'Co-Owner', payment = 125 },
        ['4'] = { name = 'Owner', isboss = true, payment = 150 },
    },
},

ESX (Execute in your SQL Database):

sql
INSERT INTO `jobs` (`name`, `label`) VALUES
    ('bakeryjob', 'Bakery')
;

INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES
    ('bakeryjob', 0, 'apprentice', 'Apprentice', 50, '{}', '{}'),
    ('bakeryjob', 1, 'baker', 'Baker', 75, '{}', '{}'),
    ('bakeryjob', 2, 'decorator', 'Decorator', 100, '{}', '{}'),
    ('bakeryjob', 3, 'co_owner', 'Co-Owner', 125, '{}', '{}'),
    ('bakeryjob', 4, 'boss', 'Owner', 150, '{}', '{}')
;

5. Adding to Server

  1. Place the frkn-cakejob folder in your resources directory (preferably inside [qb] or [standalone]).
  2. Make sure the folder name is exactly frkn-cakejob.
  3. Open your server.cfg and add the following line:
cfg
ensure frkn-cakejob