From c45aa0d8939e6cb23f055e4b7f19617de5f966ff Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sat, 13 Jul 2024 00:25:30 +1000 Subject: [PATCH] feat(vehicleProperties): add statebag handler and server setter --- package/server/resource/index.ts | 8 +++++++- resource/vehicleProperties/client.lua | 22 ++++++++++++++-------- resource/vehicleProperties/server.lua | 6 ++++++ 3 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 resource/vehicleProperties/server.lua diff --git a/package/server/resource/index.ts b/package/server/resource/index.ts index 8ed674a..c3d2e07 100644 --- a/package/server/resource/index.ts +++ b/package/server/resource/index.ts @@ -1,5 +1,11 @@ +import type { VehicleProperties } from 'shared'; + export * from './acl'; export * from './locale'; export * from './callback'; export * from './version'; -export * from './addCommand'; \ No newline at end of file +export * from './addCommand'; + +export function setVehicleProperties(vehicle: number, props: VehicleProperties) { + Entity(vehicle).state.set('ox_lib:setVehicleProperties', props, true) +} diff --git a/resource/vehicleProperties/client.lua b/resource/vehicleProperties/client.lua index ead1ce9..b2a0aba 100644 --- a/resource/vehicleProperties/client.lua +++ b/resource/vehicleProperties/client.lua @@ -99,20 +99,26 @@ RegisterNetEvent('ox_lib:setVehicleProperties', function(netid, data) end end) ---[[ Alternative to NetEvent - disabled (at least for now?) -AddStateBagChangeHandler('setVehicleProperties', '', function(bagName, _, value) +AddStateBagChangeHandler('ox_lib:setVehicleProperties', '', function(bagName, _, value) if not value or not GetEntityFromStateBagName then return end - local entity = GetEntityFromStateBagName(bagName) - local networked = not bagName:find('localEntity') + local entity = lib.waitFor(function() + local entity = GetEntityFromStateBagName(bagName) - if networked and NetworkGetEntityOwner(entity) ~= cache.playerId then return end + if entity > 0 then return entity end + end) - if lib.setVehicleProperties(entity, value) then - Entity(entity).state:set('setVehicleProperties', nil, true) + + lib.setVehicleProperties(entity, value) + Wait(200) + + -- this delay and second-setting of vehicle properties hopefully counters the + -- weird sync/ownership/shitfuckery when setting props on server-side vehicles + if NetworkGetEntityOwner(entity) == cache.playerId then + lib.setVehicleProperties(entity, value) + Entity(entity).state:set('ox_lib:setVehicleProperties', nil, true) end end) -]] local gameBuild = GetGameBuildNumber() diff --git a/resource/vehicleProperties/server.lua b/resource/vehicleProperties/server.lua new file mode 100644 index 0000000..39faf7d --- /dev/null +++ b/resource/vehicleProperties/server.lua @@ -0,0 +1,6 @@ +---@param vehicle number +---@param props VehicleProperties +---@diagnostic disable-next-line: duplicate-set-field +function lib.setVehicleProperties(vehicle, props) + Entity(vehicle).state:set('ox_lib:setVehicleProperties', props, true) +end