Posté le: 31/07/08 09:42 Sujet du message: Réaliser une campagne avec plusieurs cartes par chapitre
I/ Introduction
Vous n'avez jamais eu envie de créer une campagne comme celle bonus (de Rexxar) de TFT ? Avec plusieurs cartes par chapitre, ou actes ? Vous savez, quand votre héros évolue sur une carte principale, puis part vers une autre carte pour mener à bien une quête de la carte principale, sans pour autant changer de chapitre...
Et bien maintenant, en lisant ce tuto, vous pourrez enfin le faire ! Du moins, je l'espère.
II/ D'abord, réflexion...
Première chose à faire : vous devez avoir une idée claire pour votre campagne. Combien y aura-t-il de carte sur l'Acte 1 ? Pourquoi ? Serez-vous capable de scripter assez de quêtes pour que votre campagne ne présente pas en quelque sorte quelques vides ? Car, en effet, créer un acte à plusieurs cartes, c'est pas pour dire 'Eh regardez ce que je suis arrivé à faire'. Cela doit vous être utile, sinon vous alordissez votre campagne inutilement. Autant faire des chapitre à une carte par chapitre !
Par exemple, je veux créer une campagne à trois actes (je n'en montrerai qu'un). Chaque acte comportera 2 cartes : la principale, c'est la plus grande, car c'est sur celle-là que tout se joue, que le campement principal est établi. C'est sur celle-là que mon héros apparait pour la première fois.
La deuxième carte sera assez petite (dans mon cas hein, car vous pouvez en faire une grande !). On peut y accéder uniquement en passant dans une grotte de la carte principale.
III/ Théorie/Observation du mécanisme de ce type de campagnes
En fait, comment ça marche ? En français, qu'est-ce qui se passe quand j'entre dans une grotte dans la carte principale et que je pars dans une autre carte ?
C'est très simple. Il y a deux cas de figures à bien comprendre :
La première visite de cette carte annexe ;
Les visites suivantes.
Le premier cas est le plus simple. Voilà votre héros devant une grotte de la carte principale dont l'entrée scintille ; il y a un Mur de charge. Votre héros (que je nommerai A par la suite) n'a encore jamais passé ce Mur. Il n'est donc encore jamais allé dans la carte annexe. Lorsqu'il passe le mur, l'écran devient noir suite à un Fade out, et l'écran cinématique apparaît.
On fait apparaître un écran noir et l'écran cinématique pour masquer la disparition surnaturelle de A. Ainsi, le joueur n'aura aucune idée que son personnage va disparaître d'un moment à un autre !
Tout va se dérouler en quatre phases :
Phase 1 : Le stockage des informations ;
Phase 2 : Le stockage de A ;
Phase 3 : Le "Clean up" ou Nettoyage ;
Phase 4 : La sauvegarde des données et le passahe à l'autre carte.
Phase 1 : Ici vont être stockées toutes les informations nécessaires au bon fonctionnement de la campagne.
On va enregistrer :
L'or du joueur ;
Le bois du joueur ;
Une booléenne initialisée à FAUX et nommée Checking_Map2AlreadyVisited (en français : Vérification_Carte2DéjàVisitée)* ;
L'état des quêtes**.
*: Cette booléenne sert à savoir si la carte annexe a déjà été visitée par avant, ou bien si c'est la première fois. Cela sert plus loin, pour savoir si on charge une partie ou si l'on charge une carte.
**: Pour chaque quête on stockera deux booléennes : Checking_QuextXXDiscovered & Checking_QuextXXEnded. La première précise si la quête est découverte, la seconde si elle est terminée.
Pour chaque exigence de quête, on stockera une booléenne Checking_QuestXXItemXX qui précisera quels sont les exigences satisfaites et quelles sont les exigences non remplies (une méthode de stockage de masse sera vue plus loin).
Phase 2 : Ici vont être stockées toutes les informations liées à A.
On va enregistrer pour A :
A lui-même (Store unit)
Ses points de vie (variable réel "ALifePoints") ;
Ses points de mana (variable réel "AManaPoints") ;
Une booléenne (un vrai ou un faux) indiquant si oui ou non il peut encore recevoir de l'expérience, dans le cas où on veut limiter le héros au niveau 6 pour l'acte 1 et au niveau 12 pour l'acte 2.
Enfin, c'est dans cette phase que l'on sauvegardera le hangar dans lequel tout est stocké (pour les puristes, le Game Cache).
Phase 3 : Durant cette phase, on va nettoyer la carte. On va donc :
Supprimer A (Remove Unit) ;
Supprimer toutes les unités invoquées ;
Renvoyer toutes les unités hostile à A à leur point de Spawn (où elles sont apparues) ;
Supprimer les effets spéciaux inutiles.
Phase 4 : Enfin, on va passer à la carte Annexe en lançant le chargement ici. Mais attention, pas n'importe comment ! Vous souvenez-vous de la booléenne Checking_Map2AlreadyVisited initialisée à FAUX dans la carte principale ? Eh bien cette variable va déterminer quelque chose de très important : Faut-il charger une partie ou bien charger la carte ? Je veux dire par là que cette variable déterminera si la carte 2 a déjà été visitée, donc que le brouillard de guerre du terrain a déjà été entamé, que certains objets ont été pris, que certains déclencheurs se sont déjà déclenchés,...
On sauvegarde donc la partie sous MaCampagne\Map1.w3z, et on charge la carte 2 (Map2.w3x)
NB : Vous remarquerez que j'ai ajouté MaCampagne\ avant le fichier en lui-même. Cela aura pour effet à sauvegarder la partie dans le dossier MaCampagne, elle sera donc inaccessible pour le joueur. Le joueur devra charger ses propres parties, comme dans un scénario normal.
Le chargement se lance. A la fin du chargement, tous les évènements Map Initialization se déclencheront, Car c'est l'initialisation de la carte. Dans nos prochaines visites, ces évènements ne se déclencheront plus, car on ne parle plus d'évènement
Gui:
Trigger:
Evénements
Map Initialization
Mais
Gui:
Trigger:
Evénements
Partie - A game is loaded
Conditions
Checking_Gone égal à TRUE
NB : Vous remarquez l'usage d'une condition pour cet évènement. Cette variable booléenne servira à n'utiliser cet évènement que lorsqu'on passe d'une carte à l'autre, et pas à chaque fois que le joueur charge sa partie lui-même. Cette variable sera mise sur TRUE lors des Fade out de transition, et mise sur FALSE lors des fade in où l'on commence à jouer.
La première chose qui se fera, c'est faire un Fade out sur 0.00 secondes, pour masquer au joueur les apparitions de notre A. On va aussi créer une booléenne Checking_Map2AlreadyVisited et la définir sur VRAI, car la carte vient d'être visitée. Ainsi, la prochaine fois qu l'on entre dans la grotte de la carte principale, on chargera une partie, et plus la carte. Ainsi la progression du brouillard de guerre, des objets, des déclencheurs, etc. sera enregistrée.
On va devoir en deuxième créer des quêtes à l'identique de la première carte. Ces dernières seront toutes Non découvertes, auront déjà toutes leurs exigences, leur description et leur titre. Ainsi il suffit de charger les booléennes du cache (après l'avoir rafraichi en utilisant Cache du jeu - Reload all data from disk) pour savoir si chaque quête est découverte/terminée ou pas et si les exigences des quêtes sont terminées ou pas.
On va ensuite recharger notre A. On va lui mettre ses points de vie à ALifePoints, et son mana à AManaPoints en utilisant le cache.
On charge la booléenne de l'expérience pour savoir si on bloque les gains d'expériences.
On charge la variable entier contenant l'or du joueur, et on met l'or du joueur dans cette carte à cet entier. Idem pour le bois.
Tout est chargé, on peut enlever le Fade out et commencer à jouer !
Pour revenir dans la carte 1, on fera la même chose que pour passer de la 1 à la 2, à ceci près que l'on sauvegarde la partie sous un autre nom (MaCampagne\Map2.w3z). On charge la partie MaCampagne\Map1.w3z.
Le chargement se lance. On revient à la carte 1. Les évènements map initialization ne se déclencheront pas : on est pas à l'initialisation de la carte mais à un chargement de partie. Nuance. Exemple : Lorsque vous faites une carte avec un déclencheur Map Initialization, est-ce qu'à chaque chargement de votre partie personnelle (via Charger partie) le déclencheur se lance ? Non, car cet évènement ne se déclenche que au premier chargement de la carte.
Pour restaurer toutes les données, on va faire la même chose que quand on arrive dans la carte 2 : on crée un fade out sur 0.00 secondes, on met à jour les quêtes (y en a-t-il qui se sont finie ? En a-t-on découvert de nouvelles ? Une exigence de quête a-t-elle été satisfaite ?), on restaure le héros, on bloque ou pas son expérience, on restaure l'or et le bois, on enlève le fade out.
Voilà pour la partie théorique. Voici maintenant la partie pratique.
III/ En pratique... Les déclencheurs
Voici les déclencheurs de ma campagne qui utilise ce mode de cartes. Ce n'est PAS la même chose que ce qui est expliqué plus haut.
Vous remarquerez que j'ai 2 héros ici.
Déclencheur 1 : Lorsque Thrall entre dans la région "LeaveToM1M2" pour partir vers la carte 2 (nommée M1M2 pour Mission1Map2)
Secret:
Gui:
Trigger:
Begin Transition
Evénements
Unité - A unit enters LeaveToM1M2 <gen>
Conditions
(Entering unit) Egal à Unit_Thrall
Actions
-------- PARTIE 1 -------- Set Checking_Gone = TRUE Cache du jeu - Create a game cache from DetteThrall.w3v Set GameCache_MyCampaignCache = (Last created game cache) -------- Cinematics Effects -------- Cinématique - Turn cinematic mode On for (All players) over 0.30 seconds Cinématique - Fade out over 0.50 seconds using texture Masque blanc and color (0.00%, 0.00%, 0.00%) with 0.00% transparency Wait 0.50 seconds Son - Stop music Après fondu -------- PARTIE 2 -------- -------- Thrall Settings -------- Set Stored_ThrallLifePoints = (Vie of Unit_Thrall) Set Stored_ThrallManaPoints = (Mana of Unit_Thrall) -------- Balzow Settings -------- Set Stored_BalzowLifePoints = (Vie of Unit_Balzow) Set Stored_BalzowManaPoints = (Mana of Unit_Balzow) -------- Player Settings -------- Set Stored_ThrallBalzowGold = (Joueur 1 (Rouge) Or actuel) Set Stored_ThrallBalzowLumber = (Joueur 1 (Rouge) Bois actuel) -------- Others -------- -------- Set Restore Regions -------- Set Region_RestoreThrall = RestoreThrallFromM1M2 <gen> Set Region_RestoreBalzow = RestoreBalzowFromM1M2 <gen> -------- Units Storage -------- Cache du jeu - Store Unit_Balzow as BalzowUnit of Heroes in GameCache_MyCampaignCache Cache du jeu - Store Unit_Thrall as ThrallUnit of Heroes in GameCache_MyCampaignCache -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- PARTIE 3 -------- -------- Units Settings Storage -------- -------- BALZOW -------- Cache du jeu - Store Stored_BalzowExpDisabled as BalzowExpDisabled of BalzowSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_BalzowExperiencePoints as BalzowExperiencePoints of BalzowSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_BalzowLifePoints as BalzowLifePoints of BalzowSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_BalzowManaPoints as BalzowManaPoints of BalzowSettings in GameCache_MyCampaignCache -------- THRALL -------- Cache du jeu - Store Stored_ThrallExpDisabled as ThrallExpDisabled of ThrallSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_ThrallExperiencePoints as ThrallExperiencePoints of ThrallSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_ThrallLifePoints as ThrallLifePoints of ThrallSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_ThrallManaPoints as ThrallManaPoints of ThrallSettings in GameCache_MyCampaignCache -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- PARTIE 4 -------- -------- Quests Storage -------- -------- REXXAR - MAIN QUEST 01 -------- Cache du jeu - Store (QuestMain_Quest01 is discovered) as Discovered of QuestMain01 in GameCache_MyCampaignCache Cache du jeu - Store (QuestMain_Quest01 is completed) as Ended of QuestMain01 in GameCache_MyCampaignCache -------- MARVICK - MAIN QUEST 02 -------- Cache du jeu - Store (QuestMain_Quest02 is discovered) as Discovered of QuestMain02 in GameCache_MyCampaignCache Cache du jeu - Store (QuestMain_Quest02 is completed) as Ended of QuestMain02 in GameCache_MyCampaignCache -------- NORBERT - MAIN QUEST 03 -------- Cache du jeu - Store (QuestMain_Quest03 is discovered) as Discovered of QuestMain03 in GameCache_MyCampaignCache Cache du jeu - Store (QuestMain_Quest03 is completed) as Ended of QuestMain03 in GameCache_MyCampaignCache -------- ROKHAN - MAIN QUEST 04 -------- Cache du jeu - Store (QuestMain_Quest04 is discovered) as Discovered of QuestMain04 in GameCache_MyCampaignCache Cache du jeu - Store (QuestMain_Quest04 is completed) as Ended of QuestMain04 in GameCache_MyCampaignCache Cache du jeu - Store Integer_GemsTaken as GemsTaken of QuestMain04 in GameCache_MyCampaignCache -------- MURTHA - QUEST X01 -------- Cache du jeu - Store (QuestOptionnal_Quest01 is discovered) as Discovered of QuestX01 in GameCache_MyCampaignCache Cache du jeu - Store (QuestOptionnal_Quest01 is completed) as Ended of QuestX01 in GameCache_MyCampaignCache -------- SAM - QUEST X02 -------- Cache du jeu - Store (QuestOptionnal_Quest02 is discovered) as Discovered of QuestX02 in GameCache_MyCampaignCache Cache du jeu - Store (QuestOptionnal_Quest02 is completed) as Ended of QuestX02 in GameCache_MyCampaignCache Cache du jeu - Store Integer_KilledSpiders as KilledSpiders of QuestX02 in GameCache_MyCampaignCache -------- MURTHA - QUEST X03 -------- Cache du jeu - Store (QuestOptionnal_Quest03 is discovered) as Discovered of QuestX03 in GameCache_MyCampaignCache Cache du jeu - Store (QuestOptionnal_Quest03 is completed) as Ended of QuestX03 in GameCache_MyCampaignCache -------- PARTIE 5 -------- -------- QUEST REQUIREMENTS --------
For each (Integer A) from 1 to 6, do (Actions)
Boucle - Actions
Cache du jeu - Store (QuestRequirements_QuestMain01[(Integer A)] is completed) as (Requirement0 + (String((Integer A)))) of QuestMain01 in GameCache_MyCampaignCache Cache du jeu - Store (QuestRequirements_QuestMain02[(Integer A)] is completed) as (Requirement0 + (String((Integer A)))) of QuestMain02 in GameCache_MyCampaignCache Cache du jeu - Store (QuestRequirements_QuestMain03[(Integer A)] is completed) as (Requirement0 + (String((Integer A)))) of QuestMain03 in GameCache_MyCampaignCache Cache du jeu - Store (QuestRequirements_QuestMain04[(Integer A)] is completed) as (Requirement0 + (String((Integer A)))) of QuestMain04 in GameCache_MyCampaignCache Cache du jeu - Store (QuestRequirements_QuestOpt01[(Integer A)] is completed) as (Requirement0 + (String((Integer A)))) of QuestX01 in GameCache_MyCampaignCache Cache du jeu - Store (QuestRequirements_QuestOpt02[(Integer A)] is completed) as (Requirement0 + (String((Integer A)))) of QuestX02 in GameCache_MyCampaignCache
Cache du jeu - Store (QuestRequirements_QuestOpt03 is completed) as Requirement01 of QuestX03 in GameCache_MyCampaignCache -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- PARTIE 6 -------- -------- Players Settings Storage -------- Cache du jeu - Store Stored_ThrallBalzowGold as PlayerCurrentGold of PlayerSettings in GameCache_MyCampaignCache Cache du jeu - Store Stored_ThrallBalzowLumber as PlayerCurrentLumber of PlayerSettings in GameCache_MyCampaignCache -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- PARTIE 7 -------- -------- Others Settings Storage -------- Cache du jeu - Store Checking_M1M2AlreadyVisited as M1M2AlreadyVisited of MapsSettings in GameCache_MyCampaignCache -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- PARTIE 8 -------- -------- Save Game Cache -------- Cache du jeu - Save GameCache_MyCampaignCache -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------- -------- PARTIE 9 -------- Compte à rebours - Pause Timer_CentaursTimer Compte à rebours - Pause Timer_HarpiesTimer Compte à rebours - Pause Timer_MurlocksTimer Compte à rebours - Pause Timer_QuilboarsTimer -------- Remove Stored Units -------- Unité - Remove Unit_Balzow from the game Unité - Remove Unit_Thrall from the game -------- Remove Units Groups --------
Groupe unité - Pick every unit in (Units owned by Joueur 12 (Marron)) and do (Actions)
Boucle - Actions
Unité - Remove (Picked unit) from the game
-------- Clean Units Groups --------
For each (Integer A) from 1 to 10, do (Actions)
Boucle - Actions
Groupe unité - Remove all units from UnitGroup_CentaursPackSpawn[(Integer A)] Groupe unité - Remove all units from UnitGroup_HarpiesPackSpawn[(Integer A)] Groupe unité - Remove all units from UnitGroup_MurlocksPackSpawn[(Integer A)] Groupe unité - Remove all units from UnitGroup_QuilboarsPackSpawn[(Integer A)]
-------- PARTIE 10 -------- -------- Remove Effects -------- Effet spécial - Destroy Effect_ThrallAxe -------- PARTIE 11 -------- -------- Load & Save -------- Wait 0.01 seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
Checking_M1M2AlreadyVisited Egal à TRUE
Alors - Actions
-------- If the level has already been visited -------- Partie - Save game as DetteThrallM1M1.w3z and load DetteThrallM1M2.w3z (Sauter scores)
Sinon - Actions
-------- If the level hasn't been visited yet -------- Partie - Save game as DetteThrallM1M1.w3z and change level to MapM1M2.w3x (Sauter scores)
Partie 1 :
Définir la variable Checking_Gone à TRUE (condition requise plus loin pour que le déclencheur 2 (chargement des données depuis M1M2) puisse se lancer). Création du cache du jeu. Effets esthétiques (masquer les actions suivantes). Stopper la musique.
Partie 2 :
Données stockées dans des variables (pas encore dans le cache !) : Les héros, leurs points de vie, leurs points de mana.
Partie 3 :
Stockage de ces variables dans le cache. Stockage de la booléenne d'activation/désactivation des gains d'expériences.
Partie 4 :
Stockage de l'état de chaque quête. Stocke vrai si elle est découverte/terminée, faux si elle ne l'est pas encore. Pour deux quête, j'ai aussi stocké les nombres de gemmes/araignées qu'il reste encore à récupérer pour terminer ces quêtes.
Partie 5 :
Stockage des variables booléennes précisant si chaque exigence de chaque quête est terminée ou pas. La boucle sert a à ne pas répéter 6 fois la même chose. Bien que certaines quêtes ne comptent que deux ou trois exigences, on peut faire une boucle de 6, comme si chaque quête comportait 6 exigences. Cela ne produira pas d'erreur (test à l'appui :p)
Partie 6 :
Stockage du bois et de l'or du joueur.
Partie 7 :
Stockage de la variable Checking_M1M2AlreadyVisited qui déterminera si oui ou non la carte M1M2 a déjà été visitée par le passé. Ce n'est pas le cas ici, car c'est la première fois qu'on entre dedans (cette variable a été initialisée à FAUX. Par la suite elle sera modifiée, lors du retour vers M1M1, car elle aura été stockée comme vrai dans M1M2, ce qui est logique...).
Partie 8 :
La partie la plus importante. Ne l'oubliez jamais, sinon cela ne fonctionnera pas. Cela sauvegarde toutes les données du cache pour qu'elles puissent être chargées depuis la carte M1M2.
Partie 9 :
Ici, je supprime Thrall et Balzow, car ils sont stockés dans le cache. Si je ne le faisais pas, au retour vers cette carte, on aura 2 Balzow et 2 Thrall... Les anciens, et les nouveaux.
Partie 10 :
Je supprime ici les effets spéciaux inutiles.
Partie 11 :
Test : si la carte M1M2 n'a pas encore été visitée, on sauvegarde la partie sous DetteThrall\M1M1.w3z et on charge la carte M1M2.w3x. Si la carte a déjà été visitée (ce qui n'est pas encore le cas), on sauvegarde toujours la partie sous DetteThrall\M1M1.w3z, mais on charge la partie DetteThrall\M1M2.w3z.
Chargement pour M1M2 lancé.
Déclencheur 2 : Première arrivée dans M1M2. N'a lieu qu'une fois : lors de la première visite.
Secret:
Gui:
Trigger:
Initialization
Evénements
Map initialization
Conditions
Actions
-------- PARTIE 1 -------- Cinématique - Turn cinematic mode On for (All players) Cinématique - Fade out over 0.00 seconds using texture Masque blanc and color (0.00%, 0.00%, 0.00%) with 0.00% transparency Partie Mêlée - Remove creeps and critters from used start locations (for all players) Partie - Set the time of day to 24.00 Partie - Masquer creep camps on the minimap Partie - Désactiver ally color button and Désactiver creep camp button Cinématique - Turn subtitle display override On Joueur - Turn Donner récompense On for Joueur 5 (Jaune) Bâtiment neutre - Change the special minimap icon to UIMinimapMiniMap-Entrance.blp Bâtiment neutre - Turn special minimap icon On for Indicateur de zone (Campagne personnalisée) 0098 <gen> Bâtiment neutre - Change the special minimap icon to UIMinimapMiniMap-Entrance.blp Partie - Turn the day/night cycle Off -------- PARTIE 2 -------- -------- CREATE QUESTS -------- Quête - Create a Requis, non trouvé quest titled Le voeux d'un chef with the description Rexxar accepte volo..., using icon path ReplaceableTexturesCommandButtonsBTNBeastMaster.blp Set QuestMain_Quest01 = (Last created quest) Quête - Create a Requis, non trouvé quest titled Guerriers en grève with the description Marvick a besoin de..., using icon path ReplaceableTexturesCommandButtonsBTNGrunt.blp Set QuestMain_Quest02 = (Last created quest) Quête - Create a Requis, non trouvé quest titled Des voix dans la fo... with the description Thrall doit rallier..., using icon path ReplaceableTexturesCommandButtonsBTNAmbush.blp Set QuestMain_Quest03 = (Last created quest) Quête - Create a Requis, non trouvé quest titled Lotion capillaire with the description Rokhan a besoin de ..., using icon path ReplaceableTexturesCommandButtonsBTNEnchantedGemstone.blp Set QuestMain_Quest04 = (Last created quest) Quête - Create a Optionnel, non découvert quest titled Une âme en peine with the description Ce Murtha est assi..., using icon path ReplaceableTexturesCommandButtonsBTNSpiritWalker.blp Set QuestOptionnal_Quest01 = (Last created quest) Quête - Create a Optionnel, non découvert quest titled Une araignée au pl... with the description Sam, le frère de B..., using icon path ReplaceableTexturesCommandButtonsBTNSpiderGreen.blp Set QuestOptionnal_Quest02 = (Last created quest) Quête - Create a Optionnel, non découvert quest titled La ruée sur l'or with the description Les gobelins avaien..., using icon path ReplaceableTexturesCommandButtonsBTNChestOfGold.blp Set QuestOptionnal_Quest03 = (Last created quest) -------- PARTIE 3 -------- -------- CREATE QUEST REQUIREMENTS -------- -------- QUEST REXXAR (01) -------- Quête - Create a quest requirement for QuestMain_Quest01 with the description Aider Marvick Set QuestRequirements_QuestMain01[1] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest01 with the description Aider Norbert Set QuestRequirements_QuestMain01[2] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest01 with the description Aider Rokhan Set QuestRequirements_QuestMain01[3] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest01 with the description Retourner voir Rexx... Set QuestRequirements_QuestMain01[4] = (Last created quest requirement) -------- QUEST MARVICK (02) -------- Quête - Create a quest requirement for QuestMain_Quest02 with the description Rallier le premier ... Set QuestRequirements_QuestMain02[1] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest02 with the description Rallier le second a... Set QuestRequirements_QuestMain02[2] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest02 with the description Retourner voir Marv... Set QuestRequirements_QuestMain02[3] = (Last created quest requirement) -------- QUEST NORBERT (03) -------- Quête - Create a quest requirement for QuestMain_Quest03 with the description Rejoindre Norbert a... Set QuestRequirements_QuestMain03[1] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest03 with the description Trouver du bois Set QuestRequirements_QuestMain03[2] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest03 with the description Réparer le pont Set QuestRequirements_QuestMain03[3] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest03 with the description Découvrir ce qui e... Set QuestRequirements_QuestMain03[4] = (Last created quest requirement) -------- QUEST ROKHAN (04) -------- Quête - Create a quest requirement for QuestMain_Quest04 with the description Aller sous l'Arbre ... Set QuestRequirements_QuestMain04[1] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest04 with the description Ramasser sept gemme... Set QuestRequirements_QuestMain04[2] = (Last created quest requirement) Quête - Create a quest requirement for QuestMain_Quest04 with the description Retourner voir Rokh... Set QuestRequirements_QuestMain04[3] = (Last created quest requirement) -------- QUEST MURTHA (X01) -------- Quête - Create a quest requirement for QuestOptionnal_Quest01 with the description Pénétrer dans la ... Set QuestRequirements_QuestOpt01[1] = (Last created quest requirement) Quête - Create a quest requirement for QuestOptionnal_Quest01 with the description Trouver le Sceptre ... Set QuestRequirements_QuestOpt01[2] = (Last created quest requirement) Quête - Create a quest requirement for QuestOptionnal_Quest01 with the description Ramener le Sceptre ... Set QuestRequirements_QuestOpt01[3] = (Last created quest requirement) -------- QUEST SAM (X02) -------- Quête - Create a quest requirement for QuestOptionnal_Quest02 with the description Pénétrer dans les... Set QuestRequirements_QuestOpt02[1] = (Last created quest requirement) Quête - Create a quest requirement for QuestOptionnal_Quest02 with the description Désinfecter la min... Set QuestRequirements_QuestOpt02[2] = (Last created quest requirement) Quête - Create a quest requirement for QuestOptionnal_Quest02 with the description Ressortir triomphan... Set QuestRequirements_QuestOpt02[3] = (Last created quest requirement) -------- QUEST GOLD (X03) -------- Quête - Create a quest requirement for QuestOptionnal_Quest03 with the description Trouver les cinq ca... Set QuestRequirements_QuestOpt03 = (Last created quest requirement) -------- PARTIE 4 -------- -------- INIT VARIABLES -------- -------- REGIONS -------- Set Region_RestoreBalzow = RestoreBalzowFormM1M1 <gen> Set Region_RestoreThrall = RestoreThrallFormM1M1 <gen> -------- Point Variables -------- Groupe unité - Add all units of (Units owned by Joueur 5 (Jaune)) to UnitGroup_PointingGroup
For each (Integer A) from 1 to 67, do (Actions)
Boucle - Actions
Set Unit_PointingUnit = (Random unit from UnitGroup_PointingGroup) Set UnitType_PointingType[(Integer A)] = (Unit-type of Unit_PointingUnit) Set Point_UnitPositions[(Integer A)] = (Position of Unit_PointingUnit) Groupe unité - Remove Unit_PointingUnit from UnitGroup_PointingGroup
-------- PARTIE 5 -------- -------- INTRO CINEMATIC TRIGGER -------- Déclencheur - Run Intro Cinematic <gen> (checking conditions)
Partie 1 :
Fade out. Divers réglages.
Partie 2 :
Création des quêtes à l'identique de celles de M1M1. Elles sont toutes non découvertes.
Partie 3 :
Création des exigences de quête à l'identique de celles de M1M1. Elles sont toutes non satisfaites.
Partie 4 :
Définit les variables. Ici, j'initialise les points où réapparaîtront les créatures hostiles à chaque chargement, ainsi que leur type. Ce n'est pas obligatoire.
Partie 5 :
Lancer la cinématique d'introduction
(facultatif)
Déclencheur 3 : Intro Cinematic
Gui:
Trigger:
Actions
Déclencheur - Run Run Game Cache Functions Special <gen> (checking conditions)
Déclencheur 4 : Run Game Cache Functions Special ("Special" car il ne sera utilisé que cette fois-ci. Un autre existe, Run Game Cache Functions, mais celui-là recrée les créatures. Donc pour éviter de les faire apparaître en double...)
Secret:
Gui:
Trigger:
Run Game Cache Functions Special
Actions
-------- PARTIE 1 -------- Set Checking_Gone = FALSE Cache du jeu - Reload all game cache data from disk Cache du jeu - Create a game cache from DetteThrall.w3v Cache du jeu - Reload all game cache data from disk Set GameCache_MyCampaignCache = (Last created game cache) -------- PARTIE 2 -------- -------- Game Cache Data Extracting -------- -------- Restore Heroes -------- Cache du jeu - Restore ThrallUnit of Heroes from GameCache_MyCampaignCache for Joueur 1 (Rouge) at (Center of Region_RestoreThrall) facing 220.00 Set Unit_Thrall = (Last restored unit) Cache du jeu - Restore BalzowUnit of Heroes from GameCache_MyCampaignCache for Joueur 1 (Rouge) at (Center of Region_RestoreBalzow) facing 220.00 Set Unit_Balzow = (Last restored unit) Caméra - Pan camera for Joueur 1 (Rouge) to (Position of Unit_Thrall) over 0.00 seconds -------- PARTIE 3 -------- -------- Game Cache Variables -------- -------- Loading Player Settings -------- Set Stored_ThrallBalzowGold = (Load PlayerCurrentGold of PlayerSetting from GameCache_MyCampaignCache) Set Stored_ThrallBalzowLumber = (Load PlayerCurrentLumber of PlayerSetting from GameCache_MyCampaignCache) -------- Loading Thrall Settings -------- Set Stored_ThrallExperiencePoints = (Load ThrallExperiencePoints of ThrallSettings from GameCache_MyCampaignCache) Set Stored_ThrallLifePoints = (Load ThrallLifePoints of ThrallSettings from GameCache_MyCampaignCache) Set Stored_ThrallManaPoints = (Load ThrallManaPoints of ThrallSettings from GameCache_MyCampaignCache) -------- Loading Balzow Settings -------- Set Stored_BalzowExperiencePoints = (Load BalzowExperiencePoints of BalzowSettings from GameCache_MyCampaignCache) Set Stored_BalzowLifePoints = (Load BalzowLifePoints of BalzowSettings from GameCache_MyCampaignCache) Set Stored_BalzowManaPoints = (Load BalzowManaPoints of BalzowSettings from GameCache_MyCampaignCache) -------- Loading Boolean Values -------- Set Checking_M1M2AlreadyVisited = TRUE -------- PARTIE 4 -------- -------- Setting Heroes -------- -------- BALZOW -------- Héros - Set Unit_Balzow experience to Stored_BalzowExperiencePoints, Masquer level-up graphics If (Stored_BalzowExpDisabled Egal à TRUE) then do (Héros - Désactiver experience gain for Unit_Balzow) else do (Do nothing) Unité - Set life of Unit_Balzow to Stored_BalzowLifePoints Unité - Set mana of Unit_Balzow to Stored_BalzowManaPoints -------- THRALL -------- Héros - Set Unit_Thrall experience to Stored_ThrallExperiencePoints, Masquer level-up graphics If (Stored_ThrallExpDisabled Egal à TRUE) then do (Héros - Désactiver experience gain for Unit_Thrall) else do (Do nothing) Unité - Set life of Unit_Thrall to Stored_ThrallLifePoints Unité - Set mana of Unit_Thrall to Stored_ThrallManaPoints Effet spécial - Create a special effect attached to the right hand of Unit_Thrall using ThrallAxe.mdx Set Effect_ThrallAxe = (Last created special effect) -------- PARTIE 5 -------- -------- SET QUESTS -------- If ((Load Discovered of QuestMain01 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest01 as Découvert) else do (Quête - Mark QuestMain_Quest01 as Non découvert) If ((Load Discovered of QuestMain02 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest02 as Découvert) else do (Quête - Mark QuestMain_Quest02 as Non découvert) If ((Load Discovered of QuestMain03 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest03 as Découvert) else do (Quête - Mark QuestMain_Quest03 as Non découvert) If ((Load Discovered of QuestMain04 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest04 as Découvert) else do (Quête - Mark QuestMain_Quest04 as Non découvert) If ((Load Discovered of QuestX01 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestOptionnal_Quest01 as Découvert) else do (Quête - Mark QuestOptionnal_Quest01 as Non découvert) If ((Load Discovered of QuestX02 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestOptionnal_Quest02 as Découvert) else do (Quête - Mark QuestOptionnal_Quest02 as Non découvert) If ((Load Discovered of QuestX03 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestOptionnal_Quest03 as Découvert) else do (Quête - Mark QuestOptionnal_Quest03 as Non découvert) -------- PARTIE 6 -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXX --------
For each (Integer A) from 1 to 4, do (Actions)
Boucle - Actions
If ((Load (Requirement0 + (String((Integer A)))) of QuestMain01 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestMain01[(Integer A)] as Terminé) else do (Quête - Mark QuestRequirements_QuestMain01[(Integer A)] as Incomplet)
-------- XXXXXXXXXXXXXXXXXXXXXXXXXX --------
For each (Integer A) from 1 to 3, do (Actions)
Boucle - Actions
If ((Load (Requirement0 + (String((Integer A)))) of QuestMain02 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestMain02[(Integer A)] as Terminé) else do (Quête - Mark QuestRequirements_QuestMain02[(Integer A)] as Incomplet)
-------- XXXXXXXXXXXXXXXXXXXXXXXXXX --------
For each (Integer A) from 1 to 4, do (Actions)
Boucle - Actions
If ((Load (Requirement0 + (String((Integer A)))) of QuestMain03 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestMain03[(Integer A)] as Terminé) else do (Quête - Mark QuestRequirements_QuestMain03[(Integer A)] as Incomplet)
-------- XXXXXXXXXXXXXXXXXXXXXXXXXX --------
For each (Integer A) from 1 to 3, do (Actions)
Boucle - Actions
If ((Load (Requirement0 + (String((Integer A)))) of QuestMain04 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestMain04[(Integer A)] as Terminé) else do (Quête - Mark QuestRequirements_QuestMain04[(Integer A)] as Incomplet)
-------- XXXXXXXXXXXXXXXXXXXXXXXXXX --------
For each (Integer A) from 1 to 3, do (Actions)
Boucle - Actions
If ((Load (Requirement0 + (String((Integer A)))) of QuestX01 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestOpt01[(Integer A)] as Terminé) else do (Quête - Mark QuestRequirements_QuestOpt01[(Integer A)] as Incomplet)
-------- XXXXXXXXXXXXXXXXXXXXXXXXXX --------
For each (Integer A) from 1 to 3, do (Actions)
Boucle - Actions
If ((Load (Requirement0 + (String((Integer A)))) of QuestX02 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestOpt02[(Integer A)] as Terminé) else do (Quête - Mark QuestRequirements_QuestOpt02[(Integer A)] as Incomplet)
If ((Load Requirement01 of QuestX03 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestRequirements_QuestOpt03 as Terminé) else do (Quête - Mark QuestRequirements_QuestOpt03 as Incomplet) -------- PARTIE 7 -------- -------- XXXXXXXXXXXXXXXXXXXXXXXXXX -------- Quête - Change the description of QuestRequirements_QuestMain04[2] to (Ramasser sept gemmes ( + ((String(Integer_GemsTaken)) + /7 récupérées))) Quête - Change the description of QuestRequirements_QuestOpt02[2] to (Désinfecter la mine + ((String(Integer_KilledSpiders)) + araignées restantes))) If ((Load Ended of QuestMain01 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest01 as Terminé) else do (Do nothing) If ((Load Ended of QuestMain02 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest02 as Terminé) else do (Do nothing) If ((Load Ended of QuestMain03 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest03 as Terminé) else do (Do nothing) If ((Load Ended of QuestMain04 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestMain_Quest04 as Terminé) else do (Do nothing) If ((Load Ended of QuestX01 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestOptionnal_Quest01 as Terminé) else do (Do nothing) If ((Load Ended of QuestX02 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestOptionnal_Quest02 as Terminé) else do (Do nothing) If ((Load Ended of QuestX03 from GameCache_MyCampaignCache) Egal à TRUE) then do (Quête - Mark QuestOptionnal_Quest03 as Terminé) else do (Do nothing) -------- PARTIE 8 -------- -------- Set Ressources -------- Joueur - Set Joueur 1 (Rouge) Or actuel to Stored_ThrallBalzowGold Joueur - Set Joueur 1 (Rouge) Bois actuel to Stored_ThrallBalzowLumber -------- PARTIE 9 -------- -------- Begin Playing -------- Cinématique - Turn cinematic mode Off for (All players) over 0.30 seconds Cinématique - Fade in over 0.50 seconds using texture Masque blanc and color (0.00%, 0.00%, 0.00%) with 0.00% transparency
Partie 1 :
Reprise du cache. Rafraichissement du cache pour pouvoir utiliser les donnée sauvegardées précédemment durant la carte M1M1. Je sais qu'une action y est en double, mais cela fonctionne comme cela, donc mieux vaut le rafraichir deux fois.
Réglage de Checking_Gone sur FALSE pour que le chargement du cache ne se déclenche pas lorsque le joueur charge sa partie personnelle.
Partie 2 :
Restauration des héros. Bouger la caméra sur Thrall.
Partie 3 :
Stockage des données du cache dans des variables "locales" à la carte M1M2. Vous remarquez que Cecking_M1M2AlreadyVisited n'est pas chargé, mais la variable locale portant le même nom qui sera enregistrée par la suite est initialisée à vrai. Cette seule instruction permet au jeu de savoir que pour une prochaine visite, le joueur est déjà venu sur M1M2. Plus besoin donc de charger la carte, mais bien de charger une partie.
Partie 4 :
Définit les points de vie, de mana, et l'éventuel bloquage d'expérience des héros. Pour thrall, je crée un effet spécial pour qu'il
ait une hache en main (facultatif !)
Partie 5 :
Découvre ou non les quêtes en chargeant les booléennes du cache correspondantes.
Partie 6 :
Termine ou non les exigences de quête en chargeant les booléennes du cache correspondantes.
Partie 7 :
Termine ou non les quêtes en chargeant les booléennes du cache correspondantes. Met à jour les chiffres de quête (araignées et nombre de gemmes récupérées)
Partie 8 :
Règle l'or et le bois du joueur en chargeant la variable entière correspondante.
Partie 9 :
On peut commencer à jouer !
Pour déclencher les actions de restauration des données dans M1M1, utilisez l'évènement Partie - A game is loaded avec la condition Checking_Gone Egal à TRUE.
Pour revenir à la carte M1M1, je pense que vous n'aurez pas de problèmes ^^ (vous faites pareil que pour venir de M1M1 vers M1M2, sauf que en dernier lieu, vous sauvegarderez sous DetteThrall\M1M2.w3z et que vous chargerez toujours le fichier DetteThrall\M1M1.w3z)
En stockant dans le cache avec les autres la valeur Checking_M1M2AlreadyVisited (donc VRAI), quand vous voudrez revenir dans M1M2, le jeu chargera automatiquement la partie, et plus la carte en elle même. Pour Déclencher la restauration, uiliser Partie - A game is loaded. _________________
Dernière édition par The Shadow of Death le 31/07/08 13:59; édité 4 fois
Inscrit le: 21 Avr 2008 Messages: 1607 Sujets: 81 Spécialité en worldedit: Utiliser le travail des autres Médailles: 3 (En savoir plus...)
Posté le: 31/07/08 17:22 Sujet du message:
J'avais réussi a comprendre comment passer d'une carte à une autre, mais tu viens de me faire penser à plein de détails proprets. Merci. _________________
Arf et moi qui suis plutot bof dans l'éditeur de déclencheur voir tout ces trucs ca me décourage :/
A bon ? Moi sa me permet de m'améliorer, et j'kiff.
Le pire c'est qujviens juste de voir ce tuto pour la première fois, impressionnant !!! _________________
Inscrit le: 23 Sep 2008 Messages: 294 Sujets: 60 Spécialité en worldedit: Aucune / le Jass m'est inconnu
Posté le: 07/02/10 17:20 Sujet du message:
ton système marcherait-il avec plusieurs personnes ingame depuis battlenet?
EDIT:
Ce que je veux dire par là, c'est: Est-ce qu'il est possible d'utiliser ce système sur battlenet, en ligne, et avec plusieurs joueurs dans la partie sans que ceux-ci se fassent éjecter entre les différents tableaux? _________________
c'est possible que sur plein de joueur, un seul parte dans l'autre carte et que les autres reste?
et qu'un joueur rejoigne le gars de l'autre carte? _________________
Si l'homme à inventer la bombe atomique, c'est pour une unique et très simple raison :
Il ne sait pas viser...
Question !
Je sais que le créateur de ce tuto est décédé sur le forum depuis un moment, mais j'espère une réponse de votre part.
Voici cette sublime question :
Comment fait-on pour faire apparaître une carte dans l'écran de chargement de campagne lorsqu'on vient de la terminée ? (Comme dans les campagnes normales) _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2Suivante
Page 1 sur 2
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum