Bienvenue !

TTK, la team type des teams top

en quelque sorte


Briefing by =[TTK]= Freshmeat

Pour les Masochistes Éditeurs de missions

Briefing by =[TTK]= Freshmeat

Messagede =[TTK]= Freshmeat » Lun 6 Juin 2011, 13:06

Je pense que mon modèle de briefing tient la route désormais, docn je vous le rpésente.

Le principe :
J'utilise un script 'briefing_client.sqf', qui contôle toutes les 2 secondes si des variables publiques régissant les objectifs sont mises à jour.
Ces variables sont à modifier par le mission maker himself dans sa mission.

Ce que ça fait :
- briefing présent dès le début de la mission
- gère le JIP
- gère les objectifs PvP par faction
- affiche les changements de stauts des objectifs avec taskhint
- gére les fins de missions avec un taskhint

Ce qui n'est pas géré :
- le changement de faction par le joueur en cours de partie : la faction utilisée est toujours la faction d'origine du joueur.

Comment ça marche ?
Dans init.sqf
Après avoir lancé le briefing.sqf, on pause le jeu le temps que ARMA ait fait au moins une fois le tour dans briefing_client.sqf pour que toutes les variables soit bien déclarées pour la suite de la mission.

Code: Tout sélectionner
_handle001 = execVM "briefing.sqf";
waitUntil {!isNil("bf_initdone")};
waitUntil {bf_initdone}; 


Dans briefing.sqf
Les variables relatives aux objectifs sont construites comme suit :
x puis side puis _obj_ puis type
x : c'est un 'x' tout bête
side : c'est la faction pour laquelle l'objectif est à créer
_obj_ : c'est comme le 'x', on n'y touche pas
type : sert à distinguer les variables pour un même objectif

Il faut prendre soin de preciser ici aussi le type de respawn dans la variable bf_respawn.

Code: Tout sélectionner
// A NE PAS MODIFIER : INITIALISATION PAR DEFAUT DES STAT
xwest_1_obj_stat  = "";
xeast_1_obj_stat  = "";
xciv_1_obj_stat   = "";
xguer_1_obj_stat  = "";
xlogic_1_obj_stat = "";
xenemy_1_obj_stat = "";

west_end_obj_stat  = "";
east_end_obj_stat  = "";
civ_end_obj_stat  = "";
guer_end_obj_stat  = "";
logic_end_obj_stat  = "";
enemy_end_obj_stat  = "";


// INFORMATIONS COMMUNES A TOUS LES JOUEURS
xall_info       = "Mettre ici le texte commun à tous les joueurs, il apparaitra dans la rubrique 'Information'.";

// BRIEFING PAR faction
xwest_ennemies  = "Mettre ici le texte apparaissant dans la rubrique 'Ennemis' du briefing.";
xwest_allied    = "Mettre ici le texte apparaissant dans la rubrique 'Alliés' du briefing.";
xwest_situation = "Mettre ici le texte apparaissant dans la rubrique 'Situation' du briefing";

xwest_1_obj_lib       = "Libellé complet de 1er objectif, avec liens vers les marqueurs et tout le reste.";
xwest_1_obj_titre     = "Titre de l'objectif, utilisé dans la liste des objectifs et sur les messages.";
xwest_1_obj_level     = "Préfixe du titre : Primaire, Secondaire, .... ";
xwest_1_obj_stat      = "Statut de l'objectif : NONE, CREATED, SUCCEEDED, FAILED, CANCELED. A 'NONE', l'objectif n'apparait pas en début de mission";
xwest_1_obj_mkr       = "Nom du marqueur correspondant à l'objectif.";
xwest_1_obj_failed    = "Texte dans le cas ou l'objectif passe à FAILED, mettre un simple point pour le texte par défaut, laisser vide pour ne pas avoir de message.";
xwest_1_obj_succeeded = "Texte dans le cas ou l'objectif passe à SUCCEEDED, mettre un simple point pour le texte par défaut, laisser vide pour ne pas avoir de message.";
xwest_1_obj_canceled  = "Texte dans le cas ou l'objectif passe à CANCELED, mettre un simple point pour le texte par défaut, laisser vide pour ne pas avoir de message.";
xwest_1_obj_created   = "Texte dans le cas ou l'objectif passe à CREATED, mettre un simple point pour le texte par défaut, laisser vide pour ne pas avoir de message.";
xwest_1_obj_assigned  = "Texte dans le cas ou l'objectif passe à ASSIGNED, mettre un simple point pour le texte par défaut, laisser vide pour ne pas avoir de message.";

// Toujours mettre un objectif supplémentaire avec un statut vide
xwest_2_obj_stat      = "";


// Messages de fin de mission
west_end_obj_loser = "Echec de la mission";
west_end_obj_end1  = "Fin de la mission";

// PRECISER LE type DE RESPAWN
bf_respawn = "group";

// APPEL DE LA GESTION DES OBJECTIFS
_briefingclient = execVM "briefing_client.sqf";

waitUntil { !isNull player }; 
waitUntil 
{ player == player };
 


Dans briefing_client.sqf
Il n'y a rien à changer
TOUTES LES VARIABLES PUBLIQUES UTILISEES DANS BRIEFING_CLIENT.SQF COMMENCENT PAR BF_, donc pour éviter tout problème de compatibilité avec d'autres scripts, soit on évite de créer de nouvelles variables commençant par bf_, soit il faut les renommer dans le script briefing_client.sqf.

Code: Tout sélectionner
if (!isdedicated) then {

waitUntil { !isNull player };
waitUntil { player == player };

bf_initdone = false;

bf_llmess = false;
bf_loend = "";
bf_lnend = 0;

bf_unitplayer = player;

bf_loobjlib     = "";
bf_loobjtitre   = "";
bf_loobjlevel   = "";
bf_loosucceeded = "";
bf_loofailed    = "";
bf_loocanceled  = "";
bf_loocreated   = "";
bf_looassigned  = "";
bf_loomkr       = "";

_lcside = side player;

//JIP : on n'écrase pas les objectifs

bf_lni = 1;
call compile format["bf_lostat = x%1_%2_obj_stat",_lcside,bf_lni];
while {bf_lostat != ""} do {
   call compile format["bf_lonil = isnil('%1_%2_obj_stat')",_lcside,bf_lni];
   if (bf_lonil) then {call compile format["%1_%2_obj_stat = x%3_%4_obj_stat",_lcside,bf_lni,_lcside,bf_lni];};
   bf_lni = bf_lni + 1;
   call compile format["bf_lostat = x%1_%2_obj_stat",_lcside,bf_lni];
};
call compile format["%1_%2_obj_stat = x%3_%4_obj_stat",_lcside,bf_lni,_lcside,bf_lni];

call compile format ["bf_loennemies = x%1_ennemies",_lcside];
call compile format ["bf_loallied = x%1_allied",_lcside];
call compile format ["bf_losituation = x%1_situation",_lcside];
   
if (xall_info != "") then {player createDiaryRecord["Diary", ["Info", xall_info]];};
if (bf_loennemies != "") then {player createDiaryRecord["Diary", ["Forces ennemies", bf_loennemies]];};
if (bf_loallied != "") then {player createDiaryRecord["Diary", ["Forces alliees", bf_loallied]];};
if (bf_losituation != "") then {player createDiaryRecord["Diary", ["Situation", bf_losituation]];};

bf_lni = 1;
call compile format["bf_lostat = %1_%2_obj_stat",_lcside,bf_lni];
while {bf_lostat != ""} do {
   call compile format["bf_lonil = isnil('%1_%2_objectif')",_lcside,bf_lni];
   if (!bf_lonil) then {call compile format ["%1_%2_objectif = nil",_lcside,bf_lni];};
   bf_lni = bf_lni + 1;
   call compile format["bf_lostat = %1_%2_obj_stat",_lcside,bf_lni];
};

bf_initdone = true;

bf_loend = "";
call compile format ["bf_loend = %1_end_obj_stat",_lcside];
while {bf_loend == "" OR bf_lnend <= 6} do {

   if (bf_unitplayer != player && bf_respawn == "GROUP") then {

      call compile format ["bf_loennemies = x%1_ennemies",_lcside];
      call compile format ["bf_loallied = x%1_allied",_lcside];
      call compile format ["bf_losituation = x%1_situation",_lcside];
   
      if (xall_info != "") then {player createDiaryRecord["Diary", ["Info", xall_info]];};
      if (bf_loennemies != "") then {player createDiaryRecord["Diary", ["Forces ennemies", bf_loennemies]];};
      if (bf_loallied != "") then {player createDiaryRecord["Diary", ["Forces alliees", bf_loallied]];};
      if (bf_losituation != "") then {player createDiaryRecord["Diary", ["Situation", bf_losituation]];};

      bf_lni = 1;
      call compile format["bf_lostat = %1_%2_obj_stat",_lcside,bf_lni];
      while {bf_lostat != ""} do {
         call compile format["bf_lonil = isnil('%1_%2_objectif')",_lcside,bf_lni];
         if (!bf_lonil) then {call compile format ["%1_%2_objectif = nil",_lcside,bf_lni];};
         bf_lni = bf_lni + 1;
         call compile format["bf_lostat = %1_%2_obj_stat",_lcside,bf_lni];
      };

      bf_unitplayer = player;
   };



   bf_lni = 1;
   bf_lnassigned = 0;

   call compile format ["bf_loobjstat = %1_%2_obj_stat",_lcside,bf_lni];
   while {bf_loobjstat != ""} do {

      if (bf_loobjstat != "NONE") then {

         call compile format ["bf_loobjlib     = x%1_%2_obj_lib",   _lcside,bf_lni];
         call compile format ["bf_loobjtitre   = x%1_%2_obj_titre",   _lcside,bf_lni];
         call compile format ["bf_loobjlevel   = x%1_%2_obj_level",   _lcside,bf_lni];
         call compile format ["bf_loosucceeded = x%1_%2_obj_succeeded",   _lcside,bf_lni];
         call compile format ["bf_loofailed    = x%1_%2_obj_failed",   _lcside,bf_lni];
         call compile format ["bf_loocanceled  = x%1_%2_obj_canceled",   _lcside,bf_lni];
         call compile format ["bf_loocreated   = x%1_%2_obj_created",   _lcside,bf_lni];
         call compile format ["bf_looassigned  = x%1_%2_obj_assigned",   _lcside,bf_lni];
         call compile format ["bf_loomkr       = x%1_%2_obj_mkr",   _lcside,bf_lni];
         
         call compile format ["bf_loonil  = isnil('%1_%2_objectif')",_lcside,bf_lni];
         if (bf_loonil) then {

            call compile format ["%1_%2_objectif = player createSimpleTask [bf_loobjtitre]",_lcside,bf_lni];
            call compile format ["%1_%2_objectif setSimpleTaskDescription [bf_loobjlib,bf_loobjlevel + ' : ' + bf_loobjtitre, bf_loobjtitre]",_lcside,bf_lni];
            if (bf_loomkr != "") then {call compile format ["%1_%2_objectif setSimpleTaskDestination (getmarkerpos '%3')",_lcside,bf_lni,bf_loomkr];};
            bf_loostat = "NONE";
         } else {
            call compile format ["bf_loostat = taskstate %1_%2_objectif",_lcside,bf_lni];
         };



         switch (bf_loobjstat) do {
         case "CREATED" : {
            if (bf_loostat == "NONE") then {
               call compile format ["%1_%2_objectif settaskstate 'CREATED'",_lcside,bf_lni];
               if (bf_llmess && bf_loocreated != "") then {
                  if (bf_loocreated == ".") then {bf_loocreated = "NOUVEL OBJECTIF :\n"+bf_loobjtitre;};
                  taskhint [bf_loocreated,[1,1,1,1],'tasknew'];
               };
            };
         };
         case "SUCCEEDED" : {
            if (bf_loostat != "SUCCEEDED") then {
               call compile format ["%1_%2_objectif settaskstate 'SUCCEEDED'",_lcside,bf_lni];
               if (bf_llmess && bf_loosucceeded != "") then {
                  if (bf_loosucceeded == ".") then {bf_loosucceeded = "OBJECTIF ATTEINT :\n"+bf_loobjtitre;};
                  taskhint [bf_loosucceeded,[0.6,0.8,0.4,1],'taskdone'];
               };
            };
         };
         case "FAILED" : {
            if (bf_loostat != "FAILED") then {
               call compile format ["%1_%2_objectif settaskstate 'FAILED'",_lcside,bf_lni];
               if (bf_llmess && bf_loofailed != "") then {
                  if (bf_loofailed == ".") then {bf_loofailed = "ECHEC :\n"+bf_loobjtitre;};
                  taskhint [bf_loofailed,[1,0.1,0,1],'taskfailed'];
               };
            };
         };
         case "CANCELED" : {
            if (bf_loostat != "CANCELED") then {
               call compile format ["%1_%2_objectif settaskstate 'CANCELED'",_lcside,bf_lni];
               if (bf_llmess && bf_loocanceled != "") then {
                  if (bf_loocanceled == ".") then {bf_loocanceled = "OBJECTIF ANNULE :\n"+bf_loobjtitre;};
                  taskhint [bf_loocanceled,[0.75,0.75,0.75,1],'taskdone'];
               };
            };
         };
         };
      };
      bf_lni = bf_lni + 1;
      call compile format ["bf_loobjstat = %1_%2_obj_stat",_lcside,bf_lni];
   };


   bf_llmess = true;

   sleep 1;
   bf_loend = "";
   call compile format ["bf_loend = %1_end_obj_stat",_lcside];
   if (bf_loend != "") then {bf_lnend = bf_lnend + 1;};
};
bf_loend = "";
call compile format["bf_loend = %1_end_obj_stat",_lcside];
call compile format["bf_looendlib = %1_end_obj_%2",_lcside,bf_loend];
if (bf_looendlib != "" && bf_loend != "LOSER") then {taskhint [bf_looendlib,[1,1,1,1],'taskdone'];};
if (bf_looendlib != "" && bf_loend == "LOSER") then {taskhint [bf_looendlib,[1,0.1,0,1],'taskfailed'];};
sleep 10;
call compile format["endmission '%1'",bf_loend];

} else {

   bf_initdone = false;

   laside = ["WEST","EAST","CIV","GUER","LOGIC","ENEMY"];
   lnside = 0;


   while {lnside <= 5} do {

      _lcside = laside select lnside;

      bf_lni = 1;
      call compile format["bf_lostat = x%1_%2_obj_stat",_lcside,bf_lni];
      while {bf_lostat != ""} do {
         
         hint format["%1",bf_lni];

         call compile format["bf_lonil = isnil('%1_%2_obj_stat')",_lcside,bf_lni];
         if (bf_lonil) then {call compile format["%1_%2_obj_stat = x%3_%4_obj_stat",_lcside,bf_lni,_lcside,bf_lni];};
         bf_lni = bf_lni + 1;
         call compile format["bf_lostat = x%1_%2_obj_stat",_lcside,bf_lni];
      };
      call compile format["%1_%2_obj_stat = x%3_%4_obj_stat",_lcside,bf_lni,_lcside,bf_lni];
      
      lnside = lnside + 1;

   };

   bf_initdone = true;

};


Dans la mission :
pour mettre à jour un objectif, privilégier la forme suivante qui permet de gérer correctement les JIP :
Code: Tout sélectionner
if (isServerthen {west_1_obj_stat "SUCCEEDED";publicVariable "west_1_obj_stat";}; 

A noter :
- dans la mission, il ne faut pas mettre le 'x' devant le nom de la variable '_obj_stat'.
- les variables "_end_obj_stat" servent à gérer la fin de mission, lui donner une des valeurs autorisées (END1-6,LOSER), entraîne la fin de la mission pour la faction concernée.
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
Avatar de l’utilisateur
=[TTK]= Freshmeat
Grand Manitou
Grand Manitou
 
Messages: 497
Inscription: 01 Mar 2010

Cash: 92.00 Chaislongs

Publicité

Re: Briefing by =[TTK]= Freshmeat

Messagede =[TTK]= Yourry » Mar 7 Juin 2011, 09:32

Manque plus qu'a tester, en tout cas merci Freash.
Le véritable test, c'est de savoir si Camille va l’utiliser, s'il y arrive, Freash tu auras réussi quelque chose de grand...

:mrgreen:
"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 de l’utilisateur
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
 
Age: 24
Messages: 725
Localisation: Parmis les Quenelles.
Inscription: 17 Mar 2010

Cash: 160.00 Chaislongs

Re: Briefing by =[TTK]= Freshmeat

Messagede =[TTK]= Camille Caz » Mar 7 Juin 2011, 10:28

Ouèouè. Mais je me suis demandé ce qu'est le Briefing_client.sqf puis j'ai lu "Briefing_client.sqf ne passe pas, quel dommage ....."

Et ça, ça passe pas.
C'est wiki le dit qui l'est.

Image
Avatar de l’utilisateur
=[TTK]= Camille Caz
Grand Gourou
Grand Gourou
 
Age: 71
Messages: 1582
Localisation: La Rochelle, centre du milieu
Humeur: paléolithique mais presque
Inscription: 25 Jan 2010

Cash: 296.30 Chaislongs

Re: Briefing by =[TTK]= Freshmeat

Messagede =[TTK]= Freshmeat » Mar 7 Juin 2011, 12:31

Mis à jour avec tout le code.

Je n'ai pas mis la balise code=sqf pour le briefing_client car cela ne fonctionne pas.

Je vous laisse tester.
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
Avatar de l’utilisateur
=[TTK]= Freshmeat
Grand Manitou
Grand Manitou
 
Messages: 497
Inscription: 01 Mar 2010

Cash: 92.00 Chaislongs

Re: Briefing by =[TTK]= Freshmeat

Messagede =[TTK]= Memphis007 » Mar 7 Juin 2011, 13:32

=[TTK]= Freshmeat a écrit:Je n'ai pas mis la balise code=sqf pour le briefing_client car cela ne fonctionne pas.


Trop de trucs à colorer, php n'aime pas :(, va falloir que j'optimise mes expressions régulières.
Pour halloween, un vrai g33k met un masque de sous réseau.
Le g33k ne sort pas du métro, il libère de la ram.

Image

C.Caz : Combien de chaislongs à celui qui arrive le premier ?
Avatar de l’utilisateur
=[TTK]= Memphis007
Gripsou
Gripsou
 
Age: 31
Messages: 1366
Localisation: /dev/null
Humeur: Born to be wild
Inscription: 13 Jan 2010

Cash: 127.10 Chaislongs



  • Publicité

Retourner vers Edition ArmA II / OA

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité