From 3c1354177597bb3783872276844cab72c8c985eb Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:08:56 +0530 Subject: [PATCH 01/15] updated README.md Added processing bench for weed branch & packaging. Also added a few additions to give it a more realistic feel --- README.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 811cbe8..074efea 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,14 @@ For all support questions, ask in our [Discord](https://www.discord.gg/projectsl ![image](https://user-images.githubusercontent.com/82112471/221007957-34e1641e-1cc0-469a-8bf1-33315ef1bdf0.png) ![image](https://user-images.githubusercontent.com/82112471/221006801-4639fe6e-3a07-4d27-b0e1-90e1134829fd.png) ![image](https://user-images.githubusercontent.com/82112471/221007532-bd50ae14-5927-4d7e-90fb-b2c1c9b0c467.png) +![image](https://user-images.githubusercontent.com/82112471/221007532-bd50ae14-5927-4d7e-90fb-b2c1c9b0c467.png) +![image](https://user-images.githubusercontent.com/107671912/222414486-e789257e-f9f4-4152-a8d0-738be9d13fa7.png) + +# Processing Location +``` +/tp 1041.77, -3199.31, -38.16 +``` # Dependencies - [QBCore](https://github.com/qbcore-framework/qb-core) @@ -23,12 +30,16 @@ For all support questions, ask in our [Discord](https://www.discord.gg/projectsl ## Add to your qb-core > shared > items.lua ```lua +--- ps-weedplanting ['weedplant_seedm'] = {['name'] = 'weedplant_seedm', ['label'] = 'Male Weed Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weedplant_seed.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Male Weed Seed'}, ['weedplant_seedf'] = {['name'] = 'weedplant_seedf', ['label'] = 'Female Weed Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weedplant_seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Female Weed Seed'}, -['weedplant_branch'] = {['name'] = 'weedplant_branch', ['label'] = 'Weed Branch', ['weight'] = 10000, ['type'] = 'item', ['image'] = 'weedplant_branch.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Weed plant'}, -['weedplant_weed'] = {['name'] = 'weedplant_weed', ['label'] = 'Dried Weed', ['weight'] = 100, ['type'] = 'item', ['image'] = 'weedplant_weed.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Weed ready for packaging'}, +['weedplant_branch'] = {['name'] = 'weedplant_branch', ['label'] = 'Weed Branch', ['weight'] = 10000, ['type'] = 'item', ['image'] = 'weedplant_branch.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Weed plant'}, +['weedplant_weed'] = {['name'] = 'weedplant_weed', ['label'] = 'Dried Weed', ['weight'] = 100, ['type'] = 'item', ['image'] = 'weedplant_weed.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Weed ready for packaging'}, ['weedplant_packedweed'] = {['name'] = 'weedplant_packedweed', ['label'] = 'Packed Weed', ['weight'] = 100, ['type'] = 'item', ['image'] = 'weedplant_weed.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Weed ready for sale'}, ['weedplant_package'] = {['name'] = 'weedplant_package', ['label'] = 'Suspicious Package', ['weight'] = 10000, ['type'] = 'item', ['image'] = 'weedplant_package.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Suspicious Package'}, +['plant_tub'] = {['name'] = 'plant_tub', ['label'] = 'Plant Tub', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'plant_tub.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Pot for planting plants'}, +['empty_watering_can'] = {['name'] = 'empty_watering_can', ['label'] = 'Empty Watering Can', ['weight'] = 500, ['type'] = 'item', ['image'] = 'watering_can.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Empty watering can'}, +['full_watering_can'] = {['name'] = 'full_watering_can', ['label'] = 'Full Watering Can', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'watering_can.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Watering can filled with water for watering plants'}, ``` # Credits * [Lionh34rt](https://github.com/Lionh34rt) | Check out more scripts from Lionh34rt [here.](https://lionh34rt.tebex.io/category/1954119) From 4cd4911330e8e45b2cfe61aa55d1263739c79e2a Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:10:22 +0530 Subject: [PATCH 02/15] Updated sh_shared.lua Made the lua more configurable and added few new stuff! --- shared/sh_shared.lua | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/shared/sh_shared.lua b/shared/sh_shared.lua index c55fda8..1190e71 100644 --- a/shared/sh_shared.lua +++ b/shared/sh_shared.lua @@ -1,8 +1,16 @@ Shared = Shared or {} +--- Other +Shared.Debug = false +Shared.CopJob = "leo" +Shared.Dispatch = "ps-dispatch" + --- Items Shared.MaleSeed = 'weedplant_seedm' Shared.FemaleSeed = 'weedplant_seedf' +Shared.PlantTubItem = 'plant_tub' +Shared.EmptyCanItem = 'empty_watering_can' +Shared.FullCanItem = 'full_watering_can' Shared.FertilizerItem = 'weed_nutrition' Shared.WaterItem = 'water_bottle' Shared.BranchItem = 'weedplant_branch' @@ -19,12 +27,20 @@ Shared.WeedProps = { [5] = `bkr_prop_weed_lrg_01b` } +Shared.ProcessingProps = { + {model = "bkr_prop_weed_table_01a", coords = vector4(1045.41, -3197.64, -38.13, 270),}, + {model = "hei_prop_heist_weed_pallet", coords = vector4(1044.89, -3192.6, -37.91, 196.56),}, + {model = "hei_prop_heist_weed_pallet", coords = vector4(1043.07, -3192.55, -37.91, 183.94),}, + {model = "hei_prop_heist_weed_pallet", coords = vector4(1041.27, -3192.61, -37.91, 183.98),}, + {model = "hei_prop_heist_weed_pallet", coords = vector4(1042.64, -3206.14, -37.85, 21.93),}, +} + Shared.PackageProp = `prop_mp_drug_package` --- Growing Related Settings Shared.rayCastingDistance = 7.0 -- distance in meters Shared.ClearOnStartup = true -- Clear dead plants on script start-up -Shared.ObjectZOffset = - 0.5 -- Z-coord offset for WeedProps +Shared.ObjectZOffset = - 0.01 -- Z-coord offset for WeedProps Shared.FireTime = 10000 Shared.GrowTime = 180 -- Time in minutes for a plant to grow from 0 to 100 @@ -41,7 +57,7 @@ Shared.WeedRunStart = vector4(428.19, -1515.52, 29.29, 203.72) Shared.PedModel = 'a_m_y_breakdance_01' Shared.PackageTime = 2 -- Time in minutes to wait for packaging Shared.DeliveryWaitTime = {8, 12} -- Time in seconds (min, max) the player has to wait to receive a new delivery location -Shared.CallCopsChance = 20 -- 20% +Shared.CallCopsChance = 100 -- 20% Shared.PayOut = {16000, 20000} -- Min/max payout for delivering a suspicious package Shared.DropOffLocations = { -- Drop-off locations From 6581d185fae345841e1c9cb3cedff90a8f122c9c Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:11:02 +0530 Subject: [PATCH 03/15] Updated locales.lua Added new locales --- shared/locales.lua | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/shared/locales.lua b/shared/locales.lua index 9e6a420..f4fe2b3 100644 --- a/shared/locales.lua +++ b/shared/locales.lua @@ -2,34 +2,46 @@ local Locales = { ['place_sapling'] = 'Placing Sapling..', ['canceled'] = 'Canceled..', ['place_or_cancel'] = '[E] - Place Plant / [G] - Cancel', + ['missing_filling_water'] = 'You are missing something to fill the water..', ['missing_water'] = 'You are missing something to water the plant..', ['missing_fertilizer'] = 'You don\'t have any fertilizer..', ['missing_mseed'] = 'You don\'t have a male seed..', ['clear_plant'] = 'Clearing Plant..', ['harvesting_plant'] = 'Harvesting Plant..', ['watering_plant'] = 'Watering Plant..', + ['filling_water'] = 'Filling Water..', ['fertilizing_plant'] = 'Adding fertilizer to the plant..', ['adding_male_seed'] = 'Adding male seed..', + ['missing_tub'] = 'You dont have a tub to plant the seed..', ['check_plant'] = 'Check Plant', ['plant_header'] = 'Cannabis Plant', + ['empty_watering_can_header'] = 'Watering Can', ['esc_to_close'] = 'ESC or Click to Close', + ['filled_can'] = 'You\'ve filled the watering can..', ['watered_plant'] = 'You\'ve watered the plant..', ['fertilizer_added'] = 'You\'ve added fertilizer to the plant..', ['male_seed_added'] = 'You\'ve added a male seed to the plant..', ['processing_branch'] = 'Processing branch', ['ready_for_harvest'] = 'This plant is ready for harvest!', ['clear_plant_header'] = 'Clear Plant', + ['fill_can_header'] = 'Fill watering can', + ['fill_can_text'] = 'Fill the watering can with water..', ['clear_plant_text'] = 'The plant is dead..', + ['process_branch'] = 'Start processing branch..', + ['pack_dry_weed'] = 'Start packaging dried weed..', ['destroy_plant'] = 'Destroy Plant', ['add_water'] = 'Add water to this plant', ['add_fertilizer'] = 'Add fertilizer to the plant', ['add_mseed'] = 'Add male seeds', - ['not_enough_dryweed'] = 'You don\'t have enough dried weed...', + ['not_enough_dryweed'] = 'You don\'t have enough dried weed..', + ['not_enough_dryweed'] = 'There were not enough dry weeds to pack..', ['packaging_weed'] = 'Packaging..', ['package_goods'] = 'Package Goods', ['grab_packaged_goods'] = 'Grab Package', ['start_delivering'] = 'Start Delivering', ['stop_delivering'] = 'Stop Delivering', + ['dont_have_branch'] = 'You dont have the required items', + ['dont_have_enough_dryweed'] = 'You dont have required/enough items', ['dont_have_anything'] = 'You don\'t have anything to package for me..', ['handing_over_weed'] = 'Handing over packed weed..', ['wait_closeby'] = 'Wait closeby until i\'m done packaging for you..', @@ -48,4 +60,4 @@ local Locales = { function _U(entry) return Locales[entry] -end \ No newline at end of file +end From 51a266bd691ea176c8a98b9fb6c4c90737ce4d11 Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:11:27 +0530 Subject: [PATCH 04/15] Updated locales.lua --- shared/locales.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/locales.lua b/shared/locales.lua index f4fe2b3..8c9d356 100644 --- a/shared/locales.lua +++ b/shared/locales.lua @@ -1,5 +1,5 @@ local Locales = { - ['place_sapling'] = 'Placing Sapling..', + ['place_sapling'] = 'Placing Sapling..', ['canceled'] = 'Canceled..', ['place_or_cancel'] = '[E] - Place Plant / [G] - Cancel', ['missing_filling_water'] = 'You are missing something to fill the water..', @@ -40,7 +40,7 @@ local Locales = { ['grab_packaged_goods'] = 'Grab Package', ['start_delivering'] = 'Start Delivering', ['stop_delivering'] = 'Stop Delivering', - ['dont_have_branch'] = 'You dont have the required items', + ['dont_have_branch'] = 'You dont have the required items', ['dont_have_enough_dryweed'] = 'You dont have required/enough items', ['dont_have_anything'] = 'You don\'t have anything to package for me..', ['handing_over_weed'] = 'Handing over packed weed..', From 30ee5d0b368153af284ecd5c670cbf44cbf41c1b Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:13:39 +0530 Subject: [PATCH 05/15] Updated sv_planting.lua Made the new items useable and removed the unrequired lines. --- server/sv_planting.lua | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/server/sv_planting.lua b/server/sv_planting.lua index 947aa99..7175c20 100644 --- a/server/sv_planting.lua +++ b/server/sv_planting.lua @@ -263,7 +263,7 @@ RegisterNetEvent('ps-weedplanting:server:PoliceDestroy', function(netId) local src = source local Player = QBCore.Functions.GetPlayer(src) if not Player then return end - if Player.PlayerData.job.type ~= 'leo' then return end + if Player.PlayerData.job.type ~= Shared.CopJob then return end if #(GetEntityCoords(GetPlayerPed(src)) - WeedPlants[entity].coords) > 10 then return end if DoesEntityExist(entity) then @@ -287,8 +287,8 @@ RegisterNetEvent('ps-weedplanting:server:GiveWater', function(netId) if not Player then return end if #(GetEntityCoords(GetPlayerPed(src)) - WeedPlants[entity].coords) > 10 then return end - if Player.Functions.RemoveItem(Shared.WaterItem, 1, false) then - TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.WaterItem], 'remove', 1) + if Player.Functions.RemoveItem(Shared.FullCanItem, 1, false) then + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.FullCanItem], 'remove', 1) TriggerClientEvent('QBCore:Notify', src, _U('watered_plant'), 'success', 2500) WeedPlants[entity].water[#WeedPlants[entity].water + 1] = os.time() @@ -344,8 +344,9 @@ RegisterNetEvent('ps-weedplanting:server:CreateNewPlant', function(coords) local Player = QBCore.Functions.GetPlayer(src) if not Player then return end if #(GetEntityCoords(GetPlayerPed(src)) - coords) > Shared.rayCastingDistance + 10 then return end - if Player.Functions.RemoveItem(Shared.FemaleSeed, 1) then + if Player.Functions.RemoveItem(Shared.FemaleSeed, 1) and Player.Functions.RemoveItem(Shared.PlantTubItem, 1) then TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.FemaleSeed], 'remove', 1) + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.PlantTubItem], 'remove', 1) local ModelHash = Shared.WeedProps[1] local plant = CreateObjectNoOffset(ModelHash, coords.x, coords.y, coords.z + Shared.ObjectZOffset, true, true, false) FreezeEntityPosition(plant, true) @@ -369,6 +370,20 @@ RegisterNetEvent('ps-weedplanting:server:CreateNewPlant', function(coords) end end) +RegisterNetEvent('ps-weedplanting:server:GetFullWateringCan', function(netId) + + local src = source + local Player = QBCore.Functions.GetPlayer(src) + + if Player.Functions.RemoveItem(Shared.EmptyCanItem, 1, false) and Player.Functions.RemoveItem(Shared.WaterItem, 1, false) then + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.EmptyCanItem], 'remove', 1) + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.WaterItem], 'remove', 1) + TriggerClientEvent('QBCore:Notify', src, _U('filled_can'), 'success', 2500) + Player.Functions.AddItem(Shared.FullCanItem, 1, false) + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.FullCanItem], 'add', 1) + end +end) + --- Callbacks QBCore.Functions.CreateCallback('ps-weedplanting:server:GetPlantData', function(source, cb, netId) @@ -391,7 +406,20 @@ end) --- Items QBCore.Functions.CreateUseableItem(Shared.FemaleSeed, function(source) - TriggerClientEvent("ps-weedplanting:client:UseWeedSeed", source) + local src = source + local Player = QBCore.Functions.GetPlayer(src) + local tub = Player.Functions.GetItemByName(Shared.PlantTubItem) + + if tub ~= nil then + TriggerClientEvent("ps-weedplanting:client:UseWeedSeed", source) + else + TriggerClientEvent('QBCore:Notify', src, _U('missing_tub'), 'error', 2500) + end +end) + +QBCore.Functions.CreateUseableItem(Shared.EmptyCanItem, function(source) + local src = source + TriggerClientEvent("ps-weedplanting:client:OpenFillWaterMenu", src) end) From f29084bd1d9738c48d5f404f9351806842d7916d Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:15:39 +0530 Subject: [PATCH 06/15] updated sv_processing.lua Removed the useable of branch and weed as the new processing bench / table has been added --- server/sv_processing.lua | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/server/sv_processing.lua b/server/sv_processing.lua index dd22943..5f69d70 100644 --- a/server/sv_processing.lua +++ b/server/sv_processing.lua @@ -24,20 +24,7 @@ RegisterNetEvent('ps-weedplanting:server:PackageWeed', function() TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.WeedItem], 'remove', 20) Player.Functions.AddItem(Shared.PackedWeedItem, 1, false) TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.PackedWeedItem], 'add', 1) - end -end) - ---- Items - -QBCore.Functions.CreateUseableItem(Shared.BranchItem, function(source) - TriggerClientEvent('ps-weedplanting:client:UseBranch', source) -end) - -QBCore.Functions.CreateUseableItem(Shared.WeedItem, function(source, item) - local src = source - if item and item.amount >= 20 then - TriggerClientEvent('ps-weedplanting:client:UseDryWeed', source) else - TriggerClientEvent('QBCore:Notify', src, _U('not_enough_dryweed'), 'error', 2500) + TriggerClientEvent('QBCore:Notify', src,_U('not_enough_dryweed'), 'error') end end) From 8fbe5296810cb37312f61d347c0b331633b5f287 Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:16:26 +0530 Subject: [PATCH 07/15] Update sv_weedrun.lua From 55ae667a33262a30f43cfbb783464c0a0c77c67a Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:17:19 +0530 Subject: [PATCH 08/15] Updated images Images of plant tub & watering can has been added --- images/plant_tub.png | Bin 0 -> 6900 bytes images/watering_can.png | Bin 0 -> 10231 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/plant_tub.png create mode 100644 images/watering_can.png diff --git a/images/plant_tub.png b/images/plant_tub.png new file mode 100644 index 0000000000000000000000000000000000000000..17a163a81d2f3a6a6cae66c8421d853f66d02ebc GIT binary patch literal 6900 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 literal 0 HcmV?d00001 diff --git a/images/watering_can.png b/images/watering_can.png new file mode 100644 index 0000000000000000000000000000000000000000..487722a6271d17a99edbacf615ec74865db8056d GIT binary patch literal 10231 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 QzhBMM(Y&EihIkP4Uu@)`jQ{`u literal 0 HcmV?d00001 From be340f987ce26f66c46b0f91f5f0e44f489b1bb3 Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:19:44 +0530 Subject: [PATCH 09/15] updated cl_planting.lua Added menu for adding water to the watering can & a few new lines added and edited to support the new processing system --- client/cl_planting.lua | 50 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/client/cl_planting.lua b/client/cl_planting.lua index 73ba923..196af5c 100644 --- a/client/cl_planting.lua +++ b/client/cl_planting.lua @@ -139,7 +139,7 @@ RegisterNetEvent('ps-weedplanting:client:CheckPlant', function(data) } }) elseif result.growth == 100 then -- Harvest - if PlayerJob.type == 'leo' and PlayerJob.onduty then + if PlayerJob.type == Shared.CopJob and PlayerJob.onduty then exports['qb-menu']:openMenu({ { header = _U('plant_header'), @@ -190,7 +190,7 @@ RegisterNetEvent('ps-weedplanting:client:CheckPlant', function(data) }) end elseif result.gender == 'female' then -- Option to add male seed - if PlayerJob.type == 'leo' and PlayerJob.onduty then + if PlayerJob.type == Shared.CopJob and PlayerJob.onduty then exports['qb-menu']:openMenu({ { header = _U('plant_header'), @@ -262,7 +262,7 @@ RegisterNetEvent('ps-weedplanting:client:CheckPlant', function(data) }) end else -- No option to add male seed - if PlayerJob.type == 'leo' and PlayerJob.onduty then + if PlayerJob.type == Shared.CopJob and PlayerJob.onduty then exports['qb-menu']:openMenu({ { header = _U('plant_header'), @@ -427,7 +427,7 @@ RegisterNetEvent('ps-weedplanting:client:FireGoBrrrrrrr', function(coords) end) RegisterNetEvent('ps-weedplanting:client:GiveWater', function(entity) - if QBCore.Functions.HasItem(Shared.WaterItem, 1) then + if QBCore.Functions.HasItem(Shared.FullCanItem, 1) then local netId = NetworkGetNetworkIdFromEntity(entity) local ped = PlayerPedId() local coords = GetEntityCoords(ped) @@ -466,6 +466,48 @@ RegisterNetEvent('ps-weedplanting:client:GiveWater', function(entity) end end) +RegisterNetEvent('ps-weedplanting:client:OpenFillWaterMenu', function() + exports['qb-menu']:openMenu({ + { + header = _U('empty_watering_can_header'), + txt = _U('esc_to_close'), + icon = 'fas fa-chevron-left', + params = { + event = 'qb-menu:closeMenu' + } + }, + { + header = _U('fill_can_header'), + txt = _U('fill_can_text'), + icon = 'fa-solid fa-oil-can', + params = { + event = 'ps-weedplanting:client:FillWater', + } + } + }) +end) + +RegisterNetEvent('ps-weedplanting:client:FillWater', function() + + local hasItem = QBCore.Functions.HasItem(Shared.WaterItem) + + if not hasItem then + QBCore.Functions.Notify(_U('missing_filling_water'), 'error', 2500) + return + end + + QBCore.Functions.Progressbar('filling_water', _U('filling_water'), 2000, false, true, { + disableMovement = true, + disableCarMovement = true, + disableMouse = false, + disableCombat = true, + }, {}, {}, {}, function() + TriggerServerEvent('ps-weedplanting:server:GetFullWateringCan') + end, function() -- Cancel + QBCore.Functions.Notify(_U('canceled'), 'error', 2500) + end) +end) + RegisterNetEvent('ps-weedplanting:client:GiveFertilizer', function(entity) if QBCore.Functions.HasItem(Shared.FertilizerItem, 1) then local netId = NetworkGetNetworkIdFromEntity(entity) From 3352a9d1b457eff55b2656420bb67907c49a3416 Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:20:19 +0530 Subject: [PATCH 10/15] Added processing bench --- client/cl_processing.lua | 82 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 7 deletions(-) diff --git a/client/cl_processing.lua b/client/cl_processing.lua index 1cf35dc..e4040e0 100644 --- a/client/cl_processing.lua +++ b/client/cl_processing.lua @@ -1,27 +1,95 @@ ---- Events +local props = {} -RegisterNetEvent('ps-weedplanting:client:UseBranch', function() - QBCore.Functions.Progressbar('weedbranch', _U('processing_branch'), 5000, false, true, { +function SpawnWeedProcessProps() + for k, v in pairs(Shared.ProcessingProps) do + props[#props+1] = CreateObject(v.model,vector3(v.coords.x,v.coords.y,v.coords.z-1.00)) + SetEntityHeading(props[#props],v.coords.w) + FreezeEntityPosition(props, true) + end +end + +CreateThread(function () + + SpawnWeedProcessProps() + + exports['qb-target']:AddBoxZone('weedprocess', vector3(1045.4, -3197.62, -38.16), 2.3, 1.0, { + name = 'weedprocess', + heading = 0, + minZ = -41.16, + maxZ = -37.50, + debugPoly = Shared.Debug, + }, { + options = { + { + type = 'client', + event = 'ps-weedplanting:client:ProcessBranch', + icon = 'fa-solid fa-cannabis', + label = _U('process_branch'), + }, + { -- Create Package + type = 'client', + event = 'ps-weedplanting:client:PackDryWeed', + icon = 'fa-solid fa-box', + label = _U('pack_dry_weed'), + } + + }, + distance = 1.5 + }) +end) + +RegisterNetEvent('ps-weedplanting:client:ProcessBranch', function() + + local hasItem = QBCore.Functions.HasItem(Shared.BranchItem, 1) + + if not hasItem then + QBCore.Functions.Notify(_U('dont_have_branch'), 'error', 2500) + return + end + + local ped = PlayerPedId() + local table = vector4(1045.4, -3197.62, -38.16, 0.0) + + TaskTurnPedToFaceCoord(ped, table, 1000) + Wait(1300) + + QBCore.Functions.Progressbar('weedbranch', _U('processing_branch'), 12000, false, true, { disableMovement = true, disableCarMovement = true, disableMouse = false, disableCombat = true, - }, {}, {}, {}, function() -- Done + }, { animDict = "mini@repair", anim = "fixing_a_ped", flags = 8, }, {}, {}, function() TriggerServerEvent('ps-weedplanting:server:ProcessBranch') end, function() -- Cancel QBCore.Functions.Notify(_U('canceled'), 'error', 2500) + ClearPedTasks(ped) end) end) -RegisterNetEvent('ps-weedplanting:client:UseDryWeed', function() - QBCore.Functions.Progressbar('dryweed', _U('packaging_weed'), 5000, false, true, { +RegisterNetEvent('ps-weedplanting:client:PackDryWeed', function() + + local hasItem = QBCore.Functions.HasItem(Shared.WeedItem) + + if not hasItem then + QBCore.Functions.Notify(_U('dont_have_enough_dryweed'), 'error', 2500) + return + end + + local ped = PlayerPedId() + local table = vector4(1045.4, -3197.62, -38.16, 0.0) + + TaskTurnPedToFaceCoord(ped, table, 1000) + Wait(1300) + + QBCore.Functions.Progressbar('dryweed', _U('packaging_weed'), 12000, false, true, { disableMovement = true, disableCarMovement = true, disableMouse = false, disableCombat = true, - }, {}, {}, {}, function() -- Done + }, { animDict = "mini@repair", anim = "fixing_a_ped", flags = 8, }, {}, {}, function() TriggerServerEvent('ps-weedplanting:server:PackageWeed') end, function() -- Cancel QBCore.Functions.Notify(_U('canceled'), 'error', 2500) + ClearPedTasks(ped) end) end) From 989d7fb9efc91841b7d44f9e6e9bc508d3d6a81c Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 20:22:45 +0530 Subject: [PATCH 11/15] Box-zone added for the weed run ped :) Box zone added over the ped to avoid power gaming exploit xd --- client/cl_weedrun.lua | 116 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/client/cl_weedrun.lua b/client/cl_weedrun.lua index a64918e..8bb67ea 100644 --- a/client/cl_weedrun.lua +++ b/client/cl_weedrun.lua @@ -113,7 +113,7 @@ local createNewDropOff = function() createDropOffBlip(randomLoc) dropOffArea = CircleZone:Create(randomLoc.xyz, 85.0, { name = 'dropOffArea', - debugPoly = true + debugPoly = Shared.Debug }) dropOffArea:onPlayerInOut(function(isPointInside, point) @@ -186,7 +186,7 @@ RegisterNetEvent('ps-weedplanting:client:StartPackage', function(data) packageZone = CircleZone:Create(Shared.WeedRunStart.xyz, 10.0, { name = 'weedrunning_start', - debugPoly = false + debugPoly = Shared.Debug }) packageZone:onPlayerInOut(function(isPointInside, point) @@ -241,7 +241,7 @@ RegisterNetEvent('ps-weedplanting:client:DeliverWeed', function() return end - local ped = PlayerPedId() + local ped = PlayerPedId() if not IsPedOnFoot(ped) then return end if #(GetEntityCoords(ped) - GetEntityCoords(deliveryPed)) < 5.0 then madeDeal = true @@ -249,8 +249,8 @@ RegisterNetEvent('ps-weedplanting:client:DeliverWeed', function() -- Alert Cops if math.random(100) <= Shared.CallCopsChance then - if GetResourceState('ps-dispatch') == 'started' then - exports['ps-dispatch']:DrugSale() -- Project-SLoth ps-dispatch + if GetResourceState(Shared.Dispatch) == 'started' then + exports[Shared.Dispatch]:DrugSale() -- Project-SLoth ps-dispatch end end @@ -299,59 +299,61 @@ RegisterNetEvent('ps-weedplanting:client:DeliverWeed', function() end end) ---- Threads - CreateThread(function() - exports['qb-target']:SpawnPed({ - model = Shared.PedModel, - coords = Shared.WeedRunStart, - minusOne = true, - freeze = true, - invincible = true, - blockevents = true, - animDict = 'anim@mp_celebration@idles@female', - anim = 'celebration_idle_f_a', - flag = 0, - target = { - options = { - { -- Create Package - type = 'client', - event = 'ps-weedplanting:client:StartPackage', - icon = 'fas fa-circle-chevron-right', - label = _U('package_goods'), - canInteract = function() - return not waitingForPackage - end - }, - { -- Receive Package - type = 'server', - event = 'ps-weedplanting:server:CollectPackageGoods', - icon = 'fas fa-circle-chevron-right', - label = _U('grab_packaged_goods'), - canInteract = function() - return waitingForPackage - end - }, - { -- Clock In for deliveries - type = 'client', - event = 'ps-weedplanting:client:ClockIn', - icon = 'fas fa-stopwatch', - label = _U('start_delivering'), - canInteract = function() - return not delivering - end - }, - { -- Clock out for deliveries - type = 'client', - event = 'ps-weedplanting:client:ClockOut', - icon = 'fas fa-stopwatch', - label = _U('stop_delivering'), - canInteract = function() - return delivering - end - } + local ped = nil + + RequestModel(Shared.PedModel) while not HasModelLoaded(Shared.PedModel) do Wait(0) end + ped = CreatePed(0, Shared.PedModel, vector4(Shared.WeedRunStart.x, Shared.WeedRunStart.y, Shared.WeedRunStart.z - 1, Shared.WeedRunStart.w ), false, false) + SetEntityInvincible(ped, true) + SetBlockingOfNonTemporaryEvents(ped, true) + FreezeEntityPosition(ped, true) + TaskStartScenarioInPlace(ped,"WORLD_HUMAN_DRUG_DEALER", -1, true) + + exports['qb-target']:AddBoxZone('weed-run-zone', vector3(Shared.WeedRunStart.x, Shared.WeedRunStart.y, Shared.WeedRunStart.z), 0.8, 0.8, { + name = 'weed-run-zone', + heading = Shared.WeedRunStart.w, + minZ = Shared.WeedRunStart.z - 1, + maxZ = Shared.WeedRunStart.z + 1, + debugPoly = Shared.Debug, + }, { + options = { + { -- Create Package + type = 'client', + event = 'ps-weedplanting:client:StartPackage', + icon = 'fas fa-circle-chevron-right', + label = _U('package_goods'), + canInteract = function() + return not waitingForPackage + end + }, + { -- Receive Package + type = 'server', + event = 'ps-weedplanting:server:CollectPackageGoods', + icon = 'fas fa-circle-chevron-right', + label = _U('grab_packaged_goods'), + canInteract = function() + return waitingForPackage + end }, - distance = 1.5 - } + { -- Clock In for deliveries + type = 'client', + event = 'ps-weedplanting:client:ClockIn', + icon = 'fas fa-stopwatch', + label = _U('start_delivering'), + canInteract = function() + return not delivering + end + }, + { -- Clock out for deliveries + type = 'client', + event = 'ps-weedplanting:client:ClockOut', + icon = 'fas fa-stopwatch', + label = _U('stop_delivering'), + canInteract = function() + return delivering + end + } + }, + distance = 1.5 }) end) From 879c17e065d89ffd1301e33df1a2d54cc8ada9f8 Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Thu, 2 Mar 2023 21:59:12 +0530 Subject: [PATCH 12/15] Updated sv_planting.lua Added a line that I forgot to add before! --- server/sv_planting.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/sv_planting.lua b/server/sv_planting.lua index 7175c20..8c30257 100644 --- a/server/sv_planting.lua +++ b/server/sv_planting.lua @@ -290,6 +290,8 @@ RegisterNetEvent('ps-weedplanting:server:GiveWater', function(netId) if Player.Functions.RemoveItem(Shared.FullCanItem, 1, false) then TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.FullCanItem], 'remove', 1) TriggerClientEvent('QBCore:Notify', src, _U('watered_plant'), 'success', 2500) + Player.Functions.AddItem(Shared.EmptyCanItem, 1, false) + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Shared.EmptyCanItem], 'add', 1) WeedPlants[entity].water[#WeedPlants[entity].water + 1] = os.time() MySQL.update('UPDATE weedplants SET water = (:water) WHERE id = (:id)', { From 418a67ca6ae0b6d382721c096d3b6aff1fbf48ef Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Fri, 3 Mar 2023 11:17:18 +0530 Subject: [PATCH 13/15] updated README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 074efea..c65df3a 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,8 @@ For all support questions, ask in our [Discord](https://www.discord.gg/projectsl # Processing Location -``` /tp 1041.77, -3199.31, -38.16 -``` + # Dependencies - [QBCore](https://github.com/qbcore-framework/qb-core) From 1bbc70173a52c0457786d6ce4b2036c5d2fe7935 Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Fri, 3 Mar 2023 11:25:26 +0530 Subject: [PATCH 14/15] Updated sh_shared.lua --- shared/sh_shared.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/sh_shared.lua b/shared/sh_shared.lua index 1190e71..8fdd162 100644 --- a/shared/sh_shared.lua +++ b/shared/sh_shared.lua @@ -57,7 +57,7 @@ Shared.WeedRunStart = vector4(428.19, -1515.52, 29.29, 203.72) Shared.PedModel = 'a_m_y_breakdance_01' Shared.PackageTime = 2 -- Time in minutes to wait for packaging Shared.DeliveryWaitTime = {8, 12} -- Time in seconds (min, max) the player has to wait to receive a new delivery location -Shared.CallCopsChance = 100 -- 20% +Shared.CallCopsChance = 20 -- 20% Shared.PayOut = {16000, 20000} -- Min/max payout for delivering a suspicious package Shared.DropOffLocations = { -- Drop-off locations From 04e51dd5db204f377efda6772d767db4c281d52e Mon Sep 17 00:00:00 2001 From: 3RROR HUB <3rrorhuboffiicial@gmail.com> Date: Fri, 3 Mar 2023 14:12:38 +0530 Subject: [PATCH 15/15] Prop offset changed --- shared/sh_shared.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/sh_shared.lua b/shared/sh_shared.lua index 8fdd162..901da1d 100644 --- a/shared/sh_shared.lua +++ b/shared/sh_shared.lua @@ -40,7 +40,7 @@ Shared.PackageProp = `prop_mp_drug_package` --- Growing Related Settings Shared.rayCastingDistance = 7.0 -- distance in meters Shared.ClearOnStartup = true -- Clear dead plants on script start-up -Shared.ObjectZOffset = - 0.01 -- Z-coord offset for WeedProps +Shared.ObjectZOffset = - 0.2 -- Z-coord offset for WeedProps Shared.FireTime = 10000 Shared.GrowTime = 180 -- Time in minutes for a plant to grow from 0 to 100