Aide pour le for k,v

  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Bonsoir, je fait actuellement un addon et j'aurai besoin de faire une fonction de quand on écris un truc dans un "DTextEntry" sa envoie le contenue au serveur qui le renvoie au client et @Mentropase m'as dit d'utiliser le
for k, v in pairs, mais je ne sais pas comment faire et que v = tout les maires de la ville et donc a partir de là sa fait une popup pour les maires si on pourrait prendre le temps de m'expliquer sa serai grave sympas :D
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
up
 
ɓïℓℓγ

ɓïℓℓγ

Psychopathe
Messages
1 105
Score réaction
291
Points
230
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
EglyKozz à dit:
Bonsoir, je fait actuellement un addon et j'aurai besoin de faire une fonction de quand on écris un truc dans un "DTextEntry" sa envoie le contenue au serveur qui le renvoie au client et @Mentropase m'as dit d'utiliser le
for k, v in pairs, mais je ne sais pas comment faire et que v = tout les maires de la ville et donc a partir de là sa fait une popup pour les maires si on pourrait prendre le temps de m'expliquer sa serai grave sympas :D
Hein ?
 
  • J'aime
Réactions: ɓïℓℓγ
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Z3k4 à dit:
En faite je vais expliquer tout en entier, je fait un addon pour prendre rendez-vous avec le maire, et c'est un systeme un peux comme le admin popup, sa envoie les info taper dans le derma, ce qu'il a écris est envoyer au serveur qui les renvoie au maires, et en gros il faut faire ça avec des net mais après le gentil @Mentropase m'as dit que il fallait que j'utilise
Code:
for k,v in pairs(table_name) do print(k,v)
end
et que v = le maire mais je sais comment utiliser cette "fonction"
Et si quelqu'un veut m'expliquer je suis preneur :rolleyes:
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Il faut pas forcément une boucle... Perso je ferais un petit truc qui simplement s'update dès que le TextEntry est modifié. Et ensuite tu as juste à l'envoyer au serveur
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Feytone à dit:
Il faut pas forcément une boucle... Perso je ferais un petit truc qui simplement s'update dès que le TextEntry est modifié. Et ensuite tu as juste à l'envoyer au serveur
Ah oué pas con, mais si il y'as plusieurs rendez vous pour qu'il les acceptes
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Là ça devient plus compliqué non pas pour le TextEntry, qui peut être modifié mais au pire tu peux faire un truc un peu plus simple : cela t'oblige à choisir une raison parmi une cinquantaine et normalement tu t'emmerdes plus ^^
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Feytone à dit:
Là ça devient plus compliqué non pas pour le TextEntry, qui peut être modifié mais au pire tu peux faire un truc un peu plus simple : cela t'oblige à choisir une raison parmi une cinquantaine et normalement tu t'emmerdes plus ^^
pas compris x)
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Beh une ComboBox pour la raison au lieu d'un textEntry x)
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Feytone à dit:
Beh une ComboBox pour la raison au lieu d'un textEntry x)
Non mais je veux vraiment que le maire puisse choisir d'accepter un rendez vous ou non
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Et alors ? ça ça change pas... Case Oui ou Case Non...
 
S

Skyyrize

Geek
Messages
144
Score réaction
35
Points
95
Code:
for k,v in pairs (player:GetAll()) do
if team.GetName(v:Team()) == "Maire" then
--message
end
end
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Skyyrize à dit:
Code:
for k,v in pairs (player:GetAll()) do
if team.GetName(v:Team()) == "Maire" then
--message
end
end
après le then je met tout le code pour faire les pop up ?
 
S

Skyyrize

Geek
Messages
144
Score réaction
35
Points
95
je sais pas car je connais pas le "pop up"
 
S

Skyyrize

Geek
Messages
144
Score réaction
35
Points
95
est ce que tu utilise un derma pour écrire le message ?
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Skyyrize à dit:
je sais pas car je connais pas le "pop up"
Quand je dit pop up c'est genre une petit case qui apparait et tu peux accepter ou non un rendez vous
 
S

Skyyrize

Geek
Messages
144
Score réaction
35
Points
95
ok mais vu que tu utilise un derma, il faut envoyer le message au serveur donc tu doit utiliser un net.writestring() donc a toi de trouver comment faire :)
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Skyyrize à dit:
ok mais vu que tu utilise un derma, il faut envoyer le message au serveur donc tu doit utiliser un net.writestring() donc a toi de trouver comment faire :)
Merci
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Donc si je veux que faire ce que je veux donc sa doit ressembler a ça
(Client)
Code:
 function Design(ply) local frame = vgui.Create( "DFrame") frame:SetSize(ScrW() / 2 , ScrH() / 3) frame:Center() frame:SetVisible(true) frame:MakePopup() frame:SetTitle("") frame:ShowCloseButton(false) frame.Paint = function(s, w, h) draw.RoundedBox(0,0,0,w , h,Color(25,25,25)) draw.RoundedBox(0,0,0,w , h / 11,Color(219,50,52)) draw.SimpleText("Demander un rendez-vous au Maire ?","FontDerma", ScrW() / 7) draw.SimpleText("Quel est l'objet de votre rendez-vous ?","FontDerma2", ScrW() / 6.5 , ScrH() / 8) end local send = vgui.Create("DButton" , frame) send:SetPos(ScrW() / 12 , ScrH() / 4.6) send:SetSize(ScrW() / 3 , ScrH() / 12) send:SetText("Envoyer !") send:SetFont("FontDerma") send.Paint = function(s , w , h) if send:IsHovered() then send:SetTextColor(Color(25,25,25)) draw.RoundedBox(0,0,0,w , h,Color(255,50,50)) else send:SetTextColor(Color(240,240,240)) draw.RoundedBox(0,0,0,w , h,Color(219,50,52)) end end send.DoClick = function() net.Start("envoyer") net.SendToServer() frame:Close() end
end
usermessage.Hook("Design", Design)
net.Receive("sendback",function(len) for k,v in pairs (player:GetAll()) do if team.GetName(v:Team()) == "Maire" then --ET ici je met toute les fonctions pour le maire genre création de la frame et tout et tout end end
end)
Et côté serveur :
Code:
util.AddNetworkString("envoyer")
util.AddNetworkString("sendback")
net.Receive("envoyer",function(len, ply) net.Start("sendback") net.Send(ply)
end)
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Il ne faut plus utiliser les usermessage.Hook, ensuite c'est le serveur qui envoie un message aux Maires, donc la boucle doit se faire coté serveur.
Coté serveur tu devrais avoir un truc semblable :
Code:
for _,joueur in pairs ( player.GetAll() ) do if joueur:IsMayor() then net.Start("sendPopup") net.WriteString(message) net.WriteEntity(autreJoueur) net.Send(joueur) end
end
Coté client tu auras un net.Receive qui fait apparaître la fenêtre popup avec les infos du joueur qui veut un rdv par exemple.

http://wiki.garrysmod.com/page/Net_Library_Usage
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
While True à dit:
Il ne faut plus utiliser les usermessage.Hook, ensuite c'est le serveur qui envoie un message aux Maires, donc la boucle doit se faire coté serveur.
Coté serveur tu devrais avoir un truc semblable :
Code:
for _,joueur in pairs ( player.GetAll() ) do if joueur:IsMayor() then net.Start("sendPopup") net.WriteString(message) net.WriteEntity(autreJoueur) net.Send(joueur) end
end
Coté client tu auras un net.Receive qui fait apparaître la fenêtre popup avec les infos du joueur qui veut un rdv par exemple.

http://wiki.garrysmod.com/page/Net_Library_Usage
Oula pas sur d'avoir tout capter
 
S

Skyyrize

Geek
Messages
144
Score réaction
35
Points
95
en gros: le joueur écrit un message au maire (client) -> (serveur) lire le message => faire apparaitre le message au maire (client)
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Skyyrize à dit:
en gros: le joueur écrit un message au maire (client) -> (serveur) lire le message => faire apparaitre le message au maire (client)
Ok je comprend mieux merci
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
While True à dit:
Il ne faut plus utiliser les usermessage.Hook, ensuite c'est le serveur qui envoie un message aux Maires, donc la boucle doit se faire coté serveur.
Coté serveur tu devrais avoir un truc semblable :
Code:
for _,joueur in pairs ( player.GetAll() ) do if joueur:IsMayor() then net.Start("sendPopup") net.WriteString(message) net.WriteEntity(autreJoueur) net.Send(joueur) end
end
Coté client tu auras un net.Receive qui fait apparaître la fenêtre popup avec les infos du joueur qui veut un rdv par exemple.

http://wiki.garrysmod.com/page/Net_Library_Usage
Et je met quoi dans, "autreJoueur" ?
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Coté serveur encore une fois, tu devrais avoir une partie de réception comme Skyyrize l'a mentionné.
Cette partie réception peut ressembler à :
Code:
net.Receive( "demande_rdv", function( len, joueur ) local message = net.ReadString() for _,ply in pairs ( player.GetAll() ) do if ply:IsMayor() then net.Start("sendPopup") net.WriteString(message) net.WriteEntity(joueur) net.Send(joueur) end end
end)
Mais il faut aussi penser à proteger le code contre le spam et faire attention à ce que tu vas faire coté client du Maire.
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
While True à dit:
Coté serveur encore une fois, tu devrais avoir une partie de réception comme Skyyrize l'a mentionné.
Cette partie réception peut ressembler à :
Code:
net.Receive( "demande_rdv", function( len, joueur ) local message = net.ReadString() for _,ply in pairs ( player.GetAll() ) do if ply:IsMayor() then net.Start("sendPopup") net.WriteString(message) net.WriteEntity(joueur) net.Send(joueur) end end
end)
Mais il faut aussi penser à proteger le code contre le spam et faire attention à ce que tu vas faire coté client du Maire.
Hmm ok j'avais pas penser a proteger contre le spam, je m'occuperai de ça a la fin, mais sinon,
1. Le WriteEntity, il sert a quoi ?
2. Pour le WriteString, comment je fais pour que sa lise le message envoyé par le client ?

Vraiment merci de prendre le temps de m'aider :D:D:D:D
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
1. Lis la doc sur le net : http://wiki.garrysmod.com/page/Net_Library_Usage
2. Le message est envoyé par le client, lu par le serveur avec ReadString, puis envoyé au client (maire) avec WriteString puis lu par ce dernier avec ReadString.

Je ne pourrai pas t'expliquer plus que çà, si vraiment tu veux apprendre, vaut mieux lire la doc, attendre qu'on te donne le code tout fait n'est pas du tout une bonne idée.
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
While True à dit:
1. Lis la doc sur le net : http://wiki.garrysmod.com/page/Net_Library_Usage
2. Le message est envoyé par le client, lu par le serveur avec ReadString, puis envoyé au client (maire) avec WriteString puis lu par ce dernier avec ReadString.

Je ne pourrai pas t'expliquer plus que çà, si vraiment tu veux apprendre, vaut mieux lire la doc, attendre qu'on te donne le code tout fait n'est pas du tout une bonne idée.
OK merci bien
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Lua error avec le "IsMayor" voici l'erreur :


[ERROR] addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:6: attempt to call method 'IsMayor' (a nil value)
1. func - addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:6
2. unknown - lua/includes/extensions/net.lua:32
 
Zozo147

Zozo147

Helpeur Divin
Messages
1 814
Score réaction
848
Points
430
EglyKozz à dit:
Lua error avec le "IsMayor" voici l'erreur :


[ERROR] addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:6: attempt to call method 'IsMayor' (a nil value)
1. func - addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:6
2. unknown - lua/includes/extensions/net.lua:32
Essayez de mettre le I de "IsMayor" en minuscule comme ceci : "isMayor()" :)
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Zozo147 à dit:
Essayez de mettre le I de "IsMayor" en minuscule comme ceci : "isMayor()" :)
Bonjour, j'essaye sa tout de suite :D
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Zozo147 à dit:
Essayez de mettre le I de "IsMayor" en minuscule comme ceci : "isMayor()" :)
Sa me fait une erreur pour un net.Start non reçu alors que j'ai bien util.AddNetworkString("le nom du net.start") dans le cl_init
 
Zozo147

Zozo147

Helpeur Divin
Messages
1 814
Score réaction
848
Points
430
EglyKozz à dit:
Sa me fait une erreur pour un net.Start non reçu alors que j'ai bien util.AddNetworkString("le nom du net.start") dans le cl_init
Montrez un peu le clientside et le serverside pour voir :)
( Et si possible l'erreur aussi )
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
[ERROR] addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:7: Calling net.Start with unpooled message name! [http://goo.gl/qcx0y]
1. Start - [C]:-1
2. func - addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:7
3. unknown - lua/includes/extensions/net.lua:32


clientside
Code:
 local chatbox = vgui.Create("DTextEntry" , frame) chatbox:SetPos(ScrW() / 19 , ScrH() / 6.15) chatbox:SetSize(ScrW() / 2.5 , ScrH() / 45) chatbox:SetText("") chatbox.OnEnter = function( self ) net.Start("send") net.WriteString( self:GetValue() ) net.SendToServer() frame:Close() end local send = vgui.Create("DButton" , frame) send:SetPos(ScrW() / 12 , ScrH() / 4.6) send:SetSize(ScrW() / 3 , ScrH() / 12) send:SetText("Envoyer !") send:SetFont("FontDerma") send.Paint = function(s , w , h) if send:IsHovered() then send:SetTextColor(Color(25,25,25)) draw.RoundedBox(0,0,0,w , h,Color(255,50,50)) else send:SetTextColor(Color(240,240,240)) draw.RoundedBox(0,0,0,w , h,Color(219,50,52)) end end send.DoClick = function() net.Start("send") net.WriteString( chatbox:GetValue() ) net.SendToServer() frame:Close() end
end
usermessage.Hook("Design", Design)
util.AddNetworkString("popup")
net.Receive("popup",function (len, ply) print("I got and i'm the mayor") end)
serverside
Code:
util.AddNetworkString("send")
net.Receive( "send", function( len, ply ) local m = net.ReadString() for _,ply in pairs ( player.GetAll() ) do if ply:isMayor() then net.Start("popup") net.WriteString( chatbox:GetValue() ) net.WriteEntity(ply) net.Send(ply) end end
end)
(Quand je suis maire et que j'envoie le message avec le npc sa fait l'erreur, mais quand je suis citizen sa n'en fait pas, il faut peut-être un deuxième joueur ?)
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
EglyKozz à dit:
[ERROR] addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:7: Calling net.Start with unpooled message name! [http://goo.gl/qcx0y]
1. Start - [C]:-1
2. func - addons/mayor_rdv_systeme/lua/autorun/server/sv_rdv.lua:7
3. unknown - lua/includes/extensions/net.lua:32


clientside
Code:
 local chatbox = vgui.Create("DTextEntry" , frame) chatbox:SetPos(ScrW() / 19 , ScrH() / 6.15) chatbox:SetSize(ScrW() / 2.5 , ScrH() / 45) chatbox:SetText("") chatbox.OnEnter = function( self ) net.Start("send") net.WriteString( self:GetValue() ) net.SendToServer() frame:Close() end local send = vgui.Create("DButton" , frame) send:SetPos(ScrW() / 12 , ScrH() / 4.6) send:SetSize(ScrW() / 3 , ScrH() / 12) send:SetText("Envoyer !") send:SetFont("FontDerma") send.Paint = function(s , w , h) if send:IsHovered() then send:SetTextColor(Color(25,25,25)) draw.RoundedBox(0,0,0,w , h,Color(255,50,50)) else send:SetTextColor(Color(240,240,240)) draw.RoundedBox(0,0,0,w , h,Color(219,50,52)) end end send.DoClick = function() net.Start("send") net.WriteString( chatbox:GetValue() ) net.SendToServer() frame:Close() end
end
usermessage.Hook("Design", Design)
util.AddNetworkString("popup")
net.Receive("popup",function (len, ply) print("I got and i'm the mayor") end)
serverside
Code:
util.AddNetworkString("send")
net.Receive( "send", function( len, ply ) local m = net.ReadString() for _,ply in pairs ( player.GetAll() ) do if ply:isMayor() then net.Start("popup") net.WriteString( chatbox:GetValue() ) net.WriteEntity(ply) net.Send(ply) end end
end)
(Quand je suis maire et que j'envoie le message avec le npc sa fait l'erreur, mais quand je suis citizen sa n'en fait pas, il faut peut-être un deuxième joueur ?)
En gros tu t'es trompé de nom soit dans le net.start soir dans le util.addnetworkingstring
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Z3k4 à dit:
En gros tu t'es trompé de nom soit dans le net.start soir dans le util.addnetworkingstring
Bah j'ai mis le même nom "popup"
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
Nouvelle erreur :
[ERROR] addons/mayor_rdv_systeme/lua/entities/mayor_rdv_systeme/cl_init.lua:126: attempt to call field 'AddNetworkString' (a nil value)
1. unknown - addons/mayor_rdv_systeme/lua/entities/mayor_rdv_systeme/cl_init.lua:126
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
On ne le dira jamais assez, il ne faut JAMAIS hésiter à parcourir le wiki : https://wiki.garrysmod.com/page/util/AddNetworkString
Tu pourras constater que util.AddNetworkString n'existe seulement coté serveur (ce qui est logique mais bon).

PS : La légende de couleurs du wiki :
Bleu => Server
Jaune => Client
Vert => Menu ( menu du principal du jeu, etc)
 
  • Initiateur de la discussion
EglyKozz

EglyKozz

Psychopathe
Messages
1 627
Score réaction
359
Points
310
While True à dit:
On ne le dira jamais assez, il ne faut JAMAIS hésiter à parcourir le wiki : https://wiki.garrysmod.com/page/util/AddNetworkString
Tu pourras constater que util.AddNetworkString n'existe seulement coté serveur (ce qui est logique mais bon).
Oui j'ai résolue cette erreur depuis longtemps
C'est pour sa que j'ai mis le topic en résolue
 
Discord d'entraide
Rejoignz-nous sur Discord