Torrents Stats
- Partagées
- 130 Go
- Téléchargées
- 15.4 Go
- Ratio
- 8
- 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
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...).
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.
Les personnes qui n'ont aucune connaissance, ce trompe et tape leur code du mauvais côté ce qui créera donc des erreurs !
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):
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:
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:
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.
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 !
Côté serveur:
Côté client:
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:
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:
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:
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:
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:
La suite bientôt !
Cordialement
REKASH
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.
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.
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.
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.
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.
Contenu masqué
Vous devez aimer ce post pour à accéder à ce contenu.
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.
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.
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: