Version haut débit de: Armée de l'Ombre
Aide - Rechercher - Membres

Scripts pour spawn de patrouilles aléatoires

Raph_VR (23 Septembre 2013, 15:18)
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 :

// 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

// 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

// 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

// 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 :

Citation
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 :

Citation
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
JonyBIgooD (23 Septembre 2013, 17:06)
:militaire1: Salut Raph_VR,

Merci pour ton travail, c'est cool c'est exactement ce genre de script que je cherchais. Niquel.

Dês que je peux je test dans ma futur mission, t'inquiête je te signalerai en cas de bugs aprês la batterie de test (je n'utilise pas de serveur privé)

A plus n'hésite pas à nous mettre d'autres scripts qui rendent les missions beaucoup plus réaliste

:fsb2_godgrace: :fsb2_godgrace: :fsb2_godgrace:

Cordialement,
JonyBIgooD :fsb2_drink:
Raph_VR (26 Septembre 2013, 9:37)
Au fait, j'ai oublié de préciser, pour le script de combat, que les orientations x et y de l'armée 1 sont prises en compte dans le repêre xOy de la map.
Pour être clair, si vous entrez les valeurs x=1 et y=1, l'armée 1 attaquera par le nord est, x=1 et y=0 elle attaquera plein est, x=0 y=1 elle viendra par le nord. Etc...

à‰videmment l'armée 2 arrive par le coté opposé et les deux groupes se rencontrent au milieu (approximativement) du déclencheur.

Pour bien rendre l'atmosphêre et avoir une belle bataille, je recommande de superposer plusieurs déclencheurs :
=> Un déclencheur avec des groupes d'infanterie, un déclencheur avec des groupes mécanisés (assités par des blindés) un déclencheur faisant spawner des avions et hélicos en patrouille pour chaque camp.
Si vous ajoutez à ça des bombardement d'artillerie aléatoire...ça devient une vraie tuerie !
Raph_VR (28 Septembre 2013, 7:52)
Si quelqu'un utilise ces scripts, merci de faire un retour pour que je sache si ça fonctionne bien dans diverses situations.

Vu qu'il s'agit d'une "adaptation" de ceux que j'ai mis dans ma propre mission, je n'ai pas testé en live.
poran (28 Septembre 2013, 8:14)
je vais regarder ça, je te fais un retour d'ici 1 semaine
Raph_VR (11 Octobre 2013, 8:02)
J'ai retesté ces scripts dans une autre mission mission et ça ne fonctionne pas. Ma premiêre version marche mais pas celle-ci !
Je vais corriger ça et remettre en DL les versions définitives et testées
poran (11 Octobre 2013, 11:08)
on attends ta nouvelle correction?
Raph_VR (11 Octobre 2013, 19:18)
Ouais, j'essaye de finaliser ça ce week end ou en début de semaine.

Aprês, sans vouloir faire de la pub pour mon travail, je ne peux que vous encourager à utiliser ces scripts pour vos missions car ça permet de réellement créer un gros maillage défensif sur l'énorme à®le d'Altis sans pour autant faire baisser les performances du jeu ni dépasser la limite des 144 groupes alors que "virtuellement" j'en met beaucoup plus.
poran (11 Octobre 2013, 19:27)
oui j'attends ta correction, et j'adopterai sur une mission en cours de création sur altis :wink:
Raph_VR (16 Octobre 2013, 15:45)
Voici un lien vers la version finale de mes scripts :

https://e-nautia.com/disk/download.php?id=5289859

Pour les installer, il suffit de les copier dans le dossier de votre mission, tout est regroupé dans un dossier appelé SpawnGroup.

Pour chaque script, j'ai mis quelques explications sur les arguments à entrer ainsi qu'un exemple à placer dans le champ activation d'un déclencheur.

L'idée est donc d'utiliser un déclencheur qui s'active lorsque votre groupe (activation par BLUFOR par exemple) entre dans le déclencheur. Vous y faites alors spawner des groupes de patrouilles (nombre et position aléatoire)
Lorsque votre groupe quitte la zone, si vous avez placé le script supp_IA dans le champ désactivation, ça supprimera toutes les patrouilles que vous n'aurez pas tuées.
poran (16 Octobre 2013, 17:47)
super, je teste d'ici 10 jours, sur une mission. :fsb2_smyle:

en te remerciant encore.
Raph_VR (19 Novembre 2013, 21:42)
Au fait, j'ai pas eu de retour sur ces scripts.

Est-ce que ça fonctionne comme tu le souhaites ?
Husky (20 Novembre 2013, 0:07)
çà m'intéresse beaucoup, je suis souvent sur ce forum et pourtant, distrait, je n'y ai pas fait attention.
je vais le tester chez moi, mais j'ai une question :

patrouille = [pat,6,800,350,east,configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSquad"] execVM "SpawnGroup\pat_spawn.sqf";
que signifient ces chiffres en rouge stp ? afin de pouvoir l'utiliser au mieux.
benson09 (20 Novembre 2013, 19:01)
réponse déjà visible au début du post...étourdi ! ! :wink:

"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."

6 = ferez apparaitre entre 1 et 6 groupes d'infanteries du CSAT
800 = aléatoirement dans un rayon de 800 m
350 = Elles feront chacune des déplacments aléatoires dans une zone d'environ 350 m autour de leur point d'apparition.
east = groupes d'infanteries du CSAT ??....là je suis moins sà»r !

Je n'ai pas essayé...mais en tout cas c'est un beau projet ! ! Bravo et merci pour le partage ! !
Husky (20 Novembre 2013, 19:08)
oups, pas vu :p
je devais avoir le cerveau saturé d'info pour ne pas avoir suffisamment bien lu le post ^^
FievreTonnerre40 (19 Février 2014, 21:09)
salut les gars jai essayer mais quand je tape le scrip dans ACTIVATION sa me mets "nombre incorrecte dans une expression" :)
huntertherabbit (09 Mars 2016, 2:13)
Bonjour,

J'essaie d'utiliser le script pour que deux "armée" s'affronte, en utilisant le mode RHS.

J'utilise cette ligne:

Citation
comb = [combatinf,2,4,200,350,1,-1,900,east,configfile >> "CfgGroups" >> "East" >> "RHS_FACTION_MSV" >> "RHS_GROUP_RUS_MSV_INFANTRY" >> "RHS_GROUP_RUS_MSV_INFANTRY_SQUAD" >> "CfgGroups" >> "West" >> "RHS_FACTION_USARMY_WD" >> "RHS_GROUP_NATO_USARMY_WD_INFANTRY" >> "RHS_GROUP_NATO_USARMY_WD_INFANTRY_SQUAD"] execVM "spawn\combat_spawn.sqf";


Cependant lorsque j'active le script, l'éditeur m'annonce une fois sur deux une erreur aux la lignes 33 ou 40 (nom du script: combat_spawn.sqf).

Quelqu'un aurait une solution?

lien pour les CfgGroups

Merci d'avance =)
Huntertherabbit