Bienvenue invité ( Connexion | Inscription )

Flash...Flash...Flash
Mille-Sabords survit uniquement grâce aux dons de ses membres, MERCI !!!>


 
Reply to this topicStart new topic
> Arma 3 avoir une IA qui chasse le joueur
Nemo
posté vendredi 24 mars 2017 à 10:33
Message #1


Icône de groupe
Typhon

Groupe : Membre d'Honneur
Messages : 16115
Inscrit : 07/04/2006
Lieu : Strasbourg
Membre no 2410



Il peut s'avérer utile dans certains cas d'avoir une IA hostile qui va poursuivre le joueur

Ce qu'il vous faut:
le script UPS http://kronzky.info/ups/ prenez la version arma3 et placez le fichier UPS.sqf dans votre dossier de mission.

Ensuite on ouvre sa mission et on place son groupe de joueurs

ici une patrouille bleu ou les joueurs sont nommés (cde1,t1,t2,t3)
juste à coté je crée une zone de marqueur nommée marker_4

Image attachée



un peu plus loin je crée un trigger de zone qui va servir à détecter mes joueurs et créer mon groupe de poursuivants
Condition d'activation: blufor présent et dans la liste défini
Quand activation script poursuite.sqf

Image attachée


Je crée aussi un petit objet genre tournevis que je vais nommer pigeon il me servira de point pour faire le lien entre le trigger et le script de création

Ensuite je crée un sqf que je vais nommer PAS.sqf qui va me servir à mettre à jour la position de mon marker_4 par rapport à mon groupe bleu
Toutes les 10s marker_4 pointe sur la position du joueur CDE1
Code
//seul le serveur exécute ce code avec le if
if (isServer) then {

while {true} do {

_x = ((getPos cde1) select 0);
_y = ((getPos cde1) select 1);
_nouv_position = [_x, _y];
"marker_4" setMarkerPos _nouv_position;
sleep 10;

};

};

NB: vous pouvez créer une marqe d'erreur en rajoutant une distance en mètre du coup le marker ne pointe pas directement sur le joueur
_x = ((getPos cde1) select 0)+10;
_y = ((getPos cde1) select 1)+10;

A présent je vais créer le script qui conditionne les poursuivants; ( 2 groupes de 3 IA)
Code
if (!isServer) exitWith {};
private ["_skill","_type"];

//skill avant : de base 0.2 puis +0.1 puis +0.1
_joueurs = count playableUnits;
_skill = 0.15;
if (_joueurs >= 4) then {
    _skill = _skill + 0.1;
}
else
{
    if (_joueurs >= 6) then {
        _skill = _skill + 0.1;
    };
};


//position du trigger passe en paramètre
//_trg = _this select 0;
_pos = getPosATL pigeon;

_posarrivee = getMarkerPos "target1";


_gs1 = createGroup resistance;
_gs2 = createGroup resistance;


            
_nombre1 = round(random ((count listeAAF)-1));
_nombre2 = round(random ((count listeAAF)-1));
_nombre3 = round(random ((count listeAAF)-1));
_nombre4 = round(random ((count listeAAF)-1));
_nombre5 = round(random ((count listeAAF)-1));
_nombre6 = round(random ((count listeAAF)-1));
_unit1 = listeAAF select _nombre1;
_unit2 = listeAAF select _nombre2;
_unit3 = listeAAF select _nombre3;
_unit4 = listeAAF select _nombre4;
_unit5 = listeAAF select _nombre5;
_unit6 = listeAAF select _nombre6;



//groupe 1 qui va a la rencontre des blufor
_unit1 createUnit [_pos, _gs1," ",1];
_unit2 createUnit [_pos, _gs1," ",_skill];
_unit3 createUnit [_pos, _gs1," ",_skill];

nul = [leader _gs1,"marker_4","NOSLOW","NOAI"] execVM "ups.sqf";

sleep 1;
//groupe 2 qui se poursuit sur un axe parallèle
_unit4 createUnit [_pos, _gs2," ",1];
_unit5 createUnit [_pos, _gs2," ",_skill];
_unit6 createUnit [_pos, _gs2," ",_skill];

nul = [leader _gs2,"marker_4","NOSLOW","NOAI"] execVM "ups.sqf";

if (true) exitWith {};


Pour finir dans l'init de la mission je vais lancer mon script PAS.sqf et créer la liste dans laquelle le script des poursuivants peut choisir les personnages.
Code
execVM "PAS.sqf";
tf_no_auto_long_range_radio = true;


listeAAF = ["I_support_GMG_F","I_Soldier_TL_F","I_Soldier_SL_F","I_Soldier_GL_F","I_Soldier_M_F","I_Soldier_exp_F","I_soldier_F","I_Soldier_LAT_F","I_Soldier_lite_F","I_Soldier_AR_F","I_Soldier_AAR_F","I_crew_F",
"I_medic_F","I_officer_F","I_soldier_UAV_F","I_Soldier_A_F","I_Soldier_repair_F","I_engineer_F","I_Soldier_AA_F","I_Soldier_AT_F","I_Soldier_AAA_F","I_Soldier_AAT_F"];


Emballez c'est pesez..!! shifty.gif

Pour rappel

script pas.sqf : mes à jour la position du marker sur le leader bluefor / script lancé par l'init en début de partie
script poursuivant.sqf : lancé par le trigger quand bluefor rentre dans la zone
tournevis pigeon: sert à faire le lien entre mon trigger de détection et le script
UPS.sqf gère le comportement des poursuivants

la mission test Fichier joint  testTanoa.rar ( 12.58 Ko ) Nombre de téléchargements : 131


--------------------
A FLUCTIBUS OPES
VENI,VIDI,VICI



NO TREPASSING-VIOLATORS WILL BE SHOT-SURVIVORS WILL BE SHOT AGAIN
Go to the top of the page
 
+Quote Post
Solcarlus
posté vendredi 24 mars 2017 à 12:06
Message #2


**********
Tempête

Groupe : Membres
Messages : 3244
Inscrit : 29/06/2003
Lieu : Lorient/Nantes
Membre no 1185



Ca promet de folle courses , de la sueur et la pose de pieges a ours


--------------------
Go to the top of the page
 
+Quote Post
Séné
posté vendredi 24 mars 2017 à 13:36
Message #3


Icône de groupe
Typhon

Groupe : Membre d'Honneur
Messages : 16549
Inscrit : 04/04/2009
Lieu : Riverain du Rhin
Membre no 12845



Nemo se prend pour Bruce Willis dans Tears of the sun, au Nigeria wink.gif

Cette semaine, pour une action similaire, j'avais choisi le module "Suivre", mais il est à oublier dès lors que l'unité poursuivante perd la ligne de vue.




--------------------
Mieux vaut un pilote plein qu'un réservoir vide!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : vendredi 29 mars 2024 à 15:00