85 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| if Config.esxSettings.enabled then
 | |
|     ESX = nil
 | |
|     
 | |
|     if Config.esxSettings.useNewESXExport then
 | |
|         ESX = exports['es_extended']:getSharedObject()
 | |
|     else
 | |
|         TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
 | |
|     end
 | |
|     
 | |
|     ESX.RegisterUsableItem(Config.items.towingRope, function(source)
 | |
|         if Config.jobWhitelist.towing.enabled then
 | |
|             if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.towing.jobs) then
 | |
|                 return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item'))
 | |
|             end
 | |
|         end
 | |
|         TriggerClientEvent('kq_towing:client:startRope', source, false, true)
 | |
|     end)
 | |
| 
 | |
|     ESX.RegisterUsableItem(Config.items.winch, function(source)
 | |
|         if Config.jobWhitelist.winch.enabled then
 | |
|             if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.winch.jobs) then
 | |
|                 return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item'))
 | |
|             end
 | |
|         end
 | |
|         TriggerClientEvent('kq_towing:client:startRope', source, true, true)
 | |
|     end)
 | |
|     
 | |
|     function IsPlayerJobWhitelisted(player, jobs)
 | |
|         local xPlayer = ESX.GetPlayerFromId(player)
 | |
|         if not xPlayer then
 | |
|             return false
 | |
|         end
 | |
|         local job = xPlayer.getJob()
 | |
|         
 | |
|         return Contains(jobs, job.name)
 | |
|     end
 | |
|     
 | |
|     function GetPlayerItemData(player, item)
 | |
|         local xPlayer = ESX.GetPlayerFromId(player)
 | |
|         
 | |
|         return xPlayer.getInventoryItem(item)
 | |
|     end
 | |
|     
 | |
|     function GetPlayerItemCount(player, item)
 | |
|         local data = GetPlayerItemData(player, item)
 | |
|         if not data then
 | |
|             return 0
 | |
|         end
 | |
|         return data.count or data.amount or 0
 | |
|     end
 | |
|     
 | |
|     function RemovePlayerItem(player, item, amount)
 | |
|         if GetPlayerItemCount(player, item) < amount then
 | |
|             return false
 | |
|         end
 | |
|         
 | |
|         local xPlayer = ESX.GetPlayerFromId(player)
 | |
|         xPlayer.removeInventoryItem(item, amount or 1)
 | |
|         
 | |
|         return true
 | |
|     end
 | |
| 
 | |
|     function AddPlayerItem(player, item, amount)
 | |
|         local xPlayer = ESX.GetPlayerFromId(tonumber(player))
 | |
| 
 | |
|         -- Support for old esx which didn't use weight for inventory size but rather item limit per item type
 | |
|         if Config.esxSettings.oldEsx then
 | |
|             local esxItem = xPlayer.getInventoryItem(item)
 | |
| 
 | |
|             if esxItem.limit == -1 or (esxItem.count + amount) <= esxItem.limit then
 | |
|                 xPlayer.addInventoryItem(item, amount or 1)
 | |
|                 return true
 | |
|             else
 | |
|                 return false
 | |
|             end
 | |
|         else
 | |
|             if xPlayer.canCarryItem(item, amount or 1) then
 | |
|                 xPlayer.addInventoryItem(item, amount or 1)
 | |
|                 return true
 | |
|             else
 | |
|                 return false
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| end
 | 
