Entity:Use ouverture de plein de menu... au lieux d'un seul

  • Initiateur de la discussion zoukilama
  • Date de début
  • Initiateur de la discussion
Z

zoukilama

Geek
Messages
15
Score réaction
8
Points
75
Bonjour à tous
développant un addon quand on fait "E" (Use) sur l'untité celle-ci m'ouvre plusieurs menu à la place d'un seul
aurez vous une idée s'il vous plait..

voila le code:
coter serveur:
Code:
util.AddNetworkString("OPENMAGUIZ")
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then print("Vous utiliser l\'ordinateur") net.Start("OPENMAGUIZ") net.Send(Caller) end
end
coter client:
Code:
net.Receive("OPENMAGUIZ", function(len, ply) openZgui()
end)
dans ma fonction openZgui() :
Code:
BGColor = Color(0,0,0,200) frame = vgui.Create("DFrame") frame:SetSize(500,300) frame:SetPos(ScrW()/2-250, ScrH()/2-150) -- Start position --frame:MoveTo(ScrW()/2-250, ScrH()/2-150, 1, 1, 4) -- End position frame:SetVisible(true) frame:ShowCloseButton(true) frame:SetDraggable(true) frame:SetTitle("ZoukiFrame") frame.Paint = function(s, w, h) draw.RoundedBox(0,0,0,w,h,BGColor) end frame:MakePopup()
si quelqu'un à une solution svp
 
Dernière édition:
T

ToTheHospital

Geek suprême
Messages
224
Score réaction
88
Points
120
Sur les menus que tu veux voir fermés au lancement du script utilise :

Code:
frame:SetVisible(false) -- Rend le pannel invisible
Ensuite sur le bouton que tu utilises pour ouvrir ce menu utilise ceci:

Code:
frame.DoClick = function () frame:SetVisible(true) -- Le pannel deviens visible quand le bouton est cliqué end
Bon, on a déjà vu ça sur TS aujourd'hui Zouki mais je répond quand même au cas ou d'autres chercheraient la solution ^^
 
  • J'aime
Réactions: zoukilama
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
zoukilama à dit:
net.Receive("OPENMAGUIZ", function(len, ply) openZgui() end)

Une function dans une fonction.... Intéressant...
Non, non... C'est pas ça qu'on fait. "net.Receive("OPENMAGUIZ",openZgui)" fonctionne très bien.

Bon, sinon, côté code tu utilise un print serverside pour avertir l'utilisateur... Marche pas très bien n'est-ce pas ? Utilise un "v:printMessage()" ou un ChatPrint...
Cependant j'ai toujours pas compris ce que tu voulais faire dans ton code.... En gros, tu use, et ça pop une fenêtre et depuis celle-ci tu peux en faire pop d'autres ? Ou c'est quand tu use que plusieurs fenêtre s'ouvrent?


Si c'est plusieurs fenêtre dans un derma qu'il te faut, voilà le code qui te faudrait faire:
Code:
local panel = {} -- On utilise une table pour créer plus éfficacement ta fenêtre,
-- tous tes childs de ta base sera ici, et donc, plus facile à appeller.
panel.base = vgui.Create("DFrame")
panel.base:SetPos(0,0)
panel.base:SetSize(ScrW(),ScrH())
panel.base.Paint = function(this,w,h) -- Faire en sorte que la base de ta fenêtre soit invisible surface.SetDrawColor(0,0,0,0) surface.DrawRect(0,0,w,h)
end
-- Ajoute-y tous ce que tu veux.
panel.base:MakePopup()
panel.fenetreune = panel.base:Add("DButton")
panel.fenetreune:SetText("LOL C'EST UN BOUTON!")
panel.fenetreune.DoClick = function(this) print("MAMAN J'AI CLIQUÉ!")
end
panel.fenetreune:SetSize(panel.base:GetWide(),panel.base:GetTall()*0.1) -- ici on set la taille à 10% de la hauteur de screen
panel.fenetreune:Dock(TOP) -- utiliser le dock pour ne pas se prendre la tête avec les setpos, voir wiki
panel.fenetreune:DockMargin(0,0,0,5) -- Utiliser le dockmargin pour laisser un espace, voir wiki
Et tu ajoute autant de fenêtre que tu souhaites, en utilisant DOCK ou pas.
 
Dernière édition:
  • Initiateur de la discussion
Z

zoukilama

Geek
Messages
15
Score réaction
8
Points
75
ToTheHospital à dit:
Sur les menus que tu veux voir fermés au lancement du script utilise :

Code:
frame:SetVisible(false) -- Rend le pannel invisible
Ensuite sur le bouton que tu utilises pour ouvrir ce menu utilise ceci:

Code:
frame.DoClick = function () frame:SetVisible(true) -- Le pannel deviens visible quand le bouton est cliqué end
Bon, on a déjà vu ça sur TS aujourd'hui Zouki mais je répond quand même au cas ou d'autres chercheraient la solution ^^
Yooo, je me disais bien ^^ je vient de re tester sa fonctionne niquel :p

ALTA à dit:

Une function dans une fonction.... Intéressant...
Non, non... C'est pas ça qu'on fait. "net.Receive("OPENMAGUIZ",openZgui)" fonctionne très bien.

Bon, sinon, côté code tu utilise un print serverside pour avertir l'utilisateur... Marche pas très bien n'est-ce pas ? Utilise un "v:printMessage()" ou un ChatPrint...
Cependant j'ai toujours pas compris ce que tu voulais faire dans ton code.... En gros, tu use, et ça pop une fenêtre et depuis celle-ci tu peux en faire pop d'autres ? Ou c'est quand tu use que plusieurs fenêtre s'ouvrent?


Si c'est plusieurs fenêtre dans un derma qu'il te faut, voilà le code qui te faudrait faire:
Code:
local panel = {} -- On utilise une table pour créer plus éfficacement ta fenêtre,
-- tous tes childs de ta base sera ici, et donc, plus facile à appeller.
panel.base = vgui.Create("DFrame")
panel.base:SetPos(0,0)
panel.base:SetSize(ScrW(),ScrH())
panel.base.Paint = function(this,w,h) -- Faire en sorte que la base de ta fenêtre soit invisible surface.SetDrawColor(0,0,0,0) surface.DrawRect(0,0,w,h)
end
-- Ajoute-y tous ce que tu veux.
panel.base:MakePopup()
panel.fenetreune = panel.base:Add("DButton")
panel.fenetreune:SetText("LOL C'EST UN BOUTON!")
panel.fenetreune.DoClick = function(this) print("MAMAN J'AI CLIQUÉ!")
end
panel.fenetreune:SetSize(panel.base:GetWide(),panel.base:GetTall()*0.1) -- ici on set la taille à 10% de la hauteur de screen
panel.fenetreune:Dock(TOP) -- utiliser le dock pour ne pas se prendre la tête avec les setpos, voir wiki
panel.fenetreune:DockMargin(0,0,0,5) -- Utiliser le dockmargin pour laisser un espace, voir wiki
Et tu ajoute autant de fenêtre que tu souhaites, en utilisant DOCK ou pas.
j'ai suivie ton conseil j'ai retirer la fonction dans la fonction :p
 
Dernière édition:
Discord d'entraide
Rejoignz-nous sur Discord