mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-09-04 08:13:21 +00:00
updated to allow re-using garages and exit on foot
- updated to fix bug where you can't exit garages on foot - updated to allow you to re-use the same garage in multiple locations without randomly spawning at another location (see config for additional garage locations)
This commit is contained in:
+59
-40
@@ -1,7 +1,8 @@
|
||||
ESX = nil
|
||||
local LastGarage = nil
|
||||
local LastPart = nil
|
||||
local LastParking = nil
|
||||
ESX = nil
|
||||
local LastGarage = nil
|
||||
local LastPart = nil
|
||||
local LastParking = nil
|
||||
local thisGarage = nil
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while ESX == nil do
|
||||
@@ -19,13 +20,20 @@ AddEventHandler('instance:onCreate', function(instance)
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_property:hasEnteredMarker', function(name, part, parking)
|
||||
AddEventHandler('esx_garage:hasEnteredMarker', function(name, part, parking)
|
||||
|
||||
if part == 'ExteriorEntryPoint' then
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
local garage = Config.Garages[name]
|
||||
thisGarage = garage
|
||||
|
||||
for i=1, #Config.Garages, 1 do
|
||||
if Config.Garages[i].name ~= name then
|
||||
Config.Garages[i].disabled = true
|
||||
end
|
||||
end
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) then
|
||||
|
||||
@@ -199,7 +207,7 @@ AddEventHandler('esx_property:hasEnteredMarker', function(name, part, parking)
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
local garage = Config.Garages[name]
|
||||
local garage = thisGarage
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) then
|
||||
|
||||
@@ -221,6 +229,7 @@ AddEventHandler('esx_property:hasEnteredMarker', function(name, part, parking)
|
||||
ESX.Game.SpawnVehicle(vehicleProps.model, spawnCoords, garage.ExteriorSpawnPoint.Heading, function(vehicle)
|
||||
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
|
||||
ESX.Game.SetVehicleProperties(vehicle, vehicleProps)
|
||||
ESX.Game.SetVehicleEngineOn(vehicle, (not GetIsVehicleEngineRunning(vehicle)), false, true)
|
||||
end)
|
||||
|
||||
end)
|
||||
@@ -228,7 +237,11 @@ AddEventHandler('esx_property:hasEnteredMarker', function(name, part, parking)
|
||||
|
||||
else
|
||||
|
||||
ESX.Game.Teleport(playerPed,garage.ExteriorSpawnPoint.Pos.x, function()
|
||||
ESX.Game.Teleport(playerPed,{
|
||||
x = garage.ExteriorSpawnPoint.Pos.x,
|
||||
y = garage.ExteriorSpawnPoint.Pos.y,
|
||||
z = garage.ExteriorSpawnPoint.Pos.z
|
||||
}, function()
|
||||
TriggerEvent('instance:close')
|
||||
end)
|
||||
|
||||
@@ -243,13 +256,21 @@ AddEventHandler('esx_property:hasEnteredMarker', function(name, part, parking)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
for i=1, #Config.Garages, 1 do
|
||||
if Config.Garages[i].name ~= name then
|
||||
Config.Garages[i].disabled = false
|
||||
end
|
||||
end
|
||||
|
||||
thisGarage = nil
|
||||
|
||||
end
|
||||
|
||||
if part == 'Parking' then
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local garage = Config.Garages[name]
|
||||
local garage = thisGarage
|
||||
local parkingPos = garage.Parkings[parking].Pos
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) and not IsAnyVehicleNearPoint(parkingPos.x, parkingPos.y, parkingPos.z, 1.0) then
|
||||
@@ -274,13 +295,13 @@ AddEventHandler('esx_property:hasExitedMarker', function(name, part, parking)
|
||||
if part == 'Parking' then
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local garage = Config.Garages[name]
|
||||
local garage = thisGarage
|
||||
local parkingPos = garage.Parkings[parking].Pos
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) and not IsAnyVehicleNearPoint(parkingPos.x, parkingPos.y, parkingPos.z, 1.0) then
|
||||
TriggerServerEvent('esx_garage:setParking', name, parking, false)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
end)
|
||||
@@ -323,11 +344,11 @@ Citizen.CreateThread(function()
|
||||
|
||||
if v.IsClosed then
|
||||
|
||||
if(GetDistanceBetweenCoords(coords, v.ExteriorEntryPoint.Pos.x, v.ExteriorEntryPoint.Pos.y, v.ExteriorEntryPoint.Pos.z, true) < Config.DrawDistance) then
|
||||
if(not v.disabled and GetDistanceBetweenCoords(coords, v.ExteriorEntryPoint.Pos.x, v.ExteriorEntryPoint.Pos.y, v.ExteriorEntryPoint.Pos.z, true) < Config.DrawDistance) then
|
||||
DrawMarker(Config.MarkerType, v.ExteriorEntryPoint.Pos.x, v.ExteriorEntryPoint.Pos.y, v.ExteriorEntryPoint.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
end
|
||||
|
||||
if(GetDistanceBetweenCoords(coords, v.InteriorExitPoint.Pos.x, v.InteriorExitPoint.Pos.y, v.InteriorExitPoint.Pos.z, true) < Config.DrawDistance) then
|
||||
if(not v.disabled and GetDistanceBetweenCoords(coords, v.InteriorExitPoint.Pos.x, v.InteriorExitPoint.Pos.y, v.InteriorExitPoint.Pos.z, true) < Config.DrawDistance) then
|
||||
DrawMarker(Config.MarkerType, v.InteriorExitPoint.Pos.x, v.InteriorExitPoint.Pos.y, v.InteriorExitPoint.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
end
|
||||
|
||||
@@ -339,7 +360,7 @@ Citizen.CreateThread(function()
|
||||
|
||||
local parking = v.Parkings[i]
|
||||
|
||||
if(GetDistanceBetweenCoords(coords, parking.Pos.x, parking.Pos.y, parking.Pos.z, true) < Config.DrawDistance) then
|
||||
if(not v.disabled and GetDistanceBetweenCoords(coords, parking.Pos.x, parking.Pos.y, parking.Pos.z, true) < Config.DrawDistance) then
|
||||
DrawMarker(Config.MarkerType, parking.Pos.x, parking.Pos.y, parking.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.ParkingMarkerSize.x, Config.ParkingMarkerSize.y, Config.ParkingMarkerSize.z, Config.ParkingMarkerColor.r, Config.ParkingMarkerColor.g, Config.ParkingMarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
end
|
||||
|
||||
@@ -357,7 +378,7 @@ Citizen.CreateThread(function()
|
||||
|
||||
while true do
|
||||
|
||||
Wait(0)
|
||||
Citizen.Wait(1)
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
@@ -365,37 +386,35 @@ Citizen.CreateThread(function()
|
||||
local currentGarage = nil
|
||||
local currentPart = nil
|
||||
local currentParking = nil
|
||||
|
||||
|
||||
for k,v in pairs(Config.Garages) do
|
||||
if v.IsClosed then
|
||||
|
||||
if v.IsClosed then
|
||||
if (not v.disabled and GetDistanceBetweenCoords(coords, v.ExteriorEntryPoint.Pos.x, v.ExteriorEntryPoint.Pos.y, v.ExteriorEntryPoint.Pos.z, true) < Config.MarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentGarage = k
|
||||
currentPart = 'ExteriorEntryPoint'
|
||||
end
|
||||
|
||||
if GetDistanceBetweenCoords(coords, v.ExteriorEntryPoint.Pos.x, v.ExteriorEntryPoint.Pos.y, v.ExteriorEntryPoint.Pos.z, true) < Config.MarkerSize.x then
|
||||
isInMarker = true
|
||||
currentGarage = k
|
||||
currentPart = 'ExteriorEntryPoint'
|
||||
end
|
||||
if (not v.disabled and GetDistanceBetweenCoords(coords, v.InteriorExitPoint.Pos.x, v.InteriorExitPoint.Pos.y, v.InteriorExitPoint.Pos.z, true) < Config.MarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentGarage = k
|
||||
currentPart = 'InteriorExitPoint'
|
||||
end
|
||||
|
||||
for i=1, #v.Parkings, 1 do
|
||||
|
||||
if GetDistanceBetweenCoords(coords, v.InteriorExitPoint.Pos.x, v.InteriorExitPoint.Pos.y, v.InteriorExitPoint.Pos.z, true) < Config.MarkerSize.x then
|
||||
isInMarker = true
|
||||
currentGarage = k
|
||||
currentPart = 'InteriorExitPoint'
|
||||
end
|
||||
local parking = v.Parkings[i]
|
||||
|
||||
for i=1, #v.Parkings, 1 do
|
||||
if (not v.disabled and GetDistanceBetweenCoords(coords, parking.Pos.x, parking.Pos.y, parking.Pos.z, true) < Config.ParkingMarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentGarage = k
|
||||
currentPart = 'Parking'
|
||||
currentParking = i
|
||||
end
|
||||
|
||||
local parking = v.Parkings[i]
|
||||
|
||||
if GetDistanceBetweenCoords(coords, parking.Pos.x, parking.Pos.y, parking.Pos.z, true) < Config.ParkingMarkerSize.x then
|
||||
isInMarker = true
|
||||
currentGarage = k
|
||||
currentPart = 'Parking'
|
||||
currentParking = i
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -410,7 +429,7 @@ Citizen.CreateThread(function()
|
||||
LastPart = currentPart
|
||||
LastParking = currentParking
|
||||
|
||||
TriggerEvent('esx_property:hasEnteredMarker', currentGarage, currentPart, currentParking)
|
||||
TriggerEvent('esx_garage:hasEnteredMarker', currentGarage, currentPart, currentParking)
|
||||
end
|
||||
|
||||
if not isInMarker and HasAlreadyEnteredMarker then
|
||||
|
||||
Reference in New Issue
Block a user