Vérifié Explication et Création fenêtre | Cours GLUA | #2

REKASH

Master 🏆
Level 5
VeryFriend's

Torrents Stats

Messages
515
J'aime
1 863
Trophées
820
Inscrit
15 Mai 2018
Bonjours,

Aujourd'hui je vais vous expliqué, les différents côtés, donc il existe trois côtés: le côté serveur, le côté client et le côté partagé.


Les différents côtés


Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.

Lorsque vous créez une entité ou une arme, vous devez toujours utiliser ces trois fichiers avec leurs noms bien propres à leurs fonctions.

:exclamation: Le côté client, c'est le côté individuel à chaque personne connectée sur le serveur, à son visuel sur l'écran, propre à lui. Exemple un HUD ou une fenêtre qui s'affiche c'est côté client.

:exclamation: Le côté serveur, c'est le côté géré par le serveur qui va gérer toutes vos actions et qui gère l'environnement du serveur (permet de faire apparaître une entité, lorsqu'un joueur meurt etc...).


Retenez bien cette phrase: Ne jamais faire confiance au côté client et ne pas hésiter à revérifier des informations côté serveur.

Quelques exemple qui vous permettrons de mieux comprendre les différents côtés:


- Si votre entité doit afficher un texte au dessus de sa tête, c'est votre écran qui va visionner le texte, donc les informations se placeront côté client.

- Si vous avez besoin d'envoyer des informations comme par exemple un message à tous les membres du serveur, les informations se placeront côté serveur.


Petite astuce qui vous aidera énormément lors de votre codage.
Cliquez sur ce lien et ce lien.
Vous remarquerez que en haut il y un encadré, et que dans cet encadré il à un carré de couleur.

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
Les personnes qui n'ont aucune connaissance, ce trompe et tape leur code du mauvais côté ce qui créera donc des erreurs !


Utilisation des nets


Les nets permettent d'envoyer des informations du côté client au côté serveur, ou encore du serveur au client, le but est donc de faire transiter des informations. C'est possible bien heureusement, et c'est ce que nous allons faire. Nous allons utiliser la bibliothèque net.

Rentrons dans le vif du sujet, supposons qu'une fenêtre doit s'ouvrir lorsque le joueur exécute la touche d'utilisation USE (par défaut E) sur l'entité que nous avons créée précédemment.
Nous allons alors utiliser la fonction ENT:Use, tout simplement.

Commençons par réaliser notre fonction côté serveur (la documentation nous indiquant un carré bleu au niveau de la fonction):

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
Nous allons devoir procéder à un envoi d'informations du serveur pour qu'il détecte un événement (appui d'une touche) vers le client qui devra recevoir une fenêtre.

❓ Pour chaque net que vous souhaitez faire, vous devez préalablement créer un net avec un identifiant unique côté serveur en utilisant util.AddNetworkString (je vous mets le lien, mais n'oublier pas je ne serais pas toujours là pour vous aidez).
En haut de votre fichier init.lua, au-dessus des fonctions, vous pouvez donc rajouter une ligne qui est la suivante:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
❓ Ne mettez pas énormément de caractères: au plus il y a des caractères, au plus l'envoi des nets est long ! mais ne mettez pas non plus deux ou trois caractères car chaque net doit avoir un nom unique !

Revenons à notre fonction Use. Nous allons indiquer de quel net nous parlons à l'aide de net.Start et nous allons envoyer le net au joueur qui a appuyé sur le bouton, soit ply, à l'aide de net.Send.

Cela nous donnera donc ce code:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.

Nous utilisons un identifiant unique qui est "veryleaknpc", c'est bien pour une raison: il faut gérer la réception du message net.
Nous passons alors au côté client, du côté de la réception.

Côté client, en dessous de notre fonction Draw, nous allons réaliser un net.Receive.

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
Cette fonction aura pour simple utilité d'écrire le message NET RECU, cela prouvera donc que les deux fichiers communiques.

Enregistrez vos fichiers, démarrez votre serveur, et ouvrez la console (touche F10 par défaut) et vous verrez le message "NET RECU" apparaître.


Maintenant nous pouvons passer au chose sérieuse la création d'une fenêtre !


Créer et dessiner une fenêtre
Nous allons partir de ce code:

Côté serveur:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
Côté client:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
❓ Remarquez que je ne précise pas les fonctions de base d'un point de vue général (à savoir les AddCSLuaFile, les include) et que je ne précise pas les fonctions de base dans chaque côté (SpawnFunction côté serveur, Draw côté client, Initialize côté partagé).
Si vous avez bien suivi, normalement vous comprenez.


Nous allons donc créer notre fenêtre. Une fenêtre n'est qu'un ensemble de panels: je vous laisse rechercher "panel" sur la documentation et vous tomberez sur des ... centaines d'événements, de classes en tous genres qui traitent de panels.
En effet, vous aurez le choix!


Voici cependant quelques éléments à retenir:

  • Contenu masqué
    Vous devez aimer ce post pour à accéder à ce contenu.

Nous allons donc créer notre panel.
Pour cela, comme dit au dessus, nous allons renseigner deux simples éléments.

Voici le code que nous pourrons faire côté client:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
En pressant la touche d'utilisation, une fenêtre apparaît.

Remarquez que nous utilisons les fonctions ScrW et ScrH (respectivement Screen Width et Screen Height) sont alors très intéressantes car elles sont propre à chaque client (la résolution change en fonction de la personne) de position 100x100 et de taille 300x200


TRÈS IMPORTANT: Nous allons rester dans une fenêtre classique. Il faut savoir que bon nombre de joueurs (se disant "codeurs") privilégient le design et l'esthétique de la fenêtre au reste du code. Gardez en tête que si certains développeurs de serveur insistent sur l'importance d'un design, la magie du code informatique réside principalement dans du code côté serveur. De plus, les goûts et les couleurs ne se discutent pas. Notre but est de faire un addons fonctionnel, et non un addons beau.


Entre MakePopup et Setsize insérer le code suivant:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
N'essayez pas de faire E désormais: s'il n'y a pas de bouton de fermeture, votre fenêtre sera comme "bloqué" !
Nous allons alors créer une icône de fermeture, avec un DImageButton. L'image sera ❌, qui fait parti du jeu original Garry's Mod, voici la lien ou image supprimée.

Nous allons donc créer notre DImageButton mais tout d'abord, parlons de la notion de parentage.
En effet, si notre DFrame est la base de notre fenêtre, le panel DImageButton devra être "incrusté", ou plutôt "dans" notre DFrame.
Nous allons donc parenter notre DImageButton à notre DFrame.

Lorsque vous parentez un premier panel 1 à un second panel 2, cela signifie que vous aurez besoin de définir la position, la taille et les paramètres du panel 1 par rapport au panel 2.

Pour parenter un panel à un autre, il faut simplement utiliser le second argument de vgui.Create, fonction utilisée à la création d'un panel (comme nous l'avons fait pour la création de la DFrame).

Voici le code à suivre:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.

Continuons. Nous avons notre croix qui fait du bon boulot en fermant notre page mais la différence de couleur du panel est assez peu professionnel... C'est le moment de revenir dans notre code de la DFrame et d'appeler une fonction Paint.

Étant donné que notre croix est à la position (170, 10) et est de taille (20, 20), on sait qu'il va nous falloir une couleur différente entre le haut du panel et le reste.

Voici le code à suivre:

Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.

La suite bientôt !

Cordialement
REKASH
 
Dernière édition:

MrPikou

Master 🏆
Level 1

Torrents Stats

Messages
42
J'aime
9
Trophées
291
Inscrit
30 Avril 2017
Salut à toi rekash, je suis ton tuto,qui es d'ailleurs tres bien expliqué ( je nen suis qu'au debut) et je me pose une question puisque be vois que tu fais un net.Send qui a pour identifiant veryleaknpc mais juste apres dans ton net.Receive, l'identifiant est veryleaknpcFrame. Alors est-ce une erreur dans le tutoriel ou le Frame est nécessaire dans le code ?
 

REKASH

Master 🏆
Level 5
VeryFriend's

Torrents Stats

Messages
515
J'aime
1 863
Trophées
820
Inscrit
15 Mai 2018
Frame est necessaire oui, dans le cas ci desous.

net.Receive("VeryleaknpcFrame")
net.Start("VeryleaknpcFrame")

Tout en sachant que util.AddNetworkString est indispensable, cette après midi on attaque le vif du sujet concernant l'addons.

util.AddNetworkString("VeryleaknpcFrame")

Il y aura aussi une "Annexe" qui vous expliquera tous les termes que nous avons utilisé tous le long du tutoriel.


Cordialement

Edit: Oui enfaite c'est un erreur de ma part, je corrige au plus vite sinon, cela ne marchera pas même si cela reste un exemple, par contre la suite est juste.
Toutes mes excuses !
 
Dernière édition:

MrPikou

Master 🏆
Level 1

Torrents Stats

Messages
42
J'aime
9
Trophées
291
Inscrit
30 Avril 2017
Pas de soucis , merci à toi !
 

SxdLord

Last One Beatmacker
Level 1

Torrents Stats

Messages
52
J'aime
10
Trophées
370
Inscrit
12 Novembre 2017
Bonjours,

Aujourd'hui je vais vous expliqué, les différents côtés, donc il existe trois côtés: le côté serveur, le côté client et le côté partagé.


Les différents côtés


[Hidden Content]


Lorsque vous créez une entité ou une arme, vous devez toujours utiliser ces trois fichiers avec leurs noms bien propres à leurs fonctions.

:exclamation: Le côté client, c'est le côté individuel à chaque personne connectée sur le serveur, à son visuel sur l'écran, propre à lui. Exemple un HUD ou une fenêtre qui s'affiche c'est côté client.

:exclamation: Le côté serveur, c'est le côté géré par le serveur qui va gérer toutes vos actions et qui gère l'environnement du serveur (permet de faire apparaître une entité, lorsqu'un joueur meurt etc...).


Retenez bien cette phrase: Ne jamais faire confiance au côté client et ne pas hésiter à revérifier des informations côté serveur.

Quelques exemple qui vous permettrons de mieux comprendre les différents côtés:


- Si votre entité doit afficher un texte au dessus de sa tête, c'est votre écran qui va visionner le texte, donc les informations se placeront côté client.

- Si vous avez besoin d'envoyer des informations comme par exemple un message à tous les membres du serveur, les informations se placeront côté serveur.


Petite astuce qui vous aidera énormément lors de votre codage.
Cliquez sur ce lien et ce lien.
Vous remarquerez que en haut il y un encadré, et que dans cet encadré il à un carré de couleur.

[Hidden Content]

Les personnes qui n'ont aucune connaissance, ce trompe et tape leur code du mauvais côté ce qui créera donc des erreurs !


Utilisation des nets


Les nets permettent d'envoyer des informations du côté client au côté serveur, ou encore du serveur au client, le but est donc de faire transiter des informations. C'est possible bien heureusement, et c'est ce que nous allons faire. Nous allons utiliser la bibliothèque net.

Rentrons dans le vif du sujet, supposons qu'une fenêtre doit s'ouvrir lorsque le joueur exécute la touche d'utilisation USE (par défaut E) sur l'entité que nous avons créée précédemment.
Nous allons alors utiliser la fonction ENT:Use, tout simplement.

Commençons par réaliser notre fonction côté serveur (la documentation nous indiquant un carré bleu au niveau de la fonction):

[Hidden Content]

Nous allons devoir procéder à un envoi d'informations du serveur pour qu'il détecte un événement (appui d'une touche) vers le client qui devra recevoir une fenêtre.

❓ Pour chaque net que vous souhaitez faire, vous devez préalablement créer un net avec un identifiant unique côté serveur en utilisant util.AddNetworkString (je vous mets le lien, mais n'oublier pas je ne serais pas toujours là pour vous aidez).
En haut de votre fichier init.lua, au-dessus des fonctions, vous pouvez donc rajouter une ligne qui est la suivante:

[Hidden Content]

❓ Ne mettez pas énormément de caractères: au plus il y a des caractères, au plus l'envoi des nets est long ! mais ne mettez pas non plus deux ou trois caractères car chaque net doit avoir un nom unique !

Revenons à notre fonction Use. Nous allons indiquer de quel net nous parlons à l'aide de net.Start et nous allons envoyer le net au joueur qui a appuyé sur le bouton, soit ply, à l'aide de net.Send.

Cela nous donnera donc ce code:

[Hidden Content]


Nous utilisons un identifiant unique qui est "veryleaknpc", c'est bien pour une raison: il faut gérer la réception du message net.
Nous passons alors au côté client, du côté de la réception.

Côté client, en dessous de notre fonction Draw, nous allons réaliser un net.Receive.

[Hidden Content]

Cette fonction aura pour simple utilité d'écrire le message NET RECU, cela prouvera donc que les deux fichiers communiques.

Enregistrez vos fichiers, démarrez votre serveur, et ouvrez la console (touche F10 par défaut) et vous verrez le message "NET RECU" apparaître.


Maintenant nous pouvons passer au chose sérieuse la création d'une fenêtre !


Créer et dessiner une fenêtre
Nous allons partir de ce code:

Côté serveur:

[Hidden Content]

Côté client:

[Hidden Content]

❓ Remarquez que je ne précise pas les fonctions de base d'un point de vue général (à savoir les AddCSLuaFile, les include) et que je ne précise pas les fonctions de base dans chaque côté (SpawnFunction côté serveur, Draw côté client, Initialize côté partagé).
Si vous avez bien suivi, normalement vous comprenez.


Nous allons donc créer notre fenêtre. Une fenêtre n'est qu'un ensemble de panels: je vous laisse rechercher "panel" sur la documentation et vous tomberez sur des ... centaines d'événements, de classes en tous genres qui traitent de panels.
En effet, vous aurez le choix!


Voici cependant quelques éléments à retenir:

  • [Hidden Content]

Nous allons donc créer notre panel.
Pour cela, comme dit au dessus, nous allons renseigner deux simples éléments.

Voici le code que nous pourrons faire côté client:

[Hidden Content]

En pressant la touche d'utilisation, une fenêtre apparaît.

Remarquez que nous utilisons les fonctions ScrW et ScrH (respectivement Screen Width et Screen Height) sont alors très intéressantes car elles sont propre à chaque client (la résolution change en fonction de la personne) de position 100x100 et de taille 300x200


TRÈS IMPORTANT: Nous allons rester dans une fenêtre classique. Il faut savoir que bon nombre de joueurs (se disant "codeurs") privilégient le design et l'esthétique de la fenêtre au reste du code. Gardez en tête que si certains développeurs de serveur insistent sur l'importance d'un design, la magie du code informatique réside principalement dans du code côté serveur. De plus, les goûts et les couleurs ne se discutent pas. Notre but est de faire un addons fonctionnel, et non un addons beau.


Entre MakePopup et Setsize insérer le code suivant:

[Hidden Content]

N'essayez pas de faire E désormais: s'il n'y a pas de bouton de fermeture, votre fenêtre sera comme "bloqué" !
Nous allons alors créer une icône de fermeture, avec un DImageButton. L'image sera ❌, qui fait parti du jeu original Garry's Mod, voici la lien ou image supprimée.

Nous allons donc créer notre DImageButton mais tout d'abord, parlons de la notion de parentage.
En effet, si notre DFrame est la base de notre fenêtre, le panel DImageButton devra être "incrusté", ou plutôt "dans" notre DFrame.
Nous allons donc parenter notre DImageButton à notre DFrame.

Lorsque vous parentez un premier panel 1 à un second panel 2, cela signifie que vous aurez besoin de définir la position, la taille et les paramètres du panel 1 par rapport au panel 2.

Pour parenter un panel à un autre, il faut simplement utiliser le second argument de vgui.Create, fonction utilisée à la création d'un panel (comme nous l'avons fait pour la création de la DFrame).

Voici le code à suivre:

[Hidden Content]


Continuons. Nous avons notre croix qui fait du bon boulot en fermant notre page mais la différence de couleur du panel est assez peu professionnel... C'est le moment de revenir dans notre code de la DFrame et d'appeler une fonction Paint.

Étant donné que notre croix est à la position (170, 10) et est de taille (20, 20), on sait qu'il va nous falloir une couleur différente entre le haut du panel et le reste.

Voici le code à suivre:

[Hidden Content]


La suite bientôt !

Cordialement
REKASH
Très bon tutoriels, merci
 

FrankyLaTortue

l'Actif 🥉
Level 1

Torrents Stats

Messages
18
J'aime
1
Trophées
51
Inscrit
30 Octobre 2018
Tutoriel claire et propre, merci 😁 !



gif.gif
 

FizeVL

l'Affirmé 🥈
Level 2

Torrents Stats

Messages
45
J'aime
192
Trophées
88
Inscrit
13 Janvier 2019
Bonjours,

Aujourd'hui je vais vous expliqué, les différents côtés, donc il existe trois côtés: le côté serveur, le côté client et le côté partagé.


Les différents côtés


[Hidden Content]


Lorsque vous créez une entité ou une arme, vous devez toujours utiliser ces trois fichiers avec leurs noms bien propres à leurs fonctions.

:exclamation: Le côté client, c'est le côté individuel à chaque personne connectée sur le serveur, à son visuel sur l'écran, propre à lui. Exemple un HUD ou une fenêtre qui s'affiche c'est côté client.

:exclamation: Le côté serveur, c'est le côté géré par le serveur qui va gérer toutes vos actions et qui gère l'environnement du serveur (permet de faire apparaître une entité, lorsqu'un joueur meurt etc...).


Retenez bien cette phrase: Ne jamais faire confiance au côté client et ne pas hésiter à revérifier des informations côté serveur.

Quelques exemple qui vous permettrons de mieux comprendre les différents côtés:


- Si votre entité doit afficher un texte au dessus de sa tête, c'est votre écran qui va visionner le texte, donc les informations se placeront côté client.

- Si vous avez besoin d'envoyer des informations comme par exemple un message à tous les membres du serveur, les informations se placeront côté serveur.


Petite astuce qui vous aidera énormément lors de votre codage.
Cliquez sur ce lien et ce lien.
Vous remarquerez que en haut il y un encadré, et que dans cet encadré il à un carré de couleur.

[Hidden Content]

Les personnes qui n'ont aucune connaissance, ce trompe et tape leur code du mauvais côté ce qui créera donc des erreurs !


Utilisation des nets


Les nets permettent d'envoyer des informations du côté client au côté serveur, ou encore du serveur au client, le but est donc de faire transiter des informations. C'est possible bien heureusement, et c'est ce que nous allons faire. Nous allons utiliser la bibliothèque net.

Rentrons dans le vif du sujet, supposons qu'une fenêtre doit s'ouvrir lorsque le joueur exécute la touche d'utilisation USE (par défaut E) sur l'entité que nous avons créée précédemment.
Nous allons alors utiliser la fonction ENT:Use, tout simplement.

Commençons par réaliser notre fonction côté serveur (la documentation nous indiquant un carré bleu au niveau de la fonction):

[Hidden Content]

Nous allons devoir procéder à un envoi d'informations du serveur pour qu'il détecte un événement (appui d'une touche) vers le client qui devra recevoir une fenêtre.

❓ Pour chaque net que vous souhaitez faire, vous devez préalablement créer un net avec un identifiant unique côté serveur en utilisant util.AddNetworkString (je vous mets le lien, mais n'oublier pas je ne serais pas toujours là pour vous aidez).
En haut de votre fichier init.lua, au-dessus des fonctions, vous pouvez donc rajouter une ligne qui est la suivante:

[Hidden Content]

❓ Ne mettez pas énormément de caractères: au plus il y a des caractères, au plus l'envoi des nets est long ! mais ne mettez pas non plus deux ou trois caractères car chaque net doit avoir un nom unique !

Revenons à notre fonction Use. Nous allons indiquer de quel net nous parlons à l'aide de net.Start et nous allons envoyer le net au joueur qui a appuyé sur le bouton, soit ply, à l'aide de net.Send.

Cela nous donnera donc ce code:

[Hidden Content]


Nous utilisons un identifiant unique qui est "veryleaknpc", c'est bien pour une raison: il faut gérer la réception du message net.
Nous passons alors au côté client, du côté de la réception.

Côté client, en dessous de notre fonction Draw, nous allons réaliser un net.Receive.

[Hidden Content]

Cette fonction aura pour simple utilité d'écrire le message NET RECU, cela prouvera donc que les deux fichiers communiques.

Enregistrez vos fichiers, démarrez votre serveur, et ouvrez la console (touche F10 par défaut) et vous verrez le message "NET RECU" apparaître.


Maintenant nous pouvons passer au chose sérieuse la création d'une fenêtre !


Créer et dessiner une fenêtre
Nous allons partir de ce code:

Côté serveur:

[Hidden Content]

Côté client:

[Hidden Content]

❓ Remarquez que je ne précise pas les fonctions de base d'un point de vue général (à savoir les AddCSLuaFile, les include) et que je ne précise pas les fonctions de base dans chaque côté (SpawnFunction côté serveur, Draw côté client, Initialize côté partagé).
Si vous avez bien suivi, normalement vous comprenez.


Nous allons donc créer notre fenêtre. Une fenêtre n'est qu'un ensemble de panels: je vous laisse rechercher "panel" sur la documentation et vous tomberez sur des ... centaines d'événements, de classes en tous genres qui traitent de panels.
En effet, vous aurez le choix!


Voici cependant quelques éléments à retenir:

  • [Hidden Content]

Nous allons donc créer notre panel.
Pour cela, comme dit au dessus, nous allons renseigner deux simples éléments.

Voici le code que nous pourrons faire côté client:

[Hidden Content]

En pressant la touche d'utilisation, une fenêtre apparaît.

Remarquez que nous utilisons les fonctions ScrW et ScrH (respectivement Screen Width et Screen Height) sont alors très intéressantes car elles sont propre à chaque client (la résolution change en fonction de la personne) de position 100x100 et de taille 300x200


TRÈS IMPORTANT: Nous allons rester dans une fenêtre classique. Il faut savoir que bon nombre de joueurs (se disant "codeurs") privilégient le design et l'esthétique de la fenêtre au reste du code. Gardez en tête que si certains développeurs de serveur insistent sur l'importance d'un design, la magie du code informatique réside principalement dans du code côté serveur. De plus, les goûts et les couleurs ne se discutent pas. Notre but est de faire un addons fonctionnel, et non un addons beau.


Entre MakePopup et Setsize insérer le code suivant:

[Hidden Content]

N'essayez pas de faire E désormais: s'il n'y a pas de bouton de fermeture, votre fenêtre sera comme "bloqué" !
Nous allons alors créer une icône de fermeture, avec un DImageButton. L'image sera ❌, qui fait parti du jeu original Garry's Mod, voici la lien ou image supprimée.

Nous allons donc créer notre DImageButton mais tout d'abord, parlons de la notion de parentage.
En effet, si notre DFrame est la base de notre fenêtre, le panel DImageButton devra être "incrusté", ou plutôt "dans" notre DFrame.
Nous allons donc parenter notre DImageButton à notre DFrame.

Lorsque vous parentez un premier panel 1 à un second panel 2, cela signifie que vous aurez besoin de définir la position, la taille et les paramètres du panel 1 par rapport au panel 2.

Pour parenter un panel à un autre, il faut simplement utiliser le second argument de vgui.Create, fonction utilisée à la création d'un panel (comme nous l'avons fait pour la création de la DFrame).

Voici le code à suivre:

[Hidden Content]


Continuons. Nous avons notre croix qui fait du bon boulot en fermant notre page mais la différence de couleur du panel est assez peu professionnel... C'est le moment de revenir dans notre code de la DFrame et d'appeler une fonction Paint.

Étant donné que notre croix est à la position (170, 10) et est de taille (20, 20), on sait qu'il va nous falloir une couleur différente entre le haut du panel et le reste.

Voici le code à suivre:

[Hidden Content]


La suite bientôt !

Cordialement
REKASH
Merci
 

CocaNoisette

l'Accru 🥇
Level 1

Torrents Stats

Messages
20
J'aime
0
Trophées
123
Inscrit
26 Janvier 2019
Très beau tuto ^^
 

ZeeKTeeK

Master 🏆
Level 1

Torrents Stats

Messages
3
J'aime
0
Trophées
164
Inscrit
12 Avril 2019
Merci beaucoup ;)
 

jomufa

Master 🏆
Level 1

Torrents Stats

Messages
53
J'aime
0
Trophées
363
Inscrit
13 Juin 2018
whouaaaa c dur
 

Azirx

Nouveau 🌱
Level 1

Torrents Stats

Messages
7
J'aime
0
Trophées
3
Inscrit
4 Mars 2019

By Dezz

l'Affirmé 🥈
Level 2

Torrents Stats

Messages
48
J'aime
1
Trophées
111
Inscrit
19 Avril 2018

firoux59

Master 🏆
Level 1

Torrents Stats

Messages
21
J'aime
326
Trophées
183
Inscrit
1 Janvier 2019
super tuto suivis de A à Z
 
Haut Bas