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