179 lines
5.5 KiB
Lua
179 lines
5.5 KiB
Lua
local playersProcessingCannabis = {}
|
|
local outofbound = true
|
|
local alive = true
|
|
|
|
local function ValidatePickupCannabis(src)
|
|
local ECoords = Config.CircleZones.WeedField.coords
|
|
local PCoords = GetEntityCoords(GetPlayerPed(src))
|
|
local Dist = #(PCoords-ECoords)
|
|
if Dist <= 90 then return true end
|
|
end
|
|
|
|
local function ValidateProcessCannabis(src)
|
|
local ECoords = Config.CircleZones.WeedProcessing.coords
|
|
local PCoords = GetEntityCoords(GetPlayerPed(src))
|
|
local Dist = #(PCoords-ECoords)
|
|
if Dist <= 5 then return true end
|
|
end
|
|
|
|
local function FoundExploiter(src,reason)
|
|
-- ADD YOUR BAN EVENT HERE UNTIL THEN IT WILL ONLY KICK THE PLAYER --
|
|
DropPlayer(src,reason)
|
|
end
|
|
|
|
RegisterServerEvent('esx_drugs:sellDrug')
|
|
AddEventHandler('esx_drugs:sellDrug', function(itemName, amount)
|
|
local xPlayer = ESX.Player(source)
|
|
local price = Config.DrugDealerItems[itemName]
|
|
local xItem = xPlayer.getInventoryItem(itemName)
|
|
local identifier = xPlayer.getIdentifier()
|
|
-- If this fails its 99% a mod-menu, the variables client sided are setup to provide the exact right arguments
|
|
if type(amount) ~= 'number' or type(itemName) ~= 'string' then
|
|
print(('esx_drugs: %s attempted to sell with invalid input type!'):format(identifier))
|
|
FoundExploiter(xPlayer.src,'SellDrugs Event Trigger')
|
|
return
|
|
end
|
|
if not price then
|
|
print(('esx_drugs: %s attempted to sell an invalid drug!'):format(identifier))
|
|
return
|
|
end
|
|
if amount < 0 then
|
|
print(('esx_drugs: %s attempted to sell an minus amount!'):format(identifier))
|
|
return
|
|
end
|
|
if xItem == nil or xItem.count < amount then
|
|
xPlayer.showNotification(TranslateCap('dealer_notenough'))
|
|
return
|
|
end
|
|
|
|
price = ESX.Math.Round(price * amount)
|
|
|
|
if Config.GiveBlack then
|
|
xPlayer.addAccountMoney('black_money', price, "Drugs Sold")
|
|
else
|
|
xPlayer.addMoney(price, "Drugs Sold")
|
|
end
|
|
|
|
xPlayer.removeInventoryItem(xItem.name, amount)
|
|
xPlayer.showNotification(TranslateCap('dealer_sold', amount, xItem.label, ESX.Math.GroupDigits(price)))
|
|
end)
|
|
|
|
ESX.RegisterServerCallback('esx_drugs:buyLicense', function(source, cb, licenseName)
|
|
local xPlayer = ESX.Player(source)
|
|
local license = Config.LicensePrices[licenseName]
|
|
|
|
if license then
|
|
if xPlayer.getMoney() >= license.price then
|
|
xPlayer.removeMoney(license.price)
|
|
|
|
TriggerEvent('esx_license:addLicense', source, licenseName, function()
|
|
cb(true)
|
|
end)
|
|
else
|
|
cb(false)
|
|
end
|
|
else
|
|
print(('esx_drugs: %s attempted to buy an invalid license!'):format(xPlayer.getIdentifier()))
|
|
cb(false)
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent('esx_drugs:pickedUpCannabis')
|
|
AddEventHandler('esx_drugs:pickedUpCannabis', function()
|
|
local src = source
|
|
local xPlayer = ESX.Player(src)
|
|
local cime = math.random(5,10)
|
|
if ValidatePickupCannabis(src) then
|
|
if xPlayer.canCarryItem('cannabis', cime) then
|
|
xPlayer.addInventoryItem('cannabis', cime)
|
|
else
|
|
xPlayer.showNotification(TranslateCap('weed_inventoryfull'))
|
|
end
|
|
else
|
|
FoundExploiter(src,'Event Trigger')
|
|
end
|
|
end)
|
|
|
|
ESX.RegisterServerCallback('esx_drugs:canPickUp', function(source, cb, item)
|
|
local xPlayer = ESX.Player(source)
|
|
cb(xPlayer.canCarryItem(item, 1))
|
|
end)
|
|
|
|
RegisterServerEvent('esx_drugs:outofbound')
|
|
AddEventHandler('esx_drugs:outofbound', function()
|
|
outofbound = true
|
|
end)
|
|
|
|
ESX.RegisterServerCallback('esx_drugs:cannabis_count', function(source, cb)
|
|
local xPlayer = ESX.Player(source)
|
|
local xCannabis = xPlayer.getInventoryItem('cannabis').count
|
|
cb(xCannabis)
|
|
end)
|
|
|
|
RegisterServerEvent('esx_drugs:processCannabis')
|
|
AddEventHandler('esx_drugs:processCannabis', function()
|
|
if not playersProcessingCannabis[source] then
|
|
local source = source
|
|
if ValidateProcessCannabis(source) then
|
|
local xPlayer = ESX.Player(source)
|
|
local xCannabis = xPlayer.getInventoryItem('cannabis')
|
|
local can = true
|
|
outofbound = false
|
|
if xCannabis.count >= 3 then
|
|
while outofbound == false and can do
|
|
if playersProcessingCannabis[source] == nil then
|
|
playersProcessingCannabis[source] = ESX.SetTimeout(Config.Delays.WeedProcessing , function()
|
|
if xCannabis.count >= 3 then
|
|
if xPlayer.canSwapItem('cannabis', 3, 'marijuana', 1) then
|
|
xPlayer.removeInventoryItem('cannabis', 3)
|
|
xPlayer.addInventoryItem('marijuana', 1)
|
|
xPlayer.showNotification(TranslateCap('weed_processed'))
|
|
else
|
|
can = false
|
|
xPlayer.showNotification(TranslateCap('weed_processingfull'))
|
|
TriggerEvent('esx_drugs:cancelProcessing')
|
|
end
|
|
else
|
|
can = false
|
|
xPlayer.showNotification(TranslateCap('weed_processingenough'))
|
|
TriggerEvent('esx_drugs:cancelProcessing')
|
|
end
|
|
playersProcessingCannabis[source] = nil
|
|
end)
|
|
else
|
|
Wait(Config.Delays.WeedProcessing)
|
|
end
|
|
end
|
|
else
|
|
xPlayer.showNotification(TranslateCap('weed_processingenough'))
|
|
TriggerEvent('esx_drugs:cancelProcessing')
|
|
end
|
|
else
|
|
FoundExploiter(source,'Event Trigger')
|
|
end
|
|
else
|
|
print(('esx_drugs: %s attempted to exploit weed processing!'):format(GetPlayerIdentifiers(source)[1]))
|
|
end
|
|
end)
|
|
|
|
function CancelProcessing(playerId)
|
|
if playersProcessingCannabis[playerId] then
|
|
ESX.ClearTimeout(playersProcessingCannabis[playerId])
|
|
playersProcessingCannabis[playerId] = nil
|
|
end
|
|
end
|
|
|
|
RegisterServerEvent('esx_drugs:cancelProcessing')
|
|
AddEventHandler('esx_drugs:cancelProcessing', function()
|
|
CancelProcessing(source)
|
|
end)
|
|
|
|
AddEventHandler('esx:playerDropped', function(playerId, reason)
|
|
CancelProcessing(playerId)
|
|
end)
|
|
|
|
RegisterServerEvent('esx:onPlayerDeath')
|
|
AddEventHandler('esx:onPlayerDeath', function(data)
|
|
CancelProcessing(source)
|
|
end)
|