X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Organisation de la défense IA

    Voici un sujet sur lequel je me penche depuis des années : comment rendre les IA efficaces et réactives lors des missions. Bien que pendant un temps j'ai opté, pour plus de réalisme, pour la solution "facile" consistant à les manœuvrer par le module de commandement puis par zeus (ça permet en effet de garder la main sur eux et de rendre leurs actions plus réfléchies en fonction de celles des joueurs), il existe néanmoins d'assez bonnes solutions scriptées pour que la défense ennemie soit efficace et plutôt bluffante.

    Je vais donc vous présenter, pas à pas, les choix que j'ai fait pour ma mission d'entrainement dans un tuto en six étapes :

    1) Paramétrer le skill des unités
    2) Mettre en place des patrouilles aléatoires utilisant le patrol script
    3) Mettre en place des patrouilles véhiculées (version modifiée du patrol script)
    4) Créer un site de défense de type base "remplie"
    5) Planifier l'arrivée de renforts
    6) Mettre en place une défense fixe pour une cible de position variable

    En piochant dans tout celà, vous devriez être à même de créer une armée capable d'anéantir n'importe quelle équipe de joueurs, la preuve, personne n'arrive à finir mes missions !

  • #2
    Paramétrer le skill des unités :

    Voici un petit tableau excel qui permet de créer un "skill" plus réaliste pour les unités selon le niveau qu'on veut leur donner.
    Le comportement des IA sera plus réaliste au sens où elles auront souvent plus de mal à vous repérer, elles sniperont moins facilement, auront tendance à tirer à tort et à travers dans la direction du bruit sans pour autant vous toucher et pourront même s'enfuir lorsque leurs camarades seront tués au combat.

    Vous pouvez télécharger le fichier avec ce lien :
    https://www.dropbox.com/s/1js2868pkf...Catsy.xls?dl=0

    Avec ce fichier, vous indiquez dans la case en rouge (C3) le niveau de skill que vous voulez avoir pour votre soldat. Le fichier calcule pour vous toutes les compétences appropriées et crée un mini script (case en jaune) que vous n'avez plus qu'à copier-coller dans le champs initialisation de l'unité.

    Pour ma part, dans une section "basique" de 8 hommes, je met le chef d'escouade et le chef d'équipe au niveau 1, le tireur d'élite et le mitrailleur au niveau 0,75, le grenadier au niveau 0,5 et les autres au niveau 0,25. Avec ce réglage, la section est dangereuse mais comporte un certain nombre de buses incapables de vous shooter.

    Je recommande de vous créer deux ou trois sections "types" avec des skills prédéfinis puis, ensuite, de les copier-coller autant de fois que vous le souhaitez pour établir votre défense.
    Dernière modification par Raph_VR, 19-02-2015, 15h56.

    Commentaire


    • #3
      Mettre en place des patrouilles avec le patrol script :

      J'utilise le patrol script qui permet d'avoir des patrouilles aléatoires qui se déplacent dans une zone définie et peuvent visiter les maisons.
      En cas de repérage d'ennemi, toutes les sections qui utilisent la patrol script peuvent intervenir pour aider leurs alliés et ce dans un rayon d'intervention défini par le joueur.

      Voici un lien vers le script :
      https://www.dropbox.com/s/vv3lawwp7w...trols.rar?dl=0

      Pour l'activer, il faut :
      - Placer le script dans le dossier de votre mission
      - Créer un déclencheur dont la taille et la forme correspondront à la zone que vous voulez patrouiller. Donnez un nom à ce déclencheur (ex : PV pour patrouille en ville)
      - Placer une escouade (avec skill prédéfini ? - voir plus haut) dans le déclencheur. Il est possible de faire en sorte que sa position de départ soit aléatoire en la mettant au centre du déclencheur et en faisant varier le champ "rayon de placement"
      - Coller dans l'init du chef d'escouade les commandes suivantes :
      Code:
      nul = [this, PV, 800] execVM "Patrols.sqf";
      les point modifiable de ce code sont le nom du déclencheur (ici PV) et la valeur d'intervention (ici 800 m)

      Vous pouvez mettre plusieurs patrouilles en faisant des copier-coller de l'escouade. Vous pouvez les placer dans la même zone et si vous avez plusieurs zones, pensez à leur donner des noms différents et à changer le nom du déclencheur dans l'init du chef.
      En cas d'alerte, le chef de section regarde à quelle distance il est de l'alerte et si cette distance est inférieure à la valeur d'intervention (ici 800m) il s'y rend en mode "conscient"
      Lorsqu'il est à moins de 50 m du danger, il se met en mode combat (ou avant si on lui tire dessus)

      En général, je met une valeur d'intervention plus grande que le déclencheur, ma patrouille peut sortir de sa zone pour intervenir.
      Je met souvent des zones de patrouilles qui se chevauchent et je place des "petites patrouilles" restreintes aux villages englobées par de grosses sections qui patrouillent dans toute une région. Ainsi, si les joueurs tombent sur une patrouille dans un village, les grosses patrouilles interviennent, mais les petites patrouilles du village voisin ne viennent pas.

      (schéma à venir quand j'aurai le temps)
      Dernière modification par Raph_VR, 19-02-2015, 16h38.

      Commentaire


      • #4
        Mettre en place des patrouilles motorisées (version modifiée du patrol script) :

        Le patrol script plante avec les véhicules à cause des visites des maisons. J'ai donc fait une version modifiée :

        https://www.dropbox.com/s/papehru1xf...olsNV.rar?dl=0

        Pour l'activer, il faut :
        - Placer le script dans le dossier de votre mission
        - Créer un déclencheur dont la taille (grande ! ) et la forme correspondront à la zone que vous voulez patrouiller. Donnez un nom à ce déclencheur (ex : PM pour patrouille motorisée)
        - Placer un chef d'équipe auquel vous groupez un seul véhicule (ex un hunter armé). Attention, vous ne pouvez pas utiliser un véhicule seul, le patrol script doit être placé sur un soldat.
        - Coller dans l'init du chef d'escouade les commandes suivantes :

        Code:
        nul = [this, PM, 2000] execVM "PatrolsNV.sqf";

        A noter ici que la valeur d'intervention doit être bien plus grande.
        Dernière modification par Raph_VR, 20-02-2015, 14h02.

        Commentaire


        • #5
          Créer un site de défense de type "Base" :

          Si la carte comporte une site militaire (une base, une tour etc...) vous pouvez avoir envie de la remplir sans trop vous prendre la tête.
          Dans ce cas j'utilise le module "Site" de l'éditeur.

          Ce module propose de remplir automatiquement des sites (pour l'ouest, l'est ou les indépendants) avec des soldats placés sur les mirador, de petites patrouilles qui tournent autour etc

          Pour ma part, je prend le type "Base" pour les grosses structures et le type "poste d’observation" pour les plus petites. Il faut définir la forme et la taille du site (en général je prend une ellipse de 100 * 100 ou 200*200 pour les grosses bases).
          Il faut choisir aussi le taux d'occupation des bâtiments. Je met du 0,25 pour ne pas trop les remplir.

          ATTENTION : les unités spawnées avec ce site ont un skill redoutable (et pas prédéfini)

          ça vous fait donc des sites vivants et dangereux que les joueurs, en général, éviteront...

          Commentaire


          • #6
            Planifier l'arrivée des renforts :

            C'est une phase un peu plus technique. Si vous souhaitez voir débarquer à un moment des troupes héliportées, mécanisées ou des blindés qui vont attaquer vos joueurs en représailles de leur action. Il faut penser à ajouter un timer (délai) pour éviter que dès le départ, l'équipe de joueur ne se prenne tout sur la tronche...

            Là, tout se passe via l'éditeur :

            - Placer une escouade ennemie (skill prédéfini ? - voir plus haut) à l'endroit d'où partiront les renforts (ex : près d'une base ou sur un aéroport)
            - Grouper l'escouade avec un véhicule de transport, hélicoptère, camion ou blindé, capable de tous les emporter (Vérifier le nombre de places !)
            - Ajouter un waypoint "SE DEPLACER" à 2 ou 3 m du chef d'escouade
            - dans les champs "depass delai" du waypoint, indiquer des valeurs (ex : MIn = 600 MOY = 1000 MAX = 2000)
            - Ajouter un second waypoint "GARDER" 2 ou 3 m plus loin.
            - Créer un déclencheur (appelé DETECTEUR par exemple) correspondant à toute la zone de jeu (toute la map s'il le faut)
            - Dans "Activation" choisissez le camp des joueurs. (ex OPFOR)
            - Sélectionnez "Répétition" et "Détection par ..." (le camp des ennemis ex Ouest)
            - Synchronisez ce déclencheur avec le waypoint "SE DEPLACER"
            - Ajouter si besoin d'autres sections de renfort synchronisée au même détecteur.

            Dans cette configuration, la section va attendre que les joueurs soient détectés pour se rendre au point "SE DEPLACER". Là, elle va encore attendre un temps déterminé par le timer (dans mon exemple de 600 s = 10 min à 2000 s = 33 min de façon aléatoire) avant d'intervenir. Au bout du compte à rebours, elle va passer en mode "GARDER" et embarquer dans son véhicule pour foncer sur les joueurs au dernier endroit où ils auront été repérés.

            Avec le timer aléatoire, qui simule la durée nécessaire pour réunir l'équipe de renfort, on a une arrivée des renforts très variable selon les situations.

            Pour rendre en plus l'apparition de renforts aléatoires, il est possible de mettre une probabilité de présence sur le véhicule (ex 50 %) ainsi, si le véhicule est absent, les renforts viendront à pied... et donc n'arriveront sans doute jamais à temps.

            Commentaire


            • #7
              Mettre en place un défense fixe pour cible à position variable :

              La cerise sur le gâteau : Vous voulez une cible (un truc à détruire, un gars à buter) qui se place à un endroit quelconque, mais vous voulez qu'elle soit défendue (ce qui est dur à faire si elle se place n'importe où) Voici donc comment faire :

              - Créer l'objet, véhicule ou personnage qui sera la cible et appelez le "Cible"

              2 options pour le placement aléatoire :
              => Utiliser une valeur pour le rayon de placement de la cible
              => Placer des marqueurs à divers endroits et grouper la cible à chacun de ces marqueurs. Elle sapwnera alors au début de la mission sur un des marqueurs choisis.

              A noter : ce placement aléatoire peut être utilisé pour n'importe quel objet, y compris les joueurs.

              - Créer ensuite une section (petite) et placer dans l'init de son chef :
              Code:
              this setpos [(getpos Cible select 0) , (getpos Cible select 1) + 8 , getpos Cible select 2]
              Avec ce code vous placez un groupe un peu devant votre cible. On utilise ici un repère cartésien, l'axe "select 0" est l'axe est-ouest tandis que le "select 1" est le Nord-Sud. Select 2 est l'altitude.
              Dans cet exemple, le +8 derrière select 1 indique que l'escouade se mettra 8 m au nord de la cible. Donc il faut penser à orienter ma section vers le nord.
              Si je veux mettre une seconde section qui défend l'arrière de ma cible, je met un -8 et j'oriente ma section vers le sud.

              Ainsi, votre Cible sera entourée de deux équipes armées dirigées l'une vers le nord et l'autre vers le sud et entourant votre cible.

              Commentaire


              • #8
                Voilà.

                Tout ce qui est indiqué ici est mis en application dans ma mission MB_Training.

                Si vous avez des questions, des besoins d'éclaircissement, n’hésitez pas à poser des questions.

                Commentaire


                • #9
                  Excellent tout ça!

                  Concernant les patrols script, on peut utiliser simultanément celui de base et celui des véhicules ou il y a un conflit, car les noms on l'air pareil?

                  En gros celui des véhicules supprime la fouille des maison c'est ça?

                  Commentaire


                  • #10
                    Oui, le patrolNV est une version que j'ai modifié pour supprimer la visite des maisons.

                    Si la zone de patrouille est grande, ça fait des déplacement de véhicule cohérent sur de grandes distances sans arrêts trop fréquents. Le fait d'ajouter une grande zone d'intervention permet de voir débarquer le véhicule dès qu'il y a contact.

                    A noter que si le véhicule en question est un camion, on peut y mettre toute une section qui sera alors débarquée pour le combat.

                    Commentaire


                    • #11
                      Je me permet de te corriger mais il me semble que tu t'es trompé dans l'exécution du patrolNV.

                      Code:
                      nul = [this, PM, 2000] execVM "Patrols.sqf";
                      C'est pas plutôt:

                      Code:
                      nul = [this, PM, 2000] execVM "PatrolsNV.sqf";
                      ??

                      Autre chose.

                      Je souhaiterai mettre en place des sentinelles, des mecs qui font les plantons devant des portes, sur des toits en mode immobile.
                      Et bien sur dès que le combat s'engage il faudrait qu'ils deviennent actifs et ripostent.

                      J'essaye les points de passage garde et sentinelle mais je n'arrive pas a grand chose avec. C'est faisable avec le patrol script?
                      Dernière modification par Elanion, 20-02-2015, 14h01.

                      Commentaire


                      • #12
                        ah oui, j'avais oublié de modifier quand j'ai fait mon copier-coller. Merci Ela !


                        Pour tes sentinelles, le patrol script ne t'aidera pas. Par contre, le mode Garde sert justement à ça.
                        ATTENTION : Le mode "sentinelle" porte mal son nom et devrait plutôt s'appeler "reconnaissance" puisque ce point de passage permet d'envoyer une unité "voir sans engager" ce qui se passe à un endroit avant de retourner à son point de départ.

                        Pour faire tes gardes immobiles fait la chose suivante :
                        - Place un soldat ou un groupe de soldat à l'endroit voulu
                        - Donne un waypoint au soldat "GARDER"
                        - Si tu veux restreindre leur zone d'action, tu crée un déclencheur dans la zone en question et tu met comme type : "Gardé par l'est" ou "Gardé par l'ouest" (il faut peyut être synchronise le waypoint et le déclencheur) Ainsi tes sentinelles n'interviendront que pour une menace à l'intérieur de ce déclencheur. Une fois la menace éliminée, ils reviennent à leur point de garde.
                        - Dans le cas de mes renforts, je n'ai pas mis de zone de garde et donc pas de restriction, à ce moment là, les soldats interviennent sur toute la map.

                        EDIT : A vérifier, mais l'utilisation d'un déclencheur "Gardé par" fait se déplacer l'unité en mode Garde vers le déclencheur en question. Donc si tu veux que ta sentinelle soit à un endroit précis, il faut que ton déclencheur Gardé Par soit centré sur elle. Le rayon du déclencheur correspondra à la zone d'action de ta sentinelle.... mais c'est à tester, je ne l'ai jamais fait.

                        Dans le doute, si tu veux resteindre avec un moyen sûr, utilise la même procédure que celle pour mes renforts. Voici un exemple en détail :
                        => Tu veux défendre une caserne avec 5 sentinelles qui l'entourent et tu veux qu'elles interviennent pour s'entraider seulement si l'ennemi attaque dans un rayon de 100m.
                        - Place tes 5 sentinelles à l'endroit où elle devront rester
                        - Juste à côté de chaque sentinelle, tu met un waypoint "SE DEPLACER" suivi d'un waypoint "GARDER" (le plus proche possible pour éviter les mouvements réels)
                        - Tu crée un déclencheur de 100 m de diamètre autour du bâtiment à garder. Activation = camp des joueurs et tu sélectionne "répétition" et "détection par (camp des sentinelles)"
                        - Tu synchronise les waypoints "SE DEPLACER" de chaque sentinelle avec le déclencheur.
                        - Eventuellement, tu met un petit délai dans le waypoint se déplacer (quelques secondes = temps de réaction)

                        De cette façon, lorsqu'une des sentinelles repèrera un ennemi dans un rayon de 100m (et pas si elle est tuée sans le voir) les 4 autres passeront en mode GARDER et viendront à son secours.
                        Dernière modification par Raph_VR, 20-02-2015, 14h22.

                        Commentaire


                        • #13
                          PS : au fait, si ton waypoint se déplacer est placé sur un batiment, ça te permet d'envoyer ta sentinelle à une des position prédéfinie du batiment.

                          Commentaire


                          • #14
                            Autre question:

                            Dans l'arrivé des renforts via le timer, si on suit ta méthode il vont se mettre sur le point garder sans intervenir sur plusieurs km non?
                            Il faut pas leur mettre le patrol script dans l'init?

                            Commentaire


                            • #15
                              ATTENTION : après vérification, il y avait un "défaut" dans le patrol script. Lorsque la zone de convergence (la valeur chiffrée) était plus grande que la zone de patrouille (le déclencheur) les unités n'en sortaient pas. ça veut dire qu'elles ne pouvaient pas attaquer d'ennemi en dehors de leur zone de patrouille ( + 50 m quand même)

                              Si vous voulez la dernière version (plus efficace) du patrol script, il faut retélécharger le fichier sur mes liens précédents.

                              L'intérêt de la nouvelle version (avec un exemple):
                              - On place deux patrouilles dans un village avec la mention suivante dans leur init (patrouille1 : "nul = [this, PV, 150] execVM "Patrols.sqf";" et patrouille2 "nul = [this, PV, 2000] execVM "Patrols.sqf";")
                              - le déclencheur PV fait à peu près la taille du village (dans les 100 m de diamètre)
                              - les deux patrouilles se déplacent dans le village en mode détente et le fouillent en boucle sans en sortir.
                              - Si une alerte se déclenche loin du village (ex à 1,5 km) seule la patrouille 2 interviendra. Elle se déplace sur la zone de l'alerte et, si l'alerte est terminée, elle revient au village. La patrouille 1, elle, reste au village car son rayon d'action de 150m est inférieur à 1,5 km
                              - Si une alerte se déclenche dans le village, les deux patrouilles interviennent

                              ça peut rendre interessant l'utilisation des manœuvres de diversion. A partir de maintenant, dans mes "défenses", je mettrai toujours une partie des troupes en intervention "locale" et une autre en "régional" afin qu'une attaque de diversion puisse faire quitter les liuex à une partie des troupes.

                              Commentaire

                              Chargement...
                              X