[release] gnamechanger - changez votre nom rp à l'aide d'un npc

  • Initiateur de la discussion Membre supprimé 98332
  • Date de début
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme

Salutations,

Pour m'exercer au langage Lua et à ses subtilités, j'ai décidé d'améliorer le petit NPC que j'avais fait il y a quelque mois. Le plus gros du travail a été réalisé côté serveur, (qui est je pense plus "amusant" que le côté client), avec notamment l'ajout de la possibilité de sauvegarder la position de ses NPCs.

Je poste ici pour avoir l'avis des plus expérimentés, (@While True, @Makss, @Diablos26, @thepsyca, @slownls & co.) sur mon code et les éventuels (nombreux) problèmes / failles / absurdités que présente celui-ci :)

Voici donc le repositery Github, où se trouvent les images et la description complète des fonctionnalités de ce script :
https://github.com/Gabyfle/gName-Changer

J'ai déjà planifié un fix complet du code client, qui n'est finalement pas du tout responsive (lel) et l'ajout d'un système de langues.

Merci par avance,

Bien à vous,
Gabyfle
gNameChanger
gNameChanger est un addon qui permet à vos joueur de changer leur nom roleplay de façon... ... roleplay. Il est fournit avec de petites fonctionnalités utiles qui pimenterons vos expérience : un système de blacklist, un panneau d'administration, et plein d'autres !

Il est disponible complètement gratuitement sous licence Apache 2.0 : https://github.com/Gabyfle/gName-Changer/blob/master/LICENSE


Fonctionnalités
  • Changement de nom au premier spawn [ BETA ]
    • Configurable (activer / désactiver)
    • Un super overlay blurré, avec nom et description de la communauté.
  • Easy setup
    • Sauvegardez la position des NPC! (commande : gname_save_all)
    • Un fichier de configuration complet : changer les couleurs, les modèles et plus encore !
  • Un superbe UI
    • Dermas propres, élégants et beaux.
    • Animations fluides
    • TOUS les dermas sont responsives !
  • Facilite votre administration
    • Protection anti-spam (configurable)
    • Protection contre les malins qui essaient d'utiliser le derma sans passer par le NPC
    • Un système incroyable de liste noire pour bloquer les noms indésirables!
    • Un panneau d'administration magnifique pour modifier la liste noire!
    • Forcez les joueurs à avoir une calligraphie correcte!
  • Fonctionne avec la dernière version de DarkRP !
Cet addon est toujours en développement, d'autres fonctionnalités prévues, et le support de l'addon sera actif tant que je n'aurai pas arrêté de jouer à GMod. Si jamais vous voulez proposer une nouvelle fonctionnalité, faites-le ici : ICI

Informations

Voici les informations relatives à gNameChanger.
  • Facepunch : https://gmod.facepunch.com/f/gmodad...meChanger-Change-your-PR-name-using-an-NPC/1/
  • GmodStore : https://www.gmodstore.com/community/threads/6335-release-gnamechanger-change-your-name-by-a-rp-way
  • Github : https://github.com/Gabyfle/gName-Changer

Les traductions sont fournies par la communauté, et nous vous invitons à nous aider à les améliorer en faisant une Issue ou un Pull Request sur la repositery Github.

L'addon va être très bientôt uploadé sur le Workshop, mais j'attends de trouver un synchronisateur Github / Workshop ou de finir le miens (lol).

Téléchargement :

Pour télécharger la dernière mise à jour de gNameChanger, allez ici : https://github.com/Gabyfle/gName-Changer/archive/master.zip
 
Dernière modification par un modérateur:
  • J'aime
  • Love
Réactions: AscikPacha, Darkos_0 et Enixy
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
http://wiki.garrysmod.com/page/Tables:_Bad_Habits

http://wiki.garrysmod.com/page/Global/FindMetaTable : https://github.com/Gabyfle/gName-Changer/blob/master/npc_rpname/lua/entities/npc_rpname/init.lua#L41
 
Dernière édition:
  • J'aime
Réactions: RedTroz, Membre supprimé 98332 et Makss
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
https://github.com/Gabyfle/gName-Changer/blob/master/npc_rpname/lua/rpname/server/sv_rpname.lua / Ligne 48 pas cool
+ le joueur peut changer sont nom depuis n'importe ou dans la map
Table : http://wiki.garrysmod.com/page/Tables:_Bad_Habits
 
  • J'aime
Réactions: Membre supprimé 98332 et Makss
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
tout est en if SERVER, autant mettre serverside seulement
Utilise file.IsDir plutôt, c'est quasiment impossible mais il peut y avoir un fichier du même nom que le dossier
Autant mettre le code au début de Load()
if inutile, c'est impossible que l'entité soit invalide + parenthèse inutile + inconsistance, des fois tu utilises ! des fois not
le SetModel est déjà dans la fonction Initialize de l'entité donc inutile d'en mettre un là
On te l'a déjà signalé avant donc je vais rien dire
Vu que les clés de la table sont numériques et 'normal', il vaut mieux utiliser #table pour avoir la taille de la table
Au lieu d'utiliser une fonction pareil qui est lente, pourquoi pas tout simplement mettre la config avec un Color au lieu d'une valeur hexa ?
Utiliste plutôt DistToSqr, c'est juste le résultat de Distance au carré mais c'est bien plus opti
ça aurait été plus logique de le mettre dans lua/rpname/client, l'entité n'a pas besoin du derma et le derma n'a pas besoin de l'entité
le ^ 1 est inutile, x^1 = x
What ?
N'utilise pas RoundedBox si c'est pour dessiner un rectangle, utilise plutôt surface.DrawRect
Fais les calculs avant, c'est pas bon pour la santé de faire des maths à chaque frame
Parenthèses inutiles, pis tu peux utiliser un || ou un or au lieu de faire 2 if
Pourquoi pas juste changer la largeur de la frame 1?
J'espère que le serveur a le FastDL
Inutile de faire une variable si elle est utilisé qu'une seule fois
Uh ? Pourquoi re-ouvrir la frame ?
Génie
L'entité n'a pas d'animations, inutile
 
  • J'aime
Réactions: Ben. ®, Membre supprimé 98332, séméron23 et 1 autre personne
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Makss à dit:
Son réflexe avec les parenthèses vient d'autres langages je pense :)

Sinon j'ai ajouté mon grain de sel aussi :D https://github.com/Gabyfle/gName-Changer/pull/3
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Makss à dit:
tout est en if SERVER, autant mettre serverside seulement
Tout, sauf concommand.Add() qui pour moi ne fonctionne que lorsque je l'ai mis dans le shared (le code était initialement côté serveur).
Makss à dit:
Utilise file.IsDir plutôt, c'est quasiment impossible mais il peut y avoir un fichier du même nom que le dossier
Merci pour le petit tips :)
Makss à dit:
Autant mettre le code au début de Load()
Pas con, j'avais fait cette fonction avant d'implémenter Load(), donc après j'ai oublié que j'avais deux fonctions qui pourraient n'en être qu'une
Makss à dit:
if inutile, c'est impossible que l'entité soit invalide + parenthèse inutile + inconsistance, des fois tu utilises ! des fois not
Ce IF me sert juste de "vérification" en cas de bug, car au début, je ne lançais pas gNameChanger:Load() dans GM:InitPostEntity et j'avais une erreur. Mais si tu me confirmes que c'est impossible, je vais l'enlever :)
Pour les "!" et "not", c'est selon mon humeur, car de temps en temps je fais du C ou du PHP, ce qui fait que j'oublie qu'en Lua c'est not et non pas ! (mais en GLua on peut utiliser les deux, donc c'est si grave ?)
Makss à dit:
le SetModel est déjà dans la fonction Initialize de l'entité donc inutile d'en mettre un là
Oui très juste, heureusement que je fais relire ma copie :oops:
Makss à dit:
On te l'a déjà signalé avant donc je vais rien dire
J'allais dire vas-y explique mais je viens a peine de comprendre, c'est si cancérigène que ça table.HasValue ?
Makss à dit:
Vu que les clés de la table sont numériques et 'normal', il vaut mieux utiliser #table pour avoir la taille de la table
Je note merci l'ami :)
Makss à dit:
Au lieu d'utiliser une fonction pareil qui est lente, pourquoi pas tout simplement mettre la config avec un Color au lieu d'une valeur hexa ?
C'était une lubie de ma part d'avoir à donner les couleurs en hexa, mais je pense que je vais effectivement abandonner cette idée
Makss à dit:
Utiliste plutôt DistToSqr, c'est juste le résultat de Distance au carré mais c'est bien plus opti
C-like:
LocalPlayer():GetPos():DistToSqr(self:GetPos())
Comme ça ? Mais ça risque pas de changer la donne du coup ? Ou sinon faut que je mette le carré de 300... Donc comme ça !?
C-like:
if LocalPlayer():GetPos():DistToSqr(self:GetPos()) < 90000
Makss à dit:
ça aurait été plus logique de le mettre dans lua/rpname/client, l'entité n'a pas besoin du derma et le derma n'a pas besoin de l'entité
Je comprends bien que le client peut donc lancer le derma sans passer par mon entité, mais comment faire pour qu'il ne puisse pas ? J'imagine qu'il faut passer par autre chose que des nets, mais par quoi faut-il passer ?
Makss à dit:
le ^ 1 est inutile, x^1 = x
Très juste, je devais être bourré quand j'ai fait ça, parce que je m'en rappelle pas :rolleyes:
Makss à dit:
N'utilise pas RoundedBox si c'est pour dessiner un rectangle, utilise plutôt surface.DrawRect
C'est vraiment pas bête ce que tu me dis SeemsGood
Makss à dit:
N'utilise pas RoundedBox si c'est pour dessiner un rectangle, utilise plutôt surface.DrawRect
Fais les calculs avant, c'est pas bon pour la santé de faire des maths à chaque frame
Parenthèses inutiles, pis tu peux utiliser un || ou un or au lieu de faire 2 if
Pourquoi pas juste changer la largeur de la frame 1?
Il va vraiment falloir que je retravaille tout le code côté client
Makss à dit:
Uh ? Pourquoi re-ouvrir la frame ?
Parce que après avoir changé de nom, les labels ne s'updataient pas, donc j'ai décidé de recréer une frame. Si jamais tu sais comment on update le texte d'un label :) (mais tkt je vais faire des recherches)
Makss à dit:
J'espère que le serveur a le FastDL
CàD ? Il faudrait que j'upload les deux fonts sur le WS ? Me dis pas ça quand même, ça serait dommage...
Je vais voir comment on configure bien un FastDL
Makss à dit:
Merci :)
Makss à dit:
L'entité n'a pas d'animations, inutile
Merci d'avoir rapporté ça, à la base j'avais pensé à ce que l'entité te fasse un coucou quand tu t'approche mais j'avais abandonné car inutile pour les fonctionnalités principales de l'addon
Makss à dit:
J'adore ce mec


thepsyca à dit:
http://wiki.garrysmod.com/page/Tables:_Bad_Habits

http://wiki.garrysmod.com/page/Global/FindMetaTable : https://github.com/Gabyfle/gName-Changer/blob/master/npc_rpname/lua/entities/npc_rpname/init.lua#L41
Je comprends pas vraiment où tu veux en venir ?
slownls à dit:
https://github.com/Gabyfle/gName-Changer/blob/master/npc_rpname/lua/rpname/server/sv_rpname.lua / Ligne 48 pas cool
+ le joueur peut changer sont nom depuis n'importe ou dans la map
Table : http://wiki.garrysmod.com/page/Tables:_Bad_Habits
Que trouves-tu de pas cool à la ligne 48 ? C'est mal ents.FindByClass( ) ?
Et aucune idée de comment obliger le joueur à passer par l'entité :confused:
While True à dit:
Son réflexe avec les parenthèses vient d'autres langages je pense :)
Très juste
While True à dit:
Sinon j'ai ajouté mon grain de sel aussi :Dhttps://github.com/Gabyfle/gName-Changer/pull/3
https://github.com/Gabyfle/gName-Changer/pull/3/commits/2aef16d5229c06ead850116769a3cac9452b1894
Je comprends pas trop pourquoi ? C'est parce que le hook est d'office côté serveur ?
https://github.com/Gabyfle/gName-Changer/pull/3/commits/1fc655b969f826797e75ed366c57b4051999f42a
Bien vu le coup du ReadString() qui peut être spammé
Et j'avais jamais vu cette manière de changer le nom RP, merci :)
https://github.com/Gabyfle/gName-Changer/pull/3/commits/d9df9d38e90249d78961f4be6d9f8bec7facaa3f
Encore une subtilité que je n'avais pas assimilée, merci!

C'est super cool que vous ayez pris le temps de checker mon code, je vais essayer de tout arranger.

@While True je pull direct ton commit :) merci encore
 
  • J'aime
Réactions: Makss
Syze_cs

Syze_cs

Geek suprême
Messages
610
Score réaction
135
Points
160
Jolie release merci :D
 
Joe Leroi

Joe Leroi

Chuck Norris
Messages
4 368
Score réaction
933
Points
605
Pour éviter de crée une nouvelle frame moi je ferme celle actuelle et je demande à la réouvrir et sa fonctionne donc bon
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
EpicGaby à dit:
CàD ? Il faudrait que j'upload les deux fonts sur le WS ? Me dis pas ça quand même, ça serait dommage...
ça quand même. Éui la vie est dur
EpicGaby à dit:
mais en GLua on peut utiliser les deux, donc c'est si grave ?
Nan c'est pas grave, c'est juste plus consistant
EpicGaby à dit:
c'est si cancérigène que ça table.HasValue ?
Owi
EpicGaby à dit:
faut que je mette le carré de 300
Yup
EpicGaby à dit:
Je comprends bien que le client peut donc lancer le derma sans passer par mon entité, mais comment faire pour qu'il ne puisse pas ? J'imagine qu'il faut passer par autre chose que des nets, mais par quoi faut-il passer ?
Nan je disais ça pour que les fichiers soit mieux organisés, mettre un code pour un derma dans le fichier client d'une entité c'est pas, selon moi, très juste
EpicGaby à dit:
Si jamais tu sais comment on update le texte d'un label
Et bien SetText non ?
EpicGaby à dit:
J'adore ce mec
T ki
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Makss à dit:
ça quand même. Éui la vie est dur
Aïe
Makss à dit:
Nan c'est pas grave, c'est juste plus consistant
bon, je vais désormais utiliser "not" car si j'ai bien compris le "!" c'est un ajout des dév de GMod
Makss à dit:
Nan je disais ça pour que les fichiers soit mieux organisés, mettre un code pour un derma dans le fichier client d'une entité c'est pas, selon moi, très juste
Mais du coup comment faire pour que le client soit obligé de passer par l'entité ?
Makss à dit:
Je parlais de Staline
 
  • J'aime
Réactions: Makss
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
EpicGaby à dit:
J'allais dire vas-y explique mais je viens a peine de comprendre, c'est si cancérigène que ça table.HasValue ?
Pour des tableaux simples dans lesquels tu n'a qu'une chaine de caractères à trouver dans un tableau, faire un tableau de type { ["chaine_1"] = true } permet la vérification d'existence avec un seul accès au tableau via le hash de la chaine de caractères exist = tableau["chaine_1"].

HasValue parcourt tout le tableau et s'arrête à la première occurrence, c'est donc pas très grave pour les petits tableaux, mais sachant que la commande console peut éventuellement être spammée, c'est toujours mieux d'optimiser autant que possible (d'autant plus que çà ne nuit pas à la lisibilité et à la compréhension du code)
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
slownls à dit:
le joueur peut changer sont nom depuis n'importe ou dans la map
Makss à dit:
ça aurait été plus logique de le mettre dans lua/rpname/client, l'entité n'a pas besoin du derma et le derma n'a pas besoin de l'entité
Comment faites-vous pour obliger le joueur à utiliser l'entité pour recevoir le derma ?
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
EpicGaby à dit:
Comment faites-vous pour obliger le joueur à utiliser l'entité pour recevoir le derma ?
Impossible, il pourra toujours ouvrir le derma coté client.
Ce que tu dois faire c'est t'assurer qu'au moment où il demande de changer de nom, qu'il soit proche du npc, ou que cela fait peu de temps qu'il l'a utilisé.
T'as donc l'option net.WriteEntity(npc), le client te répond et te renvoie le npc, et toi tu dois vérifier que c'est bien un npc (il peut envoyer n'importe quelle entité), et que la distance² entre le npc et le joueur est inférieure à X².

T'as aussi l'option de donner un temps de réponse, OnUse : ply.use_npc = CurTime(), net.Receiver : if CurTime() - ply.use_npc > tempsImpartit then return end

[EDIT] J'ai oublié de mentionner le GetEyeTrace, mais je suis pas trop fan...
 
Dernière édition:
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
While True à dit:
Impossible, il pourra toujours ouvrir le derma coté client.
Ce que tu dois faire c'est t'assurer qu'au moment où il demande de changer de nom, qu'il soit proche du npc, ou que cela fait peu de temps qu'il l'a utilisé.
T'as donc l'option net.WriteEntity(npc), le client te répond et te renvoie le npc, et toi tu dois vérifier que c'est bien un npc (il peut envoyer n'importe quelle entité), et que la distance² entre le npc et le joueur est inférieure à X².

T'as aussi l'option de donner un temps de réponse, OnUse : ply.use_npc = CurTime(), net.Receiver : if CurTime() - ply.use_npc > tempsImpartit then return end
Ha, donc c'est finalement plus de la bidouille :p
Merci beaucoup, j'implémente ça dans la soirée :)

EDIT :

N'étant pas là du weekend, j'pense que je ferais la maj dans la semaine, car il faut que je reprenne tout le code côté client pour appliquer toutes les corrections que l'on m'a soumises.
Et puis faut pas oublier qu'il est pas du tout responsive mon derma finalement :)

Sinon j'ai déjà fait tous les correctifs côté serveur. Merci à vous, j'espère que je vais arriver à un truc pas mal :p
 
Dernière modification par un modérateur:
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Salutations,

J'ai mis à jour l'addon, après une réécriture complète du code client, en écoutant les conseils de @Makss, @While True & co...
Pour plus d'infos sur la mise à jour : https://github.com/Gabyfle/gName-Changer/commit/9d2fdadb1186879a911429e26a8e367394aedc7b

J'espère ne pas avoir fait trop de bêtises :)

@While True je suis encore en train d'essayer d'implémenter le "fix" de l'ouverture du derma n'importe où :)
 
  • J'aime
Réactions: thepsyca
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
EpicGaby à dit:
@While True je suis encore en train d'essayer d'implémenter le "fix" de l'ouverture du derma n'importe où :)
DistToSqr entre le joueur et le npc ^^
 
  • J'aime
Réactions: Membre supprimé 98332
KraulT

KraulT

Geek suprême
Messages
699
Score réaction
296
Points
190
Je pense que... nous devrions.. Après tout..
J'aime bien ce release même si je comprends que dalle à votre blabla
Je suis le seul à vous imaginer en mode "INGENIEUR INFORMATICIEEEEN" ?
 
  • J'aime
Réactions: Enixy
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
EpicGaby à dit:
@While True je suis encore en train d'essayer d'implémenter le "fix" de l'ouverture du derma n'importe où :)
Bah t'as quasi fini il me semble. https://github.com/Gabyfle/gName-Changer/pull/4
 
  • J'aime
Réactions: Membre supprimé 98332 et Valfunde
Enixy

Enixy

Geek suprême
Messages
199
Score réaction
35
Points
100
KraulT à dit:
Je pense que... nous devrions.. Après tout..
J'aime bien ce release même si je comprends que dalle à votre blabla
Je suis le seul à vous imaginer en mode "INGENIEUR INFORMATICIEEEEN" ?
Totalement d'accord !
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
While True à dit:
Bah t'as quasi fini il me semble. https://github.com/Gabyfle/gName-Changer/pull/4
Encore merci, décidément t'es plus rapide que moi :/

Sinon, j'avais pensé à quelque chose comme ça :
C-like:
local function canChange(ply) -- Player is launching derma without using entity (or player is too far from entity) local ent = ents.FindByClass("npc_gname_changer") local max, i = #ent, 0 for _, v in pairs(ent) do -- Checking for all spawned "npc_gname_changer" ents if v:GetPos():DistToSqr(ply:GetPos()) < gNameChanger.max_distance ^ 2 then break end i = i + 1 end if i == max then return false end -- The countdown isn't finished if not ply.gNameLastNameChange then return true end local possible = ply.gNameLastNameChange + gNameChanger.delay if CurTime() < possible then return false end return true
end
Mais je n'ai aucune idée de l'optimisation de ce code, t'en penses quoi ?

EDIT :
En fait je sais pas ce que vous en pensez mais pour l'optimisation :
d'un côté, on utilise des nets pour passer une entité (je sais pas si c'est lourd une entité)
de l'autre, on calcule la distance pour chaque entité présente

Si le joueur spam, on est obligé d'envoyer x fois l'entité
Mais si l'utilisateur a fait spawn 1 milliard d'entité, on doit calculer 1 milliard de fois la distance...
 
Dernière modification par un modérateur:
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
EpicGaby à dit:
Mais je n'ai aucune idée de l'optimisation de ce code, t'en penses quoi ?
La vérification coté serveur seulement se baserait sur un ply:GetEyeTrace, ou alors dans le ENT:Use, enregistrer ply.used_npc = self
et quand tu reçois le net, tu vérifies la distance ply - ply.used_npc, c'est encore mieux que la solution implémentée dans le pull request :)

edit : la solution findByClass est à éviter autant que possible
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
While True à dit:
La vérification coté serveur seulement se baserait sur un ply:GetEyeTrace, ou alors dans le ENT:Use, enregistrer ply.used_npc = self
et quand tu reçois le net, tu vérifies la distance ply - ply.used_npc, c'est encore mieux que la solution implémentée dans le pull request :)

edit : la solution findByClass est à éviter autant que possible
Ha niquel bonne idée,

je vais améliorer mon code alors, merci :)
 
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
While True à dit:
La vérification coté serveur seulement se baserait sur un ply:GetEyeTrace, ou alors dans le ENT:Use, enregistrer ply.used_npc = self
et quand tu reçois le net, tu vérifies la distance ply - ply.used_npc, c'est encore mieux que la solution implémentée dans le pull request :)

edit : la solution findByClass est à éviter autant que possible
Implémenté ! : https://github.com/Gabyfle/gName-Changer/commit/3de730bf82552584629b07074b4ff072264d3ddf

Dans la prochaine mise à jour, je vais ajouter un système de traduction, si vous avez des idées de fonctionnalités à ajouter, n'hésitez pas !


PS : Désolé pour le double post :)
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
C'est quoi l'intérêt de vérifier si le joueur est proche pour charger le derma si le derma n'est accessible que par l'AcceptInput de l'ent ?
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Feytone à dit:
C'est quoi l'intérêt de vérifier si le joueur est proche pour charger le derma si le derma n'est accessible que par l'AcceptInput de l'ent ?
L'intérêt n'est pas le derma, le client pourra toujours l'afficher et le serveur n'y peut rien, par contre ce que le derma envoie peut être vérifié, c'est ce qui est fait. On vérifie que le client a bien utilisé le NPC et est encore à proximité quand il envoie le message.
 
  • J'aime
Réactions: Membre supprimé 98332
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
While True à dit:
L'intérêt n'est pas le derma, le client pourra toujours l'afficher et le serveur n'y peut rien, par contre ce que le derma envoie peut être vérifié, c'est ce qui est fait. On vérifie que le client a bien utilisé le NPC et est encore à proximité quand il envoie le message.
Beh justement la vérif est faîte (techniquement) puisque on ne peut envoyer le derma que par l'AcceptInput non ? Y'a pas moyens d' obtenir le derma autrement ?
 
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Feytone à dit:
Beh justement la vérif est faîte (techniquement) puisque on ne peut envoyer le derma que par l'AcceptInput non ? Y'a pas moyens d' obtenir le derma autrement ?
On peut très bien imaginer que le client ai modifié le code en ajoutant à la fin mainDerma() (qui est le code de la fonction pour lancer le derma), donc il a juste a exécuter ce code avec un lua_run_cl et il a accès au derma sans passer par l'entité
 
NoaGamingFR

NoaGamingFR

Wait :)
Messages
3 650
Score réaction
625
Points
340
EpicGaby à dit:
On peut très bien imaginer que le client ai modifié le code en ajoutant à la fin mainDerma() (qui est le code de la fonction pour lancer le derma), donc il a juste a exécuter ce code avec un lua_run_cl et il a accès au derma sans passer par l'entité
Bonjour, merci pour cette release.
Tout ce qui as été rapporté par les expèrimentés ([:D) à été fix ?
Reste-il encore des petit pb :D ?
 
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
NoaGamingFR à dit:
Bonjour, merci pour cette release.
Tout ce qui as été rapporté par les expèrimentés ([:D) à été fix ?
Reste-il encore des petit pb :D ?
Yep, tout est fix, là je suis en train de réfléchir à un système de traduction
 
  • J'aime
Réactions: NoaGamingFR
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Feytone à dit:
Beh justement la vérif est faîte (techniquement) puisque on ne peut envoyer le derma que par l'AcceptInput non ? Y'a pas moyens d' obtenir le derma autrement ?
EpicGaby à dit:
On peut très bien imaginer que le client ai modifié le code en ajoutant à la fin mainDerma() (qui est le code de la fonction pour lancer le derma), donc il a juste a exécuter ce code avec un lua_run_cl et il a accès au derma sans passer par l'entité
Je le répète, le problème n'est pas le derma, c'est pas le rôle de cet addon que d'empêcher l’exécution de code client, on considère donc que le client est dans la capacité de faire apparaître le derma.
Mais aussi dans la capacité d'envoyer n'importe quoi et n'importe quand au serveur. Il peut donc envoyer le message net 'ChangeRPName', c'est alors au serveur de vérifier si le client tente de gruger le système; c'est d'ailleurs le point le plus important, veut on qu'un joueur puisse changer de nom en temps voulu depuis l'autre coté de la map ?
 
  • J'aime
Réactions: Membre supprimé 98332
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
Ça avance bien ici, une petite restriction par les admin éditable I-G sur les nom / prénom pour par exemple "zizi" pourrait être cool :)
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
thepsyca à dit:
Ça avance bien ici, une petite restriction par les admin éditable I-G sur les nom / prénom pour par exemple "zizi" pourrait être cool :)
Très bonne idée, je vais voir ce que je peux faire dès que j'ai fini le système de langage (je suis en train de me casser le cerveau avec les patterns de lua)

EDIT :

J'ai rien dit, c'est super easy les Patterns en Lua :)
 
Dernière modification par un modérateur:
  • J'aime
Réactions: NoaGamingFR
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
EpicGaby à dit:
Très bonne idée, je vais voir ce que je peux faire dès que j'ai fini le système de langage (je suis en train de me casser le cerveau avec les patterns de lua)
Bon chance, en fonction des langues les patterns sont différents, demande à Falco, ou inspire toi de son code :cool:
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
thepsyca à dit:
Ça avance bien ici, une petite restriction par les admin éditable I-G sur les nom / prénom pour par exemple "zizi" pourrait être cool :)
While True à dit:
Bon chance, en fonction des langues les patterns sont différents, demande à Falco, ou inspire toi de son code :cool:
https://github.com/Gabyfle/gName-Changer/commit/5bbec518687a9d19cc28172053d52fbe3d39f813
Je ne sais pas trop ce que ça vaut, mais j'ai ajouté un système de traduction

Certains mots sont des variables, alors plutôt que de couper la traduction en plusieurs morceaux (j'ai vu ça dans plusieurs scripts sur GmodStore) j'ai préféré utiliser les Patterns de Lua pour pouvoir avoir des fichiers de traductions qui ressemblent à ceci :
Code:
Change my name! Viiite! ( {{device}}{{price}} )
(on sait tous que les anglophones mettent la devise avant le prix, donc par exemple avec ce système, inverser les deux c'est faisable :
Code:
Changer mon nom ! Viiite ! ( {{price}}{{device}} )

Je ne sais pas ce que vaut le code que j'ai pissé, mais il est fonctionnel :p

Ensuite, j'avais une petite question pour nos "experts" (@Makss @While True @slownls @thepsyca ) :
Y a t-il une "convention" de disposition des fichiers / dossier ? A l'image des designs patterns dans les autres langages, applicable en GLua ?
 
  • J'aime
Réactions: NoaGamingFR
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
While True à dit:
Je le répète, le problème n'est pas le derma, c'est pas le rôle de cet addon que d'empêcher l’exécution de code client, on considère donc que le client est dans la capacité de faire apparaître le derma.
Mais aussi dans la capacité d'envoyer n'importe quoi et n'importe quand au serveur. Il peut donc envoyer le message net 'ChangeRPName', c'est alors au serveur de vérifier si le client tente de gruger le système; c'est d'ailleurs le point le plus important, veut on qu'un joueur puisse changer de nom en temps voulu depuis l'autre coté de la map ?
ça j'ai toujours compris. Mais la question c'est comment le joueur pourrait-t-il gruger ? En faisant quoi par exemple ?
Car comment exécuter le message net ChangeRPName en dehors du derma par exemple ?
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Feytone à dit:
ça j'ai toujours compris. Mais la question c'est comment le joueur pourrait-t-il gruger ? En faisant quoi par exemple ?
Car comment exécuter le message net ChangeRPName en dehors du derma par exemple ?
Justement, en exécutant du code client, à l'aide de commandes commes lua_run_cl :) Pour lancer le derma, il n'a, dans l'absolut, pas besoin du net, puisqu'il peut modifier le code côté client, c'est comme quand tu fais "Examiner l'élément" sur ton navigateur web :p
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Feytone à dit:
ça j'ai toujours compris. Mais la question c'est comment le joueur pourrait-t-il gruger ? En faisant quoi par exemple ?
Car comment exécuter le message net ChangeRPName en dehors du derma par exemple ?
lua_run_cl net.Start("ChangeRPName") net.WriteString("Vilain Pasbo") net.SendToServer() (commande console native)
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
While True à dit:
lua_run_cl net.Start("ChangeRPName") net.WriteString("Vilain Pasbo") net.SendToServer() (commande console native)
Beh pour ça : allowcslua 0 no ?
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Feytone à dit:
Beh pour ça : allowcslua 0 no ?
Si seulement... Non ce n'est pas suffisant. (t'es sérieux quand tu poses la question ?)
Et même si ça l'était, ce n'est pas une raison de ne pas sécuriser là partie serveur.
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
While True à dit:
Si seulement... Non ce n'est pas suffisant. (t'es sérieux quand tu poses la question ?)
Et même si ça l'était, ce n'est pas une raison de ne pas sécuriser là partie serveur.
Attend... Si j'ai mis mon allowcslua sur 0, le lua_run_cl est inutilisable non ? Sinon Gmod est vraiment très mal foutu.
 
ZarosOVH

ZarosOVH

Modérateur
Membre du Staff
Messages
6 527
Score réaction
5 488
Points
1 295
Feytone à dit:
Attend... Si j'ai mis mon allowcslua sur 0, le lua_run_cl est inutilisable non ? Sinon Gmod est vraiment très mal foutu.
Tu peux quand même lancer du lua sans la commande mais on va éviter de donner des astuces de ce genre ici 4Head
 
  • J'aime
Réactions: NoaGamingFR
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Feytone à dit:
Attend... Si j'ai mis mon allowcslua sur 0, le lua_run_cl est inutilisable non ? Sinon Gmod est vraiment très mal foutu.
Je ne dis pas que cela sert à rien, cela bloque bien la commande lua_run_cl, mais encore une fois on est coté client, et ce dernier pourra toujours d'une façon ou d'une autre executer du code de manière arbitraire. La discussion devient longue à ce sujet, si tu veux en parler plus longuement, je t'invite à créer un poste; ici ca commence à nuire au sujet initial.

EpicGaby à dit:
Ensuite, j'avais une petite question pour nos "experts" (@Makss @While True @slownls @thepsyca ) :
Y a t-il une "convention" de disposition des fichiers / dossier ? A l'image des designs patterns dans les autres langages, applicable en GLua ?
Que je sache, il n'y a pas de pattern majoritairement adopté ou reconnu. Néanmoins il y a un petit point que j'aimerais te notifier et que j'ai remarqué dans gNameChenger; par rapport à la partie 'business' et éventuellement net de ton script, je te conseillerais de la sortir de la partie ENTITY et la mettre dans ton dossier principal. Le principe étant que si l'on veut créer une autre entité, ou un autre moyen de changer de pseudo, qu'on puisse utiliser un maximum de ton code sans avoir à le c+p autre part.
 
  • J'aime
Réactions: Membre supprimé 98332 et slownls
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Nouvelle version disponible !
https://github.com/Gabyfle/gName-Changer/commit/db5aadb1782345c8661ad8ba9b5a4593b7325759

Ajout d'un système de blacklist de noms, suggéré par @thepsyca
Divers fixes et améliorations du code, amélioration de la structure des dossiers de l'addon, suggéré par @While True
Pour la mise à jour, veuillez supprimer l'ancienne version de votre serveur.


EDIT :
Un bug majeur vient de m'être rapporté, je ne peux pas le fixer tout de suite, désolé par avance...
pour les curieux : https://github.com/Gabyfle/gName-Changer/issues/6

EDIT²:
Le bug vient d'être fixé, l'addon est maintenant 100% fonctionnel !


Screenshots du panel :
 
Dernière modification par un modérateur:
  • J'aime
Réactions: Lanimal, NoaGamingFR, Makss et 3 autres
  • Banni
Hoper

Hoper

Geek suprême
Messages
510
Score réaction
233
Points
130
le derma est bof.

AJOUTER DU BLUR BORDEL LE BLUR CA REND DE MOCHE A BEAU
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
Hoper à dit:
le derma est bof.

AJOUTER DU BLUR BORDEL LE BLUR CA REND DE MOCHE A BEAU
+1 arrêtez de vouloir faire des derma jolie, agréable à regarder et bien travaillé, faites plutôt un design passe-partout qui prend 2 secondes à faire
 
Dernière édition:
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
Makss à dit:
+1 arrêtez de vouloir faire des derma jolie, agréable à regarder et bien travaillé, faites plutôt un design passe-partout qui prend 2minutes à faire
Mon derma n'est peut-être pas passe-partout, mais il est extrêmement simple à reproduire.

Hoper à dit:
le derma est bof.

AJOUTER DU BLUR BORDEL LE BLUR CA REND DE MOCHE A BEAU
Tu peux modifier les couleurs du derma.
Et désolé qu'il ne te plaise pas...
 
Dernière modification par un modérateur:
NoaGamingFR

NoaGamingFR

Wait :)
Messages
3 650
Score réaction
625
Points
340
EpicGaby à dit:
Mon derma n'est peut-être pas passe-partout, mais il est extrêmement simple à reproduire.


Tu peux modifier les couleurs du derma.
Et désolé qu'il ne te plaise pas...
Ouai, peut être une option config blur, ça pourrais intèrèsser pas mal de personne je pense, si gname.blur = true bah ca met le blur, sinon ca laisse ce derma ^^'
 
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
NoaGamingFR à dit:
Ouai, peut être une option config blur, ça pourrais intèrèsser pas mal de personne je pense, si gname.blur = true bah ca met le blur, sinon ca laisse ce derma ^^'
J'ai dans l'idée de faire un petit système de templates pour que vous puissiez faire vos propres thèmes.
 
  • J'aime
Réactions: NoaGamingFR
NoaGamingFR

NoaGamingFR

Wait :)
Messages
3 650
Score réaction
625
Points
340
EpicGaby à dit:
J'ai dans l'idée de faire un petit système de templates pour que vous puissiez faire vos propres thèmes.
Et aussi, j'suis pas sur, mais j'reçois la notif que je change de nom mais ca change pas le nom rp, ducoup je refait le test ce soir pour te dire.
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
M

Membre supprimé 98332

Anonyme
NoaGamingFR à dit:
Et aussi, j'suis pas sur, mais j'reçois la notif que je change de nom mais ca change pas le nom rp, ducoup je refait le test ce soir pour te dire.
Bizarre, car le pseudo est changé avant de te notifier...

Sinon c'est peut être un problème de ton côté (conflit?)
 
Discord d'entraide
Rejoignz-nous sur Discord