[ESX] & [QBCORE] Recycler Job

Showcase
RECYCLER JOB

Purchase
ESX - Recycler Job | QBCORE - Recycler Job

Code is accessible No, (target, menu, minigame customization, elevator, notifications, refill bottle function are accessible)
Subscription-based No
Lines (approximately) ~1900
Requirements [QB] (qb-menu, qb-target, qb-input - optional, you can adapt to your own.)
Requirements [ESX] (nh-context, qtarget, nh-keyboard / qb-input - optional, you can adapt to your own.)
Support Yes

Asset is encrypted using fivem escrow system but a lot of configurable values are present for you to edit plus a couple of files are unencrypted too.

Optimization
Full optimized.
0.00 ms

Features

  • Easy customization

  • Collecting materials

  • Machine controls, power controls, materials hopper, machine cooler.

  • Cooling water shop - Working time function (opening, closing time)

  • Advanced machine process

  • Installing sensors (water, materials, machine, power, temperature)

  • Remote machine monitor

  • Overheat alarm

  • Fire sprinklers kit

  • Machine visual and sound effects

  • Overheating of the machine is possible.

  • Machine explosion punishment

  • Temperature light indicator

  • Experience system

  • Job vehicle

  • Deposit

  • Advanced elevator (synced with all players)

  • The duration of the cardboard shredding process depends on the experience of the player

  • Refilling empty water bottles.

  • Effects synchronization with all players

  • Shredding cardboard

  • Packaging shredded cardboard

  • Sell recycled materials

  • SYNCHRONIZATION WITH OTHER PLAYERS (all animations and effects are synced with other players.)

  • Server-side checks to prevent abuse and cheating.

Other Resources

Config

-- Config.JobRequired = "recycler" -- if you want to disable it just set it to false like Config.JobRequired = false 
Config.JobRequired = false -- Job name e.g. Config.JobRequired = "recycler"

Config.Identifier = 1 -- 0 = steam identifier, 1 = license identifier
Config.DebugPolyZone = false
Config.Target = "qb-target"
Config.KickReason = "[d3MBA Recycler job] | Protection!"
-- Particles synchronization   
Config.SyncParticlesWithAllPlayers = { -- ⚠️ If is false particles will see only the player who triggered it. 
    MachineCooler = true, 
    Machine = true, 
    FireSprinklersSystem = true,
} 
-- Machine sound
Config.MachineSound = { -- ⚠️ READ README FILE!! 
    Use = true, 
    Volume = 0.3, 
    Distance = 25
}

Config.ClearPedTasksImmediately = true 

Config.UseJobElevator = true -- Job elevator
Config.TemperatureIndicatorLight = true -- Temperature indicator light - img: https://imgur.com/a/QGjKep4

Config.ProgressBar = { -- qb-progressbar or lj-progressbar
-- https://github.com/qbcore-framework/progressbar
    Use = true, 
    
    InstallingSensor = "Installing sensor...",
    CuttingPaper = "Shredding cardboard...",  
    PutWaterIntoCooler = "Adding water to a cooler...",
    CollectingMaterials = "Collecting materials...", 
    TakingPaperBales = "Taking paper bale...", 
    RefillBottle = "Reffiling water bottle...", 
    Packaging = "Packaging...", 
}

Config.Items = {
    -- Paper 
    Paper = "recycler_paper",
    PaperBale = "paper_bale",
    -- Cardboard 
    Cardboard = "recycler_cardboard",
    ShreddedCardboard = "shredded_cardboard",
    BoxShreddedCardboard = "box_shredded_cardboard",
    -- Water 
    CoolingWater  = "recycler_cooling_water", -- Water for machine cooling.  
    EmptyCoolingWaterBottle  = "recycler_empty_water_bottle"   
    
}

Config.Blip = { -- Main blip 
    -- https://docs.fivem.net/docs/game-references/blips/
    Use = true,
    Pos = vector3(-609.689, -1606.58, 26.750),
    Sprite = 467,
	Scale = 1.2,
	Color = 68,
	Label = "[Recycler Job]",
}

Config.JobVehicle = {
    Pos = vector3(-580.02, -1590.88, 26.75),

    SpawnPos = vector4(-588.639, -1589.04, 26.489, 88.07), -- vehicle spawn position

    SetPedIntoVehicle = true, 
    FullFuel = true, -- Read ⬇️

    Deposit = {
        Use = true, 
        Account = "cash", -- QB("cash", "bank") --- ESX("money", "bank")
        Amount = 100,
    },

    SpawnPointCheck = { -- It will check spawn point. To prevent spawning vehicle on vehicle. 
        Use = true,
        Radius = 3.5 -- Default radius 3.5
    }, 

    VehicleModels = {
        [1] = "biff",
    }, 
}

-- Fuel function if you're set "FullFuel = true" 
function fullFuel()
    -- If you using "lj-fuel" just replace "LegacyFuel" with "lj-fuel"! ⬇️
    exports["LegacyFuel"]:SetFuel(recyclerJobVehicle, 100) -- Legacy Fuel 
end

RegisterNetEvent('d3:recyclerJob:GiveCarKeys', function(vehiclePlate)
    -- Here you can put event or export to give player vehicle keys
    TriggerEvent("vehiclekeys:client:SetOwner", vehiclePlate) -- QB-CORE
        -- Job vehicle
        -- For T1GER-KEYS script use ("recyclerJobVehicle")
        -- exports['t1ger_keys']:SetVehicleLocked(recyclerJobVehicle, 0) -- If you using T1GER-KEYS script just uncoment line. 
end)


Config.Reception = { 
    -- Ped 
    CreatePed = true, 
    Model = "a_m_m_business_01", -- https://docs.fivem.net/docs/game-references/ped-models/
    Pos = vector4(-616.938, -1622.73, 32.010, 351.98),

    -- Sensors menu 
    Account = "cash", -- QB("cash", "bank") --- ESX("money", "bank") 

    Sensors = { 
        {itemName = "recycler_remote_monitor", price = 300, emoji = "🖥️"},  
        {itemName = "machine_sensor", price = 160, emoji = "⚙️"},  
        {itemName = "materials_sensor", price = 120, emoji = "📦"},  
        {itemName = "power_sensor", price = 130, emoji = "🔌"},  
        {itemName = "temperature_sensor", price = 140, emoji = "🌡"},  
        {itemName = "water_sensor", price = 120, emoji = "💧"},  
        {itemName = "fire_sprinklers_system", price = 1000, emoji = "🧯"},  
        {itemName = "overheat_alarm", price = 250, emoji = "⏰"},  
    }, 
    -- Materials 
    MaterialsContainersLoc = { 
        {coords = vector3(433.2812, -1550.29, 31.107)},
        {coords = vector3(218.7353, -2011.57, 20.885)},
        {coords = vector3(891.0105, -1731.21, 31.133)},
        {coords = vector3(974.1326, -1702.90, 30.874)},
        {coords = vector3(954.1549, -1580.52, 32.715)},
        {coords = vector3(949.1590, -1580.77, 32.654)},
        {coords = vector3(896.9542, -1585.98, 31.373)},
        {coords = vector3(869.9802, -1607.57, 32.220)},
        {coords = vector3(776.8347, -1625.62, 33.232)},
        {coords = vector3(-1785.42, -492.561, 40.612)},
        {coords = vector3(133.5384, -344.457, 45.921)},
        {coords = vector3(19.39390, -367.463, 41.622)},
        {coords = vector3(1617.809, -1885.83, 106.06)},
        {coords = vector3(1075.310, -2388.57, 32.767)},
        {coords = vector3(1095.281, -2395.50, 31.932)},
        {coords = vector3(830.1606, -2489.85, 25.352)},
        {coords = vector3(798.2069, -2530.18, 24.185)},
        {coords = vector3(598.9206, -2774.81, 7.0704)},
        {coords = vector3(593.9295, -2791.59, 7.2892)},
        {coords = vector3(-190.166, -1373.47, 32.643)},
        {coords = vector3(1250.471, -1591.22, 55.432)},
        {coords = vector3(1168.997, -1652.31, 38.668)},
        {coords = vector3(1172.402, -1642.57, 38.784)},
        {coords = vector3(740.7584, -990.886, 26.875)},
        {coords = vector3(719.6326, -993.610, 26.215)},
        {coords = vector3(1433.103, 3622.709, 35.851)},
        {coords = vector3(1284.749, 3622.694, 33.790)},
        {coords = vector3(465.2329, 3552.872, 34.934)},
        {coords = vector3(1066.799, 2658.188, 41.947)},
        {coords = vector3(1443.054, -1675.70, 67.806)},
        {coords = vector3(948.3063, -2171.15, 32.948)},
        {coords = vector3(-2945.44, 416.9829, 16.432)},
        {coords = vector3(-1536.89, -886.185, 11.750)},
        {coords = vector3(-1235.15, -1401.99, 5.9935)},
        {coords = vector3(-1264.90, -1376.51, 5.3568)},
        {coords = vector3(-1290.55, -1318.85, 5.7346)},
        {coords = vector3(-1208.55, -1482.26, 6.2747)},
        {coords = vector3(-1012.07, -1347.76, 7.1559)},
    },

    RandomMaterialsAmount = {
        Min = 5, 
        Max = 15
    },

    MaterialsControl = 38, -- (E) -- https://docs.fivem.net/docs/game-references/controls/ 
    -- Materials blip 
    -- https://docs.fivem.net/docs/game-references/blips/
    Blip = {
        Sprite = 467,
        Scale = 1.3,
        Color = 2,
        RotuteColor = 47, 
        Label = "[Recycler job] - Materials",
    },

    TimeToNextLocation = {
        Min = 15, -- seconds 
        Max = 40 -- seconds
    },
}

Config.Water = { -- Ped(shop) where you can buy water for machine cooling. 

    Use = true, 
    Model = "s_m_m_gardener_01", -- https://docs.fivem.net/docs/game-references/ped-models/
    Pos = vector4(-587.033, -1645.31, 18.597, 354.9),
    
    Account = "cash", -- QB("cash", "bank") --- ESX("money", "bank")
    Price = 10, -- Price for 10l (one bottle of water for machine cooling.)
    
    TimeCheck = {
        Use = true, 
        CheckTime = 3, -- Evenry 3 sec scitpt will check in game time. 
        OpeningTime = 8,
        ClosingTime = 20,
    },

    Blip = {
        -- https://docs.fivem.net/docs/game-references/blips/
        Use = true, 
        Sprite = 256,
        Scale = 0.7,
        Color = 3,
        Label = "[Recycler Job] Cooling water",
    },

}


Config.PaperCutter = { -- Shredding cardboard
    UseMiniGame = true, -- Check cl-customization.lua file for more settings about mini game.  

    -- Process duration time in seconds  
    ProcessDuration = 15, -- If is experience system = false then this will be the duration time of process

    -- Experience System  
    ExperienceSystem = { 
        Use = true, 

        IncreaseExperience = {
            Min = 1, 
            Max = 3
        }, 

    }, 

    Amount = 5, -- Amount need to start cutting paper
    
    Loc = {
        vector3(-586.55, -1628.49, 33.02),
        vector3(-583.79, -1628.71, 33.04),
        vector3(-580.0, -1629.11, 33.07),
        vector3(-576.83, -1629.36, 33.01),
        vector3(-586.43, -1622.51, 33.01),
    },

    ShreddedCardboardAmount = {
        Min = 15,
        Max = 23 
    },
}

Config.Packaging = {
    -- Process duration time in seconds  
    ProcessDuration = 15, -- If is experience system = false then this will be the duration time of process

    Amount = 40, -- Amount need to start cutting pape
}

Config.Delivery = { -- sell recycled materials
    Ped = "a_m_m_soucent_02", -- https://docs.fivem.net/docs/game-references/ped-models/
    Time = 10, --minutes, player have to sell materials

    Account = "cash", -- QB("cash", "bank") --- ESX("money", "bank")

    Price = { 
        ["paper_bale"] = 500, -- price = 500$
        ["box_shredded_cardboard"] = 350 -- price = 350$
    },
    
    Blip = { -- https://docs.fivem.net/docs/game-references/blips/
        Colour = 76,
        Sprite = 480,
        Scale = 1.2,
        Label = "[Recycler Job] Sell recycled materials.",  
        RouteColor = 3,
    },

    Locations = { 
        vector4(-731.314, -811.865, 22.676, 193.4),
        vector4(759.0201, -719.838, 27.145, 276.93),
        vector4(1124.124, -345.150, 66.124, 191.92),
        vector4(571.8167, 2676.948, 40.972, 11.15),
        vector4(1039.345, 2664.121, 38.551, 358.91),
        vector4(2555.694, 2607.425, 37.086, 290.89),
        vector4(1441.283, -1669.11, 65.645, 115.19),
        vector4(1037.496, -2173.21, 30.533, 264.97),
        vector4(-1042.10, -1351.11, 4.5191, 53.06),
        vector4(-1175.69, -1332.03, 4.0243, 246.28),
        vector4(-1222.21, -1339.36, 3.1748, 295.66),
        vector4(-1471.81, -920.282, 9.025, 229.74),
        
    }, 
}

-- Power 
Config.PowerControl = { 
    PricePerKwh = 10,
    Account = "cash", -- "cash", "bank"
}

-- Machine 
Config.RecycleMachine = { 
    Punishment = 5000, -- 5k $
    PunishmentAccount = "cash", -- QB("cash", "bank") --- ESX("money", "bank")

    OverheatAlarm = 100, -- Temperature when alarm will be activated.
    FireSprinklersSystem = 130, -- Temperature when Fire sprinklers system will be activated. 

    TakePaperBaleDuration = 8, -- Seconds

    ChanceIncreaseTemp = 20, -- Chance to increase machine temperature -- 20 = 80%, 50 = 50%, 70 = 30%.

    Materials = 60, -- Min materials needed to start process, materials per one paper bale 

    MachineOffDecreasingTemperature = {
        -- RANDOM TIME (MIN, MAX)
        Time = {
            Min = 15,  
            Max = 30
        }, 

        Temperature = {
            -- RANDOM TEMPERATURE (MIN, MAX)
            Min = 2,
            Max = 4
        },
    },

    Speed1 = { 
        Power = 2,
        ProcessDuration = 17, -- Seconds  

        IncreaseMachineTemperature = {
            Time = 6, -- every 6 seconds temperature will be increased 
            
            -- Random 
            Min = 2, 
            Max = 6,
        },
    }, 

    Speed2 = { 
        Power = 4,
        ProcessDuration = 12, -- Seconds  

        IncreaseMachineTemperature = {
            Time = 4.5, -- every 6 seconds temperature will be increased 
            
            -- Random 
            Min = 5, 
            Max = 7,
        },
    }, 

    Speed3 = { 
        Power = 6,
        ProcessDuration = 7, -- Seconds  

        IncreaseMachineTemperature = {
            Time = 3.5, -- every 6 seconds temperature will be increased 
            
            -- Random 
            Min = 5, 
            Max = 8,
        },
    }, 

    
}

-- Machine Cooler 
Config.MachineCooler = { 
    ProgressDuration = 5, -- default 5 seconds per bottle, e.g. if player put 2 bottles progress will be 10 seconds

    DecreaseTemperature = {
        -- random (min, max)
        Min = 3, 
        Max = 7 
    },

    Speed1Time = 7, -- Seconds
    Speed2Time = 5, -- Seconds
    Speed3Time = 3, -- Seconds
}

Config.Notifications = {
    ["spawnpoint_check"] = "Vehicle spawnpoint has been blocked!",
    ["paid_deposit"] = "You paid " ..Config.JobVehicle.Deposit.Amount.. "$ for the vehicle deposit!",
    ["deposit_back"] = "You got your deposit back " ..Config.JobVehicle.Deposit.Amount.. "$",
    ["no_enough_money_deposit"] = "You don't have enough money to pay the vehicle deposit " ..Config.JobVehicle.Deposit.Amount.. "$",
    ["no_enough_money"] = "You don't have enough money - ",
    ["return_vehicle"] = "[E] Return job vehicle",
    ["no_enough_paper"] = "You don't have enough paper!",
    ["no_enough_paper_hopper"] = "Invalid amount of materials!",
    ["no_water"] = "You don't have enough water!",
    ["bought_water"] = "You bought 5 litres of water for " ..Config.Water.Price.. " $", 
    ["bought"] = "Bought ", -- Sensors menu
    ["no_sensor_item"] = "You don't have sensor.",
    ["no_fire_sprinklers_kit"] = "You don't have fire sprinklerskit.",
    ["no_overheat_alarm"] = "You don't have overheat alarm.",
    ["increase_experience"] = "Experience + ",
    ["elevator_aleady_use"] = "The elevator is already in use, please wait.", 
    ["not_near_water"] = "You are not near water!",
    ["you_dont_have_empty_bottle"] = "You don't have empty bottle!",
    ["already_reffiling"] = "You are already reffiling bottle!",
    ["next_location"] = "Wait for the next location...",
    ["nothing_to_sell"] = "You have nothing to sell!",
    ["materials_sold"] = "You sold ", 
    ["bought_power"] = "Bought ", 
    ["bought_power2"] = " kW for ", 
    ["box_shredded_cardboard"] = "box of shredded cardboard", 
    ["paper_bale"] = "paper bale", 
    ["no_enough_cardboard"] = "You don't have enough cardboard", 
    ["no_enough_shreddedcardboard"] = "You don't have enough shredded cardboard - " ..Config.Packaging.Amount.. ".", 
    ["machine_is_already_in_that_speed"] = "The machine is already in that speed ", 
    ["machine_too_hot"] = "Machine is too hot, wait for it to cool down!", 
    ["cooler_is_already_in_that_speed"] = "The cooler is already in that speed ", 
    ["cannot_change_machine_speed"] = "You cannot change the speed of the machine while the machine is running!", 
    ["put_machine_in_gear"] = "You have to put the machine in gear!", 
    ["machine_output_blocked"] = "The output on the machine is blocked!", 
    ["machine_blocked"] = "Machine blocked ", 
    ["cant_use_machine_punishment"] = "There is a punishment for exploding the machine, so you can't use it!", 
    ["no_enouth_materials_or_power"] = "You don't have enough material or power to start/continue the process!", 
    ["no_enough_money_punishment"] = "You don't have enough money to pay the machine explosion punishment " ..Config.RecycleMachine.Punishment.. "$",
    ["punishemnt_paid"] ="You paid " ..Config.RecycleMachine.Punishment.. "$ for the machine explosion punishment!",
}

Config.NotificationsSettings = {
    Info = "primary", 
    Error = "error", 
    Success = "success",
}

Config.TargetLabels = {
    ["reception"] = "Reception",
    ["spawn_job_vehicle"] =  "Take a vehicle keys",
    ["return_job_vehicle"] = "Back a vehicle keys", 
    ["power_control"] = "Power control", 
    ["recycle_machine_controls"] = "Recycle machine controls",
    ["machine_materials_hopper"] = "Hopper",
    ["recycle_machine_cooler"] = "Cooler",
    ["water_ped"] = "Water for machine cooling.",
    ["install_sensors"] = "Install sensors",
    ["elevator"] = "Elevator",
    ["paper_cutter"] = "Shredder cardboard",
    ["paper_bale"] = "Take paper bale",
    ["sell_paper_bale"] = "Sell paper bale",
    ["sell_shredded_cardboard"] = "Sell shredded cardboard",
    ["packaging"] = "Package shredded cardboard - ",
}

Config.TargetIcons = {
    ["reception"] = "fas fa-circle-user", 
    ["job_vehicle"] = "fas fa-car",
    ["power_control"] = "fas fa-plug",
    ["recycle_machine_controls"] = "fas fa-gauge-high",
    ["recycle_machine_cooler"] = "fas fa-fan",
    ["machine_materials_hopper"] = "fas fa-box-open",
    ["water_ped"] = "fas fa-faucet",
    ["sensor"] = "fas fa-network-wired",
    ["elevator"] = "fas fa-elevator",
    ["paper_cutter"] = "fas fa-hand-scissors",
    ["paper_bale"] = "fas fa-cube",
    ["sell_materials"] = "fas fa-cube",
    ["packaging"] = "fas fa-box-open",
} 

2 Likes