Envoi message entre init et cl_init

  • Initiateur de la discussion Feytone
  • Date de début
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Coucou,

j'ai un little problem. Je m'explique : j'ai une entité

Voilà mon code = côté init

Code:
local mbeton = 0
function ENT:StartTouch(ent) if ent:GetClass() == "rrmelangeb" and mbeton != 1 then ent:Remove(ent) mbeton = mbeton + 0.5 net.Start("FR_ent1") net.Send() end
end

Vous avez compris : si elle touche l'entité "rrmelangeb" alors, elle disparaît, transforme un chiffre, et crée un message (mon util.AddNetworkString est présent) qu'elle envoie.

Seulement, j'aimerais l'envoyer au côté cl_init mais je ne sais plus trop comment faire

Voilà mon côté cl_init :

Code:
function FR_ent1() if mbeton != 1 then mbeton = mbeton + 0.5 mbetontext = mbetontext + 1 end
end

Mon net.Receive est aussi là...

Des idées ?
Bisous
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Je précise que j'ai testé de mettre net.Send(ply) et ça me fout une erreur :

Code:
[ERROR] lua/entities/rrvendor/init.lua:41: Tried to use a NULL entity! 1. Send - [C]:-1 2. unknown - lua/entities/rrvendor/init.lua:41
 
P

polio56

Nouveau né
Messages
16
Score réaction
3
Points
25
Le model '_'
 
P

polio56

Nouveau né
Messages
16
Score réaction
3
Points
25
Si tu as pas de models etc
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Quoi ? J'ai rien compris... Pourquoi tu me parles de model ?
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
c'est pas ent:Remove(), c'est self:Remove()
Si tu veux envoyé à tous le monde, il te suffit de faire :
for k,v in ipairs(player.GetAll()) do
net.Start("FR_ent1")
net.WriteString("..")
net.Send(v)
end

Je te conseille de mettre ce code avant de supprimer ton entitée

Edit :
Si tu veux l'envoyé à l'entitée touchée :
function ENT:StartTouch( ent)
if IsValid(ent) && ent:IsPlayer() && !ent:IsBot() then
net.Start(""FR_ent1")
net.WriteString("..")
net.Send(ent)
end
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
J'ai essayé avec un usermessage, alors ça marche. Cela envoie bien un message, mais le problème vient à partir de la fonction FR_ent1 maintenant. Voilà l'erreur sortie :

Code:
[ERROR] lua/entities/rrvendor/cl_init.lua:162: attempt to perform arithmetic on global 'mbeton' (a nil value) 1. Function - lua/entities/rrvendor/cl_init.lua:162 2. unknown - lua/includes/modules/usermessage.lua:87
Le mbeton donné est celui qui est dans l'addition, je le mets en gras pour comprendre :

Code:
function FR_ent1()
if mbeton != 1 then
mbeton = mbeton + 0.5
mbetontext = mbetontext + 1
end
end
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
c'est pas ent:Remove(), c'est self:Remove()
Si tu veux envoyé à tous le monde, il te suffit de faire :
for k,v in ipairs(player.GetAll()) do
net.Start("FR_ent1")
net.WriteString("..")
net.Send(v)
end

Je te conseille de mettre ce code avant de supprimer ton entitée
Non, c'est bien ent:Remove() vu que je supprime l'entité qui va s'intégrer. Sinon ça supprimera mon entité principale.

Ensuite, j'ai pas trop compris..
Si je l'envoie à tout le monde, est-ce que mon côté cl_init comprendra ? Je me remets en net et je teste.
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Feytone à dit:
Non, c'est bien ent:Remove() vu que je supprime l'entité qui va s'intégrer. Sinon ça supprimera mon entité principale.

Ensuite, j'ai pas trop compris..
Si je l'envoie à tout le monde, est-ce que mon côté cl_init comprendra ? Je me remets en net et je teste.
Ah, donc tu veux supprimer l'entité qui est touché par l'entité de la fonction (ça devient compliqué xD)
Si tu fais un net.Send(v) dans un for k,v in ipairs(player.GetAll()) ça va envoyé ce que tu veux à tous les joueurs (donc côté client)
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
D'aac, j'essaye :)
C'est pas plus compliqué x) C'est juste que je veux éviter d'éparpiller mon code dans X entités, mais mettre vraiment ce qui est important ici, raison : la suite du code ;)

J'ai vu ton edit, mais ouais, en fait si tu veux :

Appelons l'entité principale comme elle s'appelle et l'autre par secondaire.

Quand l'entité principale touche la secondaire, alors POUF plus de secondaire et ça va envoyer un message net au cl_init de la principale.

Voilà tout ^^'
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Feytone à dit:
D'aac, j'essaye :)
C'est pas plus compliqué x) C'est juste que je veux éviter d'éparpiller mon code dans X entités, mais mettre vraiment ce qui est important ici, raison : la suite du code ;)
Dans le sens, la phrase devient compliqué xD
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
Dans le sens, la phrase devient compliqué xD
BREF ! J'ai la même erreur : que ce soit un net ou un umsg ...

Je remets l'erreur :

Code:
[ERROR] lua/entities/rrvendor/cl_init.lua:162: attempt to perform arithmetic on global 'mbeton' (a nil value) 1. func - lua/entities/rrvendor/cl_init.lua:162 2. unknown - lua/includes/extensions/net.lua:32
Voilà mon côté cl_init avec le mbeton concerné en gras :


function FR_ent1()

if mbeton != 1 then
mbeton = mbeton + 0.5
mbetontext = mbetontext + 1
end

end
 
Regnam

Regnam

Geek suprême
Messages
702
Score réaction
66
Points
130
Un message net n'a que 2 directions possibles :
- client vers serveur
- serveur vers client(s) - si tu ne précises pas de client, c'est implicitement tout le monde

Si tu n'arrives pas à procéder alors peut-être as-tu mal conçu l'action que tu veux opérer.
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Regnam à dit:
Un message net n'a que 2 directions possibles :
- client vers serveur
- serveur vers client(s) - si tu ne précises pas de client, c'est implicitement tout le monde

Si tu n'arrives pas à procéder alors peut-être as-tu mal conçu l'action que tu veux opérer.
J'ai réussi grâce donc au net.Send(v)
Jusque-là, ça va mais j'ai une erreur sur quelque chose que je pensais bon (voir mon message d'avant).
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
En faite, je comprend pas à quoi sert ton "mbeton", mais si tu veux partagé cette variable, t'utilise un net.WriteInt("valeur","taille") et après un net.ReadInt()
 
Regnam

Regnam

Geek suprême
Messages
702
Score réaction
66
Points
130
Euhh désolé j'y connais rien a votre glua la j'ai juste copier coller ce qu'un mec t'a répondu sur un groupe steam xD
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Regnam à dit:
Euhh désolé j'y connais rien a votre glua la j'ai juste copier coller ce qu'un mec t'a répondu sur un groupe steam xD
J'ai vu tqt ;)
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
En faite, je comprend pas à quoi sert ton "mbeton", mais si tu veux partagé cette variable, t'utilise un net.WriteInt("valeur","taille") et après un net.ReadInt()
Mon mbeton est une inconnue comme x ou a en maths. Donc j'ai envie en version maths que ça donne (avec mbeton = 0 lors de l'initialisation de l'ent) :

x = x + 0.5
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Feytone à dit:
Mon mbeton est une inconnue comme x ou a en maths. Donc j'ai envie en version maths que ça donne (avec mbeton = 0 lors de l'initialisation de l'ent) :

x = x + 0.5
Oui mais elle sert à quoi ?
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Simplement à savoir s'il y'a assez de mbeton dans cette entité pour une action future (ex : Si il y assez de mbeton, de maton et de muton alors l'entité peut spawn une nouvelle entité).
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Voilà la fonction où je l'utilise pour l'instant (pour la barre de chargement) :

Code:
local ListItem = List1:Add( "DPanel" ) ListItem:SetSize( 800, 50 ) ListItem.Paint = function( self, w, h) DrawBlur(self,2) draw.RoundedBox(0,0,0,w,h,cblur120) draw.SimpleText("Mélange à béton ajouté :","FR_Derma1_Font20",95,24,c,1,1) draw.RoundedBox(0,190,13,600,26,Color(50,50,50,200)) draw.RoundedBox(0,193,16,592*mbeton,20,Color(160,160,160,255)) draw.SimpleText(mbetontext.." / 2","FR_Derma1_Font20",490,25,c,1,1) end
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Au pire tu fais un
self:SetNWInt("nom","valeur")
dans le Ent:Intialize et tu le récupère via le client (les variables nw sont récupérables des deux côtés)
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
Au pire tu fais un
self:SetNWInt("nom","valeur")
dans le Ent:Intialize et tu le récupère via le client (les variables nw sont récupérables des deux côtés)
Je le récupère via un net ou il trouvera tout seul comme un grand ?
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Levo à dit:
Hmmmm béton sa a commencé les matières premières c'est cool sa :p
Viens ts, je le fous sur le FTP.
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Feytone à dit:
Je le récupère via un net ou il trouvera tout seul comme un grand ?
Tu récupères via un GetNWInt()
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
J'ai calé du coup dans mon côté serveur dans ma fonction StartTouch après then le self:SetNWInt("mbeton",0) puis côté client

Code:
local mbeton = self:GetNWInt("mbeton")
Mais il ne comprend pas à quoi correspond le self (erreur) :

Code:
[ERROR] lua/entities/rrvendor/cl_init.lua:161: attempt to index global 'self' (a nil value) 1. func - lua/entities/rrvendor/cl_init.lua:161 2. unknown - lua/includes/extensions/net.lua:32
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Bah normal, le self est pas défini, faut que tu récupère ton entité avec par exemple
ents.FindByClass("lenomdetonentité")
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
Bah normal, le self est pas défini, faut que tu récupère ton entité avec par exemple
ents.FindByClass("lenomdetonentité")
Donc je fous ça côté client : ents.FindByClass("Nomdufichierdel'entité) mais après je peux mettre un self ?
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
tente comme ça :
local ent = ents.FindByClass("nomdelentité")
ent:GetNWInt("value")
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
On est bien d'accord que le nom de l'entité c'est le nom du fichier non ? Ou c'est le nom dans le shared.lua ?
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Class c'est le nom du dossier / fichier lua
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Mais au pire, dans la fonction StartTouch, tu met un net.WriteEnt :)
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Ok... Je comprends pas tout ce qui se passe..

Bon je résume.

Dans mon StartTouch, if l'entité secondaire touche l'entité principale, alors cela self:SetNWInt("mbeton",0)

Puis dans mon cl_init :

Code:
local ent = ents.FindByClass("rrvendor")
function FR_ent1()
local mbeton = ent:GetNWInt("mbeton") if mbeton != 1 then mbeton = mbeton + 0.5 mbetontext = mbetontext + 1 end
end
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Te casse pas la tête si tu comprend pas tout,
Mais sinon oui c'est ce que tu viens de faire
Au pire, tu fais juste un net.WriteEntity(self) côté serveur (avec l'entité), et côté client tu fais un
local ent = net.ReadEntity()

du coup, si tu fais ça le
local ent = ents.FindByClass("") devient inutile
c'est à toi de voi
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Ok mais maintenant le SetNWInt fait des siennes :

Code:
function ENT:StartTouch(ent) if ent:GetClass() == "rrmelangeb" then ent:Remove(ent) self.SetNWInt("mbeton",0) for k,v in ipairs(player.GetAll()) do net.Start("FR_ent1") net.WriteEntity(self) net.WriteString("..") net.Send(v) end end
end
Avec comme erreur

Code:
[ERROR] lua/entities/rrvendor/init.lua:37: bad argument #1 to 'SetNWInt' (entity expected, got string) 1. SetNWInt - [C]:-1 2. unknown - lua/entities/rrvendor/init.lua:37
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
c'est pas self.SetNWInt mais self:SetNWInt
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Bon c'est pas totalement réglé :

si je place le net.WriteEntity(self) le problème est que c'est seulement lorsque quelque chose StartTouch l'entité que cela s'envoie hors
mon mbetontext équivaut à 0 au départ donc il doit recevoir dès l'initialisation de l'entité.
J'ai donc placé un net dans l'ENT:Initialize() mais il ne comprend pas mon send :

Code:
net.Send(v)
Que dois-je mettre à cet endroit. Sorry de tant de questions, mais pour afficher des infos qui se modifient toutes seules par code, c'est la première fois ^^'
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
dans ENT:Intialize tu place un self:SetNWInt(0,32)
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
dans ENT:Intialize tu place un self:SetNWInt(0,32)
Quel rapport ?
Cela laisse l'erreur en tout cas ^^'
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Je comprend pas à quoi sert ton net.Send(v), il est inutile ^^
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
Je comprend pas à quoi sert ton net.Send(v), il est inutile ^^
Comment envoyer tout ça alors :

Code:
 self:SetNWInt(0,32) net.Start("FR_base") net.WriteEntity(self) net.Send(v) self:SetNWInt("mbeton",0) self:SetNWInt("mbetontext",mbeton)
(dans ENT:Initialize() )
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Je t'aide demain, comment ça on fait plus proprement :)
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
Je t'aide demain, comment ça on fait plus proprement :)
Oui je pense ^^' Voilà un ts : on fera ça en vocal, je pense que ce sera plus simple et rapide : ts.pixelts3.fr:10011
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Si t'es là Z3k4 c'est cool :)
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Je suis là :cool:
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Ok
 
  • Initiateur de la discussion
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Mon entité ne s'affiche plus en jeu avec ta version et pourtant je ne trouve point d'erreur.. Etonnant.
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Ok je regarde
 
Discord d'entraide
Rejoignz-nous sur Discord