Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions client/events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ RegisterNetEvent('QBCore:Client:VehicleInfo', function(info)
}

TriggerEvent('QBCore:Client:' .. info.event .. 'Vehicle', data)
data.vehicle = NetworkGetEntityIsNetworked(info.vehicle) and NetworkGetNetworkIdFromEntity(info.vehicle) or 0
TriggerServerEvent('QBCore:Server:' .. info.event .. 'Vehicle', data)
end)

-- Other stuff
Expand Down Expand Up @@ -283,3 +285,77 @@ end)
RegisterNetEvent('QBCore:Client:SharedUpdate', function(table)
QBCore.Shared = table
end)

local lastVehicleData = {}
local THREAD_INTERVAl_CHECKER = 1000

-- Thread for vehicle entering event
CreateThread(function()
local entering = false
while true do
if LocalPlayer.state.isLoggedIn then
local ped = PlayerPedId()
local vehicle = GetVehiclePedIsTryingToEnter(ped)
if vehicle ~= 0 then
if not entering then
entering = true
TriggerEvent('QBCore:Client:VehicleInfo', {vehicle = vehicle, seat = GetSeatPedIsTryingToEnter(ped), name = GetEntityModel(vehicle), event = 'Entering'})
end
elseif entering then
entering = false
end
end
Wait(THREAD_INTERVAl_CHECKER)
end
end)

--- Vehicle thread to check changes in player state (enter/exit vehicle, change seat)
--- @param inputVehicle number Vehicle entity
local inVehicleThread = function(inputVehicle)
if lastVehicleData.vehicle ~= nil then return end
lastVehicleData.vehicle = inputVehicle
CreateThread(function()
while lastVehicleData.vehicle ~= nil do
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)

if vehicle == 0 then
TriggerEvent('QBCore:Client:VehicleInfo', {vehicle = lastVehicleData.vehicle, seat = lastVehicleData.seat, name = lastVehicleData.model, event = 'Left'})
lastVehicleData = {}
break
end

local currentSeat = QBCore.Functions.GetPedCurrentSeatInVehicle(vehicle)
if vehicle ~= lastVehicleData.vehicle then
TriggerEvent('QBCore:Client:VehicleInfo', {vehicle = lastVehicleData.vehicle, seat = lastVehicleData.seat, name = lastVehicleData.model, event = 'Left'})
lastVehicleData = {
vehicle = vehicle,
seat = currentSeat,
model = GetEntityModel(vehicle)
}
TriggerEvent('QBCore:Client:VehicleInfo', {vehicle = lastVehicleData.vehicle, seat = lastVehicleData.seat, name = lastVehicleData.model, event = 'Entered'})
end

if currentSeat ~= lastVehicleData.seat then
TriggerEvent('QBCore:Client:VehicleInfo', {vehicle = lastVehicleData.vehicle, seat = lastVehicleData.seat, name = lastVehicleData.model, event = 'ChangedSeat'})
lastVehicleData.seat = currentSeat
end

Wait(THREAD_INTERVAl_CHECKER)
end
end)
end

AddEventHandler('gameEventTriggered', function (name, args)
if name ~= "CEventNetworkPlayerEnteredVehicle" then return end
local vehicle = args[2]

if vehicle == lastVehicleData.vehicle then return end

lastVehicleData = {
seat = QBCore.Functions.GetPedCurrentSeatInVehicle(vehicle),
model = GetEntityModel(vehicle)
}

TriggerEvent('QBCore:Client:VehicleInfo', {vehicle = vehicle, seat = lastVehicleData.seat, name = lastVehicleData.model, event = 'Entered'})
inVehicleThread(vehicle)
end)
16 changes: 16 additions & 0 deletions client/functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,22 @@ function QBCore.Functions.IsWearingGloves()
return true
end

--- Returns the current seat of the player
--- @param vehicle? number|nil The vehicle to check (if not specified, the player's current vehicle is used)
--- @return number|nil seat The current seat of the player (nil if player is not in that vehicle)
function QBCore.Functions.GetPedCurrentSeatInVehicle(vehicle)
local ped = PlayerPedId()
if not vehicle then vehicle = GetVehiclePedIsIn(ped, false) end

for i = -1, 6 do
if GetPedInVehicleSeat(vehicle, i) == ped then
return i
end
end

return nil
end

-- NUI Calls

function QBCore.Functions.Notify(text, texttype, length, icon)
Expand Down
41 changes: 0 additions & 41 deletions server/events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -183,47 +183,6 @@ RegisterNetEvent('QBCore:ToggleDuty', function()
TriggerClientEvent('QBCore:Client:SetDuty', src, Player.PlayerData.job.onduty)
end)

-- BaseEvents

-- Vehicles
RegisterServerEvent('baseevents:enteringVehicle', function(veh, seat, modelName)
local src = source
local data = {
vehicle = veh,
seat = seat,
name = modelName,
event = 'Entering'
}
TriggerClientEvent('QBCore:Client:VehicleInfo', src, data)
end)

RegisterServerEvent('baseevents:enteredVehicle', function(veh, seat, modelName)
local src = source
local data = {
vehicle = veh,
seat = seat,
name = modelName,
event = 'Entered'
}
TriggerClientEvent('QBCore:Client:VehicleInfo', src, data)
end)

RegisterServerEvent('baseevents:enteringAborted', function()
local src = source
TriggerClientEvent('QBCore:Client:AbortVehicleEntering', src)
end)

RegisterServerEvent('baseevents:leftVehicle', function(veh, seat, modelName)
local src = source
local data = {
vehicle = veh,
seat = seat,
name = modelName,
event = 'Left'
}
TriggerClientEvent('QBCore:Client:VehicleInfo', src, data)
end)

-- Items

-- This event is exploitable and should not be used. It has been deprecated, and will be removed soon.
Expand Down
Loading