From d39c7d751dbe4c893332ea9009d5f9e1f39e643a Mon Sep 17 00:00:00 2001 From: Federico De Bona Date: Thu, 21 May 2020 16:00:50 +0200 Subject: [PATCH 1/3] Some changes to the esx_sit resource --- client.lua | 61 ++++++++++++++++++++++++++++++++++++++++---------- config.lua | 3 +++ lists/seat.lua | 14 +++++++----- server.lua | 2 +- 4 files changed, 62 insertions(+), 18 deletions(-) diff --git a/client.lua b/client.lua index 4bd224bb..9971a556 100644 --- a/client.lua +++ b/client.lua @@ -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,23 @@ 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() + --local object, distance = ESX.Game.GetClosestObject(GetEntityCoords(GetPlayerPed(-1)), Config.Interactables) if Config.Debug then table.insert(debugProps, object) end - if distance < 1.5 then + if distance and distance < 1.5 then local hash = GetEntityModel(object) for k,v in pairs(Config.Sitable) do @@ -78,37 +86,66 @@ 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)) + + -- non serve specificare x, y, z perchè si alza? + 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) + disableControls = true + currentObj = object + FreezeEntityPosition(object, true) + PlaceObjectOnGroundProperly(object) local pos = GetEntityCoords(object) - local objectCoords = pos.x .. pos.y .. pos.z + local objectCoords = string.sub(pos.x, 1, 9) .. string.sub(pos.y, 1, 9) .. string.sub(pos.z, 1, 9) ESX.TriggerServerCallback('esx_sit:getPlace', function(occupied) if occupied then - ESX.ShowNotification('Cette place est prise...') + ESX.ShowNotification('Questo posto è occupato') 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 - data.verticalOffset, 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 - data.verticalOffset, GetEntityHeading(object) + 180.0, 0, true, true) + end + sitting = true end - end) + end, objectCoords) end diff --git a/config.lua b/config.lua index 4f4957be..45ff65b6 100644 --- a/config.lua +++ b/config.lua @@ -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', } diff --git a/lists/seat.lua b/lists/seat.lua index c5cb8c6c..cc27adf6 100644 --- a/lists/seat.lua +++ b/lists/seat.lua @@ -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}, } diff --git a/server.lua b/server.lua index 6ae31e82..98641f2e 100644 --- a/server.lua +++ b/server.lua @@ -17,4 +17,4 @@ end) ESX.RegisterServerCallback('esx_sit:getPlace', function(source, cb, objectCoords) cb(seatsTaken[objectCoords]) -end) +end) \ No newline at end of file From 0dd0cc9f42f32fc2111d9df9ec10d3024144291f Mon Sep 17 00:00:00 2001 From: Federico De Bona Date: Sun, 24 May 2020 16:30:29 +0200 Subject: [PATCH 2/3] Fixes for sitting on chair behind walls --- client.lua | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/client.lua b/client.lua index 9971a556..5b349e5b 100644 --- a/client.lua +++ b/client.lua @@ -65,13 +65,12 @@ Citizen.CreateThread(function() wakeup() else local object, distance = GetNearChair() - --local object, distance = ESX.Game.GetClosestObject(GetEntityCoords(GetPlayerPed(-1)), Config.Interactables) if Config.Debug then table.insert(debugProps, object) end - if distance and distance < 1.5 then + if distance and distance < 1.4 then local hash = GetEntityModel(object) for k,v in pairs(Config.Sitable) do @@ -120,16 +119,22 @@ function wakeup() end function sit(object, modelName, data) + -- Fix for sit on chairs behind walls + if not HasEntityClearLosToEntity(GetPlayerPed(-1), object, 126) then + return + end disableControls = true currentObj = object FreezeEntityPosition(object, true) + PlaceObjectOnGroundProperly(object) local pos = GetEntityCoords(object) - local objectCoords = string.sub(pos.x, 1, 9) .. string.sub(pos.y, 1, 9) .. string.sub(pos.z, 1, 9) + local playerPos = GetEntityCoords(GetPlayerPed(-1)) + local objectCoords = string.sub(pos.x, 1, 7) .. string.sub(pos.y, 1, 7) .. string.sub(pos.z, 1, 7) ESX.TriggerServerCallback('esx_sit:getPlace', function(occupied) if occupied then - ESX.ShowNotification('Questo posto è occupato') + ESX.ShowNotification('There is someone on this chair') else local playerPed = PlayerPedId() lastPos, currentSitCoords = GetEntityCoords(playerPed), objectCoords @@ -137,15 +142,15 @@ function sit(object, modelName, data) TriggerServerEvent('esx_sit:takePlace', objectCoords) currentScenario = data.scenario - TaskStartScenarioAtPosition(playerPed, currentScenario, pos.x, pos.y, pos.z - data.verticalOffset, GetEntityHeading(object) + 180.0, 0, true, false) - + 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 - data.verticalOffset, GetEntityHeading(object) + 180.0, 0, true, true) + 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, objectCoords) -end +end \ No newline at end of file From 26b4d070421d450ae0f41dc240cb44c0409453a0 Mon Sep 17 00:00:00 2001 From: Federico De Bona Date: Mon, 25 May 2020 20:38:24 +0200 Subject: [PATCH 3/3] Hope it fix the problem of Lof --- client.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client.lua b/client.lua index 5b349e5b..46f7b23a 100644 --- a/client.lua +++ b/client.lua @@ -102,7 +102,6 @@ function wakeup() local playerPed = PlayerPedId() local pos = GetEntityCoords(GetPlayerPed(-1)) - -- non serve specificare x, y, z perchè si alza? TaskStartScenarioAtPosition(playerPed, currentScenario, 0.0, 0.0, 0.0, 180.0, 2, true, false) while IsPedUsingScenario(GetPlayerPed(-1), currentScenario) do Wait(100) @@ -120,7 +119,7 @@ end function sit(object, modelName, data) -- Fix for sit on chairs behind walls - if not HasEntityClearLosToEntity(GetPlayerPed(-1), object, 126) then + if not HasEntityClearLosToEntity(GetPlayerPed(-1), object, 17) then return end disableControls = true @@ -130,7 +129,7 @@ function sit(object, modelName, data) PlaceObjectOnGroundProperly(object) local pos = GetEntityCoords(object) local playerPos = GetEntityCoords(GetPlayerPed(-1)) - local objectCoords = string.sub(pos.x, 1, 7) .. string.sub(pos.y, 1, 7) .. string.sub(pos.z, 1, 7) + local objectCoords = pos.x .. pos.y .. pos.z ESX.TriggerServerCallback('esx_sit:getPlace', function(occupied) if occupied then