L’utilisation du CD_STATE_NOTVALID.
Pour s’assurer que les personnages ne parlent pas quand ils ne sont pas censés pouvoir le faire.
Pour s’assurer que les personnages ne parlent pas quand ils ne sont pas censés pouvoir le faire.
Note d'armand : Ce tutorial a été écrit il y a déjà quelques années par phoeunix, je le reproduis ici aujourd'hui avec son aimable autorisation. Merci à lui.
Voici la traduction d'un tutoriel écrit par K'aeloree sur le forume SHS, avec son aimable autorisation.
Ce tutoriel explique l’utilisation du CD_ STATE_NOTVALID, et pourquoi vous devriez l’utiliser.
Introduction.
Dans les scripts originaux, il existe une fonction appelée "IsValidForPartyDialogue()". Elle est utilisée tout au long de SoA et ToB ; cependant, elle ne fonctionne pas correctement quand elle est utilisée pour le personnage qui initie le dialogue. Par exemple, Minsc et Aerie ont un dilaogue avec Delon que Minsc initie ; toute vérification de IsValidForPartyDialogue("Minsc") se trouverait fausse.
Avec ce problème en tête, CamDawg, administrateur de G3, a trouvé un moyen de vérifier si les personnages ne sont PAS disponible pour un dialogue de groupe, et il a créé le CD_ STATE_NOTVALID, qui est utilisé dans la plupart des mods PNJ récents.
Quand devrais-je utiliser cette fonction et pourquoi ?
Pour commencer, CD_ STATE_NOTVALID se comprend facilement : CD est le préfixe de CamDawg, et CD_ STATE_NOTVALID signifie "Le personnage n’est pas disponible pour dialoguer".
Pour s’en servir, il suffit d’ajouter une simple ligne de code dans les triggers :
Code : Tout sélectionner
!StateCheck("MyNPC",CD_STATE_NOTVALID)
Ceci peut être assez déroutant, puisqu’il s’agit d’une formulation doublement négative : cela signifie "si le personnage n’est pas pas disponible pour le dialogue." En d’autres termes, "Si le PNJ est disponible pour le dialogue."
En utilisant cette ligne de code, on peut vérifier toutes sortes de choses qui pourraient empêcher un personnage de dialoguer : être mort, endormi, étourdi, réduit au silence, pétrifié etc. Ceci en fait un outil très utile, car cela signifie qu’il n’y a plus besoin de vérifier chaque état (STATE) individuellement.
Un exemple de l’usage de CD_STATE_NOTVALID dans un banter de Xan pour BG2 SoA et ToB, par Xyluok :
Code : Tout sélectionner
CHAIN
IF ~InParty("Keldorn")
See("Keldorn")
!StateCheck("Keldorn",CD_STATE_NOTVALID)
!StateCheck("O#Xan",CD_STATE_NOTVALID)
CombatCounter(0)
!See([ENEMY])
Global("O#XanKeldorn1","GLOBAL",0)~ THEN BO#XAN O#XanKeldorn1
@3214
DO ~SetGlobal("O#XanKeldorn1","GLOBAL",1)~
== BKELDOR @3215
== BO#XAN @3216
== BKELDOR @3217
== BO#XAN @3218
== BKELDOR @3219
== BO#XAN @3220
== BKELDOR @3221
== BO#XAN @3222
EXIT
Que dois-je faire pour pouvoir l’utiliser ?
Pour pouvoir vous servir de CD_STATE_NOTVALID, il faut ajouter un tout petit morceau de code dans votre .tp2, avec l’aimable autorisation de CamDawg.
Note : Vérifier que vous ajoutez ce bout de code avant de compiler vos scripts ou dialogues contenant CD_STATE_NOTVALID dans votre .tp2, sinon cela créera des erreurs.
Code : Tout sélectionner
// Adds CD_STATE_NOTVALID state
APPEND ~STATE.IDS~ ~0x80101FEF CD_STATE_NOTVALID~
UNLESS ~CD_STATE_NOTVALID~
C’est tout ! Une fois que vous avez ce bout de code dans votre .tp2, vous pouvez utiliser CD_STATE_NOTVALID n’importe où dans les dialogues et les scripts.