110 lines
		
	
	
		
			No EOL
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			No EOL
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local blips, zones = {}, {}
 | 
						|
 | 
						|
---@param name string
 | 
						|
---@param coords vector3
 | 
						|
---@param blipId integer
 | 
						|
---@param blipColour integer
 | 
						|
---@param blipScale number
 | 
						|
local function createBlip(name, coords, blipId, blipColour, blipScale)
 | 
						|
  local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
 | 
						|
  SetBlipSprite(blip, blipId)
 | 
						|
  SetBlipColour(blip, blipColour)
 | 
						|
  SetBlipScale(blip, blipScale)
 | 
						|
  SetBlipAsShortRange(blip, true)
 | 
						|
  BeginTextCommandSetBlipName("STRING")
 | 
						|
  AddTextComponentString(name)
 | 
						|
  EndTextCommandSetBlipName(blip)
 | 
						|
  return blip
 | 
						|
end
 | 
						|
 | 
						|
-- 
 | 
						|
-- Create all mechanic mod menu zones
 | 
						|
-- 
 | 
						|
 | 
						|
function createMechanicZonesAndBlips()
 | 
						|
  -- Create shops & stashes
 | 
						|
  createMechanicShops()
 | 
						|
  createMechanicStashes()
 | 
						|
 | 
						|
  for _, zone in ipairs(zones) do zone:remove() end  -- Remove existing zones
 | 
						|
  for _, blip in ipairs(blips) do RemoveBlip(blip) end -- Remove existing blips 
 | 
						|
 | 
						|
  -- 
 | 
						|
  -- Mod/Tuning Menus
 | 
						|
  --
 | 
						|
 | 
						|
  local mechanicsData = lib.callback.await("jg-mechanic:server:get-mechanic-locations-data", false)
 | 
						|
  
 | 
						|
  for _, mechanicData in pairs(mechanicsData) do
 | 
						|
    local name, label = mechanicData.name, mechanicData.label -- from DB
 | 
						|
    local mechanicConfig = Config.MechanicLocations[name] or {} -- from Config
 | 
						|
    local locations, blip, mods = mechanicConfig.locations, mechanicConfig.blip, mechanicConfig.mods
 | 
						|
    local isMechanicEmployee = lib.callback.await("jg-mechanic:server:is-mechanic-employee", false, name)
 | 
						|
 | 
						|
    if locations and type(locations) == "table" and #locations > 0 and mods then
 | 
						|
      for _, location in ipairs(locations) do
 | 
						|
        if not location.employeeOnly or isMechanicEmployee then
 | 
						|
          zones[#zones+1] = lib.zones.box({
 | 
						|
            coords = location.coords,
 | 
						|
            size = vector3(location.size, location.size, location.size),
 | 
						|
            debug = Config.Debug,
 | 
						|
            onEnter = function() onEnterModsZone(name, label) end,
 | 
						|
            onExit = onExitModsZone
 | 
						|
          })
 | 
						|
    
 | 
						|
          if blip and location.showBlip then
 | 
						|
            local blipName = Locale.mechanic
 | 
						|
            local mechName = label ~= "" and label or name
 | 
						|
            if Config.UniqueBlips then blipName = blipName .. ": " .. mechName end
 | 
						|
            blips[#blips+1] = createBlip(blipName, location.coords, blip.id, blip.color, blip.scale)
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  -- 
 | 
						|
  -- Car Lifts
 | 
						|
  -- 
 | 
						|
 | 
						|
  local lifts, attempts, maxAttempts = false, 0, 3
 | 
						|
  while not lifts and attempts < maxAttempts do
 | 
						|
    lifts = lib.callback.await("jg-mechanic:server:get-created-lifts")
 | 
						|
    attempts += 1
 | 
						|
    Wait(2500)
 | 
						|
  end
 | 
						|
 | 
						|
  if not lifts then return end
 | 
						|
 | 
						|
  for mechanicId, mechanicLifts in pairs(lifts) do
 | 
						|
    if mechanicLifts and Config.MechanicLocations[mechanicId] then
 | 
						|
      local mechanicType = Config.MechanicLocations[mechanicId].type
 | 
						|
      local isMechanicEmployee = lib.callback.await("jg-mechanic:server:is-mechanic-employee", false, mechanicId)
 | 
						|
 | 
						|
      if mechanicType == "self-service" or (mechanicType == "owned" and isMechanicEmployee) then
 | 
						|
        for _, lift in ipairs(mechanicLifts) do
 | 
						|
          zones[#zones+1] = lib.zones.box({
 | 
						|
            coords = lift.coords,
 | 
						|
            size = vector3(5.5, 5.5, 5.5),
 | 
						|
            rotation = lift.coords.w,
 | 
						|
            debug = Config.Debug,
 | 
						|
            onEnter = function() onEnterCarliftZone(lift) end,
 | 
						|
            onExit = onExitCarliftZone
 | 
						|
          })
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
RegisterNetEvent("jg-mechanic:client:refresh-mechanic-zones-and-blips", function()
 | 
						|
  Wait(1000)
 | 
						|
  createMechanicZonesAndBlips()
 | 
						|
end)
 | 
						|
 | 
						|
CreateThread(function()
 | 
						|
  Wait(1000)
 | 
						|
  createMechanicZonesAndBlips()
 | 
						|
end) |