Les horloges ? Pour quoi faire, direz vous. Nous avions déjà abordé le sujet quand nous avons parlé des interrupteurs, mais brievement. Dans cet article, nous allons voir quelle marche il faut suivre pour créer sa première horloge.
A ma connaissance, personne avant nous (IvaldaCreations) n'a eu l'idée de créer des horloges sur ses cartes... Cette idée est née durant le developpement du tome 1 de la campagne Dune. Nous avions sur une carte à gérer le developpement des ennemis par déclencheurs et en même temps gérer les apparitions des vers sur quelques champs. C'est la carte Dune 04, qui est un festival de déclenchements animés par interrupteurs :

il n'est pas conseillé d'utiliser les temps d'attente.
Imaginez, s'il faut mettre "attendre 200000ms" pour pour ordonner
le déplacement d'un camp de rammassage à un autre, le
temps d'attente se répercutera sur les autres declencheurs préservés
!
S'il y a un dialogue, celui ci se deroulera après ce temps d'attente
faramineux, les routines preservées ne fonctionnent plus et par
consequent, la carte non plus. Il fallait trouver autre chose...
Tous les honneurs de "l'invention" reviennent au Bashar,
qui a eu cette idée géniale. Il fallait définir
les 200000 ms autrement, et une commande du Staredit le permet.
En faisant patrouiller une unité sur la carte, on obtient
un temps d'attente égal à la distance qu'il faut à
l'unité pour parcourir le chemin, et ce compteur n'étant
pas intégré aux déclencheurs, on a aucun problème
de décalage de routine.
Ensuite, cette idée a été adaptée à
la programmation faramineuse de Dune Multijoueur (mais je n'en parlerais
pas la car on rentre dans une gigantesque usine à gaz !) et à
toutes nos cartes de la campagne.
Une unité patrouille dans la carte, vous définissez
donc une zone de départ et une zone d'arrivée. Imaginons
que vous avez besoin de 20000 ms pour régénerer votre
déclencheur. Il vous suffit de mettre dans les conditions du
déclencheur "Unité se trouve dans la zone de départ".
Comme l'unité patrouille, elle ne reste pas dans la zone.
Votre déclencheur préservé ne se déclenchera
donc pas infiniment même sans temps d'attente, car il devra attendre
que l'unité ait fini son tour pour se redéclencher. Vous
voyez, le principe n'est quand même pas très difficile...

C'est ici que nos chers interrupteurs interviennent. Novice sur les interrupteurs ? Pas de souci, la page d'aide sur les interrupteurs devraient aisement vous convertir à l'interrupteurisation de vos cartes.
L'intéret des interrupteurs (je rappelle : 2 états 0-1) va nous permettre de résoudre le seul problème posé par la solution du paragraphe 2. En effet, si la zone choisie est trop grande, l'unité risque de rester trop longtemps dans la zone, ce qui a pour conséquense immédiate de réenclencher notre boucle. Les interrupteurs sont ici la seule solution, et nous devons cette horloge switchée à notre Bashar préféré.
Pour l'instant, nous avons trois méthodes connues : Voici leur
principe en substance :
Deux déclencheurs suffisent pour configurer une attaque. C'est
la méthode utilisée dans Dune.
condition : arbitre dans zone de départ
action : donner l'ordre d'aller vers zone de fin effacer "arbitre dans la zone" préserver
Deuxième déclencheur :
condition : arbitre dans zone de fin "arbitre dans la zone" est effacé
action : activer "arbitre dans la zone" activer "déclencher l'attaque" donner l'ordre d'aller vers la zone de départ
Méthode employée dans la campagne L'odysée de Nova. Inconvenient : il faut que le trajet soit deux fois plus long.
condition : arbitre dans la zone de départ
action : donner l'ordre d'aller vers la zone de fin
Deuxième déclencheur :
condition : arbitre dans la zone de fin
action : supprimer arbitre activer "déclencher l'attaque" créer un arbitre invincible dans la zone de départ.
Méthode développée sur Diablo II par moi-même. En 4 déclencheurs et 2 interrupteurs, nous allons pouvoir faire fonctionner notre horloge.
1er déclencheur (le plus simple) :
condition : Toujours
action : Donner ordre unitéX appartenant à Joueur8 de patrouiller de départ vers arrivée

Par ce déclencheur, notre unité va effectuer son trajet
indéfiniment. Bien prendre soin de positionner les zones pour
atteindre le temps d'attente voulu. L'observer est une unité
très prisée pour les horloges, unité invisible,
possibilité d'augmenter sa vitesse, elle est parfaite.
Note : L'unité horloge doit être invincible si vous ne
tenez pas à faire tomber en panne votre horloge ;)
2eme déclencheur :
condition : Joueur8 amène exactement 1 unitéX à à arrivée
action : Configurer "Horloge est arrivée dans la zone" Configurer "L'horloge est prête" ou "Ding dong" Preserver déclencheur
Ne pas oublier le préserver déclencheur !
condition : Joueur8 amène exactement 0 unitéX à arrivée
action : Effacer "Horloge est arrivée dans la zone" Preserver déclencheur
... Mais qu'est ce que... Patience, le dénouement est proche:
condition : "Horloge est arrivée dans la zone" est effacé "L'horloge est prête" ou "Ding dong" est configuré
action : Effacer "L'horloge est prête" ou "Ding dong" Preverser déclencheur
C'est dans ce déclencheur que vous notifiez les actions que vous allez accomplir. Revenons maintenant en arrière pour expliquer le pourquoi de chaque déclencheur. Vous remarquerez qu'il ne suffit pas que l'unité entre dans la zone pour qu'elle déclenche les actions, il faut aussi qu'elle en soit ressortie. Et c'est la toute l'astuce. C'est l'interrupteur "dingdong" qui sert les actions, mais son enclenchement est bloqué par l'interrupteur qui vérifie la présence de l'unité dans la location. Ingénieux n'est ce pas ?
Je choisis pour exemple une UMS que j'ai programmé récement.
Au début, ce ne devait être qu'une petite retouche, mais
le créateur de la carte originale régénerait ses
monstres dans ses arènes avec un déclencheur préservé
et un "attendre 30000ms". Je vous laisser imaginer le désastre,
chacun de ses déclencheurs était fait comme ca, ce qui
nous donne un total de 60 déclencheurs préservés
avec chacun un temps d'attente monstrueux. D'un autre coté (mais
c'est un autre problème) pour ses dialogues il ne connaissait
pas les transmissions...
Au final, la carte ramait tellement il y avait de temps d'attente
! Je ne pouvais laisser les choses en l'état...

Le cahier des charges pour cette horloge est plutot basique. Nous définissons une grande zone qui englobe la partie ou l'on veut faire apparaitre les monstres. Quand l'un des 5 joueurs (regroupés sous l'appelation "héros" pour simplifier la prog) est dans la zone, on veut une régénération des monstres. Quand il n'y a personne, plus de régénération. Les monstres créés vont bien-sur patrouiller afin de ne pas surcharger la zone d'arrivée. Pour mettre un peu de piment à l'affaire, nous allons programmer des apparitions aléatoires et à des endroits différents. Plutot simple, non ? (sisi c'est simple, je vous assure !)

Nous avons bien sur notre horloge qui est pour l'occasion un observer appartenant à un joueur neutre, il est invincible et patrouille dans une zone qui ne contient pas de locations ni une énorme fréquentation.
Nous avons les deux déclencheurs "Présence dans zone" et "Absence dans zone" qui vont faire la même chose que dans l'exemple précedent. Rien de nouveau jusque la.

Le quatrième déclencheur va contenir trois nouveaux interrupteurs, qui vont simplement servir à definir les apparitions "ok" ou "non". L'interrupteur est aléatoire.

Les trois derniers déclencheurs contiennent sensiblement la même chose, à savoir la création des monstres et leur patrouille. Les déclencheurs s'actionnent quand l'interrupteur d'apparition est "ok" et son actionnement l'efface, il ne sera reconfiguré que lorsque l'horloge aura fait son petit tour. Simplissime, n'est ce pas ?
Nous avons remarqué que très vite, les choses deviennent simples quand on utilise les interrupteurs. Les horloges sont une application simple et efficace pour tous les déclencheurs préservés. Imaginez qu'avec seulement 4 déclencheurs, nous supprimons dans cette carte 65 fois le "attendre 30000ms".
Une utilisation soutenue des interrupteurs est la clé pour la réalisation de toutes les programmations. C'est pourquoi nous vous invitons à utiliser ces ressources. Je ne suis pas rentré dans ces exemples dans des programmations complexes, mais n'hésitez pas à nous demander des renseignements supplémentaires si votre cas dépasse en difficulté cette programmation.
© Copyright 2002 Aeriesguard.com
Aerie's Guard V 6.0 réalisé par IvaldaCreations
- hébergé par Celeonet