ds-fruitpicker
Unique and Advanced fruit picker job for qbcore

View on Tebex | CFX Fourm Post | Youtube Video | Discord
Installaction
Dependencies
Start
Extract
ds-fruitpicker.zip
and place it into your resource folder.Install and ensure dependencies for the resource.
Setup
config.lua
(⚠️see #CONFIGURATION for instructions).Add
ensure ds-fruitpicker
to your server start config (place it anywhere below the dependency & framework resources).
Configuration
Please go through all configurable options & settings in config.lua
and configure them to your server's preferences.
Also please read the comments at the end of each line, for a brief information on what the option does.
Add Items
Open qb-core/shared/items.lua
and add this lines
qb-core/shared/items.lua
and add this linesorange = {
["name"] = "orange",
["label"] = "Orange",
["weight"] = 1000,
["type"] = "item",
["image"] = "orange.png",
["unique"] = false,
["useable"] = true,
["shouldClose"] = true,
["combinable"] = nil,
["description"] = "This is Orange you can eat this"
},
fruit_basket = {
["name"] = "fruit_basket",
["label"] = "Fruit Basket",
["weight"] = 1000,
["type"] = "item",
["image"] = "fruit_basket.png",
["unique"] = true,
["useable"] = true,
["shouldClose"] = true,
["combinable"] = nil,
["description"] = "Fruit Basket"
},
Add In qb-radialmenu
qb-radialmenu
replace below code in qb-radialmenu\client\main.lua
in SetupRadialMenu function.
local function SetupRadialMenu()
FinalMenuItems = {}
if (IsDowned() and IsPoliceOrEMS()) then
FinalMenuItems = {
[1] = {
id = 'emergencybutton2',
title = Lang:t("options.emergency_button"),
icon = 'circle-exclamation',
type = 'client',
event = 'police:client:SendPoliceEmergencyAlert',
shouldClose = true,
},
}
else
SetupSubItems()
FinalMenuItems = deepcopy(Config.MenuItems)
for _, v in pairs(DynamicMenuItems) do
FinalMenuItems[#FinalMenuItems + 1] = v
end
local basket = exports['ds-fruitpicker']:Checkbasket()
if basket == "drop" then
FinalMenuItems[#FinalMenuItems + 1] = {
id = "basket",
title = "Drop Basket",
icon = "basket-shopping",
type = 'client',
event = 'dropbasket',
shouldClose = true,
}
elseif basket == "pickup" then
FinalMenuItems[#FinalMenuItems + 1] = {
id = "basket2",
title = "Pickup Basket",
icon = "basket-shopping",
type = 'client',
event = 'dropbasket',
shouldClose = true,
}
end
end
end
Add in qb-core
qb-core
Add below code or replace function in qb-inventory\server\main.lua.
replace RemoveItem
function.
local function RemoveItem(source, item, amount, slot)
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return false end
amount = tonumber(amount) or 1
slot = tonumber(slot)
if slot then
if not Player.PlayerData.items[slot] then
DropPlayer(source, 'Failed to remove item, most likely cheating')
return false
end
if Player.PlayerData.items[slot].amount > amount then
Player.PlayerData.items[slot].amount = Player.PlayerData.items[slot].amount - amount
Player.Functions.SetPlayerData('items', Player.PlayerData.items)
if item == 'fruit_basket' then
TriggerClientEvent("ds-fruitpicker:removebasket", source)
end
if not Player.Offline then
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. slot .. '], itemname: ' .. Player.PlayerData.items[slot].name .. ', removed amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[slot].amount)
end
return true
elseif Player.PlayerData.items[slot].amount == amount then
Player.PlayerData.items[slot] = nil
Player.Functions.SetPlayerData('items', Player.PlayerData.items)
if item == 'fruit_basket' then
TriggerClientEvent("ds-fruitpicker:removebasket", source)
end
if Player.Offline then return true end
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. slot .. '], itemname: ' .. item .. ', removed amount: ' .. amount .. ', item removed')
return true
end
else
local slots = GetSlotsByItem(Player.PlayerData.items, item)
local amountToRemove = amount
if not slots then return false end
for _, _slot in pairs(slots) do
if not Player.PlayerData.items[_slot] then
DropPlayer(source, 'Failed to remove item, most likely cheating')
return false
end
if Player.PlayerData.items[_slot].amount > amountToRemove then
Player.PlayerData.items[_slot].amount = Player.PlayerData.items[_slot].amount - amountToRemove
Player.Functions.SetPlayerData('items', Player.PlayerData.items)
if item == 'fruit_basket' then
TriggerClientEvent("ds-fruitpicker:removebasket", source)
end
if not Player.Offline then
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. _slot .. '], itemname: ' .. Player.PlayerData.items[_slot].name .. ', removed amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[_slot].amount)
end
return true
elseif Player.PlayerData.items[_slot].amount == amountToRemove then
Player.PlayerData.items[_slot] = nil
Player.Functions.SetPlayerData('items', Player.PlayerData.items)
if item == 'fruit_basket' then
TriggerClientEvent("ds-fruitpicker:removebasket", source)
end
if Player.Offline then return true end
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. _slot .. '], itemname: ' .. item .. ', removed amount: ' .. amount .. ', item removed')
return true
end
end
end
return false
end
Last updated