Mise à jour: | 27/10/2014 |
Les déclencheurs
Les déclencheurs (trigger en anglais) permettent de réagir sur des événements dans ArmA. Par exemple, l'arrivée des joueurs sur un point, la prise d'une zone par les BLUFOR, la mort d'une unité, etc.C'est l'un des éléments les plus importants pour créer une mission qui répond aux actions des joueurs.
Un déclencheur va exécuter les commandes situées dans son champ d'activation lorsque les conditions requises sont vraies.
Si ce déclencheur est du type répétitif, il peut s'activer plusieurs fois. Lorsque la condition redevient fausse, les commandes situées dans son champ de désactivation sont exécutées.
Je rentrerai un peu plus dans les détails ci-dessous.
Placer un déclencheur
Pour placer un déclencheur, il suffit de sélectionner l'option "Déclencheur" dans le menu
![Image](http://veterans.armasites.com/images/tutos/bases/editeur_022.jpg)
Une nouvelle fenêtre va s'ouvrir pour configurer le déclencheur.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_005.jpg)
Dans les points suivants je vais parcourir les bases de la configuration des déclencheurs.
La forme du déclencheur
Comme son nom l'indique, cette zone sert à donner une forme au déclencheur pour délimiter la zone de détection.
Dans certains cas, par exemple quand on veut simplement lancer un script ou bien lier le déclencheur à un module ou un point de passage, on donnera une zone de déclencheur nulle ( Axe A et B égaux à 0), simplement pour ne pas encombrer l'éditeur avec des cercles dans tous les sens.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_010.jpg)
Chrono du déclencheur
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_015.jpg)
Dans certains cas, on ne veut pas qu'un déclencheur s'active directement, on veut un certain délai. Pour laisser par exemple le temps aux joueurs de réagir ou bien pour avoir un enchaînement d'actions basées sur le même événements (on met un temps plus long pour chaque action).
Pour chaque déclencheur on peut choisir entre 2 types de minuterie:
- Compte à rebours:
Dans ce cas, lorsque l'événement se produit (une unité BLUFOR entre dans la zone par exemple) le déclencheur commence à compter, une fois le temps atteint, l'action se déclenche. Même si l'unité BLUFOR est déjà sortie de la zone, l'action se déclenchera. - Dépasser délai:
A l'inverse, lorsqu'on sélectionne "Dépass. délai", il faut que l'événement reste actif pendant toute la durée du compte. Si ce n'est pas le cas, on revient à zéro. Donc, pour l'exemple ci-dessus, il faut que l'unité BLUFOR reste dans la zone pendant toute la durée du compte.
Avec un délai à dépasser, on ne validera la zone que si les ennemis ne sont pas présents pendant un certain temps (personnellement je choisi souvent 20 ou 30 secondes).
Nom du déclencheur
Il peut être utile de donner un nom au déclencheur, simplement pour pouvoir l'utiliser, soit dans d'autres déclencheurs, soit dans sa propre condition. Il s'agit ici d'un nom de variable/objet. Il doit donc être alphanumérique, sans caractères spéciaux.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_020.jpg)
Les deux commandes que j'utilise avec un déclencheur sont:
- triggerActivated: permet de contrôler si un trigger est actif
Par exemple, ça permet de déclencher l'arrivée d'un groupe de renforts lorsque les joueurs atteignent une certaine zone. - list: donne la liste de toutes les unités qui activent le trigger en question
Je l'utlise essentiellement pour savoir si parmis les unités présentes il y a des joueurs ou des IAs.
Ou alors pour tester la présence d'unités spéciales de la mission
J'ai placé un convoi d'IA OPFOR sur carte, les véhicules sont nommés: "eni1", "eni2", "eni3".
Je place sur la route un déclencheur qui ne doit s'activer que lorsque ces véhicules passent.
Je place donc un déclencheur nommé "trigger_passage" avec une activation de type "OPFOR" et je modifie la condition pour qu'il ne s'active que pour les trois véhicules précités:
Code : Tout sélectionner
(eni1 in list trigger_passage) OR (eni2 in list trigger_passage) OR (eni3 in list trigger_passage)
Je teste si eni1 est dans la liste des unités du déclencheur ou (OR) si eni2 est dans la liste des unités ou (OR) etc.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_022.jpg)
Remarque: Pour ce problème particulier, j'aurais simplement pu lier le déclencheur et le groupe de chaque véhicule en utilisant l'outil de groupement
![Image](http://veterans.armasites.com/images/tutos/bases/editeur_021.jpg)
Types de déclencheur
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_025.jpg)
- Néant: c'est le type par défaut, un déclencheur classique qui teste sa condition et éxécute les commandes du champ "Sur Act." quand la condition devient vraie.
- Interrupteur: c'est un type spécial qui permet de désactiver un point de passage et de passer au suivant. Certains points de passage comme "Garder/Guard" n'ont pas de fin. Si vous placez ce point dans le parcours d'un groupe. Il restera là indéfiniment. Pour passer au point de passage suivant, vous devez synchroniser un déclencheur de type "Interrupteur" avec le point de passage en utilisant l'outil "Synchroniser"
- Fin n°X: Active la fin de la mission pour une réussite
- Perdre: Active l'échec de la mission
- Gardé par X: Si vous voulez définir des zones spécifiques à garder, vous pouvez placer un déclencheur de type "Gardé par". Dans ce cas, le groupe qui a un point de passage de type "Garder" le plus proche, va se diriger vers le centre de ce déclencheur et défendre la zone.
Si vous placez plusieurs déclencheurs de type "Gardé par", leur priorité est l'ordre de placement, le premier placé est le plus prioritaire.
Dans ce cas, chaque groupe avec un point de passage prendre un déclencheur à garder. Et dans le cas d'une attaque ennemie, c'est le groupe avec le déclencheur de priorité la plus faible qui se déplacera en premier.
Si c'est confus... c'est normal... je pense que je ferai un tutoriel à part complet pour ce type de déclencheur.
Activation du déclencheur
La condition d'activation d'un déclencheur est la somme de 3 éléments.
- La source de l'activation
- Le nombre d'exécutions de l'activation
- Le type d'activation
Mais d'abord, passons en détail les 3 points.
Les sources d'activation:
- Néant: ça sonne inutile, mais si vous voulez utiliser un activation par script ou fonction, vous pouvez utiliser néant pour alléger les tests fait par le déclencheur.
Prenons comme exemple, vous voulez envoyer un message lorsque le chef des ennemis meurt.
La condition sera du type: !alive leader_ennemi
On n'utilise pas la valeur "this" du déclencheur, ni les unités qui activent le déclencheur, donc inutile de remplir quelque chose ici. Ca va simplement alourdir le déclencheur. - Un camp (Opfor, Blufor, etc.): dans ce cas, le déclencheur deviendra actif basé sur les unités du camp spécifié
- N'importe qui / Any: dans ce cas, toute unité (à pied ou en véhicule) qui passera dans la zone du déclencheur, va activer celui-ci
- Radio XYZ: Le fait de sélectionner un canal radio, permet d'ajouter une option au menu radio des joueurs et donc de permettre au joueur de déclencher l'action. Par exemple, l'appel d'un hélicoptère d'extraction. Je donne un exemple plus en détail à la fin de ce tutoriel
- Pris - Camp: Si la zone du déclencheur est occupée par le camp, le déclencheur s'active
Une zone est considérée comme prise si le nombre d'ennemis est égal ou inférieur au nombre d'unités du camp défini.
Pour être encore plus clair... si vous sélectionnez "Pris - Ouest". Si la zone contient 10 OPFOR, qu'il y a 4 joueurs, lorsque vous aurez tué 6 OPFOR, la zone sera prise, même si des OPFOR sont encore en vie.
On a le choix entre "Une fois" et "Répétition".
Je pense que c'est assez clair lequel fait quoi
![Souriant :)](./images/smilies/icon_e_smile.gif)
Parfois il est utile d'avoir un déclencheur de type "Répétition" pour laisser par exemple une zone passer de l'ennemi à l'allié et inversément.
Ou alors pour déclencher une alarme si une unité est détectée, etc.
Le type d'activation:
- Présent: détecte si au moins une unité du camp spécifié est présente
- Absent: détecte si il n'y a plus du tout d'unités de ce camp (si elles sont toutes parties ou toutes mortes)
- Détection par XYZ: là c'est plus subtil. On va partir sur un exemple.
Prenons le cas d'un déclencheur avec comme source "BLUFOR" et comme type d'activation "Détection par est".
Le déclencheur ne s'activera que lorsqu'au moins une unité du camp est présente dans la zone du déclencheur, saura avec certitude qu'un Blufor est là. Le niveau de connaissance d'une unité est affecté par de nombreux éléments. Comme, la distance, la nuit, etc.
Il est très difficile d'évaluer à quelle vitesse les unités auront vent de votre présence. Si vous utilisez un addon comme l'ASR AI, ça devient encore plus difficile, parce que cet addon transfère l'information vers les groupes distants pour simuler une communication radio.
Généralement je limite mon utilisation de ce déclencheur à l'appel de renforts lorsque les combats on commencé.
La condition d'activation du déclencheur
Par défaut, le champ de condition contient la variable "this". C'est une variable spéciale qui contient le résultat des conditions que nous avons vue dans les points ci-dessus.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_040.jpg)
Cette valeur n'est pas obligatoire. On peut très bien s'en passer. Dans ce cas on peut entrer des commandes qui doivent renvoyer une valeur booléenne (Vrai ou Faux).
Par exemple, on peut vouloir détecter si le leader ennemi est mort. Dans ce cas le champ "Condition" contiendra:
Code : Tout sélectionner
!alive leader_ennemi
Vous pouvez retourner voir l'exemple du convoi ci-dessus, vous verrez qu'on n'utilise pas "this".
Il est cependant possible d'obtenir la liste des unités correspondant aux critères du déclencheur avec la variable spéciale "thisList".
Par exemple, vous voulez un déclencheur qui ne se déclenche que pour les BLUFOR mais seulement s'il y a un joueur parmis les unités.
La configuration du déclencheur est donc:
- Type: Néant
- Activation: BLUFOR, Une fois, Présent
Code : Tout sélectionner
({ isPlayer _x} count thisList) > 0
count va effectuer le code entre accolade sur tous les éléments de thisList.
Le test qu'on effectue utilise la commande isPlayer sur la variable spéciale "_x" qui est celle contenant les éléments d'une itération.
Commande d'activation et de désactivation du déclencheur
Avoir une condition c'est bien... mais généralement on veut que le déclencheur fasse quelque chose...
Dans ce cas, on va entrer des commandes dans les deux zones suivants:
- Sur Act.: Le code s'exécutera lorsque la condition devient vraie
- Sur Désact.: Le code s'exécutera lorsque la condition devient fausse après avoir été vraie
On place un déclencheur qui détecte de manière répétée la présence du camp BLUFOR.
Dans l'activation et la désactivation on utilise la commande hint pour afficher un message dans le coin supérieur droit de l'écran.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_055.jpg)
Lorsque le joueur entre dans la zone, le déclencheur s'active
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_060.jpg)
Lorsqu'il sort de la zone, le déclencheur se désactive
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_065.jpg)
Et ce autant de fois que vous entrez ou sortez, puisque le déclencheur est configuré sur "Répétition".
Lier un déclencheur et une unité ou un groupe
Dans certains cas, vous ne voulez pas qu'un déclencheur s'active sauf quand un groupe ou une unité d'un groupe arrive sur le déclencheur.
C'est tout à fait possible.
La marche à suivre est la suivante:
- placez un déclencheur sur carte avec la zone que vous souhaitez.
- placez aussi le groupe qui doit activer le déclencheur.
- sélectionnez l'outil de groupement
- liez le leader du groupe (ou l'unité) et le déclencheur
- clic gauche sur l'unité
- maintenir le bouton gauche et glisser jusqu'au déclencheur
- relâcher le bouton gauche
- une ligne bleue relie les deux
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_075.jpg)
Vous pouvez ensuite éditer le déclencheur et ouvrir le menu déroulant "Activation".
Une nouvelle série de valeurs sont maintenant disponibles... et parlent d'elles mêmes.
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_080.jpg)
Déclencheur lié à la radio
Pour laisser au joueur la possibilité d'activer un déclencheur lui-même (pour lancer un renfort ou une évacuation) vous pouvez utiliser l'activation de type "Radio XYZ". La procédure est la suivante:
- Insérez un nouveau déclencheur
- Entrez un texte dans la zone "TEXTE", c'est ce texte qui sera affiché dans le menu radio
- Dans le menu déroulant "Activation", sélectionnez "Radio Alpha"
- Placez les commandes souhaitées dans la zone d'activation
- Lancez la prévisualisation
- Appuyez sur le bouton "0" (zéro) au haut de votre clavier PAS sur le pavé numérique
- Vous êtes maintenant dans le menu radio, il a encore un sous menu "Radio" accessible par "0" une fois de plus (ou à la roulette)
- Dans ce sous menu, vous avez l'option ajoutée par le déclencheur que vous pouvez activer (soit par le numéro, soit par la roulette)
![Image](http://veterans.armasites.com/images/tutos/bases/declencheur_085.jpg)
Retour à la table des matières