|
|
Je regarde avec le module "modeIA" mais j'avoue ne pas trop comprendre comment il fonctionne.
|
|
Ben justement, c'est en multiplayer !
On utilise le module de Huat commandement pour déplacer des groupes IA dans lequels on veut pouvoir switcher et "déswitcher" à volonté pour organiser en 12vs12 des batailles mettant en jeu environ 100 soldats dans chaque camp.
Mais pour ça, il faudrait pouvoir switcher dans une équipe lorsque ça chauffe pour elle et pouvoir la "rendre" à l'IA lorsqu'on veut aller se battre ailleurs.
|
|
Question à 500 000 €, celui qui me trouve la réponse, je l'épouse :
Si je pose une équipe sur la map avec le team leader en playable (mon joueur de base est un soldat isolé) et que je lui indique un waypoint, lors du lancement de la mission le groupe va se déplacer vers le waypoint indiqué.
MAIS, si je switche dans le team leader pour en prendre le commandement temporairement et qu'ensuite je retourne dans mon premier soldat, le team leader ne continue pas son chemin, il semble bloqué indéfiniment.
ça me fait la même chose si je passe en module de Haut commandement, une fois qu'on a switché dans un chef d'équipe, il ne se déplace plus en réponse à aucun ordre (rappelons que le MDC se contente de leur donner des waypoints en dynamique)
Donc en gros, je cherche comment rendre de nouveau mobile un soldat aprês qu'on a switché en dehors de lui. Il semble que lorsqu'on l'incarne, il stoppe pour laisser la main au joueur huamin, mais lors du nouveau switch, l'IA n'en reprend pas tout à fait le contrôle.
Comment redonner un contrôle complet à l'IA aprês le switch ?
|
|
C'est sans doute une question bête mais je ne sais pas faire ceci :
Je voudrais qu'un texte apparaisse lorsqu'un joueur passe sur un marqueur (ou un déclencheur de même taille que le marqueur) mais que ce texte ne s'affiche que pour le joueur qui l'a déclenché.
Je sais créer un déclencheur qui s'active lorsque le membre d'un camp le traverse et du coup ça s'affiche pour tout le camp, mais je ne sais pas comment limiter la chose au seul joueur qui entre dans la zone.
Si quelqu'un sait faire ça (sans doute simple) je suis preneur.
|
|
Au fait, j'ai pas eu de retour sur ces scripts.
Est-ce que ça fonctionne comme tu le souhaites ?
|
|
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.
|
|
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.
|
|
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
|
|
Alors, il suffit de modifier les deux fonctions FAR_Handlerevive et FAR_revive comme indiqué ci-dessous (dans le fichier FAR_functions)
FAR_HandleRevive =
{
private ["_target"];
_target = _this select 0;
if (alive _target) then
{
player playMove "AinvPknlMstpSlayWrflDnon_medic";
_target setVariable ["FAR_isUnconscious", 0, true];
_target setVariable ["FAR_isDragged", 0, true];
sleep 6;
if ( (FAR_ReviveMode == 2) && ("FirstAidKit" in (items player)) ) then
{
player removeItem "FirstAidKit";
};
// [Debugging] Code below is only relevant if revive script is enabled for AI
if (!isPlayer _target) then
{
_target enableSimulation true;
_target allowDamage true;
_target setDamage 0;
_target setCaptive false;
_target playMove "amovppnemstpsraswrfldnon";
};
};
};
FAR_Check_Revive =
{
private ["_target", "_isTargetUnconscious", "_isDragged"];
_return = false;
// Unit that will excute the action
_isPlayerUnconscious = player getVariable "FAR_isUnconscious";
_isMedic = getNumber (configfile >> "CfgVehicles" >> typeOf player >> "attendant");
_target = cursorTarget;
// Make sure player is alive and target is an injured unit
if( !alive player || _isPlayerUnconscious == 1 || FAR_isDragging || isNil "_target" || !alive _target || (!isPlayer _target && !FAR_Debugging) || (_target distance player) > 2 ) exitWith
{
_return
};
_isTargetUnconscious = _target getVariable "FAR_isUnconscious";
_isDragged = _target getVariable "FAR_isDragged";
// Make sure target is unconscious and player is a medic
if (_isTargetUnconscious == 1 && _isDragged == 0 && (_isMedic == 1 || FAR_ReviveMode > 0) ) then
{
_return = true;
// [ReviveMode] Check if player has a Medikit
if ( FAR_ReviveMode == 2 && !("FirstAidKit" in (items player)) ) then
{
_return = false;
};
};
_return
};
dês lors, en mode 2, n'importe quel joueur peut ranimer un blessé à condition qu'il dispose d'un kit de 1er soin. Et ce kit sera retiré de son inventaire aprês la réanimation.
Pour ce qui est de donner plus d'importance au medic, il suffit dans la fonction FAr_HandleRevive de remplacer la ligne
_target setDamage 0;
par un truc du genre :
if (FAR_ReviveMode == 2) then
{
_target setDamage 0.9;
}
else { _target setDamage 0;};
|
|
C'est assez simple à faire en fait :
Dans ma version, n'importe qui peut réanimer tant qu'il a un kit de premier soin. Une fois ranimé les "dommages" du joueur sont remis à 0.
Mais si on les met à 0,9 par exemple, le réanimé sera dans un sale état et l'intervention du médecin sera nécessaire pour la suite.
On peut aussi simplement geler le compte à rebours et n'autoriser le REVIVE qu'au seul medic. Tout est possible en codant un peu son excellent travail.
|
|
salut à vous. '
J'utilise aussi ce revive mais je l'ai traduit (pas dur) et modifié pour que le respawn en mode 2 nécessite un kit de premier soin qui sera "consommé" lors de la réanimation. Ainsi, le revive n'est pas infini mais dépend de la capacité de l'escouade à trouver des First Aid kits .
Je vous indiquerai les maudits à faire.
|
|
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.
|
|
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 !
|
|
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
|
|
|