5e-drs
5e-drs copied to clipboard
Mon Bestiaire ne peut contenur qu'une seule créature?
Dans le bestiaire 5e-drs, j'ai cliqué sur "Créer un monstre/PNJ". Après avoir longuement décrit le monstre ("Scrofin"), je l'ai sauvegardé: scrofin.json. Je l'ai ensuite renommé en "Scrofin, champion", modifié et sauvegardé sous un nouveau nom: scrofin-champion.json.
Je peux charger les deux fichiers .json dans deux onglets différents avec le bouton Charger.
Quand j'ajoute l'un des deux à mon bestiaire, tout va bien mais quand je veux ajouter le second à mon bestiaire, il remplace le premier. Ainsi, mon bestiaire ne contient qu'un seul monstre.
J'ai essayé une variante avec un seul onglet:
- charger le premier fichier .json
- ajouter à mon bestiaire
- réinitialiser (aucun effet sur le problème subséquent)
- charger le second fichier .json le bouton "Ajouter à mon bestiaire" se transforme en "Supprimer de mon bestiaire" et je ne peux donc pas avoir les deux monstres dans mon bestiaire.
J'ai sauvegardé et édité le fichier bestiaire.json à la main puis je l'ai chargé: les deux monstres apparaissent enfin.
Le tout avec Firefox 102.8.0esr sur Debian testing.
Je remarque que dans les deux fichiers json, la valeur de "key" est identique. Cela explique peut-être le problème ainsi que le suivant:
après avoir chargé bestiaire.json manuellement modifié, quand je clique sur le titre de l'une des deux créatures, les deux se déploient.
Pour l'applicatif, si tu charges une créature dont le "key" est déjà utilisé, il écrase l'existant. Si tu veux recharger une créature sans écraser l'existant, tu dois changer le paramètre "key".
C'est évident mais d'où vient ce paramètre "key"? Il n'est pas visible dans la page "Création de monstre/PNJ" et le seul moyen de le changer est d'exporter en .json et d'éditer le fichier à la main. À ce moment la question qui se pose d'elle-même est: que choisir comme nouvelle "key"?
Il est généré aléatoirement et n'a pas vocation a être édité depuis l'UI de l'applicatif.
- Aléatoirement mais avec un risque élevé de collision. Ce devrait peut-être être un uuid en bonne et due forme?
- OK, on ne peut pas le changer depuis l'UI. Mais cela casse une fonctionnalité importante de n'importe quel autre éditeur: créer un monstre de niveau 2, l'enregistrer, le modifier pour aller au niveau 6 et l'enregistrer pour un second monstre distinct. Puis un troisième, etc. (exemple les dragonnets, jeunes, adultes, vénérables).
Je pense que la "key" devrait être un hash du nom ("title") du monstre. Ou peut-être le nom lui-même, tout simplement. Ainsi, quand on renomme un monstre, on en crée un nouveau. (On ne peut alors effacer un monstre de "mon bestiaire" qu'avant de l'avoir renommé, ce qui est OK.)
Aléatoirement mais avec un risque élevé de collision. Ce devrait peut-être être un uuid en bonne et due forme?
Math.random().toString(36).substr(2, 9)
c'est pas ce que je qualifierais de "risque élevé de collision". Tu peux appeler ça uuid si tu veux. Il y a infiniment moins de créatures que de combinaisons possibles. Si tu génères une collision, c'est que tu es trop créatif.
OK, on ne peut pas le changer depuis l'UI. Mais cela casse une fonctionnalité importante de n'importe quel autre éditeur: créer un monstre de niveau 2, l'enregistrer, le modifier pour aller au niveau 6 et l'enregistrer pour un second monstre distinct. Puis un troisième, etc. (exemple les dragonnets, jeunes, adultes, vénérables).
Je comprends. En fait, il existait une fonction d'édition depuis une créature existante. Jusqu'à ce que je me rende compte du nombre élevé d'erreurs que ça générait par manque de consistance dans les données. Je l'ai supprimée. C'est quelque chose que je n'ai pas réparé par manque de temps.
36^9, ça fait à peu près 2^46 or 46 bits d'entropie pour un identifiant "unique", c'est vraiment peu (uuid donne 122 bits d'entropie et Math.random() en donne, normalement, 53). Mais surtout, a-t-on vraiment besoin de cette "key" alors que les noms des créatures doivent déjà être uniques? Elle résoud quel problème?
Mais surtout, a-t-on vraiment besoin de cette "key" alors que les noms des créatures doivent déjà être uniques? Elle résoud quel problème?
Le problème c'est que jamais on ne peut faire confiance à un utilisateur. Je ne veux pas contraindre le nom des créatures parce que ça m'obligerait à vérifier qu'il n'y a pas déjà une créature avec le même nom dans le bestiaire de l'utilisateur. La "key" sert à identifier une créature dans le bestiaire personnel (quand bien même il y aurait plusieurs créatures avec le même nom), elle est générée quand on crée une nouvelle créature. Elle est réutilisée quand on édite une créature existante.
Pour l'entropie, tu as raison, j'aurais pu générer une clé plus grande, j'aurais pu utiliser une librairie pour générer des uuid à la norme RFC4122, mais à mon avis on se trompe de sujet.
Le fait est que dans ce cas d'utilisation, ça suffit largement. L'objectif serait de pouvoir dupliquer une créature pour en faire une version dérivée. Ça doit pouvoir se faire, je regarderai ça quand j'aurai un peu de temps devant moi.