script "Patrols.sqf" © Pumpkin
Script de patrouille aléatoire avec comportement amélioré :
- patrouille sur une zone déterminé par un déclencheur
- interactions entre les patrouilles et mise en alerte générale
- évite les étendues d'eau
- visite des maisons
- fonctionne pour les camps Est ou Ouest
C'est assez pénible pour un créateur de mission de savoir exactement le chemin qu'emprunte les patrouilles : le suspens, l'immersion,... sont grandement amoindris. On peut cependant créer des patrouilles avec un chemin plus ou moins aléatoire dans l'éditeur (rayon de position aléatoire des points de passage), mais, en cas d'attaque, on pourra observer des aberrations de comportement, comme une patrouille qui passe tranquillement à côté d'une escouade alliée qui se fait attaquer, sans lever le petit doigt (vers la gachette, entre autre). C'est là l'utilité du script : permettre à toutes les patrouilles d'un secteur de patrouiller aléatoirement et d'interagir entre elles : Si une patrouille se fait attaquer ou repère un ennemi, toutes les patrouilles du secteur seront averties, se mettront en mode combat, et pourront éventuellement rejoindre en renfort la patrouille qui a déclenché l'alerte. A noter que l'alerte a une durée limitée, ce qui permet un retour à la normale au bout d'un moment.
Le secteur de patrouille est déterminé par un déclencheur, peu importe la forme ou la taille (pas trop petit sinon la patrouille restera quasiment sur place, ou trop grand sinon vous n'aurez que peu de chance de la rencontrer). Si la zone (et donc le déclencheur) empiéte sur une étendue d'eau, la patrouille ne s'y dirigera pas; on peut donc,par exemple, placer un déclencheur unique au milieu d'un port, la patrouille n'ira pas faire trempette.
Les secteurs de patrouille peuvent se recouvrir : si une patrouille provenant d'un secteur A entre dans un secteur B, elle sera intégrée au secteur B en tant qu' "alliée", et en cas d'attaque de cette patrouille, les patrouilles du secteur B viendront à la rescousse. On peut aussi "attaché" plusieurs patrouilles a un même secteur, de façon à obtenir une interaction entre plusieurs patrouilles de plusieurs secteurs. Gaffe tout de même à ne pas exagérer ! Les ennemis sont sacrément hargneux et même 5 ou 6 bons soldats n'ont jamais tenu bien longtemps en face de 30 ou 40 ennemis qui leur tombent dessus en même temps.
D'autre part, je trouvais anormal qu'on puisse se cacher dans une maison sans jamais être inquiété. J'ai essayé de faire en sorte que, lorsqu'une patrouille passe à proximité de la maison où vous vous êtes planqué, il y a une chance que le chef de patrouille désigne un gars pour aller voir si d'aventure il n'y aurait pas un ennemi (donc vous !) sournoisement planqué dedans; ce n'est pas systématique mais c'est un risque !
Installation
- Copier le script "Patrols.sqf" dans le répertoire de la mission
Dans l'éditeur :
- Créer un déclencheur sur la zone de la patrouille et le nommer (zone grise dans l'exemple ci-dessous, nommé "tcherno_patrol1")
il peut être elliptique ou rectangulaire, et orienté selon le bon vouloir du créateur de mission. Peu importe les autres paramètres du déclencheur, seule compte la taille ('Axe a' et 'Axe b'), l'angle, la forme et le nom. Le texte est optionnel et ne permet qu'au créateur de mieux s'y retrouver (dans l'exemple le texte est égale au nom du déclencheur, soit "tcherno_patrol1", mais, je le répète, il n'a aucune importance et peut être vide)
- mettre la ligne de lancement du script dans le champ initialisation du leader de la patrouille
exemples :
CODE:
nul = [this,tcherno_patrol1] execVM "patrols.sqf"
nul = [this,tcherno_patrol1,150,"patrol_strt1","patrol_dest1"] execVM "patrols.sqf"nota : la 1ère ligne est un exemple d'appel simplifié avec les 2 paramètres obligatoire, la 2ème contient tous les paramètres, y compris la désignation des 2 marqueurs de débuggage, qui se trouve en bas à droite dans la mission d'exemple (2 marqueurs pour la 1ère patrouille, 2 marqueurs pour la 2ème patrouille)
Paramètres
[chef_de_groupe, libellé_du_déclencheur (, distance_de_convergence_sur_objectif , "nom_du_marqueur_départ", "nom_du_marqueur_fin")] execVM "Patrols.sqf" (ne pas oublier de faire précéder par 'nul = ' dans l'éditeur, sinon ce brave éditeur hurle à l'erreur "type script, rien attendu")
- chef_de_groupe (obligatoire !): 'this', qui fait référence à l'unité qui contient la ligne de commande, ou éventuellement son nom (= issus du champ 'Nom', "chef_A" dans l'exemple ci-dessus)
- libellé_du_déclencheur (obligatoire !): le nom issu du champ 'Nom' du déclencheur
- distance de convergence sur objectif (optionnelle, devient obligatoire si on indique les 4ème et 5ème paramètres; par défaut 150m): Si une alerte est déclenché par une patrouille A, toute patrouille dans une rayon égale à cette distance de convergence est appelé en renfort.
exemple : cas d'un appel simple ("nul = [this,tcherno_patrol1] execVM "patrols.sqf"")
- 1er cas de figure : Un sniper a été repéré par la patrouille A (marqueurs orange) mais la patrouille B (marqueurs bleus) se trouve à ce moment-là à environ 400m. Si aucune distance de convergence n'a été donnée, la patrouille B se mettra en mode de combat et continuera vers son point de passage (= le marqueur bleu le plus bas). Il faudrai mettre au moins 400 comme 3ème paramètre pour que la patrouille B converge vers le lieu de l'alerte.
- 2eme cas de figure : Le sniper a été repéré par la patrouille A (marqueurs orange) et la patrouille B (marqueurs bleus) se trouve à environ 150m. La patrouille B se mettra en mode de combat et convergera vers le lieu de l'alerte, en renfort de la patrouille A. Pour éviter cela, il faudrai mettre moins de 150 comme 3ème paramètre pour que la patrouille B converge pas vers le lieu de l'alerte.
- "nom_du_marqueur_départ" (optionnel): pour débuggage et/ou observation; nom entre guillemets du marqueur préalablement créé dans l'éditeur, qui servira à indiquer le départ de chaque point de passage (égal, en gros, au point de passage précédent)
- "nom_du_marqueur_départ" (obligatoire si le "nom_du_marqueur_départ" est précisé): pour débuggage et/ou observation; nom entre guillemets du marqueur préalablement créé dans l'éditeur, qui montre le point de passage vers lequel se dirige la patrouille
exemples :
CODE:
nul = [this,tcherno_patrol1] execVM "patrols.sqf"patrouille dans la zone du déclencheur nommé "tcherno_patrol1"
CODE:
nul = [this,tcherno_patrol1,300] execVM "patrols.sqf"patrouille dans la zone du déclencheur nommé "tcherno_patrol1", renfort uniquement si une attaque ou un ennemi est repéré à 300m de distance.
CODE:
nul = [this,tcherno_patrol1,150,"patrol_strt1","patrol_dest1"] execVM "patrols.sqf"patrouille dans la zone du déclencheur nommé "tcherno_patrol1", renfort si une attaque ou un ennemi est repéré à 150m de distance (valeur par défaut), avec mode de débuggage activé : déplacement suivis par les marqueurs "patrol_strt1" et "patrol_dest1"
Les missions d'exemples
Vous êtes un sniper sur le toit d'un bâtiment. Il y a une patrouille au Nord-Est, au bout de la rue. Après le temps d'initialisation (environ 10s), durant lequel il ne faut rien faire, vous pourrez tester le comportement des deux patrouilles présentes et les observer. Vous pouvez tuez les soldats ennemis en leur tirant dessus, bien évidemment, mais j'ai aussi intégré la mort spontané d'un soldat par un ordre radio, afin de simuler un "head-shoot" sans se faire repéré. Nota important : vous êtes invincible ! Vous n'êtes pas considéré comme captif, car cela fausserai le comportement des patrouilles; vous encaisserez les bastos sans broncher, et vous pourrez sauter les immeubles de 20m sans vous egratigner.
Il y a une mission d'exemple côté Ouest (BLUFOR) et côté Est (OPFOR), de façon à comparer ce qui se modifie en fonction du camp (en fait, quasiment rien. En ce qui concerne le script "patrols.sqf", seules les unités changent)
Autre petit chose indispensable pour mes tests : observer chacun des ennemis individuellement et suivre leur traque pas à pas. J'ai donc aussi intégré quelques uns de mes outils de débugage habituels, plus ces "vues ennemies". Pour les codeurs/créateurs de mission que cela intéresse, j'ai un petit répertoire "debug\" dans lequel il y a "initddebug.sqf" qui met en place le menu de débugage (= options du menu précédées par une *) et les deux scripts nécessaires, "miniheadcam2.sqf" et "keyspressed.sqf". Au niveau de l'éditeur, il suffit de créer un "gros" déclencheur (style 2000x2000, 5000x5000, voir plus) englobant toute la zone, avec comme 'Activation' le camp à observer (OPFOR ou BLUFOR), type 'présent', condition 'true', sur activation 'MHC2_units = thislist' ("MHC2_units" étant la variable utilisée dans le script "miniheadcam2.sqf").
Pour débuggage également, il y a 4 marqueurs "patrol_strt1", "patrol_dest1", "patrol_strt2", "patrol_dest2", qui permettent de suivre sur la carte les déplacements des deux patrouilles.
Bonne édition !