Quick question: how to get the nearest player to a certain position?
3 replies, posted
I'm unsure how to do this and I've tried numerous things which didn't work...
Something like that? Or did I misunderstand?
[lua]function GetNearestPlayer(vector)
local closest = false
local closestdistance = math.huge()
for k,v in ipairs(player.GetAll()) do
local distance = vector:Distance(v:GetPos())
if distance < closestdistance then
closestdistance = distance
closest = v
end
end
if closest then return closest end
end[/lua]
:ninja: :ninja: :ninja: :ninja: :ninja: :ninja:
Theres different things you can try.
For once, you can loop through all of the players, and check their distance to the pos, which would look like this:
[code]
local pos = Vector(0,0,0)
local ClosestDistance = 10000000 // Just something incredibly high
local ClosestPlayer = NULL
for _,v in pairs(player.GetAll()) do
local Distance = v:GetPos():Distance(pos) // I prefer saving the distance seperately than calculating it a new each time, since it's computationally expensive to get the distance in 3D space
if Distance < ClosestDistance then
ClosestDistance = Distance
ClosestPlayer = v
end
end
[/code]
Edit:
Oh well, got ninja'd.
Well, I figured it out myself and was about to post my solution. (it's shockingly similar!)
[lua]local NearestPlayer = NULL
local LowestDist = math.huge
for _, v in pairs( player.GetAll() ) do
local Dist = ( Pos - v:GetPos() ):Length()
if ( Dist < LowestDist ) then
LowestDist = Dist
NearestPlayer = v
end
end[/lua]
But thanks anyway!
Sorry, you need to Log In to post a reply to this thread.