Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

News: Plein d'images cools créées par (...) / Sorties: Star Trek: Glorious Wolf - (...) / Jeux: Final Fantasy 2.0 / Sorties: Dread Mac Farlane - episode 2 / Sorties: Star Trek: Glorious Wolf / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

287 connectés actuellement

29105638 visiteurs
depuis l'ouverture

13335 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

RPG Maker Détente

Planète Glutko

Eclipso

Hellsoft

New RPG Maker

Tous nos partenaires

Devenir
partenaire



Système de quête complet en évènement

Tutoriel valable pour les versions de RPG Maker 2003, XP, VX et VX Ace. Permet la création d'un système complet de quêtes. Elles peuvent avoir plusieurs étapes avant d'être finies.

Ecrit par cortez le 13/06/2021


❤ 2

Système de quête complet en évènement







Bonsoir les makeurs,

On va aborder un sujet délicat pour les débutants en making.
Faire un système de quête tout en évènement.
Il est possible de copier/coller un script trouvé sur le net.
Mais pour progrésser dans la manipulation du logiciel et en logique pure,
s'entrainer un peu ne fait pas de mal.

Ok, ceux qui sont resté après avoir vu la description, restez bien accroché car on commence.

La partie ci-dessous "les principes de fonctionnement" est fondamentale pour comprendre comment est conçu le système.
N'espérez pas passer cette étape et copier coller les commandes dans les évènements listé dans la partie "Codage"
sinon vous aurez un système qui fonctionne mais dont vous n'aurez aucune idée de comment le modifier ou ajouter des choses une fois le tuto fini.




I -Les principes de fonctionnement :

A -la philosophie du code générique.

Quèsaquo ?

Il s'agit ici de concevoir un système central d'évènements commun ou sur les maps.
Qui agissent en fonction d'une valeur qui leur est externe. Afin de ne pas avoir 300 copié/collé a faire avec 2 ou 3 valeur a changer.

Prenons un exemple :
Je veux effectuer un calcul pour récupérer un chiffre dans une variable.
Je sais que le chiffre en question sur la position des dizaines.

Event sur map

Citation:

Control Variables Variable 0005 [Argent] = argent possédé
Control Variables Variable 0005 [Argent] %= 100 (modulo)
Control Variables Variable 0005 [Argent] /= 10 (division)



Cela fonctionne mais deux choses :
1 -La valeur initiale de la Variable 0005 [Argent] est perdue entre le début et la fin des commandes.
2 -Je doit utiliser une variable dédié a l'argent, on en utilise vite beaucoup lors de la création de systèmes complexes.

Il faudrait mieux faire ceci :
Event sur map

Citation:

Control Variables Variable 0003 [Argent] = argent possédé
Control Variables Variable 0005 [Fourre-tout 1] = Variable 0003 [Argent]



Event commun

Citation:

Control Variables Variable 0005 [Fourre-tout 1] %= 100 (modulo)
Control Variables Variable 0005 [Fourre-tout 1] /= 10 (division)
Control Variables Variable 0004 [Resultat] = Variable 0005 [Fourre-tout 1]



Mais tu voulais utiliser moins de variables ? Ici j'en compte 3 alors qu'avant il y en avait 1 seule.

Oui c'est vrai, cependant cette façon de "coder" présente plusieurs avantages.
1 -Les variables fourre-tout sont des variables dont le contenu est temporaire. A chaque fois que l'on
appelle un évent qui les utilise leur valeur précédente disparait, donc elle ne sont utile que pour les "calculs"
2 -Le code que j'ai écrit peut être utilisé avec n'importe quelle VALEUR EN ENTRÉE. Ces trois lignes ont été écrite 1 fois et constitue un "outil" qui peux être appelé dans chaque cas ou j'ai besoin d'effectuer le même calcul.
3 -La variable résultat dont le contenu est temporaire (comme les fourre-tout) est ce qu'on appelle une VALEUR DE SORTIE. C'est avec ce résultat que je vais écrire mes conditions dans l'évent d'un marchand.
4 -La valeur de l'argent des PJ n'est pas perdue et peux être ré-utilisé sans appeler une nouvelle fois la commande "Control Variables Variable 0003 [Argent] = argent possédé"

Cette façon d'écrire permet de créer des outils que je peut ensuite appeler pour réduire la longueur des évent-commun.
Ceux qui ont appris un langage informatique savent que je reproduit ici le fonctionnement des fonctions.


B -La notion de pointeur et d'index

Les variables peuvent contenir environ 7 chiffres (de 1 000 000 à 9 999 999) mais cela dépend des versions de RM.
Ce serait un gain flexibilité si une variable unique pouvait contenir elle même 2 ou 3 variables récupérables ?

Commençons petit :
Lorsqu'une variable contient 4 chiffres (de 1000 à 9999) elle dispose de 3 position allant de 0 à 9.(centaines, dizaines, unités) et d'une position allant de 1 à 9 (les milliers)
On est restreint aux valeur 1 à 9 pour les milliers puisque RM supprime les 0 si ils ne sont pas précédés d'un chiffre non nul.
Exemple : 0001 devient 1 une fois mis dans une variable, donc on est forcé d'avoir un 1 (1001) en première position pour conserver les autres valeurs vides.

Avec cette seule variable et un peu d'astuce on peut donc stocker 4 informations différentes.
L'exemple de l'argent tout à l'heure vous a montré que l'on peut extraire une valeur d'une position connue. (On avait extrait les dizaines)
Les dizaines équivalent a l'index 3 (en partant de la gauche) dans les valeurs de la variable argent.

Maintenant que l'on sait comment stocker des valeurs et les retrouver, voyons ce que nous avons besoin.
Il nous faut un ID de quête (le numéro associé à la quête) je suis parti sur 999 quêtes maximum donc il nous faut 3 positions.
Il nous faut également gérer les étapes d'une quête, il peut-y avoir plusieurs partie dans une seule quête. Je me suis contenté d'une seule position.

Si l'on part sur 4 index, notre variable de stockage est comprise entre 1000 et 9999.
Étant donné que l'on peut avoir une quantité de quête entre 001 et 999 on doit utiliser des positions allant de 0 à 9.
Et donc l'index 1 (limité aux chiffres entre 1 et 9) est attribué a l'étape de la quête. (9 étapes possible sur une quête c'est suffisant)

Pourquoi faire tout cela ?
Je suis parti du principe que nos héros soient limités dans le nombre de quête active en simultané.(dans le tuto 3 maxi) Cela permet de focaliser l'attention du joueur sur quelques quêtes.
De plus, si 3 quêtes sont active en même temps il n'est pas possible d'en prendre plus. Cela force a finir les quêtes commencées (mais implique de concevoir des quêtes intéréssantes)

Nos 3 variables "slot de quete" contiendront l'id de la quete accéptée et l'étape ou en est le joueur.(d'ou les 4 chiffres/index de ces variables)


C -Référence indirecte a une variable.

On ne peut pas y échapper si on utilise beaucoup de variable. Faire référence a une variable A par son numéro qui est stocké dans une variable B est une chose qui manque cruellement dans les RM modèrnes.(Rm2k3 possède cette fonction, lui)

Un exemple pour y voir clair : (valable pour VX, VxAce et XP)

Citation:

Script . . . $game_variables[$game_variables[15]] += 1000


{on panique pas ! "A += 1000" signifie juste "la valeur de A + 1000"}

Mettons que la variable numéro [15] vaut 9, alors la ligne de script équivaut à

Citation:

Script . . . $game_variables[9] += 1000


Donc on ajoute à la variable numéro [9] la valeur 1000.

On vient d'utiliser une variable numéro 15 pour faire référence à une autre variable 9 et en modifier la valeur. (ajouter 1000)


D - Utilisation d'étiquettes (label en anglais)

Dans ce tuto on utilise des étiquettes.
Cela fonctionne comme des marques pages d'un livre (le livre étant toutes les commandes de l'évènement commun).
les commandes sont lues de haut en bas en temps normal depuis le début de l'évènement jusqu'a la fin. Cependant les étiquettes cassent cette règle et permettent d'exécuter les commandes dans l'ordre que l'on veut.

Exemple on s'imagine que l'on est a la place de rpgmaker et que c'est nous qui devons lire et jouer chaqune des commandes d'un évent. Simplifions également en disant que l'évènement est un livre sur lequel chaque page ne contien qu'une ligne de commande d'évènement.

Donc on commence par lire le commentaire en page 1 (on ne fait rien), puis on passe a la page 2
C'est écrit "Wait 16 frames", ok donc on attend 16 frames.
Et ainsi de suite puis arrive la page avec la commande Go to label TRUC, On cherche dans le livre la page contenant la commande label TRUC c'est notre fameux marque page.
Ensuite on reprend la lecture après la page label TRUC.

Pour illustrer d'avantage voici un petit évent avec sur la partie gauche l'ordre de "lecture" des commandes.
1 Commentaire : il fait beau
2 Attendre 16 frames
3 Go to label TRUC
_ Afficher un message : "On ne me verra jamais"
4 Label TRUC
5 Attendre 4 frames

Il est possible de créer une boucle sans le savoir. Ici la commande Attendre 16 frames se répètera a l'infini.
1 Commentaire : il fait beau
2 et 5 Label TRUC
3 et 6 Attendre 16 frames
4 et 7 Go to label TRUC
_ Afficher un message : "On ne me verra jamais"



Prenez le temps de digérer ce préambule, il était velu et n'hésitez pas a le relire plusieurs fois pour bien comprendre.
...
..
.
C'est bon vous êtes revenus ? On attaque le "code" évenementiel.




II -Les évenements :

On va utiliser les variables 4 à 18 et pensez a réserver les variables 101 à 199 (on doit jamais écrire dedans ailleurs dans le jeu.)
Cela est pour un système à 99 quêtes, pour plus de quêtes il faudra adapter le code et réserver des variable entre 1001 et 1999 par exemple.

D'abord nos outils dont le fonctionnement va vous rappeler quelque chose. (il est important de les nommer afin de s'y retrouver lorsqu'on les appelent.)
Le commentaire est super important, si vous voulez comprendre comment on se sert de l'outil/event commun.

Citation:


Common Event Extrait unités
Comment #===================#
Comment # Extrait le chiffre des unités #
Comment # Usage : #
Comment # input 0005:Fourre-tout 1 #
Comment # ouput 0004:Resultat #
Comment #===================#
Control Variables Variable 0005 [Fourre-tout 1] %= 10
Control Variables Variable 0004 [Resultat] = Variable 0005 [Fourre-tout 1]


Note : Variable 0005 [Fourre-tout 1] %= 10 signifie que l'on fait un modulo 10 de la variable 5 [Fourre-tout 1]

Citation:

Common Event Extrait dixaines
Comment #====================#
Comment # Extrait le chiffre des dixaines #
Comment # Usage : #
Comment # input 0005:Fourre-tout 1 #
Comment # ouput 0004:Resultat #
Comment #====================#
Control Variables Variable 0005 [Fourre-tout 1] %= 100
Control Variables Variable 0005 [Fourre-tout 1] /= 10
Control Variables Variable 0004 [Resultat] = Variable 0005 [Fourre-tout 1]


Note : Variable 0005 [Fourre-tout 1] /= 10 signifie que l'on divise par 10 la valeur de la variable 5 [Fourre-tout 1]

Citation:

Common Event Extrait centaine
Comment #=====================#
Comment # Extrait le chiffre des centaines #
Comment # Usage : #
Comment # input 0005:Fourre-tout 1 #
Comment # ouput 0004:Resultat #
Comment #=====================#
Control Variables Variable 0005 [Fourre-tout 1] %= 1000
Control Variables Variable 0005 [Fourre-tout 1] /= 100
Control Variables Variable 0004 [Resultat] = Variable 0005 [Fourre-tout 1]



Citation:

Common Event Extrait mille
Comment #====================#
Comment # Extrait le chiffre des milliers #
Comment # Usage : #
Comment # input 0005:Fourre-tout 1 #
Comment # ouput 0004:Resultat #
Comment #====================#
Control Variables Variable 0005 [Fourre-tout 1] %= 10000
Control Variables Variable 0005 [Fourre-tout 1] /= 1000
Control Variables Variable 0004 [Resultat] = Variable 0005 [Fourre-tout 1]



Il est possible de continuer sur les dizaines de milliers et au-delà (il faut juste ajouter un zéro a chaque fois pour les opérations mathématiques de Fourre-tout)
Récupérer les valeurs c'est bien, mais on peut aussi "automatiser" quelques vérifications et modifications de variables.


Celui-là permet de gérer un évent qui affiche un "!" au dessus des PNG qui ont une interaction avec l'une des quêtes active.


Citation:

Common Event Control quete active
Comment Conçu pour fonctionner avec l'event 26 de la map
Comment
Comment .
Control Variables Variable 0006 [Fourre-tout 2] = Variable 0010 [Quete active 1]
Common Event Common Event 011 (GET ID quest active)
Conditional Branch IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Self Switch . Self Switch A = true
End Conditional Branch end condition
Control Variables Variable 0006 [Fourre-tout 2] = Variable 0011 [Quete active 2]
Common Event Common Event 011 (GET ID quest active)
Conditional Branch IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Self Switch . Self Switch A = true
End Conditional Branch end condition
Control Variables Variable 0006 [Fourre-tout 2] = Variable 0012 [Quete active 3]
Common Event Common Event 011 (GET ID quest active)
Conditional Branch IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Self Switch . Self Switch A = true
End Conditional Branch end condition



On l'appele après avoir mis une variable à jour avec l'id de quete (ici on gère la quête 1).
L'évent commun vérifie parmi les quêtes active si la quête 1 est présente.
Si oui on active le self-switch A de l'event 26, qui passe a la page 2. (sa fonctionne sur VxAce pas testé sur les autres.)
En page 2 on boucle sur l'affichage du "!" (via animation sur le PNG 21) et si une quête se termine (valeur 5000 sur la variable [4]) on désactive a nouveau la page.

Cela parait risqué avec 2 PNG lié a des quêtes sur la même map. Au pire les effets "!" s'arrêtent (fin de page 2) mais recommence dès que la page 1 recheche les quêtes actives.

Citation:

EV026 - Quest System Page 1 Control Variables Variable 0013 [ID quete recherché] = 1
Common Event Common Event 010 (Control quete active)

Page 2 Condition Self Switch Self Switch A is ON
Show Animation 111 (=!=) on Event 21
Wait 16 frames
Conditional Branch IF Variable 0004 [Resultat] == 5000
Control Self Switch . Self Switch A = false
End Conditional Branch end condition



Cet évent de map est copiable a l'envie, il faut ajuster 2 valeurs :
Variable 0013 [ID quete recherché] = ID de la quête
Show Animation 111 (=!=) on Event XX (png de quête sur la map)


La fameuse extraction de l'ID de quête

Citation:

Common Event GET ID quest active
Comment #===================#
Comment # Recupère ID de quete active #
Comment # Usage : #
Comment # input 0005:Fourre-tout 2 #
Comment # ouput 0004:Resultat #
Comment #===================#
Control Variables Variable 0005 [Fourre-tout 1] = Variable 0006 [Fourre-tout 2]
Common Event Common Event 025 (Extrait centaine)
Control Variables Variable 0004 [Resultat] *= 100
Control Variables Variable 0007 [Fourre-tout 3] = Variable 0004 [Resultat]
Control Variables Variable 0005 [Fourre-tout 1] = Variable 0006 [Fourre-tout 2]
Common Event Common Event 024 (Extrait dixaines)
Control Variables Variable 0004 [Resultat] *= 10
Control Variables Variable 0007 [Fourre-tout 3] += Variable 0004 [Resultat]
Control Variables Variable 0005 [Fourre-tout 1] = Variable 0006 [Fourre-tout 2]
Common Event Common Event 023 (Extrait unités)
Control Variables Variable 0007 [Fourre-tout 3] += Variable 0004 [Resultat]
Control Variables Variable 0004 [Resultat] = Variable 0007 [Fourre-tout 3]



Ici on récupère l'id de la quête en cours, voici un exemple pour mieux comprendre
[Quete active 1] vaut 1021
La centaine vaut 0 x 100 = 0
[Resultat] vaut donc 0
La dixaine vaut 2 x 10 = 20
[Resultat] vaut 0 + 20 = 20
L'unité vaut 1
[Resultat] vaut 1 + 20 = 21
21 est bien l'id de notre quête active.


Et celle d'extraction de l'étape active.

Citation:

Common Event GET STEP quest active
Comment #======================#
Comment # Récupere STEP de quête active #
Comment # Usage : #
Comment # input 0005:Fourre-tout 2 #
Comment # ouput 0004:Resultat #
Comment #======================#
Control Variables Variable 0005 [Fourre-tout 1] = Variable 0006 [Fourre-tout 2]
Common Event Common Event 026 (Extrait mille)
Control Variables Variable 0007 [Fourre-tout 3] = Variable 0004 [Resultat]
Control Variables Variable 0004 [Resultat] = Variable 0007 [Fourre-tout 3]



Pas trop compliqué ici on récupère le chiffre des milliers pour connaitre l'étape de quête.


Et enfin la gestion de quête, l'évent commun qui regroupe toutes les quêtes (texte et récompences)

Citation:

Common Event Quêtes ID [1-9]
Comment Initialise
Comment
Comment .
Control Variables Variable 0004 [Resultat] = 0
Comment
Comment .
Conditional Branch IF Switch 0001 [Quete Verif Objectif] is ON
Comment . Mode vérif objectif
Comment .
Comment . Vérification parmis les 3 quetes actives.
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0010 [Quete active 1]
Common Event . Common Event 011 (GET ID quest active)
Comment .
Comment . Si ID quete active 1 est 001
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Variables . . Variable 0015 [Quete active index var] = 10
Jump to Label . . VERIF STEP
End Conditional Branch . end condition
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0011 [Quete active 2]
Common Event . Common Event 011 (GET ID quest active)
Comment .
Comment . Si ID quete active 2 est 001
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Variables . . Variable 0015 [Quete active index var] = 11
Jump to Label . . VERIF STEP
End Conditional Branch . end condition
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0012 [Quete active 3]
Common Event . Common Event 011 (GET ID quest active)
Comment .
Comment . Si ID quete active 2 est 001
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Variables . . Variable 0015 [Quete active index var] = 12
Jump to Label . . VERIF STEP
End Conditional Branch . end condition
End Conditional Branch end condition
Conditional Branch IF Switch 0002 [Quete Recap Objectif] is ON
Comment . Mode affichage objectif
Comment .
Comment . Boucle sur les 3 quetes actives simultanée.
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0010 [Quete active 1]
Common Event . Common Event 011 (GET ID quest active)
Script . $game_variables[4] += 100
Script . $game_variables[16] = $game_variables[4]
Common Event . Common Event 012 (GET STEP quest active)
Script . $game_variables[$game_variables[16]] = $game_variables[4]
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0011 [Quete active 2]
Common Event . Common Event 011 (GET ID quest active)
Script . $game_variables[4] += 100
Script . $game_variables[17] = $game_variables[4]
Common Event . Common Event 012 (GET STEP quest active)
Script . $game_variables[$game_variables[17]] = $game_variables[4]
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0012 [Quete active 3]
Common Event . Common Event 011 (GET ID quest active)
Script . $game_variables[4] += 100
Script . $game_variables[18] = $game_variables[4]
Common Event . Common Event 012 (GET STEP quest active)
Script . $game_variables[$game_variables[18]] = $game_variables[4]
Jump to Label . AFFICHE OBJECTIF
End Conditional Branch end condition
Jump to Label FIN
Comment
Comment
Comment PARTIE 1 - CONTENU ACTIF
Comment
Comment .
Label VERIF STEP
Comment
Comment
Comment Quete 1 ID X001 - 2 steps
Comment 1 -Aller au temple de l'est pour recevoir son pvr de mana.
Comment 2 -Quete terminée
Conditional Branch IF Variable 0004 [Resultat] == 1
Common Event . Common Event 012 (GET STEP quest active)
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0014 [STEP quete recherché]
Conditional Branch . . IF Variable 0004 [Resultat] == 1
Comment . . .
Comment . . . On est bien en STEP 1, on affiche un message d'accomplissement
Comment . . . de quete et on passe en step 2.
Play ME . . . Fanfare3; Volume 100 Pitch 100
Show Text . . . Face: none (index 0) on dim background at middle
Show Text . . . \c[21]Quête Accomplie\c[0]\.
Show Text . . . Trouver le temple de la foret à l'est de Valenia.
Show Text . . . Puis parler à la prêtresse.\|
Show Text . . . 5 xp - 50 \i[262]
Change EXP . . . All actors + 5 (show level up message)
Change Gold . . . + 50
Script . . . $game_variables[$game_variables[15]] += 1000
Comment . . .
Comment . . . On exécute la fin de quete avec le rc=5000
Control Variables . . . Variable 0004 [Resultat] = 5000
Jump to Label . . . FIN
End Conditional Branch . . end condition
End Conditional Branch . end condition
End Conditional Branch end condition
Comment
Comment
Comment PARTIE 2 - CONTENU PASSIF
Comment
Comment .
Label AFFICHE OBJECTIF
Comment
Comment
Comment Quete 1 ID X001 - 2 steps
Comment 1 -Aller au temple de l'est pour recevoir son pvr de mana.
Comment 2 -Quete terminée
Conditional Branch IF Variable 0101 [Reservé 101 à 199] != 0
Conditional Branch . IF Variable 0101 [Reservé 101 à 199] == 1
Comment . .
Comment . . On est bien en STEP 1, on affiche ce que l'on doit faire.
Show Text . . Face: none (index 0) on dim background at middle
Show Text . . \c[24]Quête en cours\c[0]
Show Text . . Trouver le temple de la foret à l'est de Valenia.
Show Text . . Puis parler à la prêtresse.
Show Text . . 5 xp - 50 \i[262]
End Conditional Branch . end condition
End Conditional Branch end condition
Label FIN
Control Switches Switch 0001 [Quete Verif Objectif] = OFF
Control Switches Switch 0002 [Quete Recap Objectif] = OFF




Cet évenement est le plus complexe de tous, je le découpe pour que tout le monde comprenne.

Il est composé de 4 parties : Initialisation / Test des interrupteurs / Obtenir récompences / Voir objectif /
selon l'interrupteur actif avant d'appeler l'évenement commun on exécute certaines parties.

Citation:

Comment Initialise
Comment
Comment .
Control Variables Variable 0004 [Resultat] = 0
Comment
Comment .


Ici l'initialisation des valeurs cette partie est obligatoire, on s'assure que la variable [Resultat] vaut 0.

Pour la suite, la structure est la suivante

Initialisation

Test Quete Verif Objectif
Test Quete Recap Objectif

Partie Quete Verif Objectif

Partie Quete Recap Objectif

fin

Traduit en rpg maker, on utilise les étiquettes.
Initialisation

Test Quete Verif Objectif (si oui go to label VERIF STEP)
Test Quete Recap Objectif (si oui go to label AFFICHE OBJECTIF)
si aucun des 2 go to Label FIN

label VERIF STEP
Partie Quete Verif Objectif
go to Label FIN

label AFFICHE OBJECTIF
Partie Quete Recap Objectif
Label FIN

fin
Label FIN

Lorsque l'on parle a un PNJ pour valider une étape de quête, rend la Variable 0013 [ID quete recherché] égale a la quête que le PNJ accèpte et aussi la Variable 0014 [STEP quete recherché] pour indiquer quelle étape le PNJ recherche.
On active ensuite l'interrupteur 0001 [Quete Verif Objectif] et on appele l'évent commun Quêtes ID [1-9]

On a choisi pour quelle quête on donne les récompences via la Variable 0013 [ID quete recherché] donc on cherche si la quête existe parmis les quêtes acceptés par le joueur.

Citation:


Conditional Branch IF Switch 0001 [Quete Verif Objectif] is ON
Comment . Mode vérif objectif
Comment .
Comment . Vérification parmis les 3 quetes actives.
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0010 [Quete active 1]
Common Event . Common Event 011 (GET ID quest active)
Comment .
Comment . Si ID quete active 1 est égal à [ID quete recherché]
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Variables . . Variable 0015 [Quete active index var] = 10
Jump to Label . . VERIF STEP
End Conditional Branch . end condition
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0011 [Quete active 2]
Common Event . Common Event 011 (GET ID quest active)
Comment .
Comment . Si ID quete active 2 est égal à [ID quete recherché]
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Variables . . Variable 0015 [Quete active index var] = 11
Jump to Label . . VERIF STEP
End Conditional Branch . end condition
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0012 [Quete active 3]
Common Event . Common Event 011 (GET ID quest active)
Comment .
Comment . Si ID quete active 3 est égal à [ID quete recherché]
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0013 [ID quete recherché]
Control Variables . . Variable 0015 [Quete active index var] = 12
Jump to Label . . VERIF STEP
End Conditional Branch . end condition
End Conditional Branch end condition



On zappe tout le reste de l'évent pour éxécuter la partie suivante :

Citation:

Comment PARTIE 1 - CONTENU ACTIF
Comment
Comment .
Label VERIF STEP
Comment
Comment
Comment Quete 1 ID X001 - 2 steps
Comment 1 -Aller au temple de l'est pour recevoir son pvr de mana.
Comment 2 -Quete terminée
Conditional Branch IF Variable 0004 [Resultat] == 1
Common Event . Common Event 012 (GET STEP quest active)
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0014 [STEP quete recherché]
Conditional Branch . . IF Variable 0004 [Resultat] == 1
Comment . . .
Comment . . . On est bien en STEP 1, on affiche un message d'accomplissement
Comment . . . de quete et on passe en step 2.
Play ME . . . Fanfare3; Volume 100 Pitch 100
Show Text . . . Face: none (index 0) on dim background at middle
Show Text . . . \c[21]Quête Accomplie\c[0]\.
Show Text . . . Trouver le temple de la foret à l'est de Valenia.
Show Text . . . Puis parler à la prêtresse.\|
Show Text . . . 5 xp - 50 \i[262]
Change EXP . . . All actors + 5 (show level up message)
Change Gold . . . + 50
Script . . . $game_variables[$game_variables[15]] += 1000
Comment . . .
Comment . . . On exécute la fin de quete avec le rc=5000
Control Variables . . . Variable 0004 [Resultat] = 5000
Jump to Label . . . FIN
End Conditional Branch . . end condition
End Conditional Branch . end condition
End Conditional Branch end condition



Si la variable [Resultat] vaut 1 c'est que la quête active est la numéro 1 et qu'en plus on parle au bon PNJ, on joue l'évent commun (GET STEP quest active) afin de savoir quelle étape est en cours graçe a la Variable 0014 [STEP quete recherché] que l'on a renseigné un peu plus tôt.
Une fois que tous les test de variable sont fait, on sait que le joueur est a l'étape 1 de la quête 1. On distribue les récompences directement via l'évent commun (on centralise un max)
A cette étape, la variable 15 contient l'id de la variable qui stocke la quête en cours (donc soit 10 soit 11 ou 12). Pour valider l'étape de la quête, on ajoute 1000 à la variable visée par la variable 15. Ce qui correspond a passer la quête 1 en étape 2.
Ensuite notre quête 1 n'a qu'une étape, elle est donc terminée donc on rend la variable [Resultat] égale à 5000 ce qui active notre évenement 26 sur la map du PNJ et désactive le point d'exclamation au dessus.

Citation:

EV026 - Quest System Page 1 Control Variables Variable 0013 [ID quete recherché] = 1
Common Event Common Event 010 (Control quete active)

Page 2 Condition Self Switch Self Switch A is ON
Show Animation 111 (=!=) on Event 21
Wait 16 frames
Conditional Branch IF Variable 0004 [Resultat] == 5000
Control Self Switch . Self Switch A = false
End Conditional Branch end condition



A la place de donner des récompenses, il est possible de vérifier les quêtes actives. Comme lorsque l'on consulte le journal des quêtes pour vérifier quel est l'objectif suivant.
Pour cela on a juste besoin d'activer l'interrupteur [Quete Recap Objectif] puis d'appeler l'évent commun Quêtes ID [1-9]

Citation:

Conditional Branch IF Switch 0002 [Quete Recap Objectif] is ON
Comment . Mode affichage objectif
Comment .
Comment . Boucle sur les 3 quetes actives simultanée.
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0010 [Quete active 1]
Common Event . Common Event 011 (GET ID quest active)
Script . $game_variables[4] += 100
Script . $game_variables[16] = $game_variables[4]
Common Event . Common Event 012 (GET STEP quest active)
Script . $game_variables[$game_variables[16]] = $game_variables[4]
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0011 [Quete active 2]
Common Event . Common Event 011 (GET ID quest active)
Script . $game_variables[4] += 100
Script . $game_variables[17] = $game_variables[4]
Common Event . Common Event 012 (GET STEP quest active)
Script . $game_variables[$game_variables[17]] = $game_variables[4]
Control Variables . Variable 0006 [Fourre-tout 2] = Variable 0012 [Quete active 3]
Common Event . Common Event 011 (GET ID quest active)
Script . $game_variables[4] += 100
Script . $game_variables[18] = $game_variables[4]
Common Event . Common Event 012 (GET STEP quest active)
Script . $game_variables[$game_variables[18]] = $game_variables[4]
Jump to Label . AFFICHE OBJECTIF
End Conditional Branch end condition



Il récupère les quêtes en cours dans les variables 10 11 et 12 (nombre a 4 chiffres) puis extrait l'id des quêtes pour les stocker dans les variables 16 17 et 18. On extrait ensuite la step de chaque quête que l'on écrit dans une varible ayant pour numéro 100 + id de la quête, c'est ici que l'on a besoin de référence indirect a une variable par une autre.
Encore une fois on exécute que les commandes situé sous l'étiquette AFFICHE OBJECTIF.

Citation:

Comment PARTIE 2 - CONTENU PASSIF
Comment
Comment .
Label AFFICHE OBJECTIF
Comment
Comment
Comment Quete 1 ID X001 - 2 steps
Comment 1 -Aller au temple de l'est pour recevoir son pvr de mana.
Comment 2 -Quete terminée
Conditional Branch IF Variable 0101 [Reservé 101 à 199] != 0
Conditional Branch . IF Variable 0101 [Reservé 101 à 199] == 1
Comment . .
Comment . . On est bien en STEP 1, on affiche ce que l'on doit faire.
Show Text . . Face: none (index 0) on dim background at middle
Show Text . . \c[24]Quête en cours\c[0]
Show Text . . Trouver le temple de la foret à l'est de Valenia.
Show Text . . Puis parler à la prêtresse.
Show Text . . 5 xp - 50 \i[262]
End Conditional Branch . end condition
End Conditional Branch end condition



On sait que si la variable 101 n'est pas vide, alors le joueur a accepté la quête 1. Et que si elle vaut 1, c'est qu'il en est a l'étape 1 donc on peut afficher l'objectif 1 de la quête 1.


Quelque soit l'interrupteur que l'on a activé, on se rend a chaque fois au label FIN qui remet à zéro les interrupteurs pour la prochaine fois.




III - Utiliser le système de quête.

Ouf,c'est fini pour l'explications des évent communs. Il ne reste que la partie "comment démarrer/finir une quête" et les bonus pour vous aider a créer des évenements qui réagissent aux quêtes.

Créer une quête:

Cela s'effectue en 2 partie
Dans la partie 1 (après le label VERIF STEP) #je vous conseille de mettre des commentaires pour vous y retrouver.

Nous avons besoin de 2 condition imbriquée pour chaque étape.

Citation:

Comment Quete 2 ID X002 - 2 steps
Comment 1 -étape 1 quelque chose
Comment 2 -etape 2 quelque chose
Conditional Branch IF Variable 0004 [Resultat] == 2 (id de la quête 1 à 99)
Common Event . Common Event 012 (GET STEP quest active)
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0014 [STEP quete recherché]
Conditional Branch . . IF Variable 0004 [Resultat] == 1 (Ce qui ce passe lorsque l'étape 1 est finie)
Comment . . .
Comment . . . On est bien en STEP 1, on affiche un message
Comment . . . de quete et on passe en step 2.
Show Text . . . Blabla bla.
Script . . . $game_variables[$game_variables[15]] += 1000 (si on valide une étape on ajoute 1000 a la variable de quête.)
End Conditional Branch . . end condition
End Conditional Branch . end condition
Conditional Branch . IF Variable 0004 [Resultat] == Variable 0014 [STEP quete recherché]
Conditional Branch . . IF Variable 0004 [Resultat] == 2 (Ce qui ce passe lorsque l'étape 2 est finie)
Comment . . .
Comment . . . On est bien en STEP 2, on affiche un message d'accomplissement
Comment . . . de quete et on passe en step 3.
Play ME . . . Fanfare3; Volume 100 Pitch 100
Show Text . . . Bravo !
Change EXP . . . All actors + 5 (show level up message)
Change Gold . . . + 50
Script . . . $game_variables[$game_variables[15]] += 1000
Comment . . .
Comment . . . On exécute la fin de quete avec le rc=5000
Control Variables . . . Variable 0004 [Resultat] = 5000
Jump to Label . . . FIN
End Conditional Branch . . end condition
End Conditional Branch . end condition
End Conditional Branch end condition



Attention si vous avez 9 étapes, à la 9 condition la commande "Script . . . $game_variables[$game_variables[15]] += 1000" vous allez atteindre 10002 il faudra penser a modifier la condition de l'évent PNJ pour chercher une valeur 10002

Citation:

Conditional Branch IF Script :$game_variables[$game_variables[15]] == 10001 (si on est a l'étape 9 de la quête 2, alors elle est finie)
Script $game_variables[$game_variables[15]] = 0 (on vide la variable qui contenait la quête 1.)
End Conditional Branch end condition



Dans la partie 2 (après le label AFFICHE OBJECTIF)

Citation:

Comment Quete 2 ID X002 - 2 steps
Comment 1 -étape 1 quelque chose
Comment 2 -etape 2 quelque chose
Conditional Branch IF Variable 0101 [Reservé 101 à 199] != 0
Conditional Branch . IF Variable 0101 [Reservé 101 à 199] == 1
Comment . .
Comment . . On est bien en STEP 1, on affiche ce que l'on doit faire.
Show Text . . Blabla bla.
End Conditional Branch . end condition
End Conditional Branch end condition
Conditional Branch IF Variable 0101 [Reservé 101 à 199] == 2
Comment . .
Comment . . On est bien en STEP 2, on affiche ce que l'on doit faire.
Show Text . . Blabla bla.
End Conditional Branch end condition




Comment démarrer une quête:
Mettre un petit texte qui présente la quête (copier coller celui dans la partie AFFICHE OBJECTIF)
Rendre égal l'une des variables 10 11 ou 12 égale à la valeur 1000 + id de la quête.
Attention à ne pas "écraser" une quête déja débutée. Avec quelques conditions il est possible de remplir l'une des 3 variables encore vide (10 11 ou 12) voire d'afficher un message pour indiquer au joueur qu'il a atteind le nombre maximal de quête active.

Finir une étape ou une quête:
Mettre un petit texte du pnj qui félicite le joueur
Modifier les variables 13 et 14
variable 0013 [ID quête recherché] = id de la quête que le PNJ valide.
variable 0014 [STEP quête recherché] = étape que la quête doit avoir pour que le PNJ valide nos actions.
Activer l'interrupteur 0001 [Quete Verif Objectif]
Appeler l'évent commun "Quêtes ID [1-9]"
Après avoir appelé l'évent commun, la variable 15 contient l'id de la variable qui stocke la quête en cours. (donc soit 10 soit 11 ou 12)

Uniquement si la quête est finie :
Avec une condition et une référence indirecte on peut vérifier quel est la valeur de l'étape et vider la variable 10 11 ou 12 pour libérer un "slot" de quête.

Exemple :
PNJ de la quête 1.

Citation:

Conditional Branch IF Script :$game_variables[$game_variables[15]] == 2001 (si on est a l'étape 2 de la quête 1, alors elle est finie)
Script $game_variables[$game_variables[15]] = 0 (on vide la variable qui contenait la quête 1.)
End Conditional Branch end condition




Créer un "livre de quête" :
Simplement créer un objet qui appelle un évent commun "QUETE" qui contient :
Activer interrupteur 0002 [Quete Recap Objectif]
appel évent commun Quêtes ID [1-9]

Ou un évent commun en éxécution parallèle qui effectue les mêmes commandes via une touche.

Rendre les PNJ réactifs au quêtes actives ou finies :
Avec un peu d'astuces, il est possible de savoir qu'elles quêtes on été accéptée par le joueur et a quelle étape il en est.
Souvenez vous que les variables 101 à 199 reflètent les 99 quêtes possibles et contiennent le numéro d'étape de chacunes. (d'ailleurs si une variable entre 101 et 199 vaut 0 c'est que le joueur n'a pas pris cette quête).


Je posterais quelques ajouts dans les jours a venir afin de vous laisser imaginer ce qu'il est possible de faire.




Gari - posté le 13/06/2021 à 12:11:10 (5899 messages postés) - honor

❤ 0

Ca a l'air bien complet ! Merci Cortez !

Pour ceux qui souhaiteraient afficher ces quêtes pour que le joueur soit toujours au fait de ce qu'il doit faire, il y a les scripts/plugins (à partir de XP), ou c'est aussi faisable en événements : Journal de Quête
Il y a aussi moyen de montrer directement les persos de quête, façon War of Warcraft

Vu que tu es revenu récemment, tu peux modifier directement ton tuto depuis "Editer" (en bas). J'ai rajouté quelques couleurs aux titres et enlevé les smileys (entre : et D ou F, sinon :F ou :D)
Si tu as une démo, on peut aussi l'héberger (certains préfèrent tâtoner directement). :)


cortez - posté le 14/06/2021 à 17:30:08 (523 messages postés)

❤ 0

Avec les titres en couleurs ça en jette un max.
Merci pour les smiley (je les avais pas vu lors de la prévisualisation.)

Je vais laisser quelques jours avant de rajouter les "mini tuto" en éditant le message principal.
J'ai longtemps hésité a publier une démo en plus des consignes sur le forum, cependant je suis partisan de l'apprentissage par le "faire soi même". Si une démo existe, nombreux serons ceux qui l'utiliserons sans décortiquer le tuto. Sans démo, le tuto ne sera pas accessible pour tous, mais c'est un peu le but.
Attention pas d'élitisme, juste que l'on progresse chacun a son rythme et lorsque le niveau de chacun augmente, de nouvelles techniques et méthodes peuvent être acquise. C'est sans doute une façon old-school de voir les choses, mais j'y tiens.
Pensez un peu au phases de leveling de vos personnages de rpg favoris, le making c'est pareil.

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers