Le briefing.

Pour les Masochistes Éditeurs de missions
Répondre
Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Le briefing.

Message par =[TTK]= Yourry »

Voilà, les choses avancent, je vous livre une des solutions pour créer un briefing qui va bien, même avec les JIP.

N'hésiter pas à me corriger, faire des remarques dans le but de faire évoluer rapidement ce poste dans le wiki.

Bonne lecture :mrgreen:


Voici enfin le vrai, le véritable briefing qui fonctionne en solo, en multi, en JIP, etc…
Je ne reviens pas sur la création du briefing, des postes dans le fofo traitent de cela. Cette technique (il y en a d’autre) va nous permettre de compléter le briefing « basic »

Pour bien saisir le fonctionnement de ce briefing, il est essentiel de lire mon article wiki sur le script init.sqf et le jip.sqf
Ces deux scripts sont essentiels pour un bon fonctionnement des briefings.


En réalité, rien de complexe par rapport à avant. Les briefings ont toujours la même tête. La seule différence est le rajout de quelques petites lignes qui vont guider les JIP

Pour rappel, les JIP (Join In Progress) sont des joueurs qui arrivent en cours de jeu alors que la mission a déjà commencée. Si les changements (échec, suppression, validation, etc) sont antérieurs à leur connexion, ceux-ci n’auront pas les briefings à jour. A l’inverse, si le briefing est mis à jour après leur venue, il n’y a pas de souci de mise à jour.

Concrètement, pour les JIP, il va falloir organiser des sessions de rattrapage dans lesquelles nous allons, uniquement pour eux (pas pour les joueurs en jeu), leur mettre à jour le briefing et éventuellement le changement de couleurs de marqueurs (en fait tout ce qui va être modifié par rapport au début du jeu).

Voilà pour ce qui est de la théorie, dans les faits les choses sont simples :


J’ai pour habitude de créer et nommée mes variables de la façon suivantes :

Code : Tout sélectionner

obj1 = objectif 1
v_obj1 = validation de l’objectif 1
d_obj1 = échec de l’objectif 1

c_obj1 = création de l’objectif 1 
Il va falloir créer autant de variables ci-dessus que l’on a d’objectifs (c_obj1 est pas nécessaire, il ne sert que pour les objectifs cachés ; cf exemple)
Les variables si dessus sont à mettre dans l’init et le jip.sqf (cf wiki init et jip)



Ensuite la création du briefing reste inchangée par rapport au standard :

Code : Tout sélectionner

Numéro obj = player createSimpleTask["Mon objectif"];
Numéro obj setSimpleTaskDescription["Description de l’obj", " Mon objectif ", " Mon objectif "];
   
Quand le JIP et les joueurs se pointent, il crée les objectifs à l’habituel.

Maintenant, après la création du briefing, nous allons nous occuper de cette session de rattrapage, avec le code suivant (il faut bien sûr changer les numéros d’objectifs et des variables). Il faut placer cette ligne de code juste après les commandes de création d'objectif (cf exemples), pour chaque objectifs:

Code : Tout sélectionner

    if (!isNil "v_obj2" ) then {//On vérifie que cette variable existe    
            if(v_obj2) then //On ne donne que ce qui est entre les " { } "    que si ma variable v_obj2 est vrai
            {
            obj2 setTaskState "Succeeded";//On valide l'objectif
            //"" setMarkerColor "colorGreen";  //On peut mettre le marqueur à la couleur verte
            };
        };    
        if (!isNil "d_obj2" ) then {//Idem on vérifie quelle existe    
            if(d_obj2) then //On ne donne que ce qui est entre les " { } "    que si ma variable d_obj6 est vrai
            {
            obj2 setTaskState "Failled";
            //"" setMarkerColor "colorRed";  //On peut mettre le marqueur à la couleur rouge
            };
        };     

En jeu, dans un déclencheur, dans un script, le changement de statue de l’objectifs se fait de façon classique avec :

Code : Tout sélectionner

  obj2 setTaskState "SUCCEEDED";     
  nul=[objNull, objNull, obj2,"SUCCEEDED"] execVM "CA\Modules\MP\data\scriptCommands\taskHint.sqf";   
ET, avec le rajout de la ligne suivante, si on valide l’objectif :

Code : Tout sélectionner

v_obj2 = true, publicVariable " v_obj2 ";    

Si on veut le faire échouer :

Code : Tout sélectionner

  obj2 setTaskState "FAILLED";     
  nul=[objNull, objNull, obj2,"FAILLED"] execVM "CA\Modules\MP\data\scriptCommands\taskHint.sqf";      
d_obj2 = true, publicVariable « d_obj2 » ;   
Tout simplement, ici on a juste indiqué à tous et pour les futurs JIP que notre objectifs est soit validé ou échoue (via le jeu de variables).

On comprend bien lorsque les JIP arriveront, ils auront connaissance de l’état de la variable (soit vrai ou fausse) et donc si l’objectif a été rempli ou non, au quels cas, avec le bout de code en haut juste après les objectifs, on oriente le statu de l’objectifs et la couleur des marqueurs etc.

Voilà une série d'exemple concret:

Ici un exemple de briefing avec 2 objectifs:

Dans mon init.sqf (extrait):

Code : Tout sélectionner

if (isServer) then
{
   //Les variables du jeu:
    
    v_obj2 = false;
    publicVariable "v_obj2";
    v_obj1 = false;
    publicVariable "v_obj1";
        
    d_obj2 = false;
    publicVariable "d_obj2";
    d_obj1 = false;
    publicVariable "d_obj1";

}; 
Dans mon jip.sqf:

Code : Tout sélectionner

//Les variables publics a récupérer
        
    v_obj2 = v_obj2;
    publicVariable "v_obj2";
    v_obj1 = v_obj1;

    d_obj2 = d_obj2;
    publicVariable "d_obj2";
    d_obj1 = d_obj1;
    publicVariable "d_obj1"; 

Et le briefing en question:

Code : Tout sélectionner

//Fait par =[TTK]= Yourry
//Briefing adapté aux JIP !
waitUntil {!(isNull player)};
waitUntil {player==player};

//Notes

//Briefing
    
obj2=player createSimpleTask ["Nettoyer la mine"];
obj2 setSimpleTaskDescription ["Depuis trop longtemps, <marker name='Mine'>la mine</marker> est le vivier des insurgés. Ils exploitent des pierres précieuses issues de la mine pour financer l'achat d'armes. Il faut prendre les lieux pour stopper leur finance","Nettoyer la mine","Nettoyer la mine"];
if (!isNil "v_obj2" ) then {    
    if(v_obj2) then 
    {
    obj2 setTaskState "Succeeded";
    "Mine" setMarkerColor "colorGreen";
    };
};    
if (!isNil "d_obj2" ) then {    
    if(d_obj2)  then 
    {
    obj2 setTaskState "Failled";
    "Mine" setMarkerColor "colorRed";
    };
};
    
obj1=player createSimpleTask ["Aider l'ONU"];
obj1 setSimpleTaskDescription ["L'ONU cONU pour sa légendaire force d'intervention, souhaite que vous les aidiez en participant à l'assault du village <marker name='Militia'>Hazar Bagh</marker>.<br/>Lorsque vous pensez être prêt à soutenir l'assaut, vous pourrez alors demander l'attaque via le canal radio","Aider l'ONU","Aider l'ONU"];
if (!isNil "v_obj1" ) then {    
    if(v_obj1)  then 
    {
    obj1 setTaskState "Succeeded";
    "Militia" setMarkerColor "colorGreen";
    };
};    
if (!isNil "d_obj1" ) then {    
    if(d_obj1)  then 
    {
    obj1 setTaskState "Failled";
    "Militia" setMarkerColor "colorRed";
    };
};    
    
//Pas besoin puisque le respawn base ne perd pas le briefing => Uniquement valable si on est en respawn group

/*Section qui permet de renvoyer le briefing si on meurt
if ( isNil{player getVariable "mk_killedEHadded"} ) then
{
    player addEventHandler ["killed",
    {
        [] spawn {
            waitUntil { alive player };
            execVM "briefing.sqf";
        };
    }];
    player setVariable ["mk_killedEHadded", true];
};

if (true) exitWith {};
*/ 

Ici un autre exemple, avec un architecture semblable mais un peu différents car l'objectif 2 est caché au début de la mission.
Le fonctionnement est le même:

Dans mon init.sqf (extrait):

Code : Tout sélectionner

if (isServer) then
{
//Les variables du jeu:

//Pour le briefing

    v_obj2 = false;
    publicVariable "v_obj2";
    v_obj1 = false;
    publicVariable "v_obj1";

//création des objectifs cachés    
        
    c_obj2 = false;
    publicVariable "c_obj2";
        
    d_obj2 = false;
    publicVariable "d_obj2";
    d_obj1 = false;
    publicVariable "d_obj1";

 };   
Dans mon jip.sqf:

Code : Tout sélectionner

//Les variables publics a récupérer
    
    v_obj2 = v_obj2;
    publicVariable "v_obj2";
    v_obj1 = v_obj1;
    publicVariable "v_obj1";
        
    c_obj2 = c_obj2;
    publicVariable "c_obj2";
    c_obj1 = c_obj1;
    publicVariable "c_obj1";

    d_obj2 = d_obj2;
    publicVariable "d_obj2";
    d_obj1 = d_obj1;
    publicVariable "d_obj1";   
Et le briefing.sqf:

Code : Tout sélectionner

waitUntil { !isNil {player} };
waitUntil { player == player };

bj1 = player createSimpleTask["Attaquer le bastion"];
obj1 setSimpleTaskDescription["Attaquer <marker name='le bastion ennemi'>le bastion ennemi</marker> afin d'empêcher les Insurgés de monter une attaque sur la raffinerie.<br/>Un Hélico est disponoble à l'exterieur du complexe pour vos déplacements.", "Attaquer le bastion", "Attaquer le bastion"];
obj1 setSimpleTaskDestination (getMarkerPos "le bastion ennemi");
player setCurrentTask obj1;

//Section des objectifs cachées: pour les JIP

if (!isNil "c_obj2") then {    
if (c_obj2) then {
obj2 = player createSimpleTask["Attaquer le convoi"];
obj2 setSimpleTaskDescription["Il faut détruire les camions d'essence du <marker name='markerlkwwest_1'>convoi</marker> avant qu'ils ne puissent pas faire le plein à la raffinerie et par la même occasion détruisez tous les véhicules du convoi pour leur faire comprendre que on plaisante pas.", "Attaquer le convoi", "Attaquer le convoi"];
        if (!isNil "v_obj2" ) then {//On vérifie que cette variable existe    
            if(v_obj2) then //On ne donne que ce qui est entre les " { } "    que si ma variable v_obj2 est vrai
            {
            obj2 setTaskState "Succeeded";//On valide l'objectif
            //"" setMarkerColor "colorGreen";  //On peut mettre le marqueur à la couleur verte
            };
        };    
        if (!isNil "d_obj2" ) then {//Idem on vérifie quelle existe    
            if(d_obj2) then //On ne donne que ce qui est entre les " { } "    que si ma variable d_obj6 est vrai
            {
            obj2 setTaskState "Failled";
            //"" setMarkerColor "colorRed";  //On peut mettre le marqueur à la couleur rouge
            };
        };  
    };
};    

//Pour le respawn group
if ( isNil{player getVariable "mk_killedEHadded"} ) then
{
    player addEventHandler ["killed",
    {
        [] spawn {
            waitUntil { alive player };
            execVM "briefing.sqf";
        };
    }];
    player setVariable ["mk_killedEHadded", true];
};

if (true) exitWith {};   
Sinon autres choses, intéressante pour les briefing;

Il est sage de mettre ce code en première ligne dans les briefing:

Code : Tout sélectionner

waitUntil {!(isNull player)};
waitUntil {player==player};   
Cela permet d'attendre que le joueur a bien pris son corps et est prêt.

Dans le cas particulier (et uniquement lui), du respawn group ou 3, on perd le briefing. Pourquoi ?
Très simple, tout dépend de votre commande pour le briefing; si on a:

Code : Tout sélectionner

obj8 =player createSimpleTask ["Sécuriser les lieux"];   
On dit bien de créer obj8 pour un joueur ! Or les IA ne sont pas considérer comme des joueurs, donc pas de briefing quand on prend sa place. Une solution simple:

soit à la fin du briefing on met (je préfère cette méthode car elle permet de garder le briefing multi-camps):

Code : Tout sélectionner

if ( isNil{player getVariable "mk_killedEHadded"} ) then
{
    player addEventHandler ["killed",
    {
        [] spawn {
            waitUntil { alive player };
            execVM "briefing.sqf";
        };
    }];
    player setVariable ["mk_killedEHadded", true];
};

if (true) exitWith {};   




A venir très prochainement l'article sur les fichiers init.sqf et jip.sqf
Modifié en dernier par =[TTK]= Yourry le mer. 23 mars 2011, 16:03, modifié 2 fois.
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: Le briefing.

Message par =[TTK]= Memphis007 »

Je vais me permettre d'être vachement critique mais en gros c'est 95% ce que j'ai proposé, avec en moins le fait que tu ne gères que 2 états d'objectifs (réussite ou échec).

Le seul truc que je trouve bien c'est le coup du "playableunits" qui résout le problème du briefing en respawn group.

Pour les JIP, faudrait qu'on retente ma soluce voir si ça fonctionne pour les états d'objectifs, me rappelle plus.

Dans tout les cas, réserve une soirée de tests poussés sur le sujet, je veux en finir avec ça.
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Le briefing.

Message par =[TTK]= Yourry »

Je te l'ai dit hier sur TS, tu étais pas loin.
La différence quand même est que tu n'utilises pas les publicVariable pour orienter le briefing.

Après pour le reste les autres états à quoi ils servent ? pas à grand chose à mon sens ou très rarement.
Rien n'empêche sur le même principe que l'échec ou la réussite d'assigner les autres au cas par cas.

La seule chose que je n'ai pas testé c'est le "playableunits" :mrgreen: , mais au pire si cela fonctionne pas, il suffira de mettre un foreach pour que cela fonctionne.

Pour la soirée pas de souci, j'ai déjà les réponses et je garantie le résultat !
Le point noir de la méthode ci-dessus est que cela fait pas mal de variable publique à gérer rien que pour le briefing au risque de faire ramer le serveur sur des grosses missions s'il y a beaucoup d'autre variables publiques.
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: Le briefing.

Message par =[TTK]= Memphis007 »

=[TTK]= Yourry El Zekrit a écrit :Je te l'ai dit hier sur TS, tu étais pas loin.
La différence quand même est que tu n'utilises pas les publicVariable pour orienter le briefing.
Ah bon ? pourtant j'avais tenté :

Dans states.sqf

Code : Tout sélectionner

if (isserver) then {
     while {true} do {
           publicVariable "ob1";
           publicVariable "ob2";
           sleep 5;
     };
};
Tu as juste enlevé le ifserver pour te faire mousser :mrgreen:
=[TTK]= Yourry El Zekrit a écrit : Après pour le reste les autres états à quoi ils servent ? pas à grand chose à mon sens ou très rarement.
Rien n'empêche sur le même principe que l'échec ou la réussite d'assigner les autres au cas par cas.
C'est pour le principe (et un peu pour t'emmerder aussi)
=[TTK]= Yourry El Zekrit a écrit : La seule chose que je n'ai pas testé c'est le "playableunits" :mrgreen: , mais au pire si cela fonctionne pas, il suffira de mettre un foreach pour que cela fonctionne.
Ah bah voilà ! le seul truc innovant est théorique, c'est pas joli joli...
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Le briefing.

Message par =[TTK]= Yourry »

Ah bon ? pourtant j'avais tenté :

Dans states.sqf
C'est vrai tu avais tenté !
Mais inutile car lorsqu'une variable est déclarée public, elle est récupéré par les JIP quand ils se connectent (attention quand même qu'ils ne puissent pas donner de valeur aux variables). Pas besoin de ta boucle, il faut juste la redéclarer public si elle change de valeur.

Loin de moi la prétention d'avoir inventé la poudre, j'ai juste regardé ce que fessais la communauté de BON éditeurs et tiré les conclusions pour proposer une synthèse fonctionnelle....
Tout simplement :mrgreen:

Un exemple simplifié de brienfing JIP, selon le même principe (celui de Skrimish devil):

Code : Tout sélectionner

waitUntil {player == player};

//Missionsziele-------------------------------------------------------------------------------------------------------------------------------
task5 = player createSimpleTask ["obj5"];
task5 setSimpleTaskDescription ["Resupply our <marker name=""base"">Airbase</marker> with better equipment. We can found better weapons <marker name=""ammo1"">here</marker>, night-assault-equipment <marker name=""c1301"">here</marker>, fuel trucks <marker name=""fuel"">here</marker> and supply trucks <marker name=""supply"">here</marker>.","Secondary Target: Resupply our Base","Secondary Target: Resupply our Base"];
task5 setSimpleTaskDestination markerPos "ammobox1";
if (isNil "all_supplys_done" || !all_supplys_done) then {
    task5 setTaskState "Created";
} else {
    task5 setTaskState "Succeeded";
};

task3 = player createSimpleTask ["obj3"];
task3 setSimpleTaskDescription ["Make sure that the <marker name=""scud"">enemys airbase</marker> do not locate us before we attack their SCUDs. If the enemy spotted us with their radar-system before they will call reinforcements and airsupport.","Secondary target: Be stealth","Main target: Be stealth"];
task3 setSimpleTaskDestination markerPos "eponia_marker";
if (isNil "spotted" || !spotted) then {
    task3 setTaskState "Created";
} else {
    if (all_radar_down) then {
        task3 setTaskState "Succeeded";
        };
    if (!all_radar_down) then {
        task3 setTaskState "Failed";
        };
};

task2 = player createSimpleTask ["obj2"];
task2 setSimpleTaskDescription ["Destroy all radartowers <marker name=""radar_marker_1"">here</marker>, <marker name=""radar_marker_2"">here</marker> and <marker name=""radar_marker_3"">here</marker>. So we can undetected attack the enemy airbase. Make sure we fly deeper than 20m in radar-range!","Secondary target: Destroy all Radartowers","Secondary target: Destroy all Radartowers"];
task2 setSimpleTaskDestination markerPos "radar_marker_1";
if (isNil "all_radar_down" || !all_radar_down) then {
    task2 setTaskState "Created";
} else {
    if (!spotted) then {
        task2 setTaskState "Succeeded";
        };
    if (spotted) then {
        task2 setTaskState "Failed";
        };
};


task4 = player createSimpleTask ["obj4"];
task4 setSimpleTaskDescription ["Don't waste our <marker name=""base"">cargo-choppers</marker>! If we lost all our choppers we cant avoid the SCUD-launch.","Main target: Don't waste choppers","Main target: Don't waste choppers"];
task4 setSimpleTaskDestination markerPos "ammobox2";
if (isNil "looser_end1" || !looser_end1) then {
    task4 setTaskState "Created";
} else {
    task4 setTaskState "Failed";
};

task1 = player createSimpleTask ["obj1"];
task1 setSimpleTaskDescription ["Avoid that the <marker name=""scud"">SCUD</marker> can launch their rocket and destroy our base!","Main target: avoid SCUD-launch","Main target: avoid SCUD-launch"];
task1 setSimpleTaskDestination markerPos "road_block1";
//Created, Succeeded, Failed
if (isNil "scud_down" || !scud_down) then {
    task1 setTaskState "Created";
} else {
    task1 setTaskState "Succeeded";
};

tasks_done = true;
 
Dès que l'on maîtrise le principe des variables, on simplifier les briefings ci-dessus
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: Le briefing.

Message par =[TTK]= Memphis007 »

=[TTK]= Yourry El Zekrit a écrit :j'ai juste regardé ce que fessais la communauté de BON éditeurs et tiré les conclusions pour proposer une synthèse fonctionnelle....
Tout simplement :mrgreen:
:o Oh ! salaud ! au viol ! traitre ! racaille, je vais te passer au karcher du briefing moi ;)

allez sans rancune l'essentiel, c'est de lui faire la nique à cet enfoiré de briefing
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Le briefing.

Message par =[TTK]= Yourry »

allez sans rancune l'essentiel, c'est de lui faire la nique à cet enfoiré de briefing
Bien vrai ! On va y arriver.
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: Le briefing.

Message par =[TTK]= Memphis007 »

Pour le playableUnits, je confirme, il faut un foreach, puisque c'est une commande qui retourne un tableau des unités jouables.
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Le briefing.

Message par =[TTK]= Yourry »

OK !

Ben avec playableunits cela ne fonctionne pas, avec allunits ça marche.

Il faut donc juste remplacer tous les :

player par _x

et mettre en début de briefing:
{
puis à la fin:
} foreach allunits;
A tester

----- =[ EDIT DU Lun 7 Mar 2011, 21:05 ]= -----

Ok cela fonctionne pour le respawn group.

Exemple:
{
// creer une note
_x createDiaryRecord["Diary", ["Précisions", "

Jean-Raoul Humpty, le plus fameux pilote de toute la Tétékouasie, effectuait un vol de reconnaissance au-dessus de Groshino lorsque son avion, touché par des tirs meurtriers, s'est écrasé dans la campagne avoisinante.<br/>
Heureusement, le curé du village, valeureux résistant, a assisté à la scène et aperçu un parachute.<br/>
Il faut rejoindre le saint homme afin qu'il nous indique l'emplacement le plus probable de Jean-Raoul afin de le soigner et le conduire chez nous, à Kabanino où une rebouteuse experte le remettra sur pieds.

"]];




// creer un 2e objectif
tskExample2 = _x createSimpleTask["Soigner JRH"];
tskExample2 setSimpleTaskDescription
["

Prodiguer les premiers soins au valeureux pilote et le conduire à <marker name='rebouteuse'>la maison<marker> de Jessica Trisse, célèbre rebouteuse de Kabanino qui lui rendra sa vigueur légendaire.

", "Soigner JRH",""];

//Pour les JIP
if (!isnil "v_obj2" ) then {
if(v_obj2) then
{
tskExample2 settaskstate "Succeeded";
//"" setMarkerColor "colorGreen";
};
};
if (!isnil "d_obj2" ) then {
if(d_obj2) then
{
tskExample2 settaskstate "Failled";
//"" setMarkerColor "colorRed"
};
};

// creer un 1er objectif
tskExample1 = _x createSimpleTask["Rejoindre le curé"];
tskExample1 setSimpleTaskDescription
["

Les chars de l'armée bleue vont bientôt se heurter aux chars de l'armée rouge dans le secteur de Groshino.<br/>
C'est dans ce contexte que nous devons rejoindre le curé officiant de <marker name='chapelle'>la Chapelle<marker> du village. Le saint homme connait l'endroit où est tombé Jean-Raoul Humpty.
", "Rejoindre le curé",""];

//Pour les JIP
if (!isnil "v_obj1" ) then {
if(v_obj1) then
{
tskExample1 settaskstate "Succeeded";
//"" setMarkerColor "colorGreen";
};
};
if (!isnil "d_obj1" ) then {
if(d_obj1) then
{
tskExample1 settaskstate "Failled";
//"" setMarkerColor "colorRed"
};
};

} foreach allunits;
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Freshmeat
Retraité
Retraité
Messages : 474
Enregistré le : lun. 1 mars 2010, 13:49

Re: Le briefing.

Message par =[TTK]= Freshmeat »

Et moi il faut que je mette au propre la solution que j'ai aussi, parce qu'elle a tout de même l'avantage non négligeable d'éviter la saisie de code pour gérer le briefing.
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]
Image

Répondre