mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-09-01 18:58:54 +00:00
Merge pull request #27 from FedericoDeBona/master
Some changes to esx_sit
This commit is contained in:
+53
-12
@@ -1,5 +1,7 @@
|
||||
ESX = nil
|
||||
local debugProps, sitting, lastPos, currentSitCoords, currentScenario = {}
|
||||
local disableControls = false
|
||||
local currentObj = nil
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while ESX == nil do
|
||||
@@ -53,17 +55,22 @@ Citizen.CreateThread(function()
|
||||
wakeup()
|
||||
end
|
||||
|
||||
-- Disable controls
|
||||
if disableControls then
|
||||
DisableControlAction(1, 37, true) -- Disables INPUT_SELECT_WEAPON (TAB)
|
||||
end
|
||||
|
||||
if IsControlJustPressed(0, 38) and IsControlPressed(0, 21) and IsInputDisabled(0) and IsPedOnFoot(playerPed) then
|
||||
if sitting then
|
||||
wakeup()
|
||||
else
|
||||
local object, distance = ESX.Game.GetClosestObject(Config.Interactables)
|
||||
local object, distance = GetNearChair()
|
||||
|
||||
if Config.Debug then
|
||||
table.insert(debugProps, object)
|
||||
end
|
||||
|
||||
if distance < 1.5 then
|
||||
if distance and distance < 1.4 then
|
||||
local hash = GetEntityModel(object)
|
||||
|
||||
for k,v in pairs(Config.Sitable) do
|
||||
@@ -78,37 +85,71 @@ Citizen.CreateThread(function()
|
||||
end
|
||||
end)
|
||||
|
||||
function GetNearChair()
|
||||
local object, distance
|
||||
local coords = GetEntityCoords(GetPlayerPed(-1))
|
||||
for i=1, #Config.Interactables do
|
||||
object = GetClosestObjectOfType(coords, 3.0, GetHashKey(Config.Interactables[i]), false, false, false)
|
||||
distance = #(coords - GetEntityCoords(object))
|
||||
if distance < 1.6 then
|
||||
return object, distance
|
||||
end
|
||||
end
|
||||
return nil, nil
|
||||
end
|
||||
|
||||
function wakeup()
|
||||
local playerPed = PlayerPedId()
|
||||
local pos = GetEntityCoords(GetPlayerPed(-1))
|
||||
|
||||
TaskStartScenarioAtPosition(playerPed, currentScenario, 0.0, 0.0, 0.0, 180.0, 2, true, false)
|
||||
while IsPedUsingScenario(GetPlayerPed(-1), currentScenario) do
|
||||
Wait(100)
|
||||
end
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
sitting = false
|
||||
|
||||
SetEntityCoords(playerPed, lastPos)
|
||||
FreezeEntityPosition(playerPed, false)
|
||||
FreezeEntityPosition(currentObj, false)
|
||||
|
||||
TriggerServerEvent('esx_sit:leavePlace', currentSitCoords)
|
||||
currentSitCoords, currentScenario = nil, nil
|
||||
sitting = false
|
||||
disableControls = false
|
||||
end
|
||||
|
||||
function sit(object, modelName, data)
|
||||
-- Fix for sit on chairs behind walls
|
||||
if not HasEntityClearLosToEntity(GetPlayerPed(-1), object, 17) then
|
||||
return
|
||||
end
|
||||
disableControls = true
|
||||
currentObj = object
|
||||
FreezeEntityPosition(object, true)
|
||||
|
||||
PlaceObjectOnGroundProperly(object)
|
||||
local pos = GetEntityCoords(object)
|
||||
local playerPos = GetEntityCoords(GetPlayerPed(-1))
|
||||
local objectCoords = pos.x .. pos.y .. pos.z
|
||||
|
||||
ESX.TriggerServerCallback('esx_sit:getPlace', function(occupied)
|
||||
if occupied then
|
||||
ESX.ShowNotification('Cette place est prise...')
|
||||
ESX.ShowNotification('There is someone on this chair')
|
||||
else
|
||||
local playerPed = PlayerPedId()
|
||||
lastPos, currentSitCoords = GetEntityCoords(playerPed), objectCoords
|
||||
|
||||
TriggerServerEvent('esx_sit:takePlace', objectCoords)
|
||||
FreezeEntityPosition(object, true)
|
||||
|
||||
|
||||
currentScenario = data.scenario
|
||||
TaskStartScenarioAtPosition(playerPed, currentScenario, pos.x, pos.y, pos.z - data.verticalOffset, GetEntityHeading(object) + 180.0, 0, true, true)
|
||||
Citizen.Wait(1000)
|
||||
TaskStartScenarioAtPosition(playerPed, currentScenario, pos.x, pos.y, pos.z + (playerPos.z - pos.z)/2, GetEntityHeading(object) + 180.0, 0, true, false)
|
||||
|
||||
Citizen.Wait(2500)
|
||||
if GetEntitySpeed(GetPlayerPed(-1)) > 0 then
|
||||
ClearPedTasks(GetPlayerPed(-1))
|
||||
TaskStartScenarioAtPosition(playerPed, currentScenario, pos.x, pos.y, pos.z + (playerPos.z - pos.z)/2, GetEntityHeading(object) + 180.0, 0, true, true)
|
||||
end
|
||||
|
||||
sitting = true
|
||||
end
|
||||
end)
|
||||
end
|
||||
end, objectCoords)
|
||||
end
|
||||
@@ -114,4 +114,7 @@ Config.Interactables = {
|
||||
'v_tre_sofa_mess_c_s',
|
||||
'prop_roller_car_01',
|
||||
'prop_roller_car_02',
|
||||
-- Custom
|
||||
'v_ret_gc_chair02',
|
||||
'v_serv_ct_chair02',
|
||||
}
|
||||
|
||||
+9
-5
@@ -11,9 +11,9 @@ Config.Sitable = {
|
||||
prop_bench_04 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_05 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_06 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_05 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_05 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.45, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_08 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_09 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_09 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.31, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_10 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_bench_11 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_fib_3b_bench = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
@@ -47,7 +47,7 @@ Config.Sitable = {
|
||||
prop_off_chair_04 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_off_chair_04b = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_off_chair_04_s = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_off_chair_05 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_off_chair_05 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.45, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_old_deck_chair = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_old_wood_chair = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_rock_chair_01 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
@@ -72,7 +72,7 @@ Config.Sitable = {
|
||||
v_ilev_p_easychair = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
v_ret_gc_chair03 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_ld_farm_chair01 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_table_04_chr = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_table_04_chr = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.56, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_table_05_chr = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_table_06_chr = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
v_ilev_leath_chr = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
@@ -124,5 +124,9 @@ Config.Sitable = {
|
||||
|
||||
-- MISC
|
||||
prop_roller_car_01 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
prop_roller_car_02 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0}
|
||||
prop_roller_car_02 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
|
||||
-- CUSTOM
|
||||
v_ret_gc_chair02 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
v_serv_ct_chair02 = { scenario = 'PROP_HUMAN_SEAT_BENCH', verticalOffset = -0.5, forwardOffset = 0.0, leftOffset = 0.0},
|
||||
}
|
||||
|
||||
+1
-1
@@ -17,4 +17,4 @@ end)
|
||||
|
||||
ESX.RegisterServerCallback('esx_sit:getPlace', function(source, cb, objectCoords)
|
||||
cb(seatsTaken[objectCoords])
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user