114 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
if GetResourceState("es_extended") == "started" then
 | 
						|
  ESX = exports["es_extended"]:getSharedObject()
 | 
						|
end
 | 
						|
 | 
						|
if GetResourceState("qb-core") == "started" then
 | 
						|
  QBCore = exports['qb-core']:GetCoreObject()
 | 
						|
end
 | 
						|
 | 
						|
function IsIdAllowed(_source, id)
 | 
						|
 | 
						|
  -- By Identifier
 | 
						|
  for _, id2 in pairs(GetPlayerIdentifiers(_source)) do
 | 
						|
    if id == id2 then
 | 
						|
      return true
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  -- By ACE permission
 | 
						|
  if IsPlayerAceAllowed(_source, id) then
 | 
						|
    return true
 | 
						|
  end
 | 
						|
 | 
						|
  -- By job with ESX
 | 
						|
  if GetResourceState("es_extended") == "started" then
 | 
						|
    while ESX.GetPlayerFromId(_source) == nil or ESX.GetPlayerFromId(_source).job == nil do
 | 
						|
      Citizen.Wait(100)
 | 
						|
    end
 | 
						|
    local Player = ESX.GetPlayerFromId(_source)
 | 
						|
    if id == Player.job.name then
 | 
						|
      return true
 | 
						|
    end
 | 
						|
    if id == Player.job.name ..":".. Player.job.grade then
 | 
						|
      return true
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  -- By job with QB Core
 | 
						|
  if GetResourceState("qb-core") == "started" then
 | 
						|
    local Player = QBCore.Functions.GetPlayer(_source)
 | 
						|
    if id == Player.PlayerData.job.name then
 | 
						|
      return true
 | 
						|
    end
 | 
						|
    if id == Player.PlayerData.job.name ..":mechanic".. Player.PlayerData.job.grade.level  then
 | 
						|
      return true
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  -- By a custom method
 | 
						|
  -- .......
 | 
						|
  -- return true / false
 | 
						|
 | 
						|
  return false
 | 
						|
end
 | 
						|
-- Check which element the player is allowed to use
 | 
						|
RegisterNetEvent(GetCurrentResourceName()..':CheckAccess', function()
 | 
						|
  local _source = source
 | 
						|
  local default_value = false
 | 
						|
  if Config.WhiteList and Config.WhiteListEnabled then
 | 
						|
    for _, id in pairs(Config.WhiteList) do
 | 
						|
      default_value = IsIdAllowed(_source, id)
 | 
						|
      if default_value then
 | 
						|
        break
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  local Access = {}
 | 
						|
  for type, _ in pairs(Config.Models) do
 | 
						|
    Access[type] = {}
 | 
						|
    for model, _ in pairs(Config.Models[type]) do
 | 
						|
 | 
						|
      if Config.WhiteListEnabled then
 | 
						|
        if Config.Models[type][model].WhiteList == nil then
 | 
						|
          Access[type][model] = default_value
 | 
						|
        else
 | 
						|
          Access[type][model] = false
 | 
						|
          for _, id in pairs(Config.Models[type][model].WhiteList) do
 | 
						|
            Access[type][model] = IsIdAllowed(_source, id)
 | 
						|
            if Access[type][model] then
 | 
						|
              break
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
      else
 | 
						|
        Access[type][model] = true
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  local type = "siren"
 | 
						|
  Access[type] = {}
 | 
						|
  for k,_ in pairs(Config.SirenTones) do
 | 
						|
    if Config.WhiteListEnabled then
 | 
						|
      -- Default whitelist is the one defined at the top
 | 
						|
      if Config.SirenTones[k].WhiteList == nil then
 | 
						|
        Access[type][k] = default_value
 | 
						|
      else
 | 
						|
        Access[type][k] = false
 | 
						|
        for _, id in pairs(Config.SirenTones[k].WhiteList) do
 | 
						|
          Access[type][k] = IsIdAllowed(_source, id)
 | 
						|
          if Access[type][k] then
 | 
						|
            break
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
    else
 | 
						|
      Access[type][k] = true
 | 
						|
    end
 | 
						|
 | 
						|
  end
 | 
						|
 | 
						|
  -- Respond to the client
 | 
						|
  TriggerClientEvent(GetCurrentResourceName()..':CheckAccess', _source, Access)
 | 
						|
end)
 |