diff --git a/__resource.lua b/__resource.lua new file mode 100644 index 00000000..12628236 --- /dev/null +++ b/__resource.lua @@ -0,0 +1,7 @@ +description 'esx_drugs' + +server_script 'server/esx_drugs_sv.lua' +server_script 'config.lua' + +client_script 'config.lua' +client_script 'client/esx_drugs_cl.lua' \ No newline at end of file diff --git a/client/esx_drugs_cl.lua b/client/esx_drugs_cl.lua new file mode 100644 index 00000000..cfe2f4c7 --- /dev/null +++ b/client/esx_drugs_cl.lua @@ -0,0 +1,272 @@ +local Keys = { + ["ESC"] = 322, ["F1"] = 288, ["F2"] = 289, ["F3"] = 170, ["F5"] = 166, ["F6"] = 167, ["F7"] = 168, ["F8"] = 169, ["F9"] = 56, ["F10"] = 57, + ["~"] = 243, ["1"] = 157, ["2"] = 158, ["3"] = 160, ["4"] = 164, ["5"] = 165, ["6"] = 159, ["7"] = 161, ["8"] = 162, ["9"] = 163, ["-"] = 84, ["="] = 83, ["BACKSPACE"] = 177, + ["TAB"] = 37, ["Q"] = 44, ["W"] = 32, ["E"] = 38, ["R"] = 45, ["T"] = 245, ["Y"] = 246, ["U"] = 303, ["P"] = 199, ["["] = 39, ["]"] = 40, ["ENTER"] = 18, + ["CAPS"] = 137, ["A"] = 34, ["S"] = 8, ["D"] = 9, ["F"] = 23, ["G"] = 47, ["H"] = 74, ["K"] = 311, ["L"] = 182, + ["LEFTSHIFT"] = 21, ["Z"] = 20, ["X"] = 73, ["C"] = 26, ["V"] = 0, ["B"] = 29, ["N"] = 249, ["M"] = 244, [","] = 82, ["."] = 81, + ["LEFTCTRL"] = 36, ["LEFTALT"] = 19, ["SPACE"] = 22, ["RIGHTCTRL"] = 70, + ["HOME"] = 213, ["PAGEUP"] = 10, ["PAGEDOWN"] = 11, ["DELETE"] = 178, + ["LEFT"] = 174, ["RIGHT"] = 175, ["TOP"] = 27, ["DOWN"] = 173, + ["NENTER"] = 201, ["N4"] = 108, ["N5"] = 60, ["N6"] = 107, ["N+"] = 96, ["N-"] = 97, ["N7"] = 117, ["N8"] = 61, ["N9"] = 118 +} + +local PID = 0 +local GUI = {} +local cokeQTE = 0 +ESX = nil +GUI.Time = 0 +local coke_poochQTE = 0 +local weedQTE = 0 +local weed_poochQTE = 0 +local methQTE = 0 +local meth_poochQTE = 0 +local PlayerData = {} +local GUI = {} +local HasAlreadyEnteredMarker = false +local LastZone = nil +local CurrentAction = nil +local CurrentActionMsg = '' +local CurrentActionData = {} + +Citizen.CreateThread(function() + while ESX == nil do + TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) + Citizen.Wait(0) + end +end) + +AddEventHandler('esx_drugs:hasEnteredMarker', function(zone) + + ESX.UI.Menu.CloseAll() + + if zone == 'CokeFarm' then + if myJob ~= "police" then + CurrentAction = 'coke_harvest' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour récolter la coke' + CurrentActionData = {} + end + end + + if zone == 'CokeTreatment' then + if myJob ~= "police" then + if cokeQTE >= 5 then + CurrentAction = 'coke_treatment' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour traiter la coke' + CurrentActionData = {} + end + end + end + + if zone == 'CokeResell' then + if myJob ~= "police" then + if coke_poochQTE >= 1 then + CurrentAction = 'coke_resell' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour vendre la coke' + CurrentActionData = {} + end + end + end + + if zone == 'MethFarm' then + if myJob ~= "police" then + CurrentAction = 'meth_harvest' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour récolter la meth' + CurrentActionData = {} + end + end + + if zone == 'MethTreatment' then + if myJob ~= "police" then + if cokeQTE >= 5 then + CurrentAction = 'meth_treatment' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour traiter la meth' + CurrentActionData = {} + end + end + end + + if zone == 'MethResell' then + if myJob ~= "police" then + if coke_poochQTE >= 1 then + CurrentAction = 'meth_resell' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour vendre la meth' + CurrentActionData = {} + end + end + end + + if zone == 'WeedFarm' then + if myJob ~= "police" then + CurrentAction = 'weed_harvest' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour récolter la weed' + CurrentActionData = {} + end + end + + if zone == 'WeedTreatment' then + if myJob ~= "police" then + if cokeQTE >= 5 then + CurrentAction = 'weed_treatment' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour traiter la weed' + CurrentActionData = {} + end + end + end + + if zone == 'WeedResell' then + if myJob ~= "police" then + if coke_poochQTE >= 1 then + CurrentAction = 'weed_resell' + CurrentActionMsg = 'Appuez sur ~INPUT_CONTEXT~ pour vendre la weed' + CurrentActionData = {} + end + end + end +end) + +AddEventHandler('esx_drugs:hasExitedMarker', function(zone) + + CurrentAction = nil + ESX.UI.Menu.CloseAll() + + TriggerServerEvent('esx_drugs:stopHarvestCoke') + TriggerServerEvent('esx_drugs:stopTransformCoke') + TriggerServerEvent('esx_drugs:stopSellCoke') + TriggerServerEvent('esx_drugs:stopHarvestMeth') + TriggerServerEvent('esx_drugs:stopTransformMeth') + TriggerServerEvent('esx_drugs:stopSellMeth') + TriggerServerEvent('esx_drugs:stopHarvestWeed') + TriggerServerEvent('esx_drugs:stopTransformWeed') + TriggerServerEvent('esx_drugs:stopSellWeed') +end) + +-- Weed Effect +RegisterNetEvent('esx_drugs:onPot') +AddEventHandler('esx_drugs:onPot', function() + RequestAnimSet("MOVE_M@DRUNK@SLIGHTLYDRUNK") + while not HasAnimSetLoaded("MOVE_M@DRUNK@SLIGHTLYDRUNK") do + Citizen.Wait(0) + end + TaskStartScenarioInPlace(GetPlayerPed(-1), "WORLD_HUMAN_SMOKING_POT", 0, true) + Citizen.Wait(5000) + DoScreenFadeOut(1000) + Citizen.Wait(1000) + ClearPedTasksImmediately(GetPlayerPed(-1)) + SetTimecycleModifier("spectator5") + SetPedMotionBlur(GetPlayerPed(-1), true) + SetPedMovementClipset(GetPlayerPed(-1), "MOVE_M@DRUNK@SLIGHTLYDRUNK", true) + SetPedIsDrunk(GetPlayerPed(-1), true) + DoScreenFadeIn(1000) + Citizen.Wait(600000) + DoScreenFadeOut(1000) + Citizen.Wait(1000) + DoScreenFadeIn(1000) + ClearTimecycleModifier() + ResetScenarioTypesEnabled() + ResetPedMovementClipset(GetPlayerPed(-1), 0) + SetPedIsDrunk(GetPlayerPed(-1), false) + SetPedMotionBlur(GetPlayerPed(-1), false) +end) + +-- Render markers +Citizen.CreateThread(function() + while true do + + Wait(0) + + local coords = GetEntityCoords(GetPlayerPed(-1)) + + for k,v in pairs(Config.Zones) do + if(GetDistanceBetweenCoords(coords, v.x, v.y, v.z, true) < Config.DrawDistance) then + DrawMarker(Config.MarkerType, v.x, v.y, v.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.ZoneSize.x, Config.ZoneSize.y, Config.ZoneSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false) + end + end + + end +end) + +-- RETURN NUMBER OF ITEMS FROM SERVER +RegisterNetEvent('esx_drugs:ReturnInventory') +AddEventHandler('esx_drugs:ReturnInventory', function(cokeNbr, cokepNbr, methNbr, methpNbr, weedNbr, weedpNbr, jobName, currentZone) + cokeQTE = cokeNbr + coke_poochQTE = cokepNbr + methQTE = methNbr + meth_poochQTE = methpNbr + weedQTE = weedNbr + weed_poochQTE = weedpNbr + myJob = jobName + TriggerEvent('esx_drugs:hasEnteredMarker', currentZone) +end) + +-- Activate menu when player is inside marker +Citizen.CreateThread(function() + while true do + + Wait(0) + + local coords = GetEntityCoords(GetPlayerPed(-1)) + local isInMarker = false + local currentZone = nil + + for k,v in pairs(Config.Zones) do + if(GetDistanceBetweenCoords(coords, v.x, v.y, v.z, true) < Config.ZoneSize.x / 2) then + isInMarker = true + currentZone = k + end + end + + if isInMarker and not hasAlreadyEnteredMarker then + hasAlreadyEnteredMarker = true + lastZone = currentZone + TriggerServerEvent('esx_drugs:GetUserInventory', currentZone) + end + + if not isInMarker and hasAlreadyEnteredMarker then + hasAlreadyEnteredMarker = false + TriggerEvent('esx_drugs:hasExitedMarker', lastZone) + end + + end +end) + +-- Key Controls +Citizen.CreateThread(function() + while true do + Citizen.Wait(0) + if CurrentAction ~= nil then + SetTextComponentFormat('STRING') + AddTextComponentString(CurrentActionMsg) + DisplayHelpTextFromStringLabel(0, 0, 1, -1) + if IsControlJustReleased(0, 38) then + if CurrentAction == 'coke_harvest' then + TriggerServerEvent('esx_drugs:startHarvestCoke') + end + if CurrentAction == 'coke_treatment' then + TriggerServerEvent('esx_drugs:startTransformCoke') + end + if CurrentAction == 'coke_resell' then + TriggerServerEvent('esx_drugs:startSellCoke') + end + if CurrentAction == 'meth_harvest' then + TriggerServerEvent('esx_drugs:startHarvestMeth') + end + if CurrentAction == 'meth_treatment' then + TriggerServerEvent('esx_drugs:startTransformMeth') + end + if CurrentAction == 'meth_resell' then + TriggerServerEvent('esx_drugs:startSellCoke') + end + if CurrentAction == 'weed_harvest' then + TriggerServerEvent('esx_drugs:startHarvestWeed') + end + if CurrentAction == 'wedd_treatment' then + TriggerServerEvent('esx_drugs:startTransformWeed') + end + if CurrentAction == 'weed_resell' then + TriggerServerEvent('esx_drugs:startSellWeed') + end + CurrentAction = nil + end + end + end +end) diff --git a/config.lua b/config.lua new file mode 100644 index 00000000..6699d8ca --- /dev/null +++ b/config.lua @@ -0,0 +1,20 @@ +Config = {} +Config.MarkerType = 1 +Config.DrawDistance = 100.0 +Config.ZoneSize = {x = 5.0, y = 5.0, z = 3.0} +--Config.MarkerColor = {r = 100, g = 204, b = 100} +Config.RequiredCopsCoke = 2 +Config.RequiredCopsMeth = 2 +Config.RequiredCopsWeed = 0 + +Config.Zones = { + CokeFarm = {x=2448.9228515625, y=-1836.8076171875, z=51.953701019287}, + CokeTreatment = {x=-458.13967895508, y=-2278.6174316406, z=7.5158290863037}, + CokeResell = {x=-1756.1984863281, y=427.31674194336, z=126.68292999268}, + MethFarm = {x=1525.298828125, y=1710.0217285156, z=109.00956726074}, + MethTreatment = {x=-1001.4151611328, y=4848.0087890625, z=274.00686645508}, + MethResell = {x=-63.592178344727, y=-1224.0709228516, z=27.768648147583}, + WeedFarm = {x=1609.125, y=6663.5942382813, z=20.961572647095}, + WeedTreatment = {x=91.061386108398, y=3750.0380859375, z=39.77326965332}, + WeedResell = {x=-54.249694824219, y=-1443.3666992188, z=31.068626403809} +} \ No newline at end of file diff --git a/esx_drugs.sql b/esx_drugs.sql new file mode 100644 index 00000000..6cad45ce --- /dev/null +++ b/esx_drugs.sql @@ -0,0 +1,8 @@ +INSERT INTO `items` (name, label) VALUES + ('weed', 'Weed'), + ('weed_pooch', 'Pochon de weed'), + ('coke', 'Coke'), + ('coke_pooch', 'Pochon de coke'), + ('meth', 'Meth'), + ('meth_pooch', 'Pochon de meth') +; \ No newline at end of file diff --git a/server/esx_drugs_sv.lua b/server/esx_drugs_sv.lua new file mode 100644 index 00000000..87cbff66 --- /dev/null +++ b/server/esx_drugs_sv.lua @@ -0,0 +1,561 @@ +ESX = nil +local CopsConnected = 0 +local PlayersHarvestingCoke = {} +local PlayersTransformingCoke = {} +local PlayersSellingCoke = {} +local PlayersHarvestingMeth = {} +local PlayersTransformingMeth = {} +local PlayersSellingMeth = {} +local PlayersHarvestingWeed = {} +local PlayersTransformingWeed = {} +local PlayersSellingWeed = {} + +TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) + +function CountCops() + + local xPlayers = ESX.GetPlayers() + + CopsConnected = 0 + + for k,v in pairs(xPlayers) do + if v.job.name == 'police' then + CopsConnected = CopsConnected + 1 + end + end + + SetTimeout(5000, CountCops) + +end + +CountCops() + +local function HarvestCoke(source) + + if CopsConnected < Config.RequiredCopsCoke then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsCoke) + return + end + + SetTimeout(5000, function() + + if PlayersHarvestingCoke[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local coke = xPlayer.getInventoryItem('coke') + + if coke.limit ~= -1 and coke.count >= coke.limit then + TriggerClientEvent('esx:showNotification', source, 'Vous ne pouvez plus ramasser de Cocaine, votre inventaire est ~r~plein~s~') + else + xPlayer.addInventoryItem('coke', 1) + HarvestCoke(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startHarvestCoke') +AddEventHandler('esx_drugs:startHarvestCoke', function() + + local _source = source + + PlayersHarvestingCoke[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~y~Ramassage en cours~s~...') + + HarvestCoke(source) + +end) + +RegisterServerEvent('esx_drugs:stopHarvestCoke') +AddEventHandler('esx_drugs:stopHarvestCoke', function() + + local _source = source + + PlayersHarvestingCoke[_source] = false + +end) + +local function TransformCoke(source) + + if CopsConnected < Config.RequiredCopsCoke then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsCoke) + return + end + + SetTimeout(10000, function() + + if PlayersTransformingCoke[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local cokeQuantity = xPlayer.getInventoryItem('coke').count + local poochQuantity = xPlayer.getInventoryItem('coke_pooch').count + + if poochQuantity > 35 then + TriggerClientEvent('esx:showNotification', source, 'Vous avez trop de pochons') + elseif cokeQuantity < 5 then + TriggerClientEvent('esx:showNotification', source, 'Vous n\'avez pas assez de feuille de coca à ~r~conditionner~s~') + else + xPlayer.removeInventoryItem('coke', 5) + xPlayer.addInventoryItem('coke_pooch', 1) + + TransformCoke(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startTransformCoke') +AddEventHandler('esx_drugs:startTransformCoke', function() + + local _source = source + + PlayersTransformingCoke[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~y~Conditonnement en cours~s~...') + + TransformCoke(source) + +end) + +RegisterServerEvent('esx_drugs:stopTransformCoke') +AddEventHandler('esx_drugs:stopTransformCoke', function() + + local _source = source + + PlayersTransformingCoke[_source] = false + +end) + +local function SellCoke(source) + + if CopsConnected < Config.RequiredCopsCoke then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsCoke) + return + end + + SetTimeout(7500, function() + + if PlayersSellingCoke[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local poochQuantity = xPlayer.getInventoryItem('coke_pooch').count + + if poochQuantity == 0 then + TriggerClientEvent('esx:showNotification', source, 'Vous n\'avez plus de pochons à ~r~vendre~s~') + else + xPlayer.removeInventoryItem('coke_pooch', 1) + if CopsConnected == 0 then + xPlayer.addAccountMoney('black_money', 198) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de coke~s~') + elseif CopsConnected == 1 then + xPlayer.addAccountMoney('black_money', 258) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de coke~s~') + elseif CopsConnected == 2 then + xPlayer.addAccountMoney('black_money', 308) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de coke~s~') + elseif CopsConnected == 3 then + xPlayer.addAccountMoney('black_money', 358) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de coke~s~') + elseif CopsConnected == 4 then + xPlayer.addAccountMoney('black_money', 396) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de coke~s~') + elseif CopsConnected >= 5 then + xPlayer.addAccountMoney('black_money', 428) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de coke~s~') + end + + SellCoke(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startSellCoke') +AddEventHandler('esx_drugs:startSellCoke', function() + + local _source = source + + PlayersSellingCoke[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~g~Vente en cours~s~...') + + SellCoke(source) + +end) + +RegisterServerEvent('esx_drugs:stopSellCoke') +AddEventHandler('esx_drugs:stopSellCoke', function() + + local _source = source + + PlayersSellingCoke[_source] = false + +end) + +local function HarvestMeth(source) + + if CopsConnected < Config.RequiredCopsMeth then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsMeth) + return + end + + SetTimeout(5000, function() + + if PlayersHarvestingMeth[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local meth = xPlayer.getInventoryItem('meth') + + if meth.limit ~= -1 and meth.count >= meth.limit then + TriggerClientEvent('esx:showNotification', source, 'Vous ne pouvez plus ramasser de Meth, votre inventaire est ~r~plein~s~') + else + xPlayer.addInventoryItem('meth', 1) + HarvestMeth(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startHarvestMeth') +AddEventHandler('esx_drugs:startHarvestMeth', function() + + local _source = source + + PlayersHarvestingMeth[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~y~Ramassage en cours~s~...') + + HarvestMeth(source) + +end) + +RegisterServerEvent('esx_drugs:stopHarvestMeth') +AddEventHandler('esx_drugs:stopHarvestMeth', function() + + local _source = source + + PlayersHarvestingMeth[_source] = false + +end) + +local function TransformMeth(source) + + if CopsConnected < Config.RequiredCopsMeth then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsMeth) + return + end + + SetTimeout(12000, function() + + if PlayersTransformingMeth[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local methQuantity = xPlayer.getInventoryItem('meth').count + local pochonQuantity = xPlayer.getInventoryItem('meth_pooch').count + + if pochonQuantity > 35 then + TriggerClientEvent('esx:showNotification', source, 'Vous avez trop de pochons') + elseif methQuantity < 5 then + TriggerClientEvent('esx:showNotification', source, 'Vous n\'avez pas assez de Meth à ~r~conditionner~s~') + else + xPlayer.removeInventoryItem('meth', 5) + xPlayer.addInventoryItem('meth_pochon', 1) + + TransformMeth(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startTransformMeth') +AddEventHandler('esx_drugs:startTransformMeth', function() + + local _source = source + + PlayersTransformingMeth[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~y~Conditonnement en cours~s~...') + + TransformMeth(source) + +end) + +RegisterServerEvent('esx_drugs:stopTransformMeth') +AddEventHandler('esx_drugs:stopTransformMeth', function() + + local _source = source + + PlayersTransformingMeth[_source] = false + +end) + +local function SellMeth(source) + + if CopsConnected < Config.RequiredCopsMeth then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsMeth) + return + end + + SetTimeout(7500, function() + + if PlayersSellingMeth[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local pochonQuantity = xPlayer.getInventoryItem('meth_pooch').count + + if pochonQuantity == 0 then + TriggerClientEvent('esx:showNotification', source, 'Vous n\'avez plus de pochons à ~r~vendre~s~') + else + xPlayer.removeInventoryItem('meth_pochon', 1) + if CopsConnected == 0 then + xPlayer.addAccountMoney('black_money', 276) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + elseif CopsConnected == 1 then + xPlayer.addAccountMoney('black_money', 374) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + elseif CopsConnected == 2 then + xPlayer.addAccountMoney('black_money', 474) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + elseif CopsConnected == 3 then + xPlayer.addAccountMoney('black_money', 552) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + elseif CopsConnected == 4 then + xPlayer.addAccountMoney('black_money', 616) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + elseif CopsConnected == 5 then + xPlayer.addAccountMoney('black_money', 654) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + elseif CopsConnected >= 6 then + xPlayer.addAccountMoney('black_money', 686) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de meth~s~') + end + + SellMeth(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startSellMeth') +AddEventHandler('esx_drugs:startSellMeth', function() + + local _source = source + + PlayersSellingMeth[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~g~Vente en cours~s~...') + + SellMeth(source) + +end) + +RegisterServerEvent('esx_drugs:stopSellMeth') +AddEventHandler('esx_drugs:stopSellMeth', function() + + local _source = source + + PlayersSellingMeth[_source] = false + +end) + +local function HarvestWeed(source) + + if CopsConnected < Config.RequiredCopsWeed then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsWeed) + return + end + + SetTimeout(5000, function() + + if PlayersHarvestingWeed[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local weed = xPlayer.getInventoryItem('weed') + + if weed.limit ~= -1 and weed.count >= weed.limit then + TriggerClientEvent('esx:showNotification', source, 'Vous ne pouvez plus ramasser de weed, votre inventaire est ~r~plein~s~') + else + xPlayer.addInventoryItem('weed', 1) + HarvestWeed(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startHarvestWeed') +AddEventHandler('esx_drugs:startHarvestWeed', function() + + local _source = source + + PlayersHarvestingWeed[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~y~Ramassage en cours~s~...') + + HarvestWeed(source) + +end) + +RegisterServerEvent('esx_drugs:stopHarvestWeed') +AddEventHandler('esx_drugs:stopHarvestWeed', function() + + local _source = source + + PlayersHarvestingWeed[_source] = false + +end) + +local function TransformWeed(source) + + if CopsConnected < Config.RequiredCopsWeed then + TriggerClientEvent('esx:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsWeed) + return + end + + SetTimeout(7500, function() + + if PlayersTransformingWeed[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local weedQuantity = xPlayer.getInventoryItem('weed').count + local poochQuantity = xPlayer.getInventoryItem('weed_pooch').count + + if poochQuantity > 35 then + TriggerClientEvent('esx:showNotification', source, 'Vous avez trop de pochons') + elseif weedQuantity < 5 then + TriggerClientEvent('esx:showNotification', source, 'Vous n\'avez pas assez de weed à ~r~conditionner~s~') + else + xPlayer.removeInventoryItem('weed', 5) + xPlayer.addInventoryItem('weed_pooch', 1) + + TransformWeed(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startTransformWeed') +AddEventHandler('esx_drugs:startTransformWeed', function() + + local _source = source + + PlayersTransformingWeed[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~y~Conditonnement en cours~s~...') + + TransformWeed(source) + +end) + +RegisterServerEvent('esx_drugs:stopTransformWeed') +AddEventHandler('esx_drugs:stopTransformWeed', function() + + local _source = source + + PlayersTransformingWeed[_source] = false + +end) + +local function SellWeed(source) + + if CopsConnected < Config.RequiredCopsWeed then + TriggerClientEvent('esx_weedjob:showNotification', source, 'Action ~r~impossible~s~, ~b~policiers~s~: ' .. CopsConnected .. '/' .. Config.RequiredCopsWeed) + return + end + + SetTimeout(7500, function() + + if PlayersSellingWeed[source] == true then + + local xPlayer = ESX.GetPlayerFromId(source) + + local poochQuantity = xPlayer.getInventoryItem('weed_pooch').count + + if poochQuantity == 0 then + TriggerClientEvent('esx:showNotification', source, 'Vous n\'avez plus de pochons à ~r~vendre~s~') + else + xPlayer:removeInventoryItem('weed_pooch', 1) + if CopsConnected == 0 then + xPlayer.addAccountMoney('black_money', 108) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de weed~s~') + elseif CopsConnected == 1 then + xPlayer.addAccountMoney('black_money', 128) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de weed~s~') + elseif CopsConnected == 2 then + xPlayer.addAccountMoney('black_money', 152) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de weed~s~') + elseif CopsConnected == 3 then + xPlayer.addAccountMoney('black_money', 165) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de weed~s~') + elseif CopsConnected >= 4 then + xPlayer.addAccountMoney('black_money', 180) + TriggerClientEvent('esx:showNotification', source, 'Vous avez vendu ~g~x1 Pochon de weed~s~') + end + + SellWeed(source) + end + + end + end) +end + +RegisterServerEvent('esx_drugs:startSellWeed') +AddEventHandler('esx_drugs:startSellWeed', function() + + local _source = source + + PlayersSellingWeed[_source] = true + + TriggerClientEvent('esx:showNotification', _source, '~g~Vente en cours~s~...') + + SellWeed(source) + +end) + +RegisterServerEvent('esx_drugs:stopSellWeed') +AddEventHandler('esx_drugs:stopSellWeed', function() + + local _source = source + + PlayersSellingWeed[_source] = false + +end) + +-- RETURN INVENTORY TO CLIENT +RegisterServerEvent('esx_drugs:GetUserInventory') +AddEventHandler('esx_drugs:GetUserInventory', function(currentZone) + local _source = source + local xPlayer = ESX.GetPlayerFromId(_source) + TriggerClientEvent('esx_drugs:ReturnInventory', _source, xPlayer.getInventoryItem('coke').count, xPlayer.getInventoryItem('coke_pooch').count, + xPlayer.getInventoryItem('meth').count, xPlayer.getInventoryItem('meth_pooch').count, + xPlayer.getInventoryItem('weed').count, xPlayer.getInventoryItem('weed_pooch').count, xPlayer.job.name, currentZone) +end) + +-- Register Usable Item +ESX.RegisterUsableItem('weed', function(source) + + local _source = source + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('weed', 1) + + TriggerClientEvent('esx_drugs:onPot', _source) + TriggerClientEvent('esx:showNotification', _source, 'Vous avez utilisé 1 de ~b~Weed') + +end) \ No newline at end of file