Cookies

Utilisation des cookies

Pour le bon fonctionnement du site, nous utilisons des cookies techniques qui permettent de gérer votre connexion.
Nous utilisons des cookies Google Analytics pour le suivi anonyme de la navigation. Vous pouvez désactiver ces derniers à tout moment ici.

Confirmation

Par défaut, nous conservons votre acceptation durant 13 mois.
Gérez vos cookies ici.



Personnaliser

Black Book Éditions, le site de référence des jeux de rôle

YAG et LUA :-) 19

Forums > Créativité

avatar

Hello,

Vu la demande, j'ai beaucoup bossé et ça a avancé beaucoup plus vite que prévu content

Il est donc désormais possible d'utiliser LUA pour personnaliser Yag !!

Pour le moment les feuilles de perso et les dés.
Les pions viendront plus tard.

Vous trouverez une description au format PDF de mon ébauche d'API sur la nouvelle page du site yag.

Et bien sûr la vidéo de présentation.

C'est juste un premier pas, mais il est chouette comme tout^^
+
Cedric

avatar

Waouh ! API LUA plus vidéo, tu es plus rapide que l'éclair !

Comme on dit "maintenant yapuka ...", faut que l'on se mette à contribuer et décliner les rulesets.

Une excuse de plus pour me mettre à LUA.

Détail mineur, généralement sur un D10, le zéro vaut 10, donc explose.

En tout cas, merci beaucoup !

avatar

Hé hé, merci, j'ai vraiment pas chomé récemment content

C'est un début, c'est la première fois que je fais ce genre de chose, mais ça a l'air prometteur, et en tout cas c'est super fun et intéressant à faire, tout nouveau domaine pour moi, j'apprends une tonne de choses. Je suis en vacances et absent la semaine prochaine, mais à part ça je pense que ça va évoluer vite content

Pour le d10, par défaut le 0 vaut 0 dans Yag, mais il y a déjà dans le panneau des dés une option pour le faire passer à 10 (le d10 est customizable nativement), et du coup il explosera comme les autres content

Merci^^

Cedric

Ce message a reçu 1 réponse de
  • Sauriak
avatar
YagCed

Pouvoir choisir entre 0 ou 10, ça c'est une option à la fois rare et cool. oui

avatar

J'avous ne pas avoir tout compris, même grace à la vidéo que je vais me remater pour essayer de mieux comprendre. Mais vus les réactions de chacun concernant ce nouvel ajout je suppose que c'est quelque chose d'assez conséquent alors félicitation mort de rire

avatar

Hello Fufu content

Merci !

En un mot, il est désormais possible de parler avec Yag en utilisant un langage assez simple et standard (LUA).

On peut le faire en passant par des fonctions que je dois préparer (en jargon on parle d'API: Application Programming Interface, un ensemble de fonctions permettant de s'interfacer avec un langage ou un soft).

Ca permet de customiser le comportement de Yag, d'automatiser des choses, et surtout ça donne la main au joueurs, donc c'est effectivement une nouveauté très importante.

Pour l'instant ma librairie de fonctions est encore assez légère, mais elle fonctionne, c'est ce que je montre dans la vidéo content

+
Cedric

avatar

Bravo YagCed!! GG!!surprissurprisoui

Merci SmirnovV content

avatar

Bon, l'intégration du LUA dans Yag c'est carrément top ouiouioui

J'ai bricolé un petit peu cet après-m pour émuler un système perso que je galère comme un fou à intégrer dans Fantasy Grounds... Sans rentrer dans les détails, il s'agit d'effectuer des jets de d20 sous une compétence mais au-dessus d'une difficulté. Et en une après-m j'ai quelque chose de fonctionnel !!

Le test se décompose comme suit :

  • My_RollDiceButton affiche le type de test (Test de Combat) ainsi que les deux valeurs à prendre en compte (difficulté-compétence)
  • My_RollDiceCallback a été allégé (je n'ai qu'un test et je n'ai pas besoin des autres infos). Avec de simples conditions, je compare le test aux scores et affiche s'il s'agit d'un échec, d'une victoire ou d'un équilibre (score = compétence).

Franchement, c'est génial : c'est l'accessibilité des macros de Roll20 couplée à des possibilités proches de celles de Fantasy Grounds -> le meilleur des deux mondes !

J'ai aussi testé les feuilles de perso avec calculs de certains champs. Simple et efficace. J'adore mort de rire

Ce message a reçu 1 réponse de
  • YagCed
avatar
kyin

Wow, ça fait carrément plaisir !

Merci Kyin !!!

avatar

Bon, j'essaie de me familiariser avec la partie LUA de Yag pour développer différents rulesets/fiches de perso, et il y a une petite feature que j'aimerais intégrer mais je ne sais pas si c'est faisable (je n'ai pas encore trouvé comment).

Cela concerne les PV. Pour modifier le maxhp, on indique le calcul à effectuer dans l'Update de la feuille de perso. Je me demandais s'il était possible de passer par un jet de dé (1d au niveau 1, 2d niveau 2 etc). A première vue, la valeur maxhp est forcément un nombre (je ne peux pas indiquer "maxhp = 1d8" par exemple).

J'ai donc créé un champ DDV (dé de vie) sur ma feuille de perso. Je lui donne une valeur de (niveau) d8 pour qu'il me retourne le jet de dé correspondant.

Dans la fonction Callbacks je peux isoler mon jet :

if id == "DDV" then maxhp = lib.DiceResultTotal(dr1) end

Mon souci, c'est que si le maxhp est modifié il n'est pas mis à jour (il n'y a pas d'update de la feuille de perso). Est-ce qu'il est possible de mettre à jour la feuille de perso dans le RollDiceCallback ?

Ce message a reçu 1 réponse de
  • YagCed
avatar

Hello,

La v0.8.1.0 est en ligne:

- le comportement des dés a été entièrement sorti du c++ et est donc complètement modifiable en LUA, on fait ce qu'on veut sans restriction.

- l'API s'étend un peu et donne désormais la possibilité de modifier directement les pions dans le jeu. Pour le moment juste la vie, l'initiative et la participation au tour.

La petite vidéo de présentation.

Je vais être absent et déconnecté toute la semaine (vacances loin de chez moi), donc je serai sourd muet pendant 10 jours, je me remets au boulot à mon retour content

Bonne semaine à tous content

Ce message a reçu 1 réponse de
  • YagCed
avatar
kyin

Salut Kyin content

Oui, le champ mxhp est un entier et pas une formule, donc il faut faire autrement.

- tu n'es pas obligé d'utiliser les dés de Yag, pour ce genre de chose où le suspens n'est pas insoutenable, tu peux utiliser un nombre random dans LUA pour avoir ton résultat tout de suite et renseigner le champ sans passer par les dés Yag.

- sinon, tu peux lancer les dés avec RollDice et récupérer le résultat dans la Callback. Mais il faut bien sûr que la Callback sache qu'il s'agit de ce jet particulier. Avec la 0.8.0 je t'aurais dit de passer par le champ "secret" des lignes des feuilles de perso, mais la nouvelle version de l'API en 0.8.1.0 facilite la chose: la fonction RollDice te propose maintenant 2 champs supplémentaires, un entier ui et une string us, qui te permettent d'envoyer des infos à la Callback pour identifier ton jet.

Donc tu peux par exemple désormais lancer: yag.RollDice(1d8, "", 5, ""), et dans ta Callback utiliser le ui==5 pour mettre à jour le mxpHP de la cs avec le résultat du dé.

J'espère que c'est clair, sinon tu me dis, et s'il y a besoin de faire évoluer l'API, on fera content

Pour info je suis absent toute la semaine prochaine, je répondrai dès mon retour content

+
Cedric

avatar
YagCed

Oh j'ai oublié un truc très important: pour identifier les pions, j'ai du ajouter une variable (l'identifiant), qui doit être sauvegardée.

Donc la structure des sauvegardes est modifiée, et donc les anciennes sauvegardes peuvent déconner avec la nouvelle version, donc il est plus propre de supprimer vos sauvegardes et les refaire.

Il est suffisant de supprimer les binaires uniquement, les sauvegardes en csv n'auront pas de pb, donc vous conservez vos feuilles de perso.

Désolé, j'essaye de le faire le moins souvent possible, mais là pas le choix, LUA est une révolution dans Yag, donc les choses changent beaucoup et rapidement...

Si c'est bloquant pour vous et que vous avez absolument besoin de vos sauvegardes, j'ai laissé la version 0.8.0.1 sur la branche "previous" sur steam.

Désolé et merci pour votre compréhension content

Ce message a reçu 1 réponse de
  • SmirnovV5312
avatar

Sacré boulot bravo!! oui une question, si je veux jouer à Savage World sous yag est ce que dans le même ligne je peux mettre deux dés different et qu'il me garde les dés qui ont fait 4+ et relance ce qui explose à 6?

Salut SmirnovV et merci content

Pour les dés différents, (si je comprends correctement, car je ne connais pas savage world), il suffit d'écrire: 1d6+1d6. Yag considèrera qu'il s'agit de 2 formules et appliquera des couleurs différentes (alors qu'en écrivant 2d6 les 2 dés auront forcément la même couleur).

N'oublie pas de choisir ta séquence de couleurs dans l'interface (si tu veux que le premier dé soit blanc et le 2ème noir par exemple).

Pour les relances, dans le module par défaut j'ai scripté le faire de garder les n meilleurs, et les relances explosives, mais pas le fait de garder les dés >4. Donc faire ce que tu veux est possible, mais il faut que tu modifies un peu le script pour faire ce qui t'intéresse.

Je t'aurais bien proposé de te le faire, mais plus le temps de coder ce soir malheureusement, demain je prends le train juste après le boulot donc tout doit être préparé ce soir pour la semaine^^

Si tu n'aimes pas scripter et si c'est pas trop pressé, je te fais ça la semaine prochaine quand je reviens^^

+
Cedric

Ce message a reçu 1 réponse de
  • YagCed
avatar
YagCed

SmirnovV,

J'ai craqué j'ai jeté un oeil rapidos, vite fait, si tu remplaces la fonction GetResultsToKeep par la suivante ça semble

faire le boulot:

function default.GetResultsToKeep(r, hl, ni)
-- on crée une table avec les valeurs >= ni
local ts = {}
i = 1
for k,v in pairs(r) do
if (v.value >= ni) then
ts[i] = k
i = i + 1
end
end
return ts
end

Tu peux l'utiliser avec une formule du genre: 1d6h4e6 + 1d6h4e6 pour lancer 2 dés différents (en choisissant 2 couleurs différentes dans l'interface), explosifs sur 6, et en gardant les résultats >=4.

J'ai fait ça vite, testé 5 minutes, il faudra peut être ajuster mais c'est une bonne base, la logique de la fonction est simple. On doit pouvoir faire beaucoup plus simple en simplifiant le script plus en profondeur ailleurs (ta condition est très simple), mais j'ai juste changé la fonction qui est là pour ça sans rien toucher d'autre: c'est grossier, mais rapide, facile, et le changement est aisé de ton coté: juste remplacer une fonction.

Attention à ne pas travailler directement sur le module "default", il est écrasé/restauré à chaque redémarrage de Yag. Crée une copie pour ne pas perdre tes modifs à chaque démarrage content

+

Cedric

Ce message a reçu 1 réponse de
  • SmirnovV5312
avatar

Supert!!! Merci, je test ça oui

Mais je pensais plus à par exemple 1d8 et 1D6 jetés en même temps (de d4 à d12 en fait).

SmirnovV5312

Salut Smirnov,

Tu as plusieurs solutions pour ça :

  • la plus simple, tu utilises les deux formules avec le e suivi du score max du dé (ex : 1d8e8 dans la première case, 1d6e6 dans la seconde)
  • pour simuler le dé joker de sawo sans avoir à remplir systématiquement cette deuxième case (en partant du principe qu'il s'agit toujours d'un d6 explosif supplémentaire) tu indiques dans MyRollDiceButton que f2 est égal à 1d6e6
Ce message a reçu 1 réponse de
  • SmirnovV5312
avatar

Hello !

J'ai essayé de reprendre les types de macro/jets de dés utilisés assez régulièrement. Je me suis inspiré de plusieurs listes déjà existantes... mais si vous voyez des choses qui semblent manquer n'hésitez pas à les ajouter (l'idée c'est que Ced pioche dedans pour les implémenter dans Yag).

NomFormuleExempleExplications
Jet standard[x]d[y]+[z]1d20+3La base.
Jet explosif[x]d[y]e[z]1d6e6Les dés indiqués (ici 1d6) sont lancés et ceux qui affichent un résultat égal ou supérieur à ce qui se trouve derrière le e (ici 6) sont relancés et les résultats sont additionnés. Il est à noter que le dé peut exploser sur un score qui n'est pas le maximum sur le dé (1d6e5 relancera les d6 qui affichent 5 ou 6).
Jet à succès (roll over)[x]d[y]o[z]8d6o4(proposition) Les dés indiqués (ici 8d6) sont lancés et ceux qui affichent un résultat égal ou supérieur à ce qui se trouve derrière le o (ici 4) comptent comme un succès. Le résultat final indique le nombre de succès obtenus (et non la somme des scores des dés).
Jet à succès (roll under)[x]d[y]u[z]3d20u12(proposition) Les dés indiqués (ici 3d20) sont lancés et ceux qui affichent un résultat égal ou inférieur à ce qui se trouve derrière le u (ici 12) comptent comme un succès. Le résultat final indique le nombre de succès obtenus (et non la somme des scores des dés).
Roll & Keep[x]d[y]k[z]4d10k2(proposition) Les dés indiqués (ici 4d10) sont lancés et seuls les [z] (ici 2) meilleurs dés sont additionnés.

A voir aussi comment ces différents dés pourraient être mixés (les d10 du Roll & Keep sont censés exploser par exemple).

Ce message a reçu 1 réponse de
  • YagCed
avatar
kyin

Salut Kyin content

Une partie de ta table existe déjà:

- les dés explosifs

- les roll&keep mais avec des lettres différentes du k standard: h pour garder le plus haut (h=highiest), l (L minuscule) pour garder le plus petit (l=lowest).

On peut déjà écrire une formule du type: 5d8h3e7 pour lancer 5d8, garder les 3 meilleurs, et relancer les 7+.

Tout est fait en LUA dans le module "default", donc libre à chacun de modifier ou tout refaire.

Pour rappel, tout ce que Yag fait aujourd'hui, c'est isoler les formules de la forme ndx (5d4) ou les constantes (bonus) pour les lancer donner les résultats dans la fonction RollDiceCallback. Pour le reste, il renvoie la formule telle quelle, et on peut donc faire ce qu'on veut, ajouter les lettres ou le langage qu'on veut.

Les lettre h, l et e existantes sont codées en LUA dans le module "default".

Je pourrais ajouter les o et u pour les jets à succès, mais si j'ai bien compris, parfois il faut donner la somme des dés, parfois leur nombre, donc impossible de faire un module générique, il faudra implémenter ça dans les modules/templates/rulesets au cas par cas.

J'imagine qu'à terme, il faudra créer (si elle ne se crée pas toute seule) une librairie, ou un ensemble de templates pour chaque type de jets de dés et leurs résultats. Le langage et le comptage dépendent des règles de chaque jeu.

Et puis on peut aller plus loin en proposant chaque type standard dans une liste déroulante et automatiser le bon module en fonction, faire une interface mignonne pour que ça soit confortable, etc. Tout ça se fera naturellement si la librairire prend forme et grossit.

Idem si un jour on a des vrais rulesets, mais un pas à la fois^^

A suivre content

+
Cedric

avatar

Hello,

La v0.8.2.1 est en ligne (vidéo dans la thread Yag).

La nouvelle version s'accompagne d'une gestion un peu différente de LUA, qui est désormais expliquée dans une vidéo tuto dédiée.

La vidéo ici.

+
Cedric

Ce message a reçu 1 réponse de
  • SmirnovV5312