From 2edb79e75beb6f23a0666d29555a7776c7996a8c Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sun, 14 Jul 2024 13:42:41 +1000 Subject: [PATCH] refactor(vehicle): more vehicleProperties debugging --- client/vehicle/index.ts | 36 +++++++++++++++++++++++------------- server/vehicle/index.ts | 12 ++++++++++++ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/client/vehicle/index.ts b/client/vehicle/index.ts index 5cd3c35f..6f500866 100644 --- a/client/vehicle/index.ts +++ b/client/vehicle/index.ts @@ -49,33 +49,43 @@ AddStateBagChangeHandler('initVehicle', '', async (bagName: string, key: string, AddStateBagChangeHandler('vehicleProperties', '', async (bagName: string, key: string, value: any) => { if (!value) return DEBUG && console.info(`removed ${key} state from ${bagName}`); - const entity = await waitFor(async () => { - const entity = GetEntityFromStateBagName(bagName); - DEV: console.info(key, entity); + const entity = await waitFor( + async () => { + const entity = GetEntityFromStateBagName(bagName); + DEV: console.info(key, entity); - if (entity) return entity; - }, 'failed to get entity from statebag name'); + if (entity) return entity; + }, + 'failed to get entity from statebag name', + 10000 + ); if (!entity) return; - // properties sometimes fail to set for whatever reason, so here's a dumb workaround. - const resolved = await new Promise((resolve) => { + const status = await new Promise((resolve) => { let i = 0; let interval: CitizenTimer; interval = setInterval(() => { i++; + const doesEntityExist = DoesEntityExist(entity); + + if (i % 5) console.info(`Attempting to set ${bagName} on entity ${entity} (${i})`); - if (i > 5 || !DoesEntityExist(entity)) { - resolve(i > 5 ? 1 : 0); + if (i > 100 || !doesEntityExist || !Entity(entity).state[key]) { + resolve(doesEntityExist ? 0 : i > 100 ? 1 : 2); return clearInterval(interval); } setVehicleProperties(entity, value); - }, 100); + }, 200); }); - if (!resolved) return; - - Entity(entity).state.set(key, null, true); + console.info( + status + ? status === 1 + ? `Failed to set ${bagName} on entity ${entity} (timed out)` + : `Set ${bagName} on entity ${entity}` + : `Failed to set ${bagName} on entity ${entity} (entity does not exist)` + ); }); diff --git a/server/vehicle/index.ts b/server/vehicle/index.ts index 05ddc2a9..ce3a2b27 100644 --- a/server/vehicle/index.ts +++ b/server/vehicle/index.ts @@ -123,6 +123,18 @@ export async function CreateVehicle( state.set('initVehicle', true, true); state.set('vehicleProperties', metadata.properties, true); + let interval: CitizenTimer; + + interval = setInterval(() => { + if (GetVehicleNumberPlateText(entity) !== '') { + console.log(`Set vehicleProperties for entity ${entity}`); + state.set('vehicleProperties', null, true); + return clearInterval(interval); + } + + if (!DoesEntityExist(entity)) clearInterval(interval); + }, 200); + return vehicle; }