12. Le journal de bord d'une aventure catastrophique
Maintenant que nous avons vu les conversations, on peut s'atteler au journal du joueur ; à savoir : la liste des quêtes. Allez dans le menu « Tools » et sélectionnez Journal Editor.
Pour notre module de test, nous allons faire deux quêtes. Vous remarquerez que l'éditeur de Journal fonctionne à peu près de la même manière que l'éditeur de conversation. Cliquez sur le bouton Add (premier bouton de la palette de gauche) deux fois d'affilées.
Vous allez ainsi créer deux catégories : chacune contient un nom (Name), un Tag, une priorité et l'expérience que l'on gagne si on fini la quête. Nous avons crée deux quêtes : « Parler à Vifur du temps qu'il fait », et « Parler à Vifur et lui poser deux questions ». Nous avons mis 100 points d'expérience pour les deux quêtes.
Allez sur le noeud « Parler à Vifur du temps qu'il fait » et cliquez sur le bouton Add : vous ajouterez un descriptif à votre quête. Rentrez ceci : « Vifur m'a demandé de lui demander quel temps il fait... je lui ai demandé ...et pis voilà ! » et cochez la case « Finish Category » : il n'y aura qu'une seule sous quête à faire pour finir la quête.
Allez sur la seconde quête : rentrez deux éléments (par exemple : « j'ai répondu à la question X ») le deuxième élément devra fermer la quête.
Nous avons maintenant nos deux quêtes : nous allons les inclure dans la conversation de Vifur : sur le premier Noeud, sélectionnez l'onglet Other Actions : vous y trouverez le journal. Sélectionnez la quête « Parler à Vifur du temps qu'il fait ». Vous remarquerez que dés que vous parlez à Vifur vous placerez la quête dans votre journal en temps que quête finie. Ce qui veut dire qu'une quête est composée d'au moins deux éléments (que l'on a appelé sous quêtes, même si ce n'est pas exact) dont le dernier devra avoir la mention « Finish Category » pour indiquer que cela ira dans les quêtes finies : nous modifions donc notre journal en conséquence. Nous avons simplement mis la fin de quête lorsque Vifur vous indique quel temps il fait. (Pour modifier le journal, cliquez sur Edit dans l'onglet Other Actions). Notez bien que vous pouvez avoir plusieurs « finisseurs de quêtes » : dans notre exemple, on aurait pu créer 3 sous quêtes indiquant le temps donné par Vifur. Il suffit juste de cocher la case « Finish Category » pour ces 3 quêtes et mettre leur Id dans la case.
Note : il semble que l'expérience de la quête ne soit pas automatiquement donné. Il vous faut donc utiliser un script : nommez le « tutfr_givexp » et rentrez ceci :
void GiveXPFromJournal( string sJournalRef );
void GiveXPFromJournal( string sJournalRef )
{
string sJournalTRef = "oEntryJournal" + sJournalRef;
int bCanGiveXp = GetLocalInt( GetModule(), sJournalTRef );
if ( bCanGiveXp == FALSE )
{
int iXp = GetJournalQuestExperience( sJournalRef );
GiveXPToCreature(GetPCSpeaker(), iXp );
SetLocalInt( GetModule(), sJournalTRef, 1 );
}
}
Note : lors de nos essais, le fait d'utiliser dans le menu « Build », l'option « Build Module » nous affichait toujours une erreur sur le script tutfr_givexp. (L'éditeur avait l'air de croire que ce fichier était utilisé pour tester une condition « Text appear when »)
Ce script ne servira pas pour la créature ! Il va être inclut. Son utilisation dans un événement causera une erreur. Dans la conversation, allez dans l'onglet Actions Taken, éditez le script (nous l'avons nommé tutfr_weather même si tutfr_q_weather serait plus juste (q pour quest)) et rentrez ceci :
#include "tutfr_givexp"
void main()
{
GiveXPFromJournal( "Category000" );
}
Cela donnera l'expérience si la variable locale « oEntryJournalCategory000 » lié à l'objet Module n'est pas définie.
En testant le module, vous remarquerez que le jeu n'ajoutera qu'une fois la quête même si elle est finie : en d'autres termes, vous n'avez pas réellement besoin de vérifier si celle-ci existe déjà ou non dans le journal.
Maintenant, nous allons ajouter notre seconde quête : cependant, vu son caractère, c'est-à-dire le fait qu'il y ait un ordre dans nos sous quêtes, on va devoir utiliser les scripts. Nous utiliserons les questions « J'ai besoin d'argent ? » et « vous vendez quoi ?». Nous nommerons nos deux scripts « tutfr_q2_quest1 » et « tutfr_q2_quest2 ». (Note : nous utilisons les scripts que parce que notre exemple de conversation tel quel ne nous permet pas de faire autrement)
Créez un nouveau script, que vous mettrez sur le noeud « A un de ces jours», vous le nommerez « tutfr_q2_givexp ».
Voici le contenu des trois fichiers :
Tutfr_q2_quest1 :
void main()
{
string sQuest1 = "oEntryJournalCategory001Sq2";
string sQuest2 = "oEntryJournalCategory001Sq1";
object oSpeaker = GetPCSpeaker();
object oModule = GetModule();
int bOtherSubQuest = GetLocalInt( oModule, sQuest1 );
int bCurrentSubQuest = GetLocalInt( oModule, sQuest2 );
string sCat1 = "Category001";
if ( bCurrentSubQuest == FALSE )
{
if ( bOtherSubQuest == TRUE )
{
AddJournalQuestEntry( sCat1, 2, oSpeaker, TRUE, TRUE );
}
else
{
AddJournalQuestEntry( sCat1, 1, oSpeaker, TRUE, TRUE );
}
SetLocalInt( oModule, sQuest2, TRUE );
}
}
Tutfr_q2_quest2 :
void main()
{
string sQuest1 = "oEntryJournalCategory001Sq1";
string sQuest2 = "oEntryJournalCategory001Sq2";
object oModule = GetModule();
int bOtherSubQuest = GetLocalInt( oModule, sQuest1 );
int bCurrentSubQuest = GetLocalInt( oModule, sQuest2 );
object oSpeaker = GetPCSpeaker();
string sCat1 = "Category001";
if ( bCurrentSubQuest == FALSE )
{
if ( bOtherSubQuest == TRUE )
{
AddJournalQuestEntry( sCat1, 2, oSpeaker, TRUE, TRUE );
}
else
{
AddJournalQuestEntry( sCat1, 1, oSpeaker, TRUE, TRUE );
}
SetLocalInt( oModule, sQuest2, TRUE );
}
}
tutfr_q2_givexp:
#include "tutfr_givexp"
void main()
{
string sQuest2 = "oEntryJournalCategory001Sq2";
string sQuest1 = "oEntryJournalCategory001Sq1";
int bQuest1 = GetLocalInt( GetModule(), sQuest1 );
int bQuest2 = GetLocalInt( GetModule(), sQuest2 );
string sCat1 = "Category001";
if ( bQuest1 == TRUE && bQuest2 == TRUE )
{
GiveXPFromJournal( sCat1 );
}
}