Lua: détecter la personne la + près de vous

  • Initiateur de la discussion
CMJN

CMJN

Sataniste en herbe
Messages
330
Score réaction
32
Points
130
Bonjour/bonsoir, Je voudrais savoir comment on peut détecter la personne la + pres de vous, genre on fait une commande, et sa envoir le message "La personne la + pres de vous est ply:Nick() "
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Y'a juste à faire un table.sort, exemple:
Code:
 local tostore = {} for k,v in pairs(player.GetAll())do tostore[k] = v end table.sort(tostore,function(a,b) return a:GetPos():Distance(LocalPlayer():GetPos())<b:GetPos():Distance(LocalPlayer():GetPos()) end)
 
Dernière édition:
  • Initiateur de la discussion
CMJN

CMJN

Sataniste en herbe
Messages
330
Score réaction
32
Points
130
sa ne marche pas :confused:
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
En effet. Je regarde ça, j'éditerais mon premier message.
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Code:
local Players = {}
local DistanceP = 300
for k,v in pairs( player.GetAll() ) do if v:GetPos():Distance( ply:GetPos() ) < DistanceP then table.insert( Players, v ) end
end
 
  • Initiateur de la discussion
CMJN

CMJN

Sataniste en herbe
Messages
330
Score réaction
32
Points
130
slownls à dit:
Code:
local Players = {}
local DistanceP = 300
for k,v in pairs( player.GetAll() ) do if v:GetPos():Distance( ply:GetPos() ) < DistanceP then table.insert( Players, v ) end
end
Ce serais de trouver le player le plus pres de vous meme si il est a 10000 de distance, la on dois etre a coté du player pour que sa marche, sinon sa détecte nous meme

EDIT: ou je dois mettre mon message? car je l'ai caler dans:
Code:
if v:GetPos():Distance( ply:GetPos() ) < DistanceP then ply:PrintMessage( HUD_PRINTTALK, v:Nick()) table.insert( Players, v ) end
Et sa m'affiche deux messages: Moi, et le bot que j'ai mis
 
Dernière édition:
  • Initiateur de la discussion
CMJN

CMJN

Sataniste en herbe
Messages
330
Score réaction
32
Points
130
@slownls @ALTA
Code:
local tostore = {}
function ulx.test( ply ) cdist = ( ply:GetPos() - v:GetPos() ):Length() ctarg = v for k, v in pairs(player.GetAll()) do if v:IsValid() then if( v != ply ) then if( (ply:GetPos() - v:GetPos()):Length() < cdist ) then ply:PrintMessage( HUD_PRINTTALK, ctarg:Nick() ) end end end end return cdist, ctarg
end
J'ai réussi a trouver sa, a le changer, mais sa ne marche toujours pas :/
Sa fait 2 heures que j'essaye de régler sa, help
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Le table.sort est une relativement bonne idée, mais cela dépend; si on veut seulement qu'une personne, alors on ne parcourras qu'une seule fois GetAll() :
(Considérant qu'on est dans l'environnement CLIENT)
Code:
local minDist = 999999999 -- essayer math.huge ou math.maxinteger, je ne sais pas s'ils existent dans gmod
local myPos= LocalPlayer():GetPos()
local found = nil
for k, v in pairs (player.GetAll()) do if v==LocalPlayer() then continue end local dist = myPos:Distance(v:GetPos()) if dist < minDist then minDist = dist found = v end
end
if found then LocalPlaye():PrintMessage(HUD_PRINTTALK,"Le joueur le plus proche de vous est : " .. found:Nick() )
end
 
Dernière édition:
  • J'aime
Réactions: CMJN et slownls
  • Initiateur de la discussion
CMJN

CMJN

Sataniste en herbe
Messages
330
Score réaction
32
Points
130
@While True Sa marche ! merci beaucoup
 
Yoh Sambre ♪

Yoh Sambre ♪

Shaman Fou
Messages
16 292
Score réaction
9 688
Points
1 845
On peux avoir un rendu screen pls ?
 
Discord d'entraide
Rejoignz-nous sur Discord