ds-fruitpicker

Unique and Advanced fruit picker job for qbcore

View on Tebex | CFX Fourm Post | Youtube Video | Discord

Installaction

Dependencies

DependencyDownloadDescription

orangeprop

Custom orange prop

qb-input (Optional)

qb-input for add input option on sell oranges and pickup oranges.

qb-target (Optional)

you need eye target script if you don't want to use drawtext

Start

  1. Extract ds-fruitpicker.zip and place it into your resource folder.

  2. Install and ensure dependencies for the resource.

  3. Setupconfig.lua (⚠️see #CONFIGURATION for instructions).

  4. Addensure ds-fruitpickerto 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.luaand add this lines

orange = {
    ["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

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

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