X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #16
    Allez ! encore plus fort :

    for "_x" from 1 to (random 5) do {grp_x = [getpos pat ,EAST,configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad"] call BIS_fnc_spawnGroup; [grp_x, (getPos pat), 350] call bis_fnc_taskPatrol;};
    Pour ceux qui ne comprennent pas, celà signifie que mon déclencheur va créer en son centre entre 1 et 5 patrouilles qui vont immédiatement se mettre à sillonner la zone de façon aléatoire et indépendante. Ce que je ne sais pas c'est si elles interagiront en cas de rencontre avec un adversaire (à tester)

    En tout cas, si on couple ça avec des groupes en mode garde, ça peut déjà être pas mal.

    Evidemment, on peut modifier le type de section, le rayon de leur patrouille et le nombre qui vont apparaitre.
    Je pensais aussi les faire spawner à ds distances aléatoires du centre du déclencheur, mais là c'est dangereux car elles peuvent se retrouver très très proches des joueurs, or pour un spawn, c'est pas terrible ... En les faisant apparaitre au centre du déclencheur, si celui-ci est suffisamment grand, les joueurs ne verront rien, et les patrouilles se dispersent assez rapidement dans la zone.

    Il est du coup possible de dupliquer ces déclencheurs, la seule manip à faire étant de penser à changer la position d'apparition (dans mon texte, le mot "pat" est le nom du déclencheur. si on duplique celui-ci, ilfaudra penser à changer le texte d'activation en indiquant pat_1 , pat_2 etc... dans les deux occurrences du code.)

    Autre soucis : on peut en faire apparaitre plein, c'est cool, mais je n'ai rien prévu pour les faire disparaitre... Du coup, in on traverse toute la map, ne risque-t-on pas de créer tellement de groupes que ça va revenir au premier problème ?

    Commentaire


    • #17
      Si. On reviendra au même problème si on traverse la map. Il suffirait de mettre dans 'désactivation' (donc quand les Blufor ne sont pas dans le déclencheur) une commande qui supprime ce qui a été créé... Bon courage !

      Sérieusement, avoir déjà trouvé ça est excellent.

      Commentaire


      • #18
        mouais, le soucis c'est qu'ils sont créés de façon dynamique et je ne suis pas certain que leur nom soit "retrouvable"

        Or pour supprimer une unité il faut connaitre son nom !

        ça risque d'être le point délicat !

        Autre truc délicat : le déclencheur ne va pas être ne mode répétition (sinon on va se retrouver avec des tas et des tas de patrouille au même endroit si on zigzage sur la limite. Mais du coup, si on les supprime quand on sort, elles ne réapparaitront pas quand on reviendra.

        Non, la solution, ce sera de les tuer au fur et à mesure !

        Commentaire


        • #19
          Il y a une fonction qui donne la liste de tous les groupes, non ?

          Commentaire


          • #20
            Tu as la liste dans l'éditeur dans l'onglet "config" (le symbole c'st un engrenage) et la liste de toutes le fonctions à côté (symbole fx)

            On peut effectivement choisir de faire spawner des groupes très différents.

            Commentaire


            • #21
              Petit test : j'ai mis environ 50 déclencheurs et j'ai traversé la map en helico.

              Je me fais tirer dessus assez souvent (pour tout vous dire, en voiture, j'ai fais moins d'1 km, en blindé, j'ai fais la moitié de la map et en helico je me suis crashé deux fois suite à des tirs ennemis) mais au bout d'un moment, ça rame sévère.

              Donc effectivement, je crois qu'on atteint forcément la limite à partir d'un moment. Il n'y a pas de miracle, cette map est tellement grande (il faut plus de 15 minutes pour la traverser en vitesse *4 !!!) qu'au bout d'un moment il y a trop d'unités ennemies.

              Si quelqu'un sait comment faire disparaitre les unités à partir du moment où les joueurs en sont très éloignés, je suis preneur.

              Commentaire


              • #22
                Je répondais à ça :
                mouais, le soucis c'est qu'ils sont créés de façon dynamique et je ne suis pas certain que leur nom soit "retrouvable"

                Or pour supprimer une unité il faut connaitre son nom !

                ça risque d'être le point délicat !
                Regarde par là : http://community.bistudio.com/wiki/allUnits
                Pour les faire disparaître, utilise distance comme condition puis tue-les.

                Commentaire


                • #23
                  merci, je vais essayer !!!

                  Mais ça va faire du cadavre au sol !

                  Ce qui serait cool, c'est de pouvoir réenclencher mes déclencheur afin qu'ils spawnent de nouveau si on repasse ensuite dans la zone. Le problème, c'est que j'ai peur, si je met en repetition, que ça ne fasse spawner beaucoup trop de section dès le premier passage.
                  Parce que si on se déplace le long de la limite du déclencheur et qu'on y entre et qu'on en sort plusieurs fois de suite, ça va faire apparaitre un énooorme tas d'unité en son centre.

                  Est-il possible de coupler le déclencheur avec le timeout ? qu'il attende un certain temps avant de se redéclencher ?

                  PS : au fait, j'ai modulé le point de spawn avec un random afin que les unités en patrouille n'apparaissent pas toutes au centre du déclencheur. Au final, j'ai un déclencheur avec un rayon de 800 m et les patrouilles apparaissent aléatoirement dans un rayon de 200m autour du centre, puis elles se dispersent rapidement. Si on est à pied, quand on arrive au centre du déclencheur, elles sont déjà très espacées aléatoirement.
                  Dernière modification par Raph_VR, 11-09-2013, 18h38.

                  Commentaire


                  • #24
                    Dans le déclencheur tu peux choisir un délai avant le déclenchement.

                    Commentaire


                    • #25
                      Certes, mais pas un délai avant le "redéclenchement".

                      Commentaire


                      • #26
                        Oui, utile pour les "captures de zone" : si tu mets 10, le déclencheur devra être encore vrai 10 secondes après son activation pour être déclenché. Je pense qu'avec une minute, ce serait bon.

                        Par contre, on risque d'avoir des problèmes si on se sépare.

                        Commentaire


                        • #27
                          Salut à tous,

                          Je viens de terminer une petite série de scripts dont je tiens à vous faire profiter pour éventuellement les tester en masse et les faire évoluer.

                          J'avais besoin de mettre énormément d'unités sur Altis pour une mission, mais le soucis, c'était qu'avec trop de monde, ça laggait à mort et je ne pouvais pas dépasser la limite des 144 groupes.

                          J'ai donc décidé de faire apparaitre des groupes dans des zones et de les faire disparaitre dès le départ des joueurs.

                          Pour ma mission, c'était idéal puisque l'île était occupé par le FIA et le CSAT qui s'affrontaient et que seul mon groupe était BLUFOR.



                          Il s'agit donc de 4 scripts différents dont je met ici uniquement le code :

                          SCRIPT pat_spawn.sqf :

                          Code:
                          // Pat_Spawn by Raph_VR : script pour faire apparaitre un certain nombre de patrouilles dans une zone donnée 
                          /* entrer en argument :
                          - le nom du déclencheur
                          - le nombre de groupes maximum qui composeront les patrouilles de la zone
                          - l'écartement en m maximal des patrouilles par rapport au centre du déclencheur
                          - l'amplitude maximale de déplacement de chaque patrouille en m
                          - le camp (west, east, resistance) des patrouilles
                          - le lien du configfile du groupe que vous voulez créer     ex : configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad"
                          
                          Exemple à placer dans le champ activation d'un déclencheur (nommé "pat") qui fera spawner la patrouille :
                          patrouille = [pat,6,800,350,east,configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad"] execVM "SpawnGroup\pat_spawn.sqf";
                          
                          */
                          if (not isServer) exitwith {};
                          _trg = _this select 0;
                          _taille = _this select 1;
                          _dispersion = _this select 2;
                          _amplitude = _this select 3;
                          _camp = _this select 4;
                          _type = _this select 5;
                          _pos = getpos _trg;
                          for "_x" from 1 to (random _taille) do {
                              grp_x = [[(_pos select 0) + random (_dispersion) - random (_dispersion) , (_pos select 1) + random (_dispersion) - random (_dispersion) , _pos select 2]  ,_camp ,_type] call BIS_fnc_spawnGroup;
                              [grp_x, _pos, _amplitude] call bis_fnc_taskPatrol;
                          };
                          SCRIPT vehic_spawn.sqf

                          Code:
                          // Vehic_Spawn by Raph_VR : script pour faire apparaitre des véhicules et leur équipage dans une zone donnée et les faire patrouiller. Idéal pour les véhicules aériens.
                          /* entrer en argument :
                          - le nom du déclencheur
                          - le nombre d'unités maximum qui vont spawner dans la zone
                          - l'écartement en m maximal des patrouilles par rapport au centre du déclencheur
                          - l'amplitude maximale de déplacement de chaque patrouille en m
                          - le camp (west, east, resistance) des patrouilles
                          - le type d'unité que vous voulez créer. ex : "O_Heli_Attack_02_F"
                          
                          Exemple à placer dans le champ activation d'un déclencheur (nommé heli) qui fera spawner les véhicules aériens
                          patair = [heli,2,100,1700,east,"O_Heli_Attack_02_F"] execVM "SpawnGroup\vehic_spawn.sqf";
                          
                          */
                          
                          if (not isServer) exitwith {};
                          _trg = _this select 0;
                          _taille = _this select 1;
                          _dispersion = _this select 2;
                          _amplitude = _this select 3;
                          _camp = _this select 4;
                          _type = _this select 5;
                          _pos = getpos _trg;
                          for "_x" from 1 to (random _taille) do {
                              vehic_x = [[(_pos select 0) + random (_dispersion) - random (_dispersion) , (_pos select 1) + random (_dispersion) - random (_dispersion) , _pos select 2] ,0,_type,_camp] call BIS_fnc_spawnVehicle;
                              [(group vehic_x), _pos, _amplitude] call bis_fnc_taskPatrol;
                          };
                          SCRIPT combat_spawn.sqf

                          Code:
                          // combat_spawn par Raph_VR : script pour générerun combat entre deux armées sur une zone donnée
                          /*entrer en argument :
                          - le nom du déclencheur
                          - le nombre de groupes minimum qui composeront chaque armée
                          - le nombre de groupes maximum qui composeront chaque armée
                          - l'écartement en m maximal des groupes d'une armée par rapport au centre de celle-ci
                          - l'amplitude maximale de la zone de rencontre pour le combat
                          - l'orientation en abscisse du camp 1 (axe des x : valeur -1, 0 ou 1)
                          - l'orientation en ordonnée du camp 1 (axe des y : valeur -1, 0 ou 1)
                          - le décalage des points de départ de chaque armée par rapport au centre du déclencheur.
                          - le camp (west, east, resistance) de l'armée 1
                          - le lien du configfile des groupes que vous voulez créer pour l'armée 1    ex :  configfile >> "CfgGroups" >> "East" >> "OPF_F"  >> "Infantry" >> "OIA_InfSquad"
                          - le camp (west, east, resistance) de l'armée 2
                          - le lien du configfile des groupes que vous voulez créer pour l'armée 2    ex : configfile >> "CfgGroups" >> "Indep" >> "IND_F" >> "Infantry" >> "HAF_InfSquad"
                          
                          Exemple à placer dans le champ activation du déclencheur (nommé "comb") qui fera spawner le combat :
                          comb = [combatinf,2,4,500,350,1,-1,900,east,configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad",resistance,configfile >> "CfgGroups" >> "Indep" >> "IND_F" >> "Infantry" >> "HAF_InfSquad"] execVM "SpawnGroup\combat_spawn.sqf";
                          
                          */
                          
                          if (not isServer) exitwith {};
                          _trg = _this select 0;
                          _taillemin = _this select 1;
                          _taillemax = _this select 2;
                          _dispersion = _this select 3;
                          _amplitude = _this select 4;
                          _orientationx = _this select 5;
                          _orientationy = _this select 6;
                          _decalage = _this select 7;
                          _camp1 = _this select 8;
                          _type1 = _this select 9;
                          _camp2 = _this select 10;
                          _type2 = _this select 11;
                          _pos = getpos _trg;
                          for "_x" from 1 to (_taillemin + random (_taillemax - _taillemin)) do {
                              grp_x = [[(_pos select 0) + (_orientationx * _decalage) + random (_dispersion) - random (_dispersion) , (_pos select 1) + (_orientationy * _decalage) + random (_dispersion) - random (_dispersion) , _pos select 2]  ,_camp1 ,_type1 ] call BIS_fnc_spawnGroup;
                              [grp_x, [(_pos select 0) + random (_amplitude) - random (_amplitude) , (_pos select 1) + random (_amplitude) - random (_amplitude), _pos select 2]] call bis_fnc_taskAttack;
                          };
                          for "_y" from 1 to (_taillemin + random (_taillemax - _taillemin)) do {
                              grp_y = [[(_pos select 0) - (_orientationx * _decalage) + random (_dispersion) - random (_dispersion) , (_pos select 1) - (_orientationy * _decalage) + random (_dispersion) - random (_dispersion) , _pos select 2]  ,_camp2 ,_type2 ] call BIS_fnc_spawnGroup;
                              [grp_y, [(_pos select 0) + random (_amplitude) - random (_amplitude) , (_pos select 1) + random (_amplitude) - random (_amplitude), _pos select 2]] call bis_fnc_taskAttack;
                          };

                          SCRIPT sup_IA.sqf

                          Code:
                          // Sup_IA by Raph_VR : script pour supprimer toutes les unités IA et leurs véhicules des deux camps considérés
                          /* entrer en argument :
                          - le nom du déclencheur
                          - l'amplitude de la zone de suppression autour du centre du déclencheur
                          - le premier camp à supprimer
                          - le deuxième camp à supprimer
                          
                          
                          Exemple à placer dans le champ désactivation d'un déclencheur (nommé pat) qui fera spawner les véhicules aériens => A combiner avec les autres scripts, ce script a pour effet de supprimer ce que vous avez fait spawner en entrant dans une zone.
                          supp = [pat,800,east,resistance] execVM "SpawnGroup\sup_IA.sqf";
                          
                          */
                          
                          
                          
                          if (not isServer) exitwith {};
                          _trig = _this select 0;
                          _amplitude = _this select 1;
                          _camp1 = _this select 2;
                          _camp2 = _this select 3;
                          _posi = getpos _trig;
                          
                          {if (((side _x == _camp1)OR(side _x == _camp2))&&(_x distance _posi < _amplitude) ) then{deleteVehicle vehicle _x; deleteVehicle _x;} else {}}forEach allUnits;

                          Pour appeler ces scripts, il vous suffit de placer sur la map un déclencheur de grande taille (au moins 1200 m) et de le mettre en répétition, déclenchement par le camp du joueur.
                          Dans le champ activation du déclencheur, indiquer par exemple :

                          patrouille = [pat,6,800,350,east,configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad"] execVM "pat_spawn.sqf";
                          Dans le champ désactivation du déclencheur indiquer par exemple :

                          sup = [pat,1400] execVM "sup_IA.sqf";
                          Avec cet exemple vous ferez apparaitre entre 1 et 6 groupes d'infanteries du CSAT aléatoirement dans un rayon de 800 m autour du centre du déclencheur. Elles feront chacune des déplacments aléatoires dans une zone d'environ 350 m autour de leur point d'apparition.
                          Lorsque le groupe du joueur quitte la zone, toutes les unités IA à moins de 1400m du centre du déclencheur seront supprimées.

                          Sur une mission, il est donc possible de mettre des déclencheurs un peu partout (qui se chevauchent de préférence) et lorsque l'quipe du joueur se déplace, elle rencontre à chaque zone des situations aléatoires avec de nombreuses unités. On peut même simuler des zones de combats assez dense que notre petite équipe traversera.

                          Dans ma mission par exemple, le groupe arrive dans une ville où vont s'affronter plusieurs groupes d'infanterie, assistés par plusieurs groupes de blindés et appuyés par des avions de chasse et des hélicos. Le tout spawnant lorsqu'on pénètre dans la zone.


                          EDIT : j'ai corrigé les scripts. Vous pouvez aussi les télécharger directement avec le lien ci-dessous :
                          https://e-nautia.com/pharel/disk/Divers/SpawnGroup.rar
                          Dernière modification par Raph_VR, 16-10-2013, 15h51.

                          Commentaire


                          • #28
                            J'ai finalisé mes scripts : vous avez ci-cessus la toute dernière version (on peut aussi la télécharger) et l'utiliser à souhait dans vos missions.

                            Commentaire


                            • #29
                              Merci Raphounet

                              Commentaire


                              • #30
                                J'ai un peu modifié ton script, au cas où quelqu'un serait intéressé. Maintenant, il évite que des patrouilles spawnent sur l'eau, et il y a un minimum. Parce que si tu demandes 50 patrouilles et que le générateur aléatoire te sort un 3, tu t'emmerdes un peu
                                Par défaut, ce minimum est de 1/3 du maximum, mais c'est facilement modifiable.

                                Code:
                                if (not isServer) exitwith {};
                                _trg = _this select 0;
                                _taille = _this select 1;
                                _dispersion = _this select 2;
                                _amplitude = _this select 3;
                                _pos = getpos _trg;
                                _nombre = random _taille;
                                
                                while{_nombre < _taille/3} do {_nombre = random _taille};
                                
                                for "_x" from 1 to _nombre do {
                                	_posSpawn = [(_pos select 0) + random (_dispersion) - random (_dispersion), (_pos select 1) + random (_dispersion) - random (_dispersion), _pos select 2];
                                
                                	while{surfaceIsWater _posSpawn} do {
                                	_posSpawn = [(_pos select 0) + random (_dispersion) - random (_dispersion), (_pos select 1) + random (_dispersion) - random (_dispersion), _pos select 2];
                                	};
                                
                                	grp_x = [_posSpawn, east, configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad"] call BIS_fnc_spawnGroup;
                                	[grp_x, _pos, _amplitude] call bis_fnc_taskPatrol;
                                };
                                Ensuite, je me demande si on spawnait des patrouilles de 1 homme, on aurait moins de problèmes de performances, non ? Et dès que la patrouille est à moins de 2 km d'un joueur, on pourrait ajouter des soldats au groupe. Puis les enlever quand le joueur est plus loin.
                                Dernière modification par Turambar, 02-11-2013, 19h19.

                                Commentaire

                                Chargement...
                                X