GAIA

GAIA est un ensemble de scripts développés par spirit6 en 2014. Il améliore la gestion tactique des IA. Nous expliquons ici brièvement comment intégrer GAIA dans une mission.
Pour les joueurs de la communauté Grèce de Canards, GAIA est intégré au modset. Il est donc inutile (et déconseillé) d'installer le script d'origine. La syntaxe par défaut peut être utilisée, mais elle a été simplifiée. Pour utiliser GAIA avec GDC_Lib, la doc se trouve sur le wiki de GDC_Lib.

Pour installer GAIA, il suffit de coller le dossier contenant les scripts dans le dossier de mission. Vous trouverez ces scripts en téléchargeant la mission exemple disponible dans ce fil de discussion.

Coller ensuite le code suivant dans le init.sqf :

// *** Configuration des paramètres généraux de GAIA ***
if (isServer ) then 
{
	// From what range away from closest player should units be cached (in meters or what every metric system arma uses)?
	// To test this set it to 20 meters. Then make sure you get that close and move away. 
	// You will notice 2 levels of caching 1 all but leader, 2 completely away
	// Stage 2 is 2 x GAIA_CACHE_STAGE_1. So default 2000, namely 2 x 1000
	GAIA_CACHE_STAGE_1				= 1000;
	// The follow 3 influence how close troops should be to known conflict to be used. (so they wont travel all the map to support)
	// How far should footmobiles be called in to support attacks.
	// This is also the range that is used by the transport system. If futher then the below setting from a zone, they can get transport.
	MCC_GAIA_MAX_SLOW_SPEED_RANGE  = 600;
	// How far should vehicles be called in to support attacks. (including boats)
	MCC_GAIA_MAX_MEDIUM_SPEED_RANGE= 4500;
	// How far should air units be called in to support attacks.
	MCC_GAIA_MAX_FAST_SPEED_RANGE  = 80000;
	// How logn should mortars and artillery wait (in seconds) between fire support missions.
	MCC_GAIA_MORTAR_TIMEOUT				 = 300;
	// DANGEROUS SETTING!!!
	// If set to TRUE gaia will even send units that she does NOT control into attacks. Be aware ONLy for attacks.
	// They will not suddenly patrol if set to true. 
	MCC_GAIA_ATTACKS_FOR_NONGAIA	 = true;
		// If set to false, ai will not use smoke and flares (during night)
	MCC_GAIA_AMBIANT							 = true;
	// Influence how high the chance is (when applicaple) that units do smokes and flare (so not robotic style)
	// Default is 20 that is a chance of 1 out of 20 when they are applicable to use smokes and flares
	MCC_GAIA_AMBIANT_CHANCE				 = 20;
	// The seconds of rest a transporter takes after STARTING his last order
	MCC_GAIA_TRANSPORT_RESTTIME		= 20;
};
// We set the markers invisible (if you use more then 100 markers, then increase). Or delete if you want them visible
for "_x" from 1 to 100 do
{
	format ["%1",_x] setMarkerAlpha 0;
};

//DO NOT CHANGE FROM BELOW (You can, but you will be out of support :P )

//----------------------gaia------------------------------------------------------
if (isserver) then {call compile preprocessfile "gaia\gaia_init.sqf";};
//===============Delete Groups ====================
if (isServer ) then 
{
	[] spawn 
	{
		_gaia_respawn = [];
		while {true} do
		{
			//player globalchat "Deleting started..............";
			
			{
				_gaia_respawn = (missionNamespace getVariable [ "GAIA_RESPAWN_" + str(_x),[] ]);
				//Store ALL original group setups
				if (count(_gaia_respawn)==0) then {[(_x)] call fn_cache_original_group;};
				
				if ((({alive _x} count units _x) == 0) ) then 
				{
					//Before we send him to heaven check if he should be reincarnated
					if (count(_gaia_respawn)==2) then {	[_gaia_respawn,(_x getVariable  ["MCC_GAIA_RESPAWN",-1]),(_x getVariable  ["MCC_GAIA_CACHE",false]),(_x getVariable  ["GAIA_zone_intend",[]])] call fn_uncache_original_group;};					
					
					//Remove the respawn group content before the group is re-used
					missionNamespace setVariable ["GAIA_RESPAWN_" + str(_x), nil];
					
					deleteGroup _x;
				};
				
				sleep .1;
				
			} foreach allGroups;			
			
			sleep 2; 
		};
	};
};
// *** Fin de configuration des paramètres généraux de GAIA ***

(Merci à Sardo)

Pour utiliser GAIA dans l'éditeur, il faut :

  • Définir des zones avec les marqueurs ellipse ou rectangle de l'éditeur
  • Nommer le marqueur par un chiffre de 1 à 99, ce qui permet de rendre ces marqueurs invisibles lors du briefing (cf. code d'initialisation ci-dessus)
  • Puis, il suffit de donner le contrôle d'un groupe à GAIA. Cela se fait en entrant dans l'init du leader du groupe une ligne telle que :
(group this) setVariable ["GAIA_ZONE_INTEND",["2", "MOVE"], false];

2 est le nom du marqueur et MOVE le type de comportement à affecter au groupe.

Vous trouverez des explications détaillées et la mission exemple dans le fil de discussion dédié du forum de Bohemia cité précédemment.

(Merci à Sparfell et Shinriel)

Il est possible de donner le contrôle d'un groupe à GAIA par code. Cela permet de contrôler le comportement des groupes par les ordres vanilla définis dans Eden (via les points de passage) et de profiter de la gestion dynamique de GAIA lors d'un événement donné, par exemple, lors du passage à l'état activé d'un déclencheur (trigger).

Un exemple simple avec Eden

  • Créer un groupe d'infanterie. Le nommer grpAssaut1 (nom de variable). Placer dans l'init du chef de groupe le code suivant :
grpAssaut1 = group this;
  • Créer ensuite un déclencheur. Choisissez la condition d'activation qui vous convient, par exemple dans l'onglet Déclencheur: Activation paramétrer le champs Activation sur Tout joueur et le champ Type d'activation sur Présent. Cela fera passer le déclencheur à l'état activé dès qu'un joueur entrera dans la zone du déclencheur.
  • Dans l'onglet Déclencheur:Expression, zone Quand activation, entrer le code suivant :
grpAssaut1 setVariable ["GAIA_ZONE_INTEND",["2", "MOVE"], false];

Lorsque le déclencheur passe à l'état activé, le contrôle du groupe est donné à GAIA avec la zone 2 et le comportement MOVE. Simple et magique, non ?

  • arma_3/createurs_de_missions/tips_en_tout_genre/gaia.txt
  • Dernière modification: 2019/09/03 21:52
  • (modification externe)