1 votes

Comment vérifier le résultat le plus bas dans un groupe de dés mélangés dans Anydice ?

J'essaie de construire une fonction pour modéliser non seulement un jet de dé, mais aussi pour avoir des opérateurs booléens pour basculer en utilisant divers pouvoirs qui affectent le dé. J'ai réussi à tout faire fonctionner sauf une chose : regarder le résultat du lancer, voir si un '1' a été obtenu et changer ce '1', mais seulement une fois.

La mécanique des dés est celle du Cryptomancien, et elle fonctionne en prenant votre rang dans une compétence qui va de 1 à 5 et en lançant autant de d10 plus un certain nombre de d6 qui totalisent 5 dés. Pour les d10, les 1 sont toujours des échecs (-1), les nombres inférieurs à la cible sont des 0 et les nombres égaux ou supérieurs à la cible sont des succès (+1). Sur les d6, les 1 sont des ratés, les 6 sont des réussites et tout le reste est 0.

J'ai utilisé un dé personnalisé pour mes jets, mais j'ai configuré la fonction pour construire le jet à partir d'un numéro de compétence et d'un numéro de défi. Voici ce que j'ai obtenu jusqu'à présent :

function: sb B:n sp P:n skill SKILL:n vs CHALLENGE:n{
if P=1{
   ROLL: SKILLd{-1,0:(CHALLENGE-2),1:(10-CHALLENGE),2}+(5-SKILL)d{-1,0:4,1}
   }
else {
   ROLL: SKILLd{-1,0:(CHALLENGE-2),1:(11-CHALLENGE)}+(5-SKILL)d{-1,0:4,1}
   }
if B=1{
   if 5@ROLL=-1{
      ROLL:ROLL+2
      }
   }
result:ROLL 
}

L'objectif est de pouvoir basculer les choses en entrant un 1 ou un 0 pour les valeurs B et P afin de les activer ou de les désactiver. P=1 fait que tous les '10' obtenus valent +2 succès au lieu de +1. B=1 est supposé vérifier la dernière valeur du jet, et si un -1 est présent, ajouter 2 au total, transformant ainsi un et un seul botch en succès, même s'il y a plusieurs botchs dans le jet.

Tout fonctionne jusqu'à ce que j'active B. J'obtiens alors une erreur indiquant que l'opération booléenne if ne peut être utilisé que pour les numéros. Il s'avère que 5@ROLL ne me donne pas le plus petit résultat de 5 dés mais la probabilité de ce résultat. Comment puis-je résoudre ce problème ? Comment puis-je convertir ROLL:d en ROLL:s ?

1voto

Someone_Evil Points 42173

Utiliser une sous-fonction pour tester certains rouleaux

Pour faire des tests tels que "Y a-t-il un -1 dans ce pool", vous devez ajouter le pool de dés à une fonction pour en faire une séquence (AnyDice exécutera alors la fonction pour chaque séquence possible). Le problème est que lorsque vous additionnez des dés, cela devient un nombre et nous avons besoin que ce soit des dés (pour pouvoir le transformer en séquence).

Quelle est la solution ? Ne combinez pas jusqu'à ce que vous soyez obligé de le faire. Enregistrez les pools d10 et d6 comme des variables séparées et passez-les toutes les deux à une sous-fonction. Cette sous-fonction teste si le dernier jet de l'une ou l'autre des poules est -1 et si c'est le cas, elle retourne le total du jet +2, sinon elle retourne juste le total du jet. Mon Code AnyDice :

function: sbcheck A:s B:s{
  if (#A)@A = -1 | (#B)@B = -1 {
    result: A+ B+ 2
  }
  else {result:A+B}
}

function: sb B:n sp P:n skill SKILL:n vs CHALLENGE:n{
if P=1{
   TENPOOL: SKILLd{-1,0:(CHALLENGE-2),1:(10-CHALLENGE),2}
   }
else {
   TENPOOL: SKILLd{-1,0:(CHALLENGE-2),1:(11-CHALLENGE)}
   }
SIXPOOL: (5-SKILL)d{-1,0:4,1}
if B=1{
      result: [sbcheck TENPOOL SIXPOOL]
   }
result:TENPOOL+SIXPOOL
}
output [sb 0 sp 1 skill 3 vs 4]
output [sb 1 sp 1 skill 3 vs 4]

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X