Faire des jets de compétence.

Tout d’abord, si vous ne savez pas comment un jet de compétence est fait dans D&D 3, voilà une rapide explication :

A chaque fois que vous essayez d’accomplir une action en utilisant vos compétences, vous lancez un d20 (un dé à 20 faces numérotées de 1 à 20) et vous rajoutez à ce résultat votre rang dans cette compétence et votre bonus dans la caractéristique liée à cette compétence. Plus le résultat est élevé mieux c’est, et vous essayez d’égaler ou de dépasser un DC « difficulty class » (en français DD « degré de difficulté ») un nombre qui a été décidé par le DM.

Admettons qu’un joueur veut utiliser sa compétence de désamorçage (Disable Traps skill) sur un piège qu’il a découvert. Le DM fixe le DC à 25 (une tache moyennement difficile). Le joueur a un rang de 8 dans cette compétence et un modificateur de +3 en dextérité (la caractéristique lié à la compétence de désamorçage). Il lance un d20 et ajoute +11 à ce jet, il a besoin de faire 14 ou plus pour réussir cette tache.
Pour des choses tels que le désamorçage et beaucoup d’autres compétences, le jet est pris en main par le moteur du jeu et souvent, la seule chose demandée au DM est le DC.

Cependant, Il n’y a pas dans les scripts de NWN une commande automatique qui fait ces jets pour vous si vous utilisez une compétence dans un script (que ce soit pour vérifier le succès d’une persuasion dans un dialogue ou tout autre utilisation de compétence qui n’est pas pris en charge automatiquement). Si vous voulez les utiliser, vous devez soit avoir un script qui le fait, soit utiliser la fonction que nous avons faite dans la campagne officielle.

La campagne de la campagne officielle
La chose que certain peuvent ne pas aimer à propos de la commande AutoDC est que le DC est généré automatiquement…il n’est pas spécifié à chaque fois. Quand le scripteur utilise cette commande, il spécifie DC_EASY, DC_MEDIUM ou DC_HARD et le DC est généré en fonction du niveau du PC.

La syntaxe est la suivante:

int AutoDC(int DC, int nSkill, object oTarget)

Donc si je veux faire une persuasion difficile avec le NPC avec qui le PC parle, je peux utiliser ceci:


AutoDC(DC_HARD, SKILL_PERSUADE, GetPCSpeaker());

Un commentaire ici, le let de compétence renvoie un integer (the int) parce que la commande doit renvoyer soit TRUE soit FALSE. FALSE (ou un '0'integer) signifie que le jet est un échec. TRUE (ou un '1' integer) signifie qu’il est réussi.
Si vous voulez utiliser un jet de compétence dans le « dialogue editor », vous devez « séparer » la conversation…ca veut dire que pour une même réponse du PC, il doit y avoir plus d’un dialogue du NPC. Quand le dialoque est présenté comme ceci, il regarde le script dans « Text Appears when », en commençant par le nœud du haut et descendant jusqu’en bas. Le premier script qui renvoie TRUE (ou qui n’a pas de script), il l’utilise.
Un exemple de script avec un jet de persuasion facile :

#include "NW_I0_PLOT"
int StartingConditional()
{

int iCheck = AutoDC(DC_HARD, SKILL_PERSUADE, GetPCSpeaker()) == TRUE;
return iCheck;
}

Ainsi vous pourriez avoir quelquechose dans ce style:
"Oh,Je ne peux certainement pas vous le dire, c’est confidentiel."
A. <Persuade> "Oh, Je suis sur qu’il n’y a aucun mal à me le dire."
B. <Threaten> "Dite le moi ou vous en surpoterez les conséquences, jeune fille."
C. "Laissez moi vous dire quelque chose d’autre, alors."

Si je sélectionne l’option B, le dialoque se sépare en 2:
|
|
--> #1. (avec le script de persuasion dans 'Text Appears When') "Je suppose que vous avez raison. Ok, c’est comme ça..."
|
|
--> #2. (sans script) "Oubliez ça, je ne vous le dirais pas."
#1 si le jet a été réussi, #2 la partie en cas d’échec. Si le script en #1 renvoie TRUE, cette voie est suivie est le joueur aura réussi. L’autre voie n’a pas besoin de script…si la première voie était fause, ca voudrais dire que le PC a manqué son jet.

Ecrire votre propre fonction
Pour écrire votre propre jet de compétence, vous devez suivre la même logique que si vous vouliez faire le jet un JdR sur table. Vous avez besoin du bonus du PC pour le jet de dé, du dé et du DC (choisi par le DM)

Quelques commandes que vous pouvez utiliser :


//celle-ci renvoie le rang + le bonus de caractéristique de la cible
int GetSkillRank(int nSkill, object oTarget = OBJECT_SELF)
//celle-ci renvoie le niveau de la créature dans une classe particulière (comme par exemple CLASS_TYPE_FIGHTER). int GetLevelByClass(int nClassType, object oCreature = OBJECT_SELF)

//Celle-ci est pratique si vous voulez le niveau du PC sans tenir compte des classes. int GetHitDice(object oCreature)

//Celle-ci donne le modificateur d’une caractéristique particulière, pratique si vous voulez faire un jet de force
//uniquement, ou quelquechose de similaire..

int GetAbilityModifier(int nAbility, object oCreature = OBJECT_SELF)

De toute manière, voici un exemple de jet de premier secour (Heal skill) fait à la main (à placer à l’endroit voulu dans le dialogue):


int StartingConditional()
{

int iDC = 20; // ou ce que le DM veut mettre
int iBonus = GetSkillRank(SKILL_HEAL, GetPCSpeaker());
if ((d20() + iBonus) >= iDC)
{

return TRUE;
}
return FALSE;
}

Bien évidemment, ce n’est qu’un exemple…il y a une méthode pré construite pour utiliser les soins normalement (avec la commande ActionUseSkill)…ce type de script est fait pour les jets de dé personnalisés, que, je sais, les gens veulent faire.

__________________
Théranthil, Mage Elfe prêtre de Mystra Membre des GdE
Parti Elmotiste pour un parler jowilien: Ministre supérieur de la corruption

"Les langues vont toujours bon train. Les pieds ont du mal à suivre."
(les bourses aussi NdT )
Mespert de la porte de Baldur