From 9b919fc51d67e5b7a514bf01dc0f067d0ada9049 Mon Sep 17 00:00:00 2001 From: retro Date: Wed, 17 Dec 2025 15:13:25 +0100 Subject: [PATCH 1/2] Add getClosestPlayer to package --- .../client/resource/getClosesPlayer/index.ts | 37 +++++++++++++++++++ .../server/resource/getClosesPlayer/index.ts | 35 ++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 package/client/resource/getClosesPlayer/index.ts create mode 100644 package/server/resource/getClosesPlayer/index.ts diff --git a/package/client/resource/getClosesPlayer/index.ts b/package/client/resource/getClosesPlayer/index.ts new file mode 100644 index 00000000..5fb8d252 --- /dev/null +++ b/package/client/resource/getClosesPlayer/index.ts @@ -0,0 +1,37 @@ +import { Vector3 } from "@nativewrappers/fivem"; +import { cache } from '../../../shared/resource/cache/index'; + +export function getClosestPlayer( + coords: Vector3, + maxDistance: number = 2.0, + includePlayer?: boolean +): [number, number, Vector3] | undefined { + const players = GetActivePlayers(); + + let closestId: number | undefined; + let closestPed: number | undefined; + let closestCoords: Vector3 | undefined; + + for (let i = 0; i < players.length; i++) { + const playerId = players[i]; + + if (includePlayer || playerId !== cache.playerId) { + const playerPed = GetPlayerPed(playerId); + const [x, y, z] = GetEntityCoords(playerPed, false); + + const dx = coords.x - x; + const dy = coords.y - y; + const dz = coords.z - z; + const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (distance < maxDistance) { + maxDistance = distance; + closestId = playerId; + closestPed = playerPed; + closestCoords = new Vector3(x, y, z); + } + } + } + + return closestCoords ? [closestId as number, closestPed as number, closestCoords] : undefined; +} diff --git a/package/server/resource/getClosesPlayer/index.ts b/package/server/resource/getClosesPlayer/index.ts new file mode 100644 index 00000000..127bc5eb --- /dev/null +++ b/package/server/resource/getClosesPlayer/index.ts @@ -0,0 +1,35 @@ +import { Vector3 } from "@nativewrappers/fivem"; + +export function getClosestPlayer( + coords: { x: number; y: number; z: number }, + maxDistance: number = 2.0, + ignorePlayerId?: number | false +): [number, number, Vector3] | undefined { + const players = GetActivePlayers(); + + let closestId: number | undefined; + let closestPed: number | undefined; + let closestCoords: Vector3 | undefined; + for (let i = 0; i < players.length; i++) { + const playerId = players[i]; + + if (!ignorePlayerId || playerId !== ignorePlayerId) { + const playerPed = GetPlayerPed(playerId); + const [x, y, z] = GetEntityCoords(playerPed, false); + + const dx = coords.x - x; + const dy = coords.y - y; + const dz = coords.z - z; + const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (distance < maxDistance) { + maxDistance = distance; + closestId = playerId; + closestPed = playerPed; + closestCoords = new Vector3(x, y, z); + } + } + } + + return closestCoords ? [closestId as number, closestPed as number, closestCoords as Vector3] : undefined; +} From 8979339ca97fef3149ad9def53ef81b0997deef6 Mon Sep 17 00:00:00 2001 From: retro Date: Wed, 17 Dec 2025 16:23:50 +0100 Subject: [PATCH 2/2] Change typo in module name, add re-export, update distance calculation --- .../{getClosesPlayer => getClosestPlayer}/index.ts | 5 +---- package/client/resource/index.ts | 1 + .../{getClosesPlayer => getClosestPlayer}/index.ts | 9 +++------ package/server/resource/index.ts | 1 + 4 files changed, 6 insertions(+), 10 deletions(-) rename package/client/resource/{getClosesPlayer => getClosestPlayer}/index.ts (86%) rename package/server/resource/{getClosesPlayer => getClosestPlayer}/index.ts (77%) diff --git a/package/client/resource/getClosesPlayer/index.ts b/package/client/resource/getClosestPlayer/index.ts similarity index 86% rename from package/client/resource/getClosesPlayer/index.ts rename to package/client/resource/getClosestPlayer/index.ts index 5fb8d252..eb7fb92a 100644 --- a/package/client/resource/getClosesPlayer/index.ts +++ b/package/client/resource/getClosestPlayer/index.ts @@ -19,10 +19,7 @@ export function getClosestPlayer( const playerPed = GetPlayerPed(playerId); const [x, y, z] = GetEntityCoords(playerPed, false); - const dx = coords.x - x; - const dy = coords.y - y; - const dz = coords.z - z; - const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + const distance = coords.distance(new Vector3(x, y, z)); if (distance < maxDistance) { maxDistance = distance; diff --git a/package/client/resource/index.ts b/package/client/resource/index.ts index 15e3aea6..a83335e7 100644 --- a/package/client/resource/index.ts +++ b/package/client/resource/index.ts @@ -15,3 +15,4 @@ export * from './callback'; export * from './points'; export * from './dui'; export * from './addKeybind'; +export * from './getClosestPlayer' diff --git a/package/server/resource/getClosesPlayer/index.ts b/package/server/resource/getClosestPlayer/index.ts similarity index 77% rename from package/server/resource/getClosesPlayer/index.ts rename to package/server/resource/getClosestPlayer/index.ts index 127bc5eb..9c6ad3e8 100644 --- a/package/server/resource/getClosesPlayer/index.ts +++ b/package/server/resource/getClosestPlayer/index.ts @@ -1,7 +1,7 @@ import { Vector3 } from "@nativewrappers/fivem"; export function getClosestPlayer( - coords: { x: number; y: number; z: number }, + coords: Vector3, maxDistance: number = 2.0, ignorePlayerId?: number | false ): [number, number, Vector3] | undefined { @@ -17,10 +17,7 @@ export function getClosestPlayer( const playerPed = GetPlayerPed(playerId); const [x, y, z] = GetEntityCoords(playerPed, false); - const dx = coords.x - x; - const dy = coords.y - y; - const dz = coords.z - z; - const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + const distance = coords.distance(new Vector3(x, y, z)); if (distance < maxDistance) { maxDistance = distance; @@ -31,5 +28,5 @@ export function getClosestPlayer( } } - return closestCoords ? [closestId as number, closestPed as number, closestCoords as Vector3] : undefined; + return closestCoords ? [closestId as number, closestPed as number, closestCoords] : undefined; } diff --git a/package/server/resource/index.ts b/package/server/resource/index.ts index c3d2e07a..647c91b3 100644 --- a/package/server/resource/index.ts +++ b/package/server/resource/index.ts @@ -5,6 +5,7 @@ export * from './locale'; export * from './callback'; export * from './version'; export * from './addCommand'; +export * from './getClosestPlayer'; export function setVehicleProperties(vehicle: number, props: VehicleProperties) { Entity(vehicle).state.set('ox_lib:setVehicleProperties', props, true)