forked from Simnation/Main
100 lines
4.2 KiB
Lua
100 lines
4.2 KiB
Lua
![]() |
-- Initialize the framework and set initial state
|
||
|
Framework = getFramework()
|
||
|
inMenu = false
|
||
|
cache = {}
|
||
|
|
||
|
-- Check if oxTarget option is disabled
|
||
|
if not (RY.Options.oxTarget) then
|
||
|
Citizen.CreateThread(function()
|
||
|
while true do
|
||
|
if inMenu then
|
||
|
Citizen.Wait(500)
|
||
|
else
|
||
|
local playerPed = PlayerPedId()
|
||
|
local playerCoords = GetEntityCoords(playerPed)
|
||
|
local anyNearby = false
|
||
|
|
||
|
-- Iterate over all shop locations
|
||
|
for k, v in pairs(RY.Locations) do
|
||
|
local playerJob = GetPlayerJob()
|
||
|
local canAccess = not v.jobRestrictions.enabled or v.jobRestrictions.jobs[playerJob]
|
||
|
|
||
|
if canAccess then
|
||
|
for _, coords in pairs(v.menuCoords) do
|
||
|
local distance = #(playerCoords - coords)
|
||
|
|
||
|
-- Check if player is close enough to open the menu
|
||
|
if distance < 1 then
|
||
|
anyNearby = true
|
||
|
if not inMenu then
|
||
|
DrawText3D(coords.x, coords.y, coords.z + 0.25, v.markersConfig.markerMenu.markerText)
|
||
|
|
||
|
-- Open menu if the designated key is released
|
||
|
if IsControlJustReleased(0, v.markersConfig.markerMenu.useKey) then
|
||
|
openMenu(k)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Draw marker if player is within 15 units
|
||
|
if distance <= 15 then
|
||
|
anyNearby = true
|
||
|
if not inMenu then
|
||
|
DrawMarker(
|
||
|
v.markersConfig.markerMenu.markerType,
|
||
|
coords.x, coords.y, coords.z,
|
||
|
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||
|
v.markersConfig.markerMenu.markerSize.x,
|
||
|
v.markersConfig.markerMenu.markerSize.y,
|
||
|
v.markersConfig.markerMenu.markerSize.z,
|
||
|
v.markersConfig.markerMenu.markerColor.r,
|
||
|
v.markersConfig.markerMenu.markerColor.g,
|
||
|
v.markersConfig.markerMenu.markerColor.b,
|
||
|
50, false, true, 2, false, nil, nil, false
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Wait longer if no location is nearby
|
||
|
if not anyNearby then
|
||
|
Citizen.Wait(500)
|
||
|
else
|
||
|
Citizen.Wait(0)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- Setup targets and blips for each location
|
||
|
for k, v in pairs(RY.Locations) do
|
||
|
local playerJob = GetPlayerJob()
|
||
|
local canAccess = not v.jobRestrictions.enabled or v.jobRestrictions.jobs[playerJob]
|
||
|
|
||
|
if canAccess then
|
||
|
-- Setup targets if oxTarget or qbTarget option is enabled
|
||
|
if RY.Options.oxTarget or RY.Options.qbTarget then
|
||
|
for _, coords in pairs(v.menuCoords) do
|
||
|
SetupTargets(k, v, coords)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Setup blips if they are configured to be shown
|
||
|
if v.blipsConfig.blipMenu.blipShow then
|
||
|
for _, coords in pairs(v.menuCoords) do
|
||
|
local shop = AddBlipForCoord(coords.x, coords.y, coords.z)
|
||
|
SetBlipSprite(shop, v.blipsConfig.blipMenu.blipSprite)
|
||
|
SetBlipDisplay(shop, 4)
|
||
|
SetBlipScale(shop, v.blipsConfig.blipMenu.blipScale)
|
||
|
SetBlipAsShortRange(shop, true)
|
||
|
SetBlipColour(shop, v.blipsConfig.blipMenu.blipColor)
|
||
|
BeginTextCommandSetBlipName("STRING")
|
||
|
AddTextComponentSubstringPlayerName(v.blipsConfig.blipMenu.blipName)
|
||
|
EndTextCommandSetBlipName(shop)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|