[gLua] Rayon autour d'une entité

  • Initiateur de la discussion
ghostkillers

ghostkillers

Geek
Messages
49
Score réaction
6
Points
65
Bonjour/Bonsoir,

Je cherche un if dans ce genre :
"si player est dans un rayon de 50 autour de (prop_balise) alors :"
en gros si un joueur entre dans le rayon de la balise alors ....

merci de votre aide :)
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
FindInSphere
 
Taink

Taink

El Magnifico
Messages
5 292
Score réaction
2 720
Points
965
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Valfunde à dit:
Beh c'est pas ouf je trouve (après c'est peut être le seul moyen, j'ai pas regardé) car à chaque fois ça va get toute la table juste pour une ou deux entités, ça fait pas mal de calculs inutiles pour pas quelque chose d'énorme en plus je pense.
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
Feytone à dit:
Beh c'est pas ouf je trouve (après c'est peut être le seul moyen, j'ai pas regardé) car à chaque fois ça va get toute la table juste pour une ou deux entités, ça fait pas mal de calculs inutiles pour pas quelque chose d'énorme en plus je pense.
Bah crée une fonction alors mdr, c'est la seule méthode pour avoir les entités dans une sphere...
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Valfunde à dit:
Bah crée une fonction alors mdr, c'est la seule méthode pour avoir les entités dans une sphere...
Putain c'est pas ouf alors... ça m'étonne tiens donc qu'ils n'aient créé de fonction pour chaque entité.
 
  • Initiateur de la discussion
ghostkillers

ghostkillers

Geek
Messages
49
Score réaction
6
Points
65
merci, je vais testé sa :)
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Feytone à dit:
Putain c'est pas ouf alors... ça m'étonne tiens donc qu'ils n'aient créé de fonction pour chaque entité.
La fonction est créer exprès pour sa, après faut juste pas la faire répéter toute les secondes car la fonction exécute une boucle ( ents.GetAll() ) ^^
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
slownls à dit:
La fonction est créer exprès pour sa, après faut juste pas la faire répéter toute les secondes car la fonction exécute une boucle ( ents.GetAll() ) ^^
Comment tu récupères une entité précisément ? Car si c'est avec une condition, ça veut dire quand même que ça exécute le radius sur 1024 entités...
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Feytone à dit:
Comment tu récupères une entité précisément ? Car si c'est avec une condition, ça veut dire quand même que ça exécute le radius sur 1024 entités...
C'est Garry's Mod... C'est pour cela qu'il faut évité de le répéter tous les secondes ( genre dans un think ), après si tu l'utilise une seule fois cela ne dérange pas trop ^^
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
Mais sa dérange pas dutout, faut juste savoir coder de façon optimisée, et pas faire n'importe quoi ...
 
  • J'aime
Réactions: slownls
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
Au pire au lieu d'utiliser findInSphere qui loop toute les entités connus et prends toute les entités même non joueur utilise :
Code:
for _, ply in pairs(player.GetAll()) do	if ply:GetPos():Distance(self:GetPos()) < 100 then	-- code	end
end
 
  • J'aime
Réactions: Malcolm et Feytone
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
slownls à dit:
C'est Garry's Mod... C'est pour cela qu'il faut évité de le répéter tous les secondes ( genre dans un think ), après si tu l'utilise une seule fois cela ne dérange pas trop ^^
Hmm t'aurais un exemple de code de la manière dont tu récupères la radius pour une fonction précise ?
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Makss à dit:
Au pire au lieu d'utiliser findInSphere qui loop toute les entités connus et prends toute les entités même non joueur utilise :
Code:
for _, ply in pairs(player.GetAll()) do if ply:GetPos():Distance(self:GetPos()) < 100 then -- code end
end
Ouais je me disais que ça faisait beaucoup aussi. Hmm c'est vrai que le distance c'est pas con ^^'
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Feytone à dit:
Ouais je me disais que ça faisait beaucoup aussi. Hmm c'est vrai que le distance c'est pas con ^^'
FindInSphere utilise également la distance, sauf pas de la même manière ...
 
UnCaribou

UnCaribou

Geek
Messages
82
Score réaction
35
Points
70
Je pense qu'utiliser DistToSqr() est plus opti. que d'utiliser Distance()
 
  • J'aime
Réactions: Makss
  • Initiateur de la discussion
ghostkillers

ghostkillers

Geek
Messages
49
Score réaction
6
Points
65
cc, je comprend pas trop le bout de code de Makss :/ quelqu'un peu m'expliquer en priver ?

Merci
 
Taink

Taink

El Magnifico
Messages
5 292
Score réaction
2 720
Points
965
ghostkillers à dit:
cc, je comprend pas trop le bout de code de Makss :/ quelqu'un peu m'expliquer en priver ?

Merci
@Makss
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Makss à dit:
Au pire au lieu d'utiliser findInSphere qui loop toute les entités connus et prends toute les entités même non joueur utilise :
Code:
for _, ply in pairs(player.GetAll()) do if ply:GetPos():Distance(self:GetPos()) < 100 then -- code end
end
ghostkillers à dit:
cc, je comprend pas trop le bout de code de Makss :/ quelqu'un peu m'expliquer en priver ?

Merci
Pour chaque joueur, si la position du joueur est à moins de 100 unités de distance de l'entité (self, donc il faut définir self pour que cela fonctionne)
alors, là tu fais ce que tu veux (ton code quoi) puis tu termines ta condition et tu termines ta boucle.
 
  • J'aime
Réactions: Taink et Makss
  • Initiateur de la discussion
ghostkillers

ghostkillers

Geek
Messages
49
Score réaction
6
Points
65
D'accord :) Je vous remercie tous pour votre aide :
@slownls @Makss @Taink @Valfunde @UnCaribou
 
  • J'aime
Réactions: UnCaribou, Taink et Valfunde
Discord d'entraide
Rejoignz-nous sur Discord